第三章 内存管理
- 在虚拟内存系统中,虚拟内存的最大容量是由计算机的地址结构(CPU寻址范围)确定的,而虚拟内存的实际容量是受到"内存大小+磁盘空间大小"、"地址线位数"共同制约,取二者最小值
- 实现虚拟内存管理必须有相应硬件的支持,如:记录当前进程页表始址的页表寄存器、判断逻辑地址是否越界显然也需要硬件实现、以及将页表始址和逻辑地址转换成页表项的地址(即查页表的过程)也是需要硬件完成
- 虚拟地址空间VS物理地址空间:
- 分段存储管理方法有利于程序的动态链接
- 当操作系统对内存的管理采用页式存储管理方法时,所划分的页面大小由什么决定?
- 硬件层面(CPU架构)决定了可以支持哪些页面大小,而操作系统则在CPU架构支持的页面大小中选定一种页面大小。页面大小一旦选定,则所有的页面都一样大。
- 虚拟存储技术是补充内存逻辑空间的技术。内存逻辑空间大小就表现为虚拟地址的位数
- 虚拟内存的特征:多次性(进程数据分多次调入内存)、对换性(暂时用不到的数据可以对换到外存)、离散性(进程数据离散存储)、虚拟性
- 其中,多次性和对换性需要基于非连续分配而实现;虚拟性需要基于多次性和对换性而实现
- 页面引用串:即该程序一段时间内需要调用的页号序列,又可称为访问串
- 导致LRU算法实现起来耗费高的原因是需要对所有的页进行排序
- 抖动和Belady异常:
- 抖动:当单个进程分配到的内存块少于某个数目时(此数目大概是工作集大小),该进程的页面会频繁地进行换入换出,导致缺页率急剧升高。本质上就是因为进程被分配的页数不够。【所有页面置换策略都有可能引起抖动】
- Belady异常:给进程分配的页框增加,但缺页率不降反增。【只有FIFO策略会引起Belady异常】
- 磁盘由对换区和文件区组成,其中对换区用于辅助实现虚拟内存
- 在内存非常满的情况下,CPU访问内存则很有可能发生缺页,就会频繁的在内存与对换区之间执行换入换出,此时CPU的利用率就会很低(会长时间处于等待页面置换的状态)。此时通过增加内存条来增加物理空间容量可以从根本解决问题
- 可变分配搭配局部置换的意思:刚开始为每个进程分配一定数量的物理块。发生缺页时只允许从自己的物理块中选出一个换出外存。若进程在运行中频繁缺页,系统会为该进程多分配几个物理块,直至该进程缺页率趋于适量值;若进程在运行中缺页率非常低,则可适当减少分配给该进程的物理块。
- 数据结构中说"链表是不连续存储的",其中这个"不连续"指的是虚拟地址不连续;"数组是顺序存储的"也只是虚拟地址的连续(因为如果同一个数组的元素个数很多,超过了一个页面,那么不同页面的元素,其物理地址就可能不同,因为虽然一个页面中的元素肯定是顺序存储的,但是不同页面在物理地址中不能保证仍是连续的)
- 查慢表不可能不命中,但有可能缺页
第五章 I/O管理
- 缓冲区在主存中;高速缓存(Cache)在CPU中;Spooling技术中的输入/出井在外存中
- 所有单机资源利用率的提升的基本前提都是要有"并发性"。如果没有多个进程的并发,那独占设备和共享设备也没什么区别、内存里只放一个进程的数据也无所谓、交换技术也没有存在的意义。下面是几个提高单机资源利用率的例子
- Spooling技术:独占设备->共享设备,提高设备利用率
- 虚拟技术:
- 虚拟内存:提高内存利用率
- 虚拟设备:提高设备利用率
- 交换技术:提高内存、CPU利用率
- Spooling是以空间换时间的技术;虚拟存储技术、覆盖与交换技术是以时间换空间的技术;通道技术是以金钱换时间的技术(是搞一个单独的硬件)
- "在一个磁盘上设置多个分区"并不能改善磁盘设备的I/O性能。这是因为操作系统是安装在C盘的,而如果将磁盘分区后,按照惯例,将应用程序安装在D盘,实际上是与操作系统所在的C盘相隔较远。而操作系统内的程序肯定是经常被访问到的,因此磁头大部分时间都在C盘所在的磁盘内侧柱面移动,而若此时有频繁访问的应用程序在远离C盘的D盘中存在,就会使得磁头移动的距离过长,从而降低磁盘设备的I/O性能。
- 在系统内存中设置磁盘缓冲区的主要目的是减少磁盘I/O次数。
假设一个文件有10个物理块,若没有设置磁盘缓冲区,则每次I/O只能将1块内容读入内存,读整个文件总共需要10次I/O;若设置了磁盘缓冲区,缓冲区可存储10个物理块的内容,则可通过1次I/O就将文件对应的10个物理块全部读入缓冲区,之后便无需再启动磁盘I/O。 - 进程在执行驱动程序时可能进入阻塞态(即阻塞I/O)
- 初始化设备、读写设备的操作都是由驱动程序控制完成的
- 光盘、U盘、磁盘都是既可以随机访问,又可以顺序访问的。其中,光盘的原理和磁盘很类似,都是盘面上会有一圈圈存储介质,光盘有个激头,其作用和磁盘的磁头类似,既可以定位一圈,做到随机访问,又可以在一圈上顺序访问。而U盘实际上是ROM,是基于闪存技术,即EEPROM的集成+一个控制单元
- 磁盘的延迟时间和传送时间都和磁盘转速有关。前者一般取平均值转半圈的时间,后者根据要读取的扇区和转速算。
磁盘的启动时间和磁盘驱动器的物理、电气特性有关。
找道/寻道时间和磁盘调度算法、磁臂移动速度有关。
磁盘的处理时间指读取出一个扇区后,磁头需要休息一段时间(这是因为一块数据会把磁盘缓冲区充满)。
磁盘读取数据的上述时间中,影响最大的是 - A cluster(簇)is a group of sectors(block) (扇区(块))on a hard disk drive that is addressed as one logical unit by the operating system.
即物理块=扇区,逻辑块=簇。
扇区是物理上限制的读/写一次的基本单位;簇是操作系统限制的存储空间分配基本单位。即操作系统给文件分配空间是以簇为单位的
- 旋转延迟的大小取决于磁盘空闲空间的分配程序,旋转延迟的大小与文件物理结构有关。这两个本质都一个意思,就是数据在磁盘上的扇区分配不一样,会导致每次读的旋转延迟时间不一样
- SSD(固态硬盘)的随机存取速度很快,传统机械硬盘因为要寻道和找扇区,所以随机存取速度慢,但传统机械硬盘的连续存取很快。因此SSD的优势主要体现在随机存取的速度上。
- 磁盘的初始化过程:
- 刚出厂时,磁盘只是被划分成一个个磁道,并未被划分成扇区
- 低级格式化(物理格式化)【扇区相关】:将磁盘的各个磁道划分为扇区,并确定管理扇区所需要的各种数据结构,包括扇区校验码(如奇偶校验、CRC循环冗余校验码等,校验码用于校验扇区中的数据是否发生错误)
- 分区:将磁盘进行分区,每个分区由若干柱面组成(即分为我们熟知的C盘、D盘、E盘)
- 逻辑格式化【文件系统相关】:即创建文件系统,包括创建文件系统的根目录、对保存空闲磁盘块信息的数据结构进行初始化(如位示图、空闲分区表)