<span>软考操作系统1</span>
操作系统
考点归纳
1.操作系统基本知识
操作系统的分类、操作系统的作用、操作系统的内核、操作系统的配置
2.进程管理
进程的概念、进程状态转换图重点
、同步与互斥、信号量与PV操作重点
、进程死锁死锁的概念、条件和判定死锁
、银行家算法重点
、进程调度算法
3.存储管理
连续存储与非连续存储的概念、页式存储、段式存储、段页式存储、程序局部性原理、页面置换算法重点
、通过逻辑地址计算物理地址、随机存取、直接存取、顺序存取
4.磁盘管理
磁盘的相关概念、磁道数计算、磁盘容量计算、磁盘调度算法重点
、磁盘数据的存取过程
5.设备管理
数据传输控制方式(常见的4种)、虚拟设备与SPOOLING重点
6.文件管理
目录结构、绝对路径、相对路径、位示图重点
、索引文件
操作系统功能、类型和层次结构
一、操作系统定义
操作系统是直接控制和管理计算机硬件、软件资源,合理地对各类作业进行调度,以方便用户使用的程序集合。
二、OS在计算机中的地位
三、OS的作用
作为用户和计算机间的接口
作为计算机系统资源的管理者
实现了对计算机资源的抽象
四、操作系统分类
批处理操作系统
分时操作系统
实时操作系统
网络操作系统
分布式操作系统
五、操作系统的功能
处理机管理功能
存储器管理功能
设备管理功能
文件管理功能
用户接口
OS定义: OS是直接控制和管理计算机硬件、软件资源,合理地对各类作业进行调度,以方便用户使用的程序集合
处理机管理(进程管理)
一、进程的定义
进程:程序关于某个数据集合的一次执行过程。
1、进程的特征(与程序比较)
(1) 结构特征
进程控制块(PCB) + 程序 + 数据 = 进程实体
(2) 动态性–最基本特征
进程:进程实体的一次执行过程,有生命周期。
程序:程序是一组有序指令的集合,是静态的概念。
2、进程的三种基本状态
<mark>(1)就绪状态(Ready)</mark>
进程已获得除CPU之外的所有必需的资源,一旦得到CPU控制权 ,立即可以运行。
<mark>(2)运行状态(Running)</mark>
进程已获得运行所必需的资源,它正在处理机上执行。
<mark>(3)阻塞状态(Blocked)</mark>
正在执行的进程由于发生某事件而暂时无法执行时,便放弃处理机而处于暂停状态,称该进程处于阻塞状态或等待状态。
进程的三种基本状态以及各状态之间的转换
某一时刻单CPU系统中有n个进程,
处于运行态的进程最多为(1
),最少为(n
);
处于就绪队列的进程最多为(n-1
),最少为(0
);
处于阻塞队列的进程最多为(n
),最少为(0
)。
3、进程的五种状态
引入挂起状态后,增加了挂起状态(静止状态)到非挂起状态( 活动状态)的转换,或者相反。
二、进程互斥与同步
1.进程间两种形式的制约关系
(1) 间接相互制约关系 — 源于资源共享
(2) 直接相互制约关系 — 源于进程合作
2.临界资源
临界资源(Critical Resource):把一段时间内只允许一个进程访问的资源称为临界资源戒独占资源 。
临界区(Critical Section):每个进程中访问临界资源的那段代码称为临界区 。
三、 信号量机制
信号量是OS提供的管理公有资源的有效手段。
信号量是一个整数,当信号量大于等于零时,代表可供并发进程使用的资源数量,当信号量小于零时,表示处于阻塞态进程的个数。
Wait 操作:
申请资源,减量操作,S.value:=S.value-1
当S.value<0时,表示资源分配完,进行自我阻塞。
Signal操作:
释放资源,增量操作,S.value:=S.value+1
当S.value≤=0,唤醒S.L链表中的等待进程。
四、信号量的应用
- 利用信号量实现进程互斥(模式)
为使多个进程互斥的访问某临界资源,须为该资源设置一互斥信号量mutex,并设其初始值为1,然后将各进程访问资源的临界区CS置于wait(mutex)和signal(mutex)之间即可。
-
利用信号量实现前驱关系(模式)
-
利用记录型信号量实现同步(模式)
五、进程调度
也称短程调度(Short-Term Scheduling),用来决定就绪队列中的哪个进程应获得处理机,然后再由分派程序把处理机分配给该进程。
<mark>为最基本的一种调度,三种类型OS中都必须有进程调度。</mark>
进程调度可采用下述两种调度方式:
非抢占方式(Non-preemptive Mode)
抢占方式(Preemptive Mode)
1、非抢占方式(Non-preemptive Mode)
一旦把处理机分配给某进程后,便让该进程一直执行,直至该进程完成或发生某事件而被阻塞时,才把处理机分配给其他进程,决不允许进程抢占已分配出去的处理机。
<mark>评价:实现简单、系统开销小;适用于大多数的批处理OS,但在要求比较严格的实时系统中,不宜采用这种调度方式。</mark>
2、抢占方式(Preemptive Mode)
允许调度程序根据某种原则,去暂停某个正在执行的迚程,将处理机重新分配给另一进程。
抢占的原则:
时间片原则:各进程按时间片运行,一个时间片用完时,停止该进程执行重新进行调度。
短作业(进程)优先原则:短作业(进程)可以抢占长作业( 进程)的处理机。
优先权原则:优先权高的可以抢占优先权低的进程的处理机。
六、调度算法
1、先来先服务
2、短作业(进程)优先调度算法
3、高优先权优先调度算法
4、时间片轮转调度算法
1、先来先服务调度算法(FCFS)
是一种最简单的调度算法,既可用于作业调度,也可用于进程调度。进程调度采用FCFS算法时,每次调度都从就绪队列中选择一 个最先进入该队列的进程,为之分配处理机,使之运行。
FCFS算法比较有利于长作业(进程),而不利于短作业(进程)。
2、短作业(进程)优先调度算法 (SJ§F)
对短作业或短进程优先调度的算法。可以分别用于作业调度和进程调度。
短作业优先(SJF)的调度算法:从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。
短进程优先(SPF)调度算法,是从就绪队列中选出一估计运行时间最短的进程,将处理机分配给它,使它立即执行。
SJF调度算法的优缺点
优点:
有效降低作业的平均等待时间,提高系统吞吐量。
缺点:对长作业不利。
该算法完全未考虑作业的紧迫程度,因而不能保证紧迫性作业(进程)会被及时处理。
由于作业(进程)的长短只是根据估计执行时间定的,主观因素较大,不一定能真正做到短作业优先。
3、高优先权优先调度算法
为照顾紧迫性作业,使之在进入系统后便获得优先处理,引入了最高优先权优先(FPF)调度算法。
此算法常用于批处理系统中,作为作业调度算法,也作为多种操作系统中的进程调度算法,还可用于实时系统中。
(1)优先权的类型
对于最高优先权优先调度算法,关键在于:使用静态优先权 、劢态优先权;如何确定进程的优先权。
静态优先权:在创建进程时确定的,在进程的整个运行期间保持不变。利用某一范围的整数来表示(0~7),又称为优先数。
动态优先权:在创建进程时所赋予的优先权可以随进程的推进戒随其等待时间的增加而改变。
(2)高响应比优先调度算法
在批处理系统中,短作业优先算法是一种比较好的算法,其主 要不足是长作业的运行得不到保证。我们为每个作业引入动态优先权,并使作业的优先级随着等待时间的增加而以速率a提高,则可解决问题。见下式:
<mark>优先权=(等待时间+要求服务时间)/要求服务时间</mark>
由于等待时间不服务时间之和就是系统的响应时间,故上式又表示为:
<mark>Rp=响应时间/要求服务时间</mark>
由上式可以看出:
如作业等待时间相同,则要求服务的时间愈短优先权愈高,所以该算法利于短作业。
当要求服务的时间相同,作业优先权的高低决定于其等待时间的长短,所以是先来先服务。
对于长作业,作业的优先级可以随等待时间的增加而提高,当其等待时间足够长也可获得处理机。
4、时间片轮转调度
是一种最古老,最简单,最公平且使用最广的算法。每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间。
如果在时间片结束时进程还没有运行结束,则CPU将被剥夺并分配给另一个迚程,该进程到就绪队列尾重新排队。
如果进程在时间片内阻塞戒结束,则CPU当即进行切换。
七、死锁
是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种状态时,若无外力作用,它们都将无法再向前推进。
1、产生死锁的原因
<mark>(1)竞争资源</mark>
当系统中供多个进程共享的资源如打印机、公用队列等,其数目不足以满足诸进程的需要时,会引起诸进程对资源的竞争而产生死锁。
<mark>(2)进程间推进顺序非法</mark>
进程在运行过程中,请求和释放资源的顺序不当,也同样会导致产生死锁。
<mark>(3)竞争资源引起进程死锁</mark>
可把系统中的资源分为两类:
a.可剥夺性资源:资源分配给进程后可以被高优先级的进程剥夺。如CPU、主存。
b.不可剥夺性资源:分配给进程后只能在进程用完后才释放的资源。如磁带机、打印机等。
2、产生死锁的必要条件
(1)互斥条件
进程访问的是临界资源,即在一段时间内某资源只由一个进程占用。如果此时还有其他进程请求该资源,则请求者只能等待 ,直至占有该资源的进程用完释放。
(2)请求和保持条件
一进程在请求新的资源的同时,保持对已分配资源的占有。
(3)不剥夺条件
指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。
(4)环路等待条件
指在发生死锁时,必然存在一个进程–资源的环形链。 即进程集合{P0,P1,P2,…,Pn}中的P0正在等待一个P1 占用的资源;P1正在等待一个P2占用的资源,……, Pn正在等待一个已被P0占用的资源。
3、处理死锁的基本方法
在系统中已经出现死锁后,则应及时检测到死锁的发生,并采取适当措施来解除死锁。
目前处理死锁的方法可归结为四种:
(1)预防死锁
是一种较简单和直观的<mark>事先预防</mark>方法。该方法是通过设置某些限制条件,去破坏产生死锁的四个必要条件的一个或几个,来预防发生死锁。
! 摒弃“请求和保持”条件
! 摒弃“不剥夺”条件
! 摒弃“环路等待”条件
(2)避免死锁
该方法同样是属于<mark>事先预防</mark>的策略,这种方法不是预先加上各种限制条件以预防产生死锁的可能性,而是用某种方法去<mark>防止系统进入</mark>不安全状态,使死锁不致于最终发生。
! 银行家算法避免死锁
(3)检测死锁
这种方法并不须事先采取任何限制性措施,也不必检查系统是否已经进入不安全区。
此方法允许系统在运行过程中发生死锁,但可通过系统所设置的检测机构,及时的检测出死锁的发生,并精确的确定不死锁有关的进程和资源;然后采取适当的措施,从系统中将已发生的死锁清除掉。
(4)解除死锁
是不死锁检测相配套的一种措施。当检测到系统中已发生死锁时,须将进程从死锁状态中解脱出来。
! 常用的实施方法是撤销或挂起一些进程,以便回收一些资源,再将这些资源分配给已处于阻塞状态的进程,使之转为就绪状态,以继续运行。
! 死锁的检测不解除措施,有可能使系统获得较好的资源利用率和吞吐量,但在实现上难度也最大。
存储管理
存储管理主要是指对内存的管理,负责内存分配和回收,内存的保护和扩充。
@ 存储管理的目的是尽量提高内存的使用效率。
内存的分配方式有两种
% 连续的分配方式
% 离散的分配方式
一、连续分配方式
指为一个用户程序分配一个连续的内存空间。
(1)单一连续分配
(2)固定分区分配
(3)劢态分区分配
为把一个新作业装入内存,需按照一定的分配算法,从空闲分区表或空闲分区链中选出一分区分配给该作业。
常用的分配算法:
a.首次适应算法 b.循环首次适应算法 c.最佳适应算法 d.最坏适应算法
(4)可重定位分区分配
如果在系统中只有若干个小分区,即使它们的容量总和大于要装入的程序,但由于这些分区不相邻,也无法将程序装入内存。
解决方法:将内存中的所有作业 进行移动,使它们全部邻接,这样把原来分散的小分区拼接成大分区,这种方法称为“拼接”或 “紧凑”。
a.动态重定位的实现
在动态运行时装入的方式,将相对地址转换为物理地址的工作在程序指令真正要执行时才进行。地址转换需要重定位寄存器的支持。程序执行时访问的内存地址是<mark>相对地址</mark>与<mark>重定位寄存器中的地址</mark>相加而成。
二、对换不覆盖技术
1.覆盖技术
一个作业的若干程序段或数据段的某些部分共享内存空间
2.对换技术
把内存中暂时不能运行的进程或者暂时丌用的程序和数据,调到外存上,以便腾出足够的内存空间,再把已具备运行条件的进程和进程所需要的程序和数据调入内存。
对换的分类:
! 整体对换(或进程对换):以整个进程为单位
! 页面对换或分段对换:以页或段为单位
连续分配方式会形成“碎片”,虽然可以通过“紧凑”解决 ,但开销大。如果允许将一个进程直接分散地装入许多不相邻的分区中,则无需“紧凑”,由此产生离散分配方式。
分类:
! 分页存储管理方式:离散分配的基本单位是页
! 分段存储管理方式:离散分配的基本单位是段
三、基本分页存储管理方式
<mark>1、页面不页表</mark>
2、地址变换机构
1、页面
分页式存储管理的原理: 将一个进程的逻辑地址空间分成若干个大小相等的片称为<mark>页面或页</mark>,并为各页加以编号,从 0开始。同时把内存空间分成不页面相同大小的若干个存储块,称为<mark>块或页框</mark>。
在为进程分配内存时,以块为单位将进程的若干个页分别装入到多个可以不相邻的物理块中 。进程的最后一页经常装不满一块而形成“页内碎片”。
2、地址变换
若给定一个逻辑地址空间中的地址为A,页面大小为L,则
页号P = INT[A/L]
页内地址d = [A] MOD L
例如:系统页面大小为1KB,设A=2170D,则
P=2,d=122
<mark>数值的表示: 二进制,十进制,八进制,十六进制,分别在其后加上B,D,Q,H. (Binary,Decimal ,Q(Octal),Hexadecimal)</mark>
3、基本分页式存储管理的实现
进程的每一页离散地存储在内存的任一存储块中,为方便查找 ,系统为每一进程建立一张页面映像表,简称页表。
页表实现了从<mark>页号</mark>到<mark>物理块号</mark>的地址映射。
为了能将用户地址空间的逻辑地址变换为内存空间的物理地址 ,在系统中必须设置地址变换机构。
<mark>地址变换机构实现从逻辑地址到物理地址的转换</mark>,由于页内地址与物理地址是一 一对应的,因此,地址变换机构的<mark>任务</mark>是借助于页表,将逻辑地址中的页号转换为内存中的物理块号。
4、具有快表的地址变换机构
由于页表是存放在内存中的,CPU在每存取一个数据时,需要两次访问内存:
! 第一次:访问页表,找到指定页的物理块号,将块号与页内偏移量拼接形成物理地址。
! 第二次:从第一次所得地址中获得所需数据,或向此地址中写入数据。
存储器利用率提高,处理器处理速度降低。
解决方法:在地址变换机构中,增设一个具有<mark>并行查寻</mark>能力的特殊<mark>高速缓冲寄存器</mark>,称为“联想存储器”或“快表”。
四、基本分段式存储管理的实现
1、段表
为使程序正常运行,须在系统中为每个进程建立一张段映射表 ,简称“段表”。每个段在表中占有一个表项。
段表结构:段号;段在内存中的起始地址(基址);段长。
段表可以存放在寄存器中,但更多的是存放在内存中。
段表用于实现从逻辑段到物理内存区的映射。
2、地址变换机构
在系统中设置段表寄存器,用于存放段表始址和段表长度,以实现从进程的逻辑地址到物理地址的变换。
当段表存放在内存中时,每访问一个数据,都需访问两次内存 ,降低了计算机的速率。
<mark>解决方法</mark>:设置联想寄存器,用于保存最近常用的段表项。
3、分页和分段的主要区别
相似点: 采用离散分配方式,通过地址映射机构实现地址变换
不同点:
¥ 页是信息的物理单位,分页是为了满足系统的需要;段是信息的逻辑单位,含有意义相对完整的信息,是为了满足用户的需要。
¥ 页的大小固定且由系统确定,由系统把逻辑地址分为页号和页内地址,由机器硬件实现;段的长度不固定,取决于用户程序,编译程序对源程序编译时根据信息的性质划分。
¥ 分页的作业地址空间是一维的;分段的作业地址空间是二维的。
五、段页式存储管理
分段和分页存储管理方式各有优缺点。把两者结合成一种新的存储管理方式–段页式存储管理方式,具有两者的长处。
- 基本原理
先将用户程序分成若干段,再把每个段分成若干页,并为每个段赋予一个段名。 - 基本段页式存储管理:把作业的所有段装入内存方可运行。
- 请求段页式存储管理:没必要把整个作业装入内存,可把作业 的几段或几页装入内存即可运行。
- 段页式系统地址结构:段号;段内页号;页内地址。
在段页式系统中,为了获得一条指令或数据,需访问三次内存:
第一次:访问内存中的段表,取得页表始址
第二次:访问内存中的页表,取得该页所在的物理块号,将块号 与页内地址形成物理地址
第三次:根据第二次所得的地址,取出指令或数据
缺点:访存次数增加两倍
解决方法:增设高速缓冲寄存器
六、页面置换算法
(1) 最佳置换算法 (2) 先进先出置换算法 (3) 最近最久未使用(LRU)算法
(1)最佳置换算法
最佳置换算法是一种理想化的算法,具有最好的性能,但难于实现。先进先出置换算法最直观,但可能性能最差,故应用极少。
- 最佳置换算法 其所选择的被淘汰页面,将是以后永不再用的,或许是在最长( 未来)时间内不再被访问的页面。
- 优点:保证获得最低的缺页率
- 缺点:无法预知一个进程在内存的若干个页面,哪个在未来最长时间内不再被访问。
- 算法无法实现,但可评价其他算法。
(2)先进先出置换算法
算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。
算法实现简单,只需把一个进程已调入内存的页面,按先后次序链接成一个队列,并设置一个指针(替换指针),使它总是指向最老的页面。
算法与进程的实际运行规律不相适应,因为进程中的某些页面 常被访问,但先进先出置换算法不能保证这些页面不被淘汰。
Belady现象
如果对—个进程未分配它所要求的全部页面,有时就会出现分配的页面数增多但缺页率反而提高的异常现象。发生在FIFO(先进先出)置换算法。
(3)最近最久未使用(LRU)置换算法
算法根据页面调入内存后的使用情况进行决策。由于无法预测各页面将来的使用情况,只能利用“最近的过去”作为“最近的将 来”的近似,因此,LRU置换算法是选择最近最久未使用的页面予以淘汰。
该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间t,当需淘汰一个页面时,选择现有页面 中其t值最大的,即最近最久未使用的页面予以淘汰。