1、总 复 习1、基本概念2、计算3、算法设计1、基本概念 第一章 绪论 操作系统通常把操作系统定义为用来控制和管理计算机系统资源,方便用户使用的程序和数据结构的集合。 操作系统的特征并发性(Concurrence) 共享性(Sharing)共享一般有两种方式:互斥共享和同时共享异步性(Asynchronism ) 虚拟性(Virtual) 操作系统的功能处理机管理存储管理设备管理文件管理网络与通信管理用户接口 操作系统的基本类型批处理系统分时系统实时系统 多道程序设计所谓多道程序设计是指允许多个程序同时存在于主存之间,由中央处理器以切换方式为之服务,使得多个程序可以同时执行。主存中多个相互独立的
2、程序均处于开始和结束之间,从宏观上看是并行的,多道程序都处于运行而未运行结束的过程中;从微观上看是串行的,各道程序轮流占用 CPU 交替地执行。 用户接口、系统调用程序接口又称为应用编程接口 API(Application Programming Interface) ,程序中使用这个接口可以调用操作系统的服务功能。许多操作系统的程序接口由一组系统调用(System Call)组成,因此,用户在编写的程序中使用“系统调用”就可以获得操作系统的底层服务,使用或访问系统管理的各种软硬件资源。 所谓系统调用就是用户在程序中调用操作系统所提供的一些子功能,是一种特殊的过程调用,通常由特殊的机器指令实现
3、。除了提供对操作系统子程序的调用外,这条指令还将系统转入特权方式。因此,系统调用程序被看成是一个低级过程,通常只能由汇编语言直接访问。系统调用是操作系统提供给编程人员的唯一接口。编程人员利用系统调用动态请求和释放系统资源,调用系统中已有的功能来完成与计算机硬件部分相关的工作以及控制程序的执行速度等。因此,系统调用像一个黑箱子那样,对用户屏蔽了操作系统的具体动作而只提供有关的功能。 系统调用的分类通常,一个操作系统的功能分为两大部分:一部分功能是系统自身需要的;另一部分功能是作为服务提供给用户的,这部分功能可以从操作系统所提供的系统调用上体现出来。对于一般通用的操作系统而言,可将其所提供的系统调
4、用分为:进程控制类、进程通信类、设备管理类、文件操作类、信息维护类 。第二章 进程管理 进程及其状态转换、描述和控制1进程的定义进程的多种定义中能反映进程实质的定义有:是程序的一次执行。计算机中正在运行的程序的一个实例。可以分配给处理机并由处理机执行的一个实体。是一个可并发执行的具有独立功能的程序关于某个数据集合的一次执行过程,也是操作系统进行资源分配和保护的基本单位。2态转换进程的静态描述由三部分组成:进程控制块、有关程序段和与该程序段相关的数据结构集合 。进程的程序部分描述进程所要完成的功能。是进程运行所对应的执行代码,一个进程可以对应一个完整的程序,也可以只对应一个程序中的一部分。数据结
5、构集合是程序在执行时必不可少的工作区和操作对象 。进程控制块是记录进程存在、保持进程所需数据集合、完成进程控制的重要结构 。进程控制块 PCBPCB 有时也称为进程描述块( Process Descriptor Block) ,是系统为描述进程而设计的一种数据结构。个进程只有一个 PCB,PCB 是进程存在与否的唯一标记 ,一个进程的 PCB 结构都是全部或部分常驻内存的。PCB 基本内容:标识信息 、现场信息 、控制信息 进程控制,是指系统使用一些具有特定功能的程序段来创建进程、撤消进程以及完成就绪运行阻塞调度落选出现等待条件进程各状态间的转换。这些程序段是机器指令的延伸,由若干条机器指令构
6、成,用以完成特定功能,且在管态下执行,执行过程中是不可分割的,不允许被中断,并且它是顺序执行的(不允许并发) ,我们把这样的程序段叫作原语。 用于进程控制的原语有:创建原语撤销原语阻塞原语唤醒原语挂起原语和激活原语 临界区和临界资源、临界区的使用准则临界资源和临界区一次只能允许一个进程访问的共享资源称为临界资源 。每个进程访问临界资源的那段程序称为临界区(Critical Section) ,简称 CS 区。只有让使用临界资源的进程互斥地进入临界区,才能保证某一进程单独地使用临界资源。 并发进程进入相关临界区执行应遵循如下四个准则:一次至多只允许一个进程进入临界区。不能让一个进程无限期地在临界
7、区内执行。不能强迫一个进程无限地等待进入它的临界区。不能假定处理机的速度和限制处理机的数量,也即公平竞争。 进程同步、进程同步的解决方法(主要是 P、V 操作进程同步(synchronization )是解决进程间合作关系(直接制约关系)的手段,指两个或两个以上进程基于某个条件来协调它们的活动。一个进程的执行依赖于另一个合作进程的消息或信号,当一个进程没有得到来自于另一个进程的消息或信号时则需等待,直到消息或信号到达才被唤醒。1加锁机制设想有一个共享变量(锁变量)W,锁有两种状态:w0 表示锁已打开,此时临界区内没有进程;W1 表示锁被关闭,此时已有某个进程进入临界区。用原语来实现,其中加锁原
8、语用 LOCK(W)表示,可描述为: 测试 W,若W1,表示资源正在使用,继续反复测试;若 W0,置 Wl(加锁) 。开锁原语用 UNLOCK(W)表示,可描述为:W=0;2信号量机制信号量是一种控制进程互斥和同步的变量。从物理意义上理解,信号量的值对应着相应资源的使用情况,当它的值大于 0 时,表示当前可用资源的数量;当它的值小于 0 时,表示已无可用资源,其绝对值表示等待使用该资源的进程个数,即在该信号量队列上排队的进程数,也就是说,每一个信号量有一个等待队列。对信号量的操作,只允许初始化和执行两个标准的原语P、V 原语,或者称为P、V 操作,没有任何其它方法可以检查和操作信号量。 3 管
9、程机制基本思想是把信号量及其操作原语封装在一个对象内部。也就是说,将共享资源及能够对共享资源进行的所有操作集中在一个模块中。可把“管程”定义为关于共享资源的数据结构和能为并发进程在该数据结构上执行的一组操作,这组操作能使进程同步和改变管程中的数据。 死锁、产生死锁的必要条件计算机系统的各种软、硬件资源都由操作系统进行管理和分配。让并发进程在执行过程中根据各自的需要而动态的申请、占有和释放有限的系统资源,正是操作系统为了尽可能地提高资源利用率而采取的管理和分配技术。但是,如果操作系统对资源的分配不当,可能会出现若干个进程相互之间都无休止的等待对方释放自己所需资源的状态,这是系统的一种致命状态死锁
10、状态。死锁的定义一般地,若系统中存在一组并发进程(两个或多个进程) ,它们中的每一个进程都占用了某种资源而又都在等待该组进程中另一些进程所占用的资源,从而使该组进程都停止往前推进而陷入永久的等待状态。这种情况下,我们就说系统出现了“死锁” ,或者说该组进程处于“死锁”状态。971 年 Coffiman 总结出了系统产生死锁的四个必要条件: 互斥条件(mutual exclusion) 、申请与保持条件(hold and wait) 、不剥夺条件(no preemption) 、循环等待条件(circular wait ) 死锁预防的方法1预先静态分配策略预先静态分配策略是指进程必须在开始执行前
11、就申请它所需要的全部资源,仅当系统能满足进程的所有资源请求并把资源分配给进程后,该进程才能执行。无疑所有并发执行的进程要求的资源总和不能超过系统拥有的资源总数。采用静态分配后,进程在执行过程中不再申请新的资源,所以不可能出现占有了某些资源后再等待另一些资源的情况,既破坏了死锁的第二个必要条件(申请与保持条件)的出现,而第四个必要条件(循环等待条件)也就自然不会成立,从而预防了死锁的发生。2层次分配策略层次分配策略是将系统中的所有资源分成多个层次,每个层次给出一个编号:L1,L2,Ln ,每一层中可有几类资源。进程在申请资源时,当得到某一层的一个资源后,它只能再申请较高一层的资源,或者它要想再申
12、请该层中的另一个资源时,必须先释放该层中已拥有的资源;进程要释放资源时,如果要释放某一层的一个资源,必须先释放所拥有的较高层的所有资源。3剥夺式分配策略剥夺式分配资源策略可阻止产生死锁的第三个必要条件的出现,指当一个进程申请资源得不到满足时,可以从另一个占有该类资源的进程那里去抢夺资源;这意味着,一个进程已获得的资源在运行过程中可被剥夺,从而破坏了“非剥夺式分配”这一必要条件,预防了死锁的发生。 死锁的检测与恢复1死锁的检测最常用的检测死锁的方法是对进程资源分配图(PRAG)进行化简。 使用银行家算法检测定义系统中每类资源尚可供分配的资源总数向量 V将最大需求矩阵 C 中为 0 的行向量所对应
13、的进程 Pi 记入集合 L,L=LPi;从进程集合中查找 RequestijV 的进程,做如下处理: 化简进程资源分配图,并释放资源,将该进程并入集合 L; 传递闭包算法首先把进程使用和等待资源的情况用一个状态矩阵 S 来表示,然后用 warshall 的传递闭包算法来检测系统是否有死锁发生。 2死锁的恢复 撤销进程法 剥夺资源法 进程回退法 第三章 处理机调度 处理机调度的 3 级层次高级调度中级调度低级调度 常用作业调度算法的基本原理常采用的作业调度算法有先来先服务(FCFS)算法最短作业优先(SJF)算法(抢占式 SJF-SRTF最高响应比优先(HRF)算法 响应比 1+已等待时间/估计
14、运行时间均衡调度算法 常用进程调度算法的基本原理1先来先服务(FCFS)算法FCFS 算法就是每次从就绪队列中选择一个最先进入该队列的进程调度,把 CPU 分给它,令其投入运行。该进程一直运行下去,直至完成或者由于某些原因而被阻塞才放弃CPU。这样,当一个进程就绪队列时,它的 PCB 就链入就绪队列的末尾。每次进程调度时就把队头进程从该队列中摘下,分给它 CPU,使它运行。2时间片轮转(TRR)算法主要用于分时系统中的进程调度。每当执行进程调度时,调度程序总是选出就绪队列的队首进程,让它在 CPU 上运行一个时间片的时间。时间片是一个小的时间单位,通常为10 至 100ms 数量级。当进程用完
15、分给它的时间片后,系统的计时器发出时钟中断,调度程序便停止该进程的运行,并把它放入就绪队列的末尾;然后,再把 CPU 分给就绪队列的队首进程,同样也让它运行一个时间片。3高优先级优先调度算法利用优先级调度算法时,给每一个进程确定一个优先级,在进行进程调度时,从就绪队列中选出优先级最高的进程,把 CPU 分配给它使用。非抢占式优先级法。 抢占式优先级法。 4多级反馈队列调度算法 5保证调度一种实际并容易实现的保证是:若系统工作时有 n 个用户登录,则每个用户将获得 CPU 处理能力的 1/n。类似地,在一个有 n 个进程的单用户系统中,若所有的进程都是平等的,则每个进程也将获得 CPU 处理能力
16、的 1/n。6彩票调度算法基本思想是为进程发放针对系统各种资源的彩票。当调度算法需要做出决策时,随机选择一张彩票,持有该彩票的进程将获得系统资源。对于 CPU 调度,系统可能每秒钟抽多次(如 50 次)彩票,每次获奖者可以获得一个时间片(如 20ms)的运行时间7公平分享调度体现对用户的公平性,每个用户得到的 CPU 时间都差不多,而调度程序需要一种强制的方式选择进程。第四章 存储管理 地址装换的方法将用户程序中的指令或数据的逻辑地址转换为存储空间中物理地址的工作称为地址转换或重定位。 地址转换有两种方法:静态重定位、 动态重定位 逻辑地址、物理地址 可变分区存储管理的常用策略常用的分配策略有
17、五种: 最先适应算法(First Fit,FF) 下次适应算法(Next Fit,NF) 最佳适应算法(Best Fit,BF) 最坏适应算法(Worst Fit,WF) 快速适应法 (Quick Fit,QF) 分页存储管理、分段存储管理的基本原理 虚拟存储器 虚拟存储器的引入,实际上是利用了存储管理中逻辑地址空间和物理地址空间的关系,将计算机的内存和辅存结合起来,使得用户感觉具有大容量的内存,虚拟内存在将逻辑地址转换成物理地址时,必须通过一个内存管理单元 MMU(Memory Management Unit)来完成。 第五章 设备管理 设备类型设备的种类和数量越来越多,结构也越来越复杂,为
18、了管理上的方便,通常按不同的观点,从不同的角度对设备进行分类。1、 按照信息交换的单位分类:字符设备(characterdevice)、块设备 (block device)2、 按照输入输出特性分类:输入输出设备、存储设备、通信设备 3、按照所属关系分类:系统设备、用户设备4、按照资源分配方式分类:独占设备、共享设备、虚拟设备5、 按照传输速率分类:高速设备、中速设备、低速设备 I/O 控制方式程序直接控制 I/O 方式(programmed I/O)又称程序查询方式,在尚无中断的早期计算机系统中,输入输出完全由 CPU 控制。在这种方式下,输入输出指令或询问指令测试一台设备的“忙/闲”标志位
19、,决定主存储器和外围设备是否交换一个字节或一个字。每传送一个字节或一个字,CPU 都要循环地执行状态检查。中断技术的引入,是为了消除程序直接控制方式中设备驱动程序不断地轮询控制器状态寄存器的开销,进一步提高系统并行工作的程度。中断技术结合在硬件中实现后,外围设备有了反映其状态的能力,仅当 I/O 操作正常或异常结束后,由设备控制器“自动地”通知设备驱动程序,这时才中断 CPU,实现了一定程度的并行操作,这就叫中断驱动方式(interrupt-driven I/O) 。 如果 I/O 设备能直接与主存交换 DMA 控制方式的引入:虽然程序中断方式消除了程序查询方式的“忙式”测试,提高了 CPU
20、的利用率,但是 CPU 在响应中断请求后,必须停止现行程序转入中断处理程序并参与数据传输操作。例如,要从键盘输入 1KB 的数据,就需要数据而不占用 CPU,那么 CPU 的利用率还可提高,这就出现了直接存储器存取(Direct Memory Access,DMA)方式。DMA 方式适用于具有 DMA 控制器的计算机系统。通道方式是 DMA 方式的发展,它进一步将 CPU 对I/O 操作及有关管理和控制的干预减少到以多个数据块为单位的干预,通道的出现是现代计算机系统功能不断完善、性能不断提高的结果。例如,当 CPU要完成一组相关数据块的读(写)操作时,只需要向通道发出一条 I/O 指令,给出所
21、要执行的通道处理程序的地址和要访问的 I/O 设备,通道接到该指令后,通过执行通道处理程序便可完成 CPU 指定的 I/O 任务。 通道及其类型通道又称输入输出处理器,相当于一台小型的处理机,它接受主机的命令,独立执行通道程序,对外部设备的输入输出操作进行管理和控制,完成主存储器和外围设备之间的成批数据传输。引入通道技术后,输入输出操作过程:中央处理机在执行主程序时遇到输入输出请求,则它启动指定通道上的外围设备,一旦启动成功,通道开始控制外围设备进行操作。这时 CPU 就可执行其它任务并与通道并行工作,直到输入输出操作完成。当主机委托的 I/O 任务完成后,通道发出中断信号,请求 CPU 处理
22、,CPU 停止当前工作,转向处理输入输出操作结束事件。按照信息交换方式和连接设备种类不同,通道可分为三种类型: 字节多路通道(Byte Multiplexer Channel) 数组选择通道(Blocked Selector Channel) 数组多路通道(Block Multiplexer Channel) 缓冲技术在设备管理中,引入缓冲区的主要原因: 改善 CPU 与外围设备之间速度不匹配的矛盾。 减少对 CPU 的中断频率,放宽对 CPU 中断响应时间的限制。 提高 CPU 和 I/O 设备的并行性。缓冲有硬缓冲和软缓冲之分在操作系统管理下,常常辟出许多专用主存区域的缓冲区用来服务于各种
23、设备,支持 I/O 管理功能。常用的缓冲技术有:单缓冲、双缓冲、循环缓冲、缓冲池。第六章 文件系统 文件、记录和数据项之间的关系文件结构指的是文件的逻辑结构和物理结构。文件的逻辑结构指文件的外部组织形式,是用户所看到的文件的组织形式;文件的物理组织指文件的内部组织形式,是文件在物理存储设备上的存储形式,所以又称文件的存储结构。 记录是一组相关数据项的集合,用于描述一个对象某方面的属性。一个记录通常包含哪些数据项,取决于需要描述对象的哪个方面。 在这些记录中,为了能唯一的标识一个记录,必须在记录的各个数据项中,确定出一个项或几个项,这些项的集合称为关键字。 文件系统为了能有效管理一个文件,必须建
24、立一个与文件一一对应的数据结构,用来保存文件名及文件的各种属性,这个数据结构称为文件控制块(File Control Block,FCB ) 。 文件的逻辑结构和物理结构文件的逻辑组织形式有两种:流式和记录式。前者是非结构式的,后者是结构式的。1流式文件流式文件中构成文件的基本单位是字节,即流式文件是具有符号名并在逻辑上具有完整意义的字节序列。 2记录式文件记录式文件顾名思义就是由记录构成的文件,即记录式文件是具有符号名并在逻辑上具有完整意义的记录序列。 顺序结构顺序结构又称为连续结构,采用这种结构,一个文件占用若干个连续的物理块,其首块号及块数记录于文件控制块 FCB 中。 2链接结构链接结
25、构又称串联结构。采用这种结构,一个文件占有若干个不连续的存储块,各块之间以指针相连。3索引文件采用索引结构,一个文件占有若干不连续的存储块,这些块的块号记录于一个索引表中。 常用的目录结构分区与目录一级目录二级目录树形目录无环图目录和通用图目录 文件共享的形式文件共享是指多个进程在受控的前提下共用系统中的一个文件,这种控制是由操作系统和文件的使用者共同实现的。 操作系统中文件共享的形式有两种:1不同时使用一个文件2同时使用一个文件存在两种情况:(1)所有进程都不修改所共享的文件。(2)某些进程要求修改被共享的文件。 辅存空间管理的方法在为文件分配磁盘块时有三种方式: 连续分配 链接分配 索引分
26、配空闲空间是指磁盘中那些没有使用的空间,系统在建立文件时的首要任务就是在空闲空间中为文件分配磁盘块,所以系统必须记录下空闲空间(Free Space)的使用情况,当需要在磁盘中建立文件时,就从这些空闲空间中找到合适的磁盘块分配给文件。1位示图磁盘中的每一个磁盘块都用一个二进制来表示它是否空闲,如果该磁盘块已经被分配,则用“1”来表示;如果该磁盘块空闲,则用“0”来表示。这样,由所有磁盘块的二进制标识所组成的集合就称为位示图,或位向量。2空闲表系统进行辅存的文件分配时尽量分配连续空间,所以空闲的磁盘块大多都是连续的,系统建立一个空闲表,记录每个空闲块的起始块号和长度。 利用空闲表管理空闲空间的方
27、法,与内存管理中的可变分区管理方法类似。在分配磁盘块时可采用最先适应算法、最佳适应算法和最坏适应算法。回收时,将空闲空间插入空闲表中,并记录起始磁盘号及长度。如果两个空闲空间是相邻的,则要对它们进行合并。 3空闲链表空闲链表方式是将所有的空闲空间用指针链接起来,并设一个头指针指向空闲链表的第一个磁盘块。 在系统建立一个新文件时,可通过这个头指针来查找合适数量的空闲块,将它们从链表中断开分配给文件。删除文件时,将需要释放的磁盘块插入到空闲链表的合适位置。 空闲链表的缺点:空闲链表方式在分配磁盘块时,要多次进行磁盘的 I/O 操作,效率很低。并且每个磁盘块要有一个指针,指向下一个空闲块就要浪费一定
28、的磁盘空间。2.计算 银行家算法(习题二 22) 计算作业调度和进程调度算法的平均周转时间和平均带权周转时间(习题三 9、10) 各种存储管理模式的地址转换(习题四15、16)计算缺页中断次数和缺页中断率(习题四18) 计算寻道次序、移臂总量、寻道时间(习题五16)3.算法设计 生产者-消费者问题生产者消费者问题是用于解决一群生产者和消费者之间的进程互斥和进程同步问题。生产者进程可以是计算进程、发送进程等;而消费者进程可以是打印进程、接收进程等等。生产者消费者问题可以描述为由些不确定数目的生产者和消费者进程及个有限的共享缓冲区所构成的系统。生产者进程不断地向共享缓冲区写入数据(即生产数据) ,
29、而消费者进程从共享缓冲区中读出数据(即消费数据) 。 1用记录型信号量解决生产者和消费者问题可设置三个信号量:full 和 empty 为两个同步信号量,其中 full 表示有数据的缓冲块数目,初值为 0;empty 表示空的缓冲块数目,初值为 N;mutex 用于访问缓冲区时的互斥,初值为 1。实际上,full 和 empty 之间存在如下关系:full+empty=N producer i(i=1,2,)do 生产数据;P(empty);P(mutex); 向共享缓冲区写入数据;V(mutex);V(full); while(1); consumer j (j=1,2,)do P(full
30、);P(mutex); 从共享缓冲区读出数据;V(mutex);V(empty); 消费数据;while(1);2用 AND 型信号量集解决生产者和消费者问题用 AND 型信号量集解决生产者和消费者问题,即用 Swait 和 Ssignal 函数来代替P、V 操作。 producer i(i=1,2,)do 生产数据;Swait(empty,mutex);向共享缓冲区写入数据;Ssignal( mutex,full);while(1);consumer j(j=1,2,)do Swait(full,mutex);从共享缓冲区读出数据;Ssignal( mutex,empty);消费数据;whi
31、le(1); 哲学家进餐问题哲学家用餐问题也是一个典型的同步问题,是由 Dijkstra 提出并解决。该问题是描述五位哲学家围坐在一个圆桌旁,每位就餐者需要两把叉子,但桌上只提供了 5 把,在每个相邻座位间都放有一把。为了吃到东西,每个哲学家必须拿起他左、右两侧的叉子。他们的活动规律都是一样的,即思考、吃饭、思考。叉子是这个问题中的临界资源,在一段时间内只允许一个哲学家使用,即每把叉子都必须互斥使用。设 5 个哲学家对应 5 个进程 p0,P1,p4,5 把叉子对应 5 个资源R0,R1,R4 。进程 pi 左边的叉子为 Ri,右边的叉子为 R(i+1),而进程 P4 左边的叉子为 R4,右边的叉子为 R0。 1用记录型信号量解决哲学家用餐问题semaphore fork5=1,1,1,1,1;进程 pi(i=0,4)do思考;P(forki); P(forki+1 %5); 用餐;V(forki); V(forki+1 % 5); while(1); 2用 AND 型信号量集解决哲学家用餐问题在哲学家用餐问题中,由于每位哲学家要申请两个临界资源(两把叉子) ,故可用AND 型信号量集来解决。进程 pi(i=0,4)do思考;Swait(forki ,forki+1 % 5);用餐;Ssignal(forki,forki+1 % 5);while(1);