虚拟内存发展史

  虚拟内存发展

       一、地址空间

    最开始,程序员直接操作物理内存,此时的物理内存对于程序员来说是透明的。

    多道程序的产生,使操作系统对进程有了时间共享的机制。但是衍生出很多问题:例如protection,即不能使每一个进程所占用的内存相互独立而互不访问。

    所谓进程的地址空间即:包含正在运行的程序的所有内存状态(code 、 stack 、heap)

      code:the instruction

      stack:local variables , pass parameters  ,return value  and from routine

     heap: dynamically-allocation  ,  statically-initialized variables

    于是便有了虚拟内存(应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。目前,大多数操作系统都使用了虚拟内存,如Windows家族的“虚拟内存”;Linux的“交换空间”等。

   VM  goal:transparent (透明)

                     efficiency  (时间&空间)

                     protection 


     二、地址转换(Address translation)

  

         最开始的地址转换很简单。

        Dynamic (基于硬件) Relocation:为每一个进程添加一对寄存器(base and bounds),允许将地址空间放置在物理内存中的任何位置。

     

        此时OS就分为内核模式(kernel mode),用户模式(user mode):

         kernel mode 在进程转换时进行对 base and bounds 的修改:创建新进程时,搜索空闲空间然后标记使用,进程终止时,OS将内存重新放回空闲列表中,进程切换时,保存和恢复base and bounds值对,发生异常处理时。

          user mode 下执行用户的应用程序。

    三、分段

      

    

         每段都有属于自己的base /bound register对

         protection bit:进程对段的读写权限。

         外部碎片(external fragmentation):free list 管理算法(first fit/best fit/worst fit)

       分段存在的问题:

          1.external fragmentation:通过压缩策略:能耗都很大

          2.not flexible:   large but sparsely-used heap 会占用大量空间。

  四、Free-Space Management

策略:

     Best fit
    Worst Fit
    Fist Fit
    Next Fit:不从开始进行遍历,而是在列表中保留一个额外的指针,向下面继续遍历。

   Segregation  Lists:为某些特定需求大小的对象单独分配

   Buddy Allocation :     在回收过程中,对buddy数据块进行检查,如果空闲则coalescing(合并)。


      五、分页

     以往的分段都是采用变长(variable-sized pieces)的进行使用内存,会产生外部碎片,分页对内存定长(fixed-sized pieces)进行分割。

     


  于是便要有一个数据结构来存储这种地址转换----page table。


   此外为了实现一些机制,增加了很多位。

valid bit (是否被分配)
protection  bit
dirty bit
*access/reference bit

... ...

  六  paging:faster Translation (TLB)

   TLB(translation-lookaside buffer)转换检测缓冲区。MMU中的一部分

  运用了程序的时间空间局部性(temporal locality  and  spatial locality)

  复杂指令集(CISC--complex instruction set computing  图19.1)

  精简指令集 (RISC--reduced ... 图19.3)



同时加入进程共享机制:用ASID 代表 PID进行进程的区分



  于是会有TLB替换策略LRU,随机等策略。


猜你喜欢

转载自blog.csdn.net/qq_22613757/article/details/79850911
今日推荐