第一章引论
- 计算机的两种运行模式
计算机的两种运行模式:内核态和用户态
内核态中操作系统具有对所有硬件的完全访问权,可以执行机器能够运行的任何指令
用户态中禁止执行会影响机器控制或者可进行I/O操作的指令,仅允许执行整个指令集的一个子集和访问所有功能的一个子集
什么是操作系统
操作系统是一种运行在内核态的软件计算机硬件简介
处理器(cpu)、存储器、磁盘、I/O设备、总线
todo
处理器
存储器
磁盘
IO设备
总线
上下文切换
在多道程序系统中,从一个程序切换到另一个程序,有时称为上下文切换进程
进程本质上是正在执行的一个程序进程表
与一个进程有关的所有信息,除进程自身地址空间的内容以外,均存放在进程表中,进程表是数组或者链表结构,每个进程都要占用一项地址空间
每个进程可以使用的地址集合。在不使用虚拟内存时,一个进程可拥有的最大地址空间小于主存虚拟内存
todo一个挂起的进程包括:进程的地址空间和对应的进程表项(其中包括寄存器以及稍后重启动该进程所需要的许多其他信息)
进程间通信
合作完成某些作业的相关进程经常需要彼此通信以便同步他们的行为,这种进程称为进程间通信文件
todo
- 管道
管道是一种虚文件,它可以连接两个进程,进程A和进程B通过管道传递数据进行通信 - 操作系统具有的两种功能
为用户程序提供抽象和管理计算机资源 - 操作系统的两种观点:资源管理观点和扩展的机器观点
资源管理观点认为操作系统的任务是有效的管理系统的各个部分
扩展的机器观点认为操作系统的任务是为用户提供比实际机器更于运用的抽象。这些抽象包括进程、地址空间以及文件 - 操作系统历史
早期批处理系统、多道程序系统、个人计算机
第三章内存管理
存储管理器
操作系统中管理分层存储器体系的部分。它的任务是有效地管理内存,即记录哪些内存是正在使用的哪些内存是空闲的;在进程需要时为其分配内存,在进程使用完后释放内存。
地址空间
地址空间是一个进程可用于寻址内存的一套地址集合。每个进程都有一个自己的地址空间,并且这个地址空间独立于其他进程的地址空间(除了需要共享地址空间外)
基址寄存器和界限寄存器
- 基址寄存器和界限寄存器是两个特殊的硬件寄存器,用来给每个进程提供私有的地址空间,每个内存地址在送到内存之前,都会自动先加上基址寄存器的内容。
- 进程运行时,程序的起始物理地址装载到基址寄存器中,程序的长度装载到界限寄存器中。
- 当使用这两个寄存器时,程序装载到内存中连续空闲位置且装载期间无需重定位。
缺点:每次访问内存都需要进行加法和比较运算。加法运算由于进位传递时间的问题,时间会很慢。
处理内存超载的通用方法:交换技术、虚拟内存
交换技术即把一个进程完整调入内存,使该进程运行一段时间,然后把他存回磁盘。空闲进程主要存储在磁盘上。
虚拟内存:该策略能使程序在只有一部分被调入内存的情况下运行。
内存紧缩:把内存中小的空闲区合并成一大块
虚拟内存的基本思想
每个程序都有自己的地址空间,这个空间被分割成多个块,每一块称作一页或页面。每一页有连续的地址范围。这些页被映射到物理内存,但并不是所有的页都必须在内存中才能运行程序。当程序引用到一部分在物理内存中的地址空间时,由硬件立刻执行必要的映射。当程序引用到一部分不在物理内存中的地址空间时,由操作系统负责将缺失的部分装入物理内存并重新执行失败的指令。
分页
虚拟内存系统都使用一种称为分页的技术。
由程序产生的这些地址称为虚拟地址,他们构成了一个虚拟地址空间。
(硬件)内存管理单元(MMU)把虚拟地址映射为物理地址
虚拟地址空间按照固定大小划分成被称为页面的若干单元,在物理内存中对应的单元称为页框。(两者大小一样)
页表给出虚拟地址和物理内存地址之间的映射关系。
当程序访问了一个没有被映射的页面会发生什么情况?
当程序引用到一个没有被映射到物理内存中的页面时,CPU陷入到操作系统,这个陷阱称为缺页中断(缺页错误) 。操作系统找到一个很少使用的页框,把它的内容写入磁盘,把需要访问的页面读到刚才回收的页框中,修改映射关系,重新启动引起陷阱的指令。
页表
虚拟地址被分成虚拟页号(高位)和偏移量(低位)两个部分。
页号作为页表的索引,可以得出对应于该虚拟页面的页框号
页表可以将虚拟页面映射为页框。
页表的结构

加速分页过程
因为大多数程序总是对少量的页面进行多次的访问,因此只有少量的页表项会被反复读取,其他的页表项很少被访问。
因此为了加速分页机制,为计算机设计了一个硬件设备,转换检测缓冲区(TLB)或者叫相联存储器或快表
TLB的工作过程:
当虚拟地址放入MMU(内存管理单元)中进行地址转换时,硬件首先通过将该虚拟页号与TLB所有表项进行匹配,判断虚拟页面是否在其中,如果发现了一个有效的匹配并且不违反保护位,则可以对其进行操作。如果是取出操作,将页框号直接从TLB中取出,不必访问页表。
如果虚拟页号不在TLB中,进行正常的页表查询,TLB淘汰一个表项,然后用新找到的表项代替它。当TLB淘汰表项时,会将访问位的变化复制到内存中。
空闲内存管理
使用位图的存储管理、使用链表的存储管理
使用链表的存储管理:
维护一个记录已经分配内存段和空闲内存段的链表。其中链表中的一个结点或者包含一个进程,或者是两个进程间的一块空闲区。
首次适配算法、最佳适配算法
首次适配算法:存储管理器沿着段链表进行搜索,直到找到一个足够大的空闲区,除非空闲区大小正好和要分配的空间大小一样,否则,将该空闲区分为两部分,一部分供进程使用,另一部分形成新的空闲区。
最佳适配算法:搜索整个链表,找出能够容纳进程的最小空间。
最差适配算法:总是分配最大的可用空闲区,使得新的空闲区比较大而可以继续使用
快速适配算法:为常用大小的空闲区维护单独的链表,4KB、8KB、12KB,…..