引论习题¶
来源:
操作系统 / 引论习题.md
1.操作系统的两大主要作用是什么?¶
考察操作系统有两种观点:资源管理观点和拓展的机器观点 一个作用是有效管理系统的各个部分,如IO设备,内存等 另一个作用是为用户提供比实际机器更便于应用的抽象
2.分时系统和多道程序设计系统的区别是什么¶
分时系统(timesharing)是多道程序系统的一个变体,每个用户都有一个联机终端,不同的用户可以在自己的终端进行计算。多道程序系统则是允许一个用户运行多个程序。分时系统都是多道程序系统,但多道程序系统不全是分时系统因为多程序系统可能只运行在一台PC上的一个用户上
3.为了使用高速缓存,主存被划分为若干cache行,通常每行长32或64字节,每次缓存一整个cache行。每次缓存一整行而不是一个字节或一个字,这样做的优点是什么?¶
经验证据表明,内存访问行为遵循“局部性原理”,即一旦读取某个位置,随后访问附近位置的概率会非常高,尤其是紧邻的内存位置。因此,通过将一整条缓存行进行缓存,下一次出现缓存命中事件的可能性便会随之提升。此外,现代硬件设备能够以比逐字读取相同数据要快得多的速度进行32或64字节的块级传输,并将其存入缓存行中。
(总结:可以提高下一次的hit率)
优点核心是:利用程序访问的局部性,提高缓存命中率,降低平均访存代价。
CPU 访问内存时通常不是随机访问一个孤立字节,而是有明显的空间局部性:
如果程序访问了某个地址,那么它很可能很快会访问这个地址附近的数据。
例如:
当 CPU 访问 a[0] 时,接下来大概率会访问 a[1]、a[2]、a[3]...。如果每次只把一个字节或一个字搬进缓存,那么后面访问相邻元素时还要继续访问主存,效率很低。
所以缓存一次搬入一个 cache line,比如 64 字节。假设 int 是 4 字节,那么一行可以装:
也就是说,访问 a[0] 时,缓存可能顺便把 a[0] ~ a[15] 都取进来。后面访问 a[1]、a[2]... 时就可以直接从 cache 里读,速度快很多。
因此这样做的优点是:
-
提高命中率:相邻数据已经被提前加载进缓存。
-
减少主存访问次数:一次访存带回一块连续数据,比多次访问主存更划算。
-
充分利用内存总线带宽:内存系统按块传输通常比按字节传输效率高。
-
降低平均访问时间:虽然第一次 miss 要搬一整行,但后续多个访问可能都命中。
可以总结成一句考试答案:
每次装入一整条 cache line 是为了利用程序的空间局部性。由于程序访问某地址后很可能继续访问其附近地址,所以一次把相邻的一块数据调入缓存,可以提高缓存命中率,减少主存访问次数,从而提高访存效率。
4.在早期计算机中,每个字节的读写都直接由CPU处理(即没有DMA)。对于多道程序而言这种组织方式有什么含义?
多程序运行的主要目的是在等待I/O进程完成时让CPU 有事可做。 如果没有 DMA,CPU 便会全负荷忙于进行I/O操作,因此通过多程序运行并不能带来任何收益(至少就CPU 利用率而言是如此)。无论程序要进行多少I/O操作,CPU 都会处于100%的繁忙状态。这当然是在假定主要的延迟是由于数据复制过程中的等待所致。如果I/O因其他原因(如到达串行线路)而变得缓慢,CPU 也可以执行其他工作。
5.为什么访问I/O设备相关的指令通常是特权指令?
对I/O设备(如打印机)的访问权限通常会根据不同用户的情况而有所限制。有些用户可能被允许随意打印任意数量的页面,而有些用户则完全不被允许打印,还有些用户则可能仅被限定为只能打印一定数量的页面。这些限制是由系统管理员根据某些政策设定的。这些政策需要得到贯彻执行,以确保用户级程序无法对其进行干扰。