摘自《操作系统概念》(高等教育出版社)第七版
第一部分 概述
1、事件的发生通常通过硬件或软件中断表示。硬件可随时通过总线向cpu发出信号,以触发中断;软件可通过执行特别的操作,如系统调用,而触发中断。
2、一个典型的指令执行周期:首先从内存中获取指令,并保存在指令寄存器中
3、多处理器系统的优点:
a. 增加吞吐量
b. 规模经济
c. 增加可靠性
4、现代操作系统是由中断驱动的
5、系统调用类可大致分为五大类:进程控制、文件管理、设备管理、信息维护和通信
第二部分 进程管理
进程概念:
1、进程包括代码段、当前活动(程序计数器的值和处理器寄存器的内容)、堆栈段、数据段(包括全局变量),堆(动态分配的内存)
2、进程的状态:新的,运行,等待,就绪,终止
3、进程控制块pcb存储如下信息:进程状态、程序计数器、cpu寄存器、cpu调度信息、内存管理信息、记账信息、I/O状态信息
进程调度:
1、进程进入系统时,会被加入作业队列中。驻留在内存中就绪的,等待运行的称为就绪队列,使用链表实现,其头结点指向第一个和最后一个PCB。
2、设备调度:等待特定I/O设备的列表称为设备队列。
3、长期调度程序(作业调度)从大容量存储设备中选择进程装入内存中,以准备执行;短期调度从内存中选择进程,并为之分配cpu。
4、上下文切换:将cpu切换到另一个进程需要将当前进程的状态保存并恢复另一个进程的状态,这一任务成为上下文切换。
5、进程上下文存储在PCB中,它包含cpu寄存器的值,进程状态和内存管理信息等。
进程间通信:
1、独立进程:如果一个进程不能被其他进程影响且不能影响其他进程,则它是独立进程;如果一个进程能被其他进程影响或影响其他进程,则为协作进程。
2、与其它进程共享数据的进程是协作进程。
3、进程间通信:
(1)共享内存:协作进程通过在共享内存中读写数据交换信息
(2)进程间通信机制(Interprocess communication ,IPC)
4、共享内存:通信进程建立共享内存区域,其它进程将该区域放到自己的地址空间上。
5、为了说明协作进程这一概念,可研究生产者消费者问题。
线程:
1、线程是CPU使用的基本单元,由线程ID,程序计数器,寄存器集合和栈组成。它与进程中的其它线程共享代码段、数据和其它系统资源。
2、线程的优点:
(1)响应度高
(2)资源共享
(3)经济
(4)多处理器体系结构的利用
3、线程分为用户级的用户线程和内核线程。
cpu调度:
1、进程执行有cpu区间和I/O等待周期组成。
2、每当CPU空闲时,操作系统就必须从就绪队列中选择一个进程来执行。进程选择由短期调度程序来执行,从内存中选择进程并为之分配CPU区间。
3、分派程序是一个模块,用于将cpu的控制分派给短期调度程序选择的进程,其功能包括切换上下文,切换到用户模式,跳转到用户程序的合适位置,以重新启动程序。
4、衡量cpu调度算法的标准:
(1)CPU使用率
(2)吞吐量:cpu在单位时间内完成进程的数量
(3)周转时间:从进程提交到进程完成的时间称为周转时间。周转时间包括等待进入内存、在就绪队列中等待、在cpu上执行和I/O执行的时间。
(4)等待时间:由于调度算法并不影响进程的cpu执行和I/O等待时间,所以用等待时间衡量,即进程在就绪队列中的等待时间。
(5)响应时间:从提交请求到产生响应的第一时间。
5、cpu调度算法:
(1)先到先服务调度:先请求cpu的进程分配到cpu。会产生护航效果(所有进程都在等待一个大进程释放cpu)
(2)最短作业优先调度(sjf):将cpu控制提供给具有最短cpu区间的进程。若可抢占,则称为最短剩余时间优先调度。
(3)优先级调度:每一个进程与一个优先级关联,具备最高优先级的进程会分配到cpu。会遇到无穷阻塞问题,解决办法之一是老化。
(4)轮转法调度:类似于FCFS调度,增加了抢占以切换进程、定义一个较小时间单元,称为时间片。cpu调度程序循环就绪队列,为每个进程分配不超过一个时间片的cpu。
(5)多级队列调度:将就绪队列分为多个独立队列,每个队列有自己的调度算法。队列之间可以按优先级划分,也可以按照时间片划分。
(6)多级反馈队列调度:允许进程在队列之间移动。
进程同步:
1、竞争条件:多个进程同时访问和操作统一数据且执行结果与访问的特定顺序有关,称为竞争条件。
2、临界区问题的三项条件:互斥,前进,有限等待。peterson算法。
3、信号量:可以用来控制访问具有若干个实例的某种资源。自旋锁:忙等待。
死锁:
1、死锁的四个条件:互斥、占有并等待、循环等待、非抢占。同时满足则有可能出现死锁。
2、若资源分配图中出现环,则有可能发生死锁。
3、死锁的处理办法:避免、检测并恢复、忽视。
4、资源分配图算法
5、银行家算法
内存管理:
1、内存由很大一组字或者字节组成,每一组字或者字节都有自己的地址。cpu根据程序计数器的值从内存中提取指令。
2、通过基地址寄存器和界限地址寄存器确保进程具有独立的内存空间。
3、将指令和数据绑定到内存地址分为如下三种情况:
(1)编译时,生成绝对代码
(2)加载时,生成可重定位代码
(3)执行时,需要特定硬件
4、逻辑地址:cpu所生成的地址。由程序生成的逻辑地址的集合称为逻辑地址空间。
物理地址:内存单元中的地址,即加载到内存地址寄存器中的地址。逻辑地址空间对应的物理地址的集合称为物理地址空间。
5、虚拟地址到物理地址的映射是由内存管理单元管理的,也就是memory_management_unit.
6、动态加载:子程序以可重定位的形式保存在磁盘中。使用时才加载子程序,可获得更好的内存空间使用率。
7、内存通常分为两部分:一个用于驻留操作系统,一个用于用户进程
8、连续内存分配:每个进程位于一个连续的内存区域
9、动态存储分配的常用方法:首次适应,最佳适应,最差适应
10、首次适应算法和最佳适应算法都有外部碎片问题
11、解决外部碎片的方法:
(1)紧缩:要求执行时绑定指令和数据到内存,且开销大
(2)允许物理空间地址非连续:分页和分段
12、实现分页:将物理内存分为固定大小的块,称为帧;将逻辑内存分为固定大小的块,称为页。当需要执行进程时,将页从备份存储调用到可用的内存帧中。分页增加了切换时间。
13、当页变表过大以至于无法在内存中连续地分配该页表时,可以采用多级页表。
14、分段:分段是支持用户视角的内存管理方案。通过段名称和偏移来确定段的地址。
15、段表的每个地址都有段基地址和段界限。
虚拟内存:
1、通常情况下,并不需要将进程全部放入内存中,且不是同时需要全部的内容。比如,错误处理的代码就很少使用;某些功能很少用到;
2、虚拟内存将用户逻辑内存与物理内存分开,为用户提供了巨大的虚拟内存。
3、按需调页:在需要时才将进程对应的页调入内存中。
4、当换入进程时,调页程序会推测在换出进程前将用到的页。并非将整个进程调入内存空间,而是将必需的页调入内存。这样,调页程序就避免了读入不使用的页,减少了交换时间和占用的物理内存。
5、若进程试图访问未调入内存的页,也就是访问标记为无效的页,则会产生也错误陷阱(page-fault trap)
6、写时复制:可以快速创建子进程,且最小化创建新进程需要分配的页的数量。
7、内存的过度分配:在多道程序系统中,有可能发生页错误后,却没有空闲帧用于存储页。
8、可以使用修改位(脏位)降低额外开销。若某页被选中为替换页,且其修改位表明并未修改过,则直接覆盖即可。
9、为了实现按需调页,需要帧分配算法和页置换算法。
10、页置换算法:
(1)FIFO:
belady异常:随着帧数的增加,页错误率有可能会增高。
(2)最优置换算法:置换最长时间不会被使用的页
(3)LRU置换:最长时间未被使用的页将被置换,为了给页帧确定排序序列,可以使用计数器或者栈。
11、帧分配:
(1)平均分配:给每个进程分配相同多的帧
(2)比例分配:根据进程大小,将内存分配给每个进程。
12、全局分配与局部分配:
(1)全局置换:允许进程从所有帧集合选择一个置换帧,而不管该帧是否已经分配给其它进程。
(2)局部置换:进程仅从自己的分配帧中进行选择。
13、系统颠簸:频繁的页错误导致频繁的调页,称为颠簸。如果一个进程的换页时间多于执行时间,那么该进程就在颠簸。
网友评论