笨人王吧 关注:1贴子:50
  • 5回复贴,共1
虚拟内存:
1.分段:即一个程序对应一个虚拟地址段,虚拟地址段跟内存一一对应
2.分页:将内存分为小块(linux是4k),可以不连续的物理地址隐射为连续的虚拟内存地址


IP属地:日本1楼2013-10-20 20:52回复
    内存分配:
    1.静态分配-等长
    2.动态分配-异长
    存储共享:可再入的程序(如一个c编译器同时编译两个c源代码);进程通信
    存储保护:使内存中的程序只能访问自己的区域
    1 地址保护
    1.1 界地址保护:cpu中设置界限寄存器存放该作业的上下限地址,访问地址时先检查
    1.2 存储键保护:给每个分区分配一个单独的保护键,作为锁;给每个可使用该分区的作业分配一个保护键,放在该作业的PSW(程序状态字?即程序状态寄存器?)中,相当于钥匙,访问时先检查
    2 操作保护:针对进程共享内存部分的保护,即只让读或能读能写


    IP属地:日本2楼2013-10-25 15:39
    回复
      相对地址:即程序开始地址为0
      绝对地址:内存中实际地址
      地址重定位:
      1 静态重定位:运行之前,就由“重定位装入程序”进行地址重定位工作。即:先确定所有相对地址(从0开始的地址),然后由重定位装入程序根据当前存储情况改变所有的地址为绝对地址
      1.1 特点:装入时实现调整,地址有标识,每次装入都要定位,装入后的地址是绝对地址
      2 动态重定位:执行时重定位,即访问地址时由“地址变换机构”改变为内存地址
      2.1 特点:可装入任意内存区域(即不要求占用一个连续的内存区),只装入部分程序代码即可运行,改变系统时不改程序(程序的内存空间动态可变,主程序从某一个存储区域移动时,只需修改定位及寄存器的值即可),程序可方便共享


      IP属地:日本3楼2013-10-25 16:55
      回复
        实存储管理
        1 单用户连续分区存储管理:一次一个作业进入存储区,单道程序设计
        2 固定分区存储管理(固定指分区数目固定,每个分区尺寸固定)
        2.1 作业的组织:将存储区中的用户部分分为均匀固定的几个区,作业进入后放入区中执行。
        2.1.1 改进1:存储区分为不均匀的区,有闲置区时按大小去相应队列取作业(每个区一个队列)
        2.1.2 改进2:多个分区的等待队列只有1个,有分区空闲时都到这个队列中挑作业
        2.2 分区的分配与释放:设置分区分配表,表项为”区号,大小,起址,状态(空闲还是作业)“
        2.3 地址重定位:静态地址重定位,cpu中设置”低界限寄存器“与”高界限寄存器“,用于记录cpu中正在执行的作业在内存中的低界限地址与高界限地址(为了进行地址保护)
        2.4 缺点:不允许2个作业同时放于一个分区中剩下的空闲部分(即”内部碎片“)
        3 可变分区存储管理(可变指分区数目随作业可变,每个分区尺寸同样随作业可变)
        3.1 作业的组织:设置两张表格,一张为”已分配表“,一张为”空闲区表“。表项为”序号,起始地址,尺寸,状态“。作业进入,查询”空闲区表“中为状态为”空闲“的表目,若尺寸满足,则将尺寸切割为恰好的部分与剩余部分,恰好部分分配给作业并写入”已分配表“,剩余部分仍在”空闲区表“中。作业离开同理。注意,当作业离开时可能有空闲区的合并工作
        3.2 空闲分区的分配算法
        3.2.1 最先适应算法:第一个找到的满足需求的区
        3.2.2 最佳适应算法:满足需求的最小空闲区(尽可能不分割大区,但较麻烦)
        3.2.3 最坏适应算法:找能满足存储需求,最大的空闲分区作为分配对象(这个是找不痛快啊?)
        3.3 空闲区合并:分配时消灭了”内部碎片“,但是可能出现当前空闲区都不满足需求,但是总空闲区超过需求(即”外部碎片“)。解决:空闲区合并(即”存储紧凑“)
        3.3.1 时机:调度到某个作业时;有作业运行完归还存储区时即进行
        3.3.2 注意:合并产生时间开销;正在I/O的进程不能移动;尽量减少信息移动
        3.4 地址重定位:动态地址重定位(作业可能要移动,即考虑到合并)
        3.5 地址保护:界地址保护与存储键保护
        4 分页存储管理
        4.1 基本思想:
        4.1.1 内存分”块“:将内存分为固定大小的区,一区为1”块“(非常小,大小为2的整数倍,出于地址重定位考虑)
        4.1.2 作业分”页“:将作业也分为同样大小的页。
        4.1.3 逻辑地址保存:逻辑地址保存为”第几页,该页偏移量是多少“(即页号与页内位移)。
        4.1.4 页表:放于内存中,将内存中的”块“与作业的”页“对应(表项”页号,物理块号“)
        4.1.5 硬件支持:页表始址寄存器(Pb):保存当前进程页表首地址;页表长度寄存器(PI):正在运行进程页表长度(几页)。
        4.2 存储空间的分配与回收
        4.2.1 分配
        4.2.1.1 存储分块表:建立表格,表项”块号,状态“
        4.2.1.2 位示图:将二进制位与内存状态联系起来,一位表示一块。该位为”1“,则对应块已分配,为”0“则未分配。最后一个字节表示未分配内存块总数
        4.3 地址转换(考虑到页的大小都是2的整数倍,因此可以在2进制上很明显的看出页号(前几位)与位移(后几位))
        4.3.1 过程:
        1)将PCB中页表始址及页表长度放入Pb与PI寄存器(页表始址寄存器,页表长度寄存器)
        2)硬件自动区分页号p与页内地址d
        3)若p>PI,则地址越界中断,否则地址映射
        4)根据Pb与PI,找到页表,根据p在页表中对应为物理块号p‘
        5)p’与d构成物理地址
        4.3.2 快表:设置一组快速硬件寄存器(称为快表),将页表中常用的几项放入其中。在上面的4)时同时并行访问快表,若找到则直接返回p‘,以节约时间(快表访问速度远高于访问内存);若快表中无该项则更新快表(淘汰算法,主要有先进先出,淘汰访问次数最少那一页)
        4.4 缺点:不利于共享(页的划分不考虑程序的逻辑结构)


        IP属地:日本4楼2013-10-27 22:51
        回复
          接上:
          5 分段存储管理(多重分区)
          5.1 基本思想:
          5.1.1 将程序分为一组逻辑意义完整的信息集合(代码分段(cs),数据分段(ds),栈段(ss),附加段(es)),出于方便考虑,每段都是2的整数倍
          5.1.2 存储空间管理:可变分区存储空间管理的方法,一次给一段分配一个分区,各个段可不连续,系统为每一进程设一个段表(表项“段号,段起址,段长度,存取控制位”)
          5.2 存储空间分配:与可变分区存储管理相同
          5.3 地址转换:与分页存储管理技术一样,快表表项“段号,段首地址,段长,控制位”
          5.4 缺点:同分区管理一样
          6 段页式存储管理:即将每一段分为若干页,地址则从(页号,页内偏移)变为(段号,页号,页内偏移)


          IP属地:日本5楼2013-10-27 23:03
          回复
            总结:
            分区:针对主存地址分区,大小与作业长相同
            分页:进一步,针对作业均匀分区,区大小较小
            分段:针对作业分块的特点,将程序分段访问
            段页式:先将作业分段,再按分区式处理


            IP属地:日本6楼2013-10-27 23:06
            回复