0%

多处理器调度

早期系统

操作系统曾经是一组函数(实际上是一个库),在内存中(在本例中,从物理地址0开始),然后有一个正在运行的程序(进程),在目前物理内存中(本例中,从物理地址 64KB 开始),并使用剩余内存。

截屏2021-07-17 下午6.22.05

多道程序和时分共享

由于机器昂贵,人们开始更有效地共享机器,因此,多道程序系统时代开启。其中有多个进程在给定时间准备运行,比如当有一个进程在等待 I/O 操作的时候,操作系统会切换这些进程,这样增加了 CPU 的利用率。

一种实现时分共享的方法,是让一个进程单独占用全部内存运行一段时间,然后停止,并将它的所有状态信息保存在磁盘上(包含所有的物理内存),加载其他进程的状态信息,再运行一段时间,这就实现了比较粗糙的机器共享。遗憾的是,这种方式太慢了。

因此,我们仍然将进程信息放在内存中,这样操作系统可以更有效率低实现时分共享。

截屏2021-07-17 下午6.36.15

如上图所示,每个进程拥有一部分内存,假定只有一个 CPU ,操作系统选择运行其中一个进程(比如 A),同时其他进程(B 和 C)则在队列中等待运行。

随着时分共享变得流行,人们对操作系统有了新的要求,特别是多个程序同时驻留在内存中,使保护(protection)成为重要问题。

地址空间

截屏2021-07-17 下午6.42.51

上图中,当我们描述地址空间时,所描述的是操作系统提供给运行程序的抽象(abstract)。程序并不在物理地址0~16KB 的内存中,而是加载到任意的物理地址。

运行的程序认为它被加载到特定的地址(例如 0)的内存中,并且具有非常大的地址空间。如图 13-2中的进程 A 尝试在地址0(虚拟地址)执行加载操作时,然而操作系统在硬件支持下,出于某种原因,必须确保不是加载到物理地址 0,而是物理地址 320KB(这是 A 载入内存的地址)。这是虚拟化的关键,这是世界上每一个现代计算机系统的基础。

微内核:通过将内核隔离,操作系统进一步确保运行程序不会影响底层操作系统的操作。一些现代操作系统通过将某些部分与操作系统的其他部分分离,实现进一步的隔离。这样的微内核(microkernel)可以比整体内核提供更大的可靠性。

目标

虚拟内存(VM)系统的主要目标是:

  1. 透明(transparency)。操作系统实现虚拟内存的方式,应该让运行的程序看不见,因此,程序不应该感知到内存被虚拟化的事实,相反,程序的行为就好像它拥有自己的私有物理内存。

  2. 效率(efficient)。包括时间和空间。

  3. 保护(protection)。操作系统应该确保进程受到保护,不会受到其他进程的影响,操作系统本身也不会受到进程的影响。每个进程都应该在独立环境中运行,避免其他出错或恶意进程的影响。

关于虚拟化内存,需要清楚以下内容:如何管理可用空间,以及在空间不足时哪些页面该释放。

小结

虚拟内存系统负责为程序提供一个巨大的,稀疏的,私有的地址空间的假象,其中保存了程序的所有指令和数据。操作系统在专门的硬件的帮助下,通过每一个虚拟内存的索引,将其转化为物理地址,物理内存根据获得的物理地址去获取所需的信息。操作系统同时对许多进程执行此操作,并且确保程序之间不会受到影响,也不会影响操作系统。