13.The Abstraction:Address Spaces


13. The Abstraction: Address Spaces

13.1 Early Systems

  • 从内存的角度来说,早期的机器并没有提供很多的抽象给用户,因此比较简单,如下图:

13.2 Multiprogramming and Time Sharing

  • 因为早期机器很贵,因此有了Multiprogramming的需求,需要充分利用CPU。
  • 欲望是无穷的,人们又有了Time Sharing的需求。人与机器的交互也变得很重要,你不想机器不理你对吧。
  • 如何实现Time Sharing呢?比较简单的方式是,让一个进程上CPU,并且给它内存所有的使用权限。运行一会后,停止运行,保存当前的所有信息到磁盘上,然后换下一个进程上来。这种方式当然可以,但是不够elegant,so crude!
  • 问题就在于太慢啦!虽然保存寄存器信息很快,但是还有别的保存是很耗时的。所以我们要做的是让所有进程都保留在内存中,有效实现time sharing。如下图:

  • 问题又来了,多进程都在内存中,如何做到protection?一个进程不能读别的进程的内容吧,也不能修改吧。

13.3 The Address Space

  • 解决方法是对物理内存进行抽象,我们把这种抽象叫做Address Space。理解地址空间,就要理解是如何虚拟化内存的。
  • Address Space包含了运行程序的所有内存状态。主要是:
    • code:即程序的代码,指令集。
    • stack:用于保存所有的局部变量、参数和返回值等。
    • heap:保存动态分配的内存。
    • 其他
  • 如下图就是一个Address Space:

  • stack和heap一个从上往下,一个从下往上,这种做法并不是固定的。
  • 在Address Space中,地址是从0KB到16KB的,但其实它并不是指真正物理内存的0KB到16KB。那么问题就来了,OS如何才能建立起这种对内存抽象呢?
  • 建立抽象其实就是OS在虚拟化内存,OS这样做会让运行的程序认为,它真的被加载到物理内存的0KB到16KB了(经典欺骗进程)。举个栗子,当进程A试图从地址0开始加载时,其实并不是真的物理内存的0,而是它的地址空间的0,那么OS就要和硬件联手,把这个地址空间的0对应到物理内存的320KB去(因为A真的放在这)。

13.4 Goals

  • 虚拟化内存,我们要达到以下几个目标:
  • 第一,虚拟内存(VM)系统是透明的,也就是说对程序是不可见的。程序意识不到自己的空间是假的,意识不到它的0不是真的0。
  • 第二,VM的效率。OS应该尽可能的提高虚拟的效率,这就要靠硬件的支持了。
  • 第三,保护。OS应该保护进程的信息不被其他进程读写,同样也应该保护OS的内存不被其他进程读写。也就是说各进程之间要隔离开来。

13.5 Summary

  • VM系统提供大的、私人的地址空间给程序,用于保存进程自己的信息。
  • OS可以连同硬件一起,将虚拟的地址转化为物理地址。
  • OS还对不同进程提供保护,提供隔离性。
  • 未完待续

文章作者: foursevenlove
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 foursevenlove !
 上一篇
15. Mechanism:Address Translation 15. Mechanism:Address Translation
15. Mechanism: Address Translation 提供即高效又能保持OS控制的虚拟化内存方法。 高效需要硬件的支持;控制意味着OS必须保证一个程序不能访问别的程序的内存空间,也不能访问OS的内存空间;最后还要灵活,也就是
下一篇 
8.Scheduling:The Multi-Level Feedback Queue 8.Scheduling:The Multi-Level Feedback Queue
8.Scheduling: The Multi-Level Feedback Queue 书接上回,我们来看看如何平衡两个调度指标,即周转时间和响应时间。 采用 Multi-level Feedback Queue (MLFQ),解决了两个
  目录