操作系统精髓与设计实现
大型机的操作系统设计的主要目的是为了充分优化硬件的使用率,主要是充分利用处理器。个人计算机操作系统优化的主要目的是支持复杂的应用。
一般认为操作系统是一直运行在计算机上的程序,通常称为内核。
1.1基本组成
计算机硬件由四个主要的结构化部件(一个或多个模块以某种形式相连,以实现某个功能)
- 处理器
控制计算机操作,处理数据 - 内存
存储程序和数据,此类存储器通常易丢失。常成为实存储器,或主存储器。
内存常常是作为处理器数据的临时存放地 - 输入输出模块
在计算机和外部环境之间移动数据,外部环境由各种外部设备组成,包括辅助存储设备(磁盘),通信设备,显示设备等等 - 系统总线
为处理器、内存和输入输出模块间提供通信的设施。
处理器的一种功能是与存储器交换数据 ,为此使用处理器内部的两个寄存器:存储器地址寄存器(Memory address register MAR)和存储器缓存寄存器(memory buffer register,MBR)
- 存储器地址寄存器
存储下一次读写存储器的地址。 - 存储器缓存寄存器
用于存放要写入存储器的数据,或是寄存器中读取的数据
同时还有输入输出地址寄存器(IO address register IO AR)用于确定一个特定的输入输出模块地址
输入输出缓存寄存器(IO buffer register ,IO BR)用于在处理器和输入输出模块间交换数据。
1.2微处理器的发展和演变
1.3指令的执行
处理器执行的程序是由一组保存在存储器中的指令组成。
简单的,指令处理包括两步,处理器从存储器中取指令,执行指令 。指令周期指的就是处理一条执行所需要的时间:取指令和执行指令所需要的时间。
处理器的程序计数器(program count PC)保存下一次要取指令的地址。取到的指令被存放在一个指令寄存器中(Instruction register ,IR)。指令中包含处理器要执行操作的位。处理器解释指令并执行对应的操作(由操作码决定)。这些操作大体上分为四类:
- 处理器-存储器
数据在处理器和存储器间读取和存放 - 处理器-IO输入输出模块
数据在处理器和输入输出模块之间读取和存放 - 数据处理
处理器执行与数据相关的算术运算和逻辑操作 - 控制
改变执行顺序,控制PC读取指令的位置
1.4中断
计算机提供了允许其他模块(存储器和IO模块)中断处理器正常处理过程的机制。
中断最初用于提高处理器效率,用于避免处理器等待IO的完成
1.4.2中断分类
中断分类:
- 程序中断
在某些条件下由指令执行的结果产生,如算术溢出,非法访问等
通常是代码写错了。 - 时钟中断
由处理器内部的记时器产生,允许操作系统以一定规律的执行某些函数 - IO中断
由IO控制器产生,用于发信号通知一个操作的完成 或各种错误条件
常见的是比如要读取的数据就绪或者写入完成 - 硬件失效中断
掉电或是寄存器 奇偶校验错误
利用中断,处理器可以在IO操作期间执行其他指令(可能是其他进程的) ,
考虑如下情况:
处理器在执行到某进程A需要IO时,切换进程取执行别的进程B。让IO准备就绪时,向处理器发送信号,产生中断。然后处理器转去执行中断处理程序,也就是执行之前IO的进程A。执行完毕后中断处理程序结束,返回进程B。
中断恢复后执行的是下一条指令。
中断随时可能发生,但是处理器仍然是取指令执行指令的步骤进行,因此处理器在原有基础上增加判断是否应该发生中断的过程:
1.4.2中断处理的过程
当IO设备完成一次IO操作,发生以下硬件事件:
- IO设备给处理器发送一个中断信号
- 处理器在执行完指令以后,判断是否有未响应的中断。然后给提交中断的设备发送确认信号,确认信号允许中断设备取消它的中断信号。
- 处理器需要为把控制权转给中断程序做准备
保存从中断点回复当前程序所需要的信息,要求信息至少包含程序状态字(psw),和保存在程序计数器中的下一条指令的地址,被压入系统控制栈中。
psw中包含当前运行进程的状态信息,包含内存使用信息,条件码,其他诸如允许中断禁止中断位,内核用户模式位等状态信息。 - 处理器把相应次中断的中断处理程序装入程序计数器中。然后处理器继续下一个指令周期
可以针对每一类中断有一个中断处理程序,也可以针对每个设备和没类中断处理程序有一个中断处理程序,具体取决于计算机系统结构和操作系统的设计。
如果有多个中断处理程序,处理器就必须决定调用哪一个,这个信息可能已经包含早最初的中断信号中,否则处理器必须给发中断的设备发送请求,以获取含有所需信息的响应。 - 与被中断程序相关的程序计数器和psw被保存在程序栈中,此外,还有一些其他的程序被当做正在执行程序的状态一部分。特别需要保存处理器寄存器的内容,内卫中断处理程序可能会用到这些寄存器,因此所有这些值和任何其他信息都需要保存。
例如,用户程序在执行地址为N的存储单元中的指令被中断,所有寄存器的内容和下一条指令地址N+1被压入控制栈中,栈指针被更新指向新的栈顶,程序及数需更新指向中断处理程序的开始 - 中断程序开始处理中断
7 中断处理结束吼,被保存的寄存器从栈中释放并恢复到寄存器中 - 继续之前的程序执行。
也就是说,是这样的,当中断发生时,当前的进程的上下文直接压入栈中,然后调用中断处理程序,处理完毕后,弹栈,弹到程序上下文的时候,上下文被恢复到寄存器内,然后继续之前的程序执行。
1.4.3多个中断
处理多个中断有两种方法:
当处理一个中断的时候禁止在发生中断
意思是处理器对任何新的中断请求信号都不理睬,也就是不去检查是否有中断信号。
缺点在于不能考虑优先级和时间限制的要求,例如当来自通信线的输入时,应该尽快接受,以便让出更多的空间给接下来的数据。
定义中断的优先级
允许高优先级的中断打断低优先级的中断处理程序的运行。
通信线的优先级比较高,其后是磁盘中断,打印机中断服务例程比较低
1.5存储器的层次结构
处理器层次结构:
每位价格递减,容量递增,存储时间递增,存储器访问的频率递减
存储器访问的频率递减是存储器访问的局部性原理。
命中率:较快存储器对所有存储器的访问次数的比值。
高速缓存处于寄存器和主存之间,高速缓存对于程序员和处理器都不可见。高速缓存用于在内存和处理器的存储器之间分段移动数据,以提高数据访问的性能,
二级存储器:或是辅助存储器通常是硬盘和可移动的存储介质。
软件中还可以有限的增加额外的存储层次,例如一部分内存可以作为缓冲区(Buffer),用于临时保存从磁盘中读取的数据,这种技术,有时成为磁盘高速缓存。
1.6高速缓存
1.6.1高速缓存原理
高速缓存试图使访问速度接近享有最快的储存器,同时保持价格便宜的大存储容量。
高速缓存中包含一部分内存数据的副本,当处理器试图读取存储器中的一个字节或字时,要进行一次检查以确定这个字是否在高速缓存中。
如果在,则该字节从高速缓存传递给处理器。如果不在,则先将由固定数目的字节组成的一块内存数据读入高速缓存,然后该字节从高速缓存传递给处理器。
由于刚问局部性现象的存在,当一块数据被取入高速缓存以满足依次存储器访问时,很可能紧接着多次访问的数据也在改内存块中。
1.6.2高速缓存的内存系统结构
一个n位的系统,可读内存由2^n可寻址的字组成,每个字有位移的n位地址。
页:存储器被视为固定大小的块,每个块包含K个字,也就是一共M=2^n/K。
高速缓存中有C个槽,每个槽中有K个字。C远远小于M。
每个槽有一个标签,以此表示当前存储的是哪一个块。标签位于地址的较高的若干位,表示这些位的所有开始地址。
处理器生成要读的字的地址RA,如果这个字在高速缓存中,将他传给处理器。否则包含这个字的块江北装入高速缓存,然后传递给处理器
1.6.3高速缓存设计
高速缓存与内存间的数据交换的单位:块。
当块增大时,由于局部性原理,命中率会增加。当时增加到太大的时候,由于高速缓存数据再次被用到的可能性降低,命中率降低。
映射函数确定一个快占据的那个高速缓存单元。
当一个新块加入到高速缓存中时,如果高速缓存中所有槽都被沾满,那么置换算法选择要置换那些在不久将要被访问的可能性最小的块。或是置换高速缓存中最长时间未被访问的块,成为最近最少使用算法。
如果高速缓存中的某个块内容被修改,则需要在它被唤出高速缓存之前的写回内存。写策略规定何时发生存储器写做操。
一种是每块被更新后就发生写操作。另一种是当被置换是才发生写操作。
1.7直接内存存取
IO操作分为:可编程IO,中断驱动IO,直接内存存取DMA
- 可编程IO操作
类似于轮询,在IO模块执行请求动作并设置IO状态寄存器中相应的位,IO模块不通知处理器,也不中断处理器。
而处理器在执行IO指令以后,需要定期检查IO模块的状态
可编程处理器通常必须等待很长的时间,确定IO模块是否做好了接受或发送更多数据的准备。 - 中断驱动IO
有处理器给IO模块发送IO命令,然后处理器继续做其他一些有用的工作。当IO模块准备好与处理器交换数据时,他将打断处理器的执行,并请求服务。处理器和之前一样执行数据传输,然后恢复处理器以前的执行过程。
这种方式下,处理器需要主动干预从存储器和IO模块之间的数据传输。 - 直接内存存取DMA
DMA功能由系统总线中的一个独立模块完成,也可以并入一个IO模块中。
当处理区需要读或写一块数据时,他给DMA模块产生一条命令:
是否请求一次读写,设计IO设备的地址,开始读写的存储单元,需要读写的字数。
之后处理器继续其他工作。处理器把这个操作委托给DMA模块,由该模块负责处理。该模块直接与处理器交互,传送整个数据块,每次传送一个字。这个过程不需要处理器参与。当传输完成后,DMA模块发送一个中断信号给处理器。因此只有开始传输和传输结束处理器才会参与。
DMA模块需要控制总线以便和存储器进行数据传送。如果此时处理器需要总线,那么处理器需要等待DMA模块,等待一个总线周期(总线传送一个字的时间)。因此此时处理器执行速度变慢。
对于多字的IO传送,DMA中断驱动和程序控制IO更有效。
1.8多处理器和多喝计算机组织结构
计算机被视为顺序机。
1.8.1对称处理器
一个对称多处理器SMP具有以下特点:
- 具有两个或两个以处理器
- 这些处理器共享内存和IO设备,通过总线会其他内部连接方式互连,从而每个处理器访问时间大致相同。
- 所有处理器共享对IO设备的方位,要么通过相同的通道,要么通过连接到相同设备的不同通道
- 所有处理器执行相同的功能(因此说是对称的)
- 整个系统由同一的操作系统控制,该操作系统为多个处理器以及程序提供作业进程文件和数据元素等各中介别的交互。
优势在于:
性能,可用心,渐增式成长,可伸缩性。
SMP的突出特点是,多处理器的存在对用户是透明的。操作系统管理每个处理器的进城调用欧冠进度和处理器之间的同步。
SMP中有多少个处理器,每个处理器都有自己的控制单元,算数逻辑单元和寄存器。
1.8.2多核计算机
多核计算机是指将两个或多个处理器组装在同一块硅上。又名单芯片多处理器。