考点分析
- 进程管理:包括进程状态、PV操作、银行家算法和死锁问题等。
- 存储管理:主要考查虚拟存储器,特别是页式存储管理。
- 文件管理:主要考查文件的组织和结构、位示图等。
- 作业管理:包括作业状态及转换、作业调度算法、响应时间和吞吐量等。
- 设备管理:包括UNIX设备管理、虚拟设备等。
- Shell程序:主要考查UNIX的Shell程序。
一、进程
1、进程的基本概念及状态变化
操作系统中,最小单位。
进程的三态图。
(1) 运行态:占有处理器正在运行。
(2) 就绪态:具备运行条件,等待系统分配处理器以便运行。
(3) 等待态(阻塞态):不具备运行条件,正在等待某个事件的完成
就绪状态: (只需要cpu进行调度)
运行状态:就续态,得到cpu的调度的时候,就编程运行状态。
等待状态: 不具备运行条件,等待运行。(等候除cpu以外的,其他资源的调度。)也叫做阻塞状态。
就绪→运行: 条件是被调度程序选中。
运行→就绪: 条件是时间片超时,或者被更高优先级的进程剥夺。
运行→等待: 条件是不具备运行条件,等待某一事件的发生。
等待→就绪:条件是等待的事件已发生,具备了运行条件。
在状态转换过程中,不能由等待状态直接进入运行态,也不能由就绪态进入等待态。
五态图:
多出来两个状态, 1、 禁止阻塞 ;2、静止就绪。
活跃阻塞→ 禁止阻塞 、 禁止就绪→ 活跃就绪 为挂起。
禁止阻塞→活跃阻塞、活跃就绪→禁止就绪 为激活。
1、挂起:把内存中的进程转移到外存之中。
2、激活: 从外存之中,将外存转移到内存之中。
2、进程死锁
进程的管理是操作系统的核心,如果设计不当,就会出现死锁问题。如果一个进程在等待一个不可能发生的资源,则进程死锁了。而如果一个或多个进程产生死锁,就会造成系统死锁。
进程不发生死锁的条件:系统资源数 = 进程数*(每个进程所需资源数-1)+1。
每个进程的所需资源,减去1 ,然后加起来,再统一加1即可。
例子: 三个进程a、b、c、。每个都需要5个资源,如果有13个资源则不可能发生死锁。 3*(5-1)+1=13 .
死锁发生的必要条件:
互斥条件: 一个资源每次只能被一个进程使用,在操作系统中这是真实存在的情况。
保持和等待条件: 有一个进程已获得了一些资源,但因请求其他资源被阻塞时,对已经获取的资源保持不放。
不剥夺条件: 有些系统的资源是不可剥夺的,当某个进程已获得这种资源后,系统不能强行收回,只能由进程自己释放。
环路等待条件: 若干个进程形成环形链,每个都占用对方要申请的下一个资源。
解决死锁的策略:
死锁预防:进程在每次申请的时候,一次申请全部的资源。
死锁避免:避免是在每次申请的时候,先判断是否安全。 “银行家算法”
死锁检测:判断系统是否处于死锁状态。
死锁解除:剥夺,将资源强行分配给别的进程。
3、进程同步、信号量、前趋图、P(最难)
前趋图,是一个有向的无循环图,记为DAG,用于描述进程之间的前后关系。
例子 S=A+B*3/X+X*9 要求画出此运算过程的前趋图。
1、 S1=B*3 S2=X*9
2、 S3 =Z1/X
3、 S4= A+Z3
4、 S=Z4+Z2
信号量与PV操作。 比较难、每年考。
互斥控制:有如千军万马过独木桥,不能让多个进程同时访问这个共享资源。 独占性
同步控制:骑自行车的,进程A与进程B达到L2之前,不应该前进超过L1点,这样就可以使用程序。
1、 生产者一消费者问题
生产者一消费者是一个经典的问题,它不仅要解决生产者进程与消费者进程的同步关系,还要处理缓冲区的互斥关系,因此通常需要3个信号量来实现,如表4-4所示。
信号量 | 功能类别 | 功能说明 : |
empty | 管理同步 | 说明空闲的缓冲区数量,最早没有产生东西。因此,其初始值应为缓冲区的最大数 |
fuU | 管理同步 | 说明已填充的缓冲区数量,其初始值应为0 ; |
mutex | 管理互斥 | 保证同时只有一个进程在写缓冲区(因此,其初始值应为1) |
如果对缓冲区的读写无须进行互斥控制的话,那么就可以省去mutex信号量。
临界资源: 进程间需要互斥方式对其进行共享的资源。
临界区: 每个进程中访问临界资源的那段代码称为临界区。
信号量:是一种特殊的变量。 (S1 为初始值为1 empty ,S2初始值为0 fuU )
P操作:也称之为down()、wait(), 使s=s-1,若s<0,进程暂停执行,进行等待。
V操作:也称之为up()signal(),操作,S=S+1,唤醒等待队列中的一个进程。
通过判断S1和S2来判断PV操作。
如果为多缓冲区的话, 需要引入一个新的变量mute。
2、 读者与写者问题
有两组并发进程:读者与写者,共相一组数据区。
要求:允许多个读者同时执行读操作。
不允许读者、写者同时操作。
不允许多个写者同时操作。
如果读者来:
1)无读者、写者,新读者可以读。
2)有写者等,但有其他读者正在读,则新读者也可以读。
3)有写者写,新读者等。
如果写者来:
1)无读者,新写者可以写。
2)有读者,新写者等待。
3)有其他写者,新写者等待。
实现逻辑: 当有读者和写者同时进行等待的时候,应该按照读者优先还是按照写者优先的原则?
1、如果按照读者优先,那么,可能存在源源不断的读者在读,导致无法写入。 而且,可能导致无法及时写入。
2、所以,当有读者和写者同时等待的时候,应该先进行写者进行优先操作。
通过PV原语来实现。
变量, 是否有人在读变量, 是否有人在写变量。
W 是否允许写者进入。 P(W) 不允许写入,V(W)允许写入。
mutex 房间内是否有读者。
readcound 房间内的读者总人数。
4、管程
概念,指关于共享资源的数据及在其上操作的一组过程或共享数据结构及其规定的所有操作。 比如: 打印机。 (针对于局部逻辑进行封装,保证稳定性)
P-V操作的缺陷。 1)易读性差。 2)不利于修改和维护。 3)正确性难以保证。(并发量大了,无法处理)
二、存储
1、程序的装入(重定位)
静态重定位: 在虚空间执行之前,由装配程序完成地址映射工作。
动态重定位: 在程序执行过程中,在CPU访问内存之前,将要访问的程序或数据地址转为内存地址。
2、存储--实存管理。
对实实在在的存储进行的管理工作。 将一定的外存,当作内存来使用。
主存的分配方式: 单一连续分配(静态分配法)、固定分区分配(静态分配法)、可变分区分配三种分配方法。
可变分区分配方式中,当有新作业申请分配内存时所采用的存储分配算法有一下四种, 最佳适应法、首次适应法、最差适应法、循环首次适应算法。
3、存储--虚存的管理
虚拟存储技术,即在内存中保留一部分程序或数据,在外存(硬盘)中放置整个地址空间的副本。
程序运行过程中可以随机访问内存中的数据或程序,但需要的程序或数据不在内存中时,就将内存中部分内容根据情况写回外存,然后从外存调入所需程序或数据,实现作业内部的局部对换,从而允许程序的地址空间大于实际分配的存储区域。
单一连续分区、固定分区、可变分区、可重定位分区、非请求页式、请求页式、段页式。 最常见的虚存组织有分段技术、分页技术、段页式技术3种。
项目 | 段式管理 | 页式管理 | 段页式管理 |
划分方式 | 段(不定长) 每个作业一张段表 | 页(定长) 每个进程一张页表 | 先将主存分为等长页,每个作业一 |
虚地址 | (s, d),即(段号,段内偏移) | (p,d),即(页号, 页内偏移) | (s, p, d)即(段号、段内页号、 |
虚实转换 | 段表内找出起始地址,然后+段内偏 移 | 页表内找出起始地 址,然后加页内偏移 | 先在段表中找到页表的起始地址, |
主要优点 | 简化了任意增长和收缩的数据段管 | 消除了页外碎片 | 结合了段与页的优点. 便于控制存取访问 |
主要缺点 | 段外碎片降低了利用率 | 存在页内碎片 | 增加复杂度,增加硬件 存在页内碎片 |
三、作业管理
1、作业由三部分构成,即程序、数据和作业说明书,它是用户在完成一项任务过程中要求计算机系统所做工作的集合。
作业的状态有后备状态、运行状态和完成状态三种。
2、作业调度算法
先来先服务(FCFS)
短作业优先算法(SJF)
最高响应比优先算法
定时轮转算算法
优先数算法
3、作业周转时间, 作业的提交时间,到作业的完成时间。
带权作业周转时间: 周转时间 / 作业的实际运行时间。
周转时间/估计运行实际。
三、文件管理
一级目录: 只有一个级别,缺点在于文件名不能重复。
二级目录:分了主文件目录、按照用户来分开, 和子文件目录 。
树形目录:可以分很多个级别。
SPOOLING技术 假脱机技术。 (相当于一个排队系统,提出打印请求,数据就缓存下来,然后逐个进行打印)