某计算机系统,有256KB的主存(不包含操作系统),一个磁盘,一个终端和一台打印机。同时提交的三个作业分别命名为JOB1、JOB2、JOB3。各作业运行时间分别为5min、15min和10min。它们对资源的使用情况如下表所示
解答
前驱图:用于描述程序执行先后顺序的有向无循环图
示例
错误的图(不允许有循环)
程序的执行
顺序
并发
PCB:进程控制块,为了每个程序能独立地运行,OS为其配置了一个专门的数据结构,称为进程控制块(PCB)用于描述进程的当前情况以及管理进程运行的全部信息。系统用PCB描述进程的基本情况和活动过程,进而控制和管理进程。
进程
定义:
特征:动态性、并发性、独立性、异步性
与程序的对比
5个基本状态:就绪、执行、阻塞、创建、终止
状态转换图(背)
内核:加在硬件上的第一层软件,通过执行各种原语操作来实现各种控制和管理功能,具有创建、撤消、进程通信、资源管理的功能。
原语
临界资源:只能被互斥访问的资源。
临界区:每个进程中访问临界资源的那段代码指令。
临界区管理的准则:空闲让进、忙则等待、有限等待、让权等待(不一定)
信号量:一种解决进程同步和互斥的工具,由操作系统提供的服务,只是可供我们调用。
P、V操作:P—申请 wait(S)、V—释放 signal(S) S表示的资源数目
信号量的应用
P1(){S1; signal(a); signal(b); }
P2(){wait(a); S2; signal(c); signal(d); }
P3(){wait(b); S3; signal(e);}
P4(){wait(c); S4; signal(f); }
P5(){wait(d); S5; signal(g); }
P6(){wait(e); wait(f); wait(g); S6; }
main(){
semaphore a,b,c,d,e,f,g;
a.value=b.value=c.value=d.value=e.value=0;
f.value=g.value=0;
cobegin
P1();P2();P3();P4();P5();P6();
coend;
}
semaphore mutex= 1;
process 1: {
while(1){
wait(mutex);
临界区;
signal(mutex);
剩余区;
}
}
process 2: {
while(1){
wait(mutex);
临界区;
signal(mutex);
剩余区;
}
}
进程同步(生产者与消费者问题)
int in = 0, out = 0;
item buffer[n];
semaphore mutex = 1, empty = n, full = 0;
void producer() {
do {
producer an item nextp;
...
wait(empty);
wait(mutex);
buffer[in] = nextp;
in := (in + 1) % n;
signal(mutex);
signal(full);
} while(TRUE);
}
void consumer() {
do {
wait(full);
wait(mutex);
nextc = buffer[out];
out = (out + 1) % n;
signal(mutex);
signal(empty);
consumer the item in nextc;
...
} while (TRUE);
}
void main() {
cobegin
producer();
consumer();
coend
}
semaphore mutex=1, empty=n;
item buffer[n];
int in=0, out=0;
void producer(){
do{
produce an item in nextp;
Swait(empty, mutex);
buffer[in] = nextp;
in = (in+1)%n;
Ssignal(mutex, full);
}while(true);
}
void consumer(){
do {
Swait(full, mutex);
nextc = buffer[out];
out := (out+1) % n;
Ssignal(mutex, empty);
consumer the item in nextc;
}while(true);
}
两个wait操作的次序能不能互换?两个signal操作的次序能不能互换?为什么?
wait不能换,否则会产生死锁,signal可以交换。
解题关键:
**线程切换什么时候会引起进程的切换?**属于不同进程的线程之间的切换会引起进程的切换。
用户态与系统态
调度的层次:高中低
调度的目标
处理机系统的共同目标:资源利用率、公平性、平衡性、策略强制执行
批处理系统的目标:平均周转时间短、系统吞吐量高、处理机利用率高
周转时间:从提交开始到作业完成的时间。
带权周转时间:周转时间/运行时间
分时系统的目标:响应时间快、均衡性
实时系统的目标:截止时间的保证、可预测性
处理机调度的基本概念:对处理机资源进行分配。(种类???)
JCB:作业控制块
调度的各种算法原理,优缺点
选择调度算法
准则???
周转时间:作业从进入系统到完成的时间总量。
带权周转时间:作业的周转时间与系统为它提供服务时间之比。
响应时间:从发出请求开始到最后收到响应所需要的时间。
多级反馈队列调度算法
最低松弛度优先(LLF)算法:根据任务的紧急/松弛程度,主要用于可抢占式调度中,松弛度越低优先级越高越先执行。
优先级倒置
概念:高优先级进程(或线程)被低优先级进程(或线程)延迟或阻塞。
解决方案:
提权,即当高优先级进程被阻塞时,由低优先级进程继承其优先级,保持到低优先级进程退出临界区。
进入临界区的进程所占用的处理机不允许被抢。
关于死锁
概念:
产生死锁的原因:
需同时满足4个必要条件:
处理方法:预防死锁、避免死锁、检测死锁、解除死锁(防范程度依次减弱、资源利用率依次提高)
死锁的检测与解除
银行家算法避免死锁——P 121 页 例题
Avaliable:可用资源个数,Avaliable[j]=k表示现有j类资源k个
Max:最大需求,Max[i,j]=K,表示进程i需要j类资源的最大数目为k
Allocation:已分配,Allocation[i,j]=k,表示进程i已分得j类资源数目为k
Need:还需求,Need[i,j]=k,表示进程i还需要j类资源k个
步骤
安全状态:系统能按某种进程推进顺序(P1,P2,…,Pn)为每个进程Pi分配其所需资源,直至满足每个进程对资源的最大需求,使每个进程都可顺利地完成。
不是所有的不安全状态都导致死锁,但系统进入不安全状态后,有可能进入死锁状态。
只要系统出于安全状态,便可避免进入死锁。
若系统无法找到这样一个安全序列,则称系统处于不安全状态。(计算与判断)
1.调度算法
解答
2.银行家算法
安全性算法
示例
先假定满足分配
安全性检测
存储器的多层结构
存储器管理的基本任务:
程序处理步骤
程序装入方式
程序的链接
动态分配算法
动态重定位
对换
分页存储管理方式:
连续分配方式的缺点:形成许多碎片,紧凑开销大
将用户的地址空间分为若干个固定大小的区域,称为“页”或“页面”,大小为2的幂,典型大小为1KB。属于离散分配。
地址结构
A=2170B 则页数为2 页内地址为122
页表结构
实现从页号到物理块号的地址映射
页号为作业地址空间的页序号,块号为内存空间的页面序号
分页系统的地址变换机构(逻辑地址->物理地址)
*若含有快表又如何?? P151 页
增加了一个具有并行查找能力的高速缓存寄存器,内放置当前访问的页表项,上述第二步改为页号与寄存器里的页号比较,快速查找。
多级页表
类似目录,二级页表访问时间增加了两倍。
分段存储管理方式
为了方便用户和程序员,方便编程,信息共享,信息保护,动态增长链接等
将用户的地址空间分为若干个大小不同的段,每段可定义一组相对完整的信息如:主程序段,子程序段,数据段。属于离散分配。
地址结构
表结构
分段系统的地址变换过程
1.分页存储
2.分段存储
4*2048+100
3*2048+569
2048+1100
480+14
越界
越界
虚拟存储器
请求分页中地址变换过程
请求分段地址变换过程
缺页率
概念:进程总的页面访问次数A = 访问页面成功次数S + 访问页面失败次数F (缺页率=F/A)
影响因素:页面大小、进程所分配物理块的数目、页面置换算法、程序固有特性
页面置换算法 —— P174 页
最佳置换算法 ( Optimal):淘汰以后永不使用的、最长时间内不再被访问的页面。但由于无法预知,故还无法实现。可获得最低的缺页率
f=9/20
先进先出页面置换算法(FIFO):淘汰最先进入内存的页面,可设置替换指针始终指向最老的页面,但算法与进程实际运行的规律不适应。
f=15/20
最近最久未使用置换算法(LRU):淘汰最近最久未使用的页面,“向前看”,要求硬件支持。
f=12/20
最少使用置换算法(LFU ):淘汰最近时期使用最少的页面,在页表增加访问计数。
简单的Clock置换算法 (Clock):近似于LRU算法,为每页设置访问位,来表示该页是否已经使用过,将未使用的页面(0)置换出去。
改进的Clock置换算法(Clock):增加因素“置换代价”,同时评估访问位A和修改位M,最近既未被访问(0)、又未被修改(0)的为最佳淘汰页。01、10、11
页面缓冲算法(PBA):设置了空闲页面链表和修改页面链表,可显著降低页面换进、换出的频率。
影响页面换进换出效率的因素:页面置换算法、写回磁盘的频率、读入内存的频率
要求:对给定的问题,按各种页面置换算法,写页面调入过程,计算和分析缺页率,并对多种算法的性能作比较分析。
抖动:每个进程的大部分时间都用于页面的换进和换出,而几乎不能再去做任何有效的工作,从而导致发生处理机的利用率急剧下降并趋于0的情况。
产生原因:页面淘汰算法不合理,分配给进程的物理页面数太少
内存分配管理方式
状态位:是否调入内存;访问位:记录访问次数或多久没被访问;修改位:记录是否被修改过
4*1024+(1800-1024)
缺页中断,越界错误
(1)4 8/18 6 10/18
(2)6,7,7
3;FIFO;f=16/20
3;LRU;f=16/20
3;OPT;f=11/20
块设备:数据的存取和传输都是以数据块为单位的设备。
字符设备:数据的存取和传输都是以字符为单位的设备。
与设备的无关性:隐藏物理设备的细节,仅靠使用抽象的I/O命令与逻辑设备名来使用设备。
对I/O设备的控制方式
中断过程
设备独立性
设备控制表(DCT)
虚拟设备
通过虚拟技术将一台独占设备虚拟成多台逻辑设备,供多个用户进程同时使用, 通常把这种经过虚拟的设备称为虚拟设备。也是一种共享设备
假脱机Spooling系统
磁盘移臂调度采用的是先来先服务(FCFS):根据进程请求访问磁盘的先后次序进行调度。
优点:公平、简单,且每个进程的请求都能依次地得到处理,不会出现某一进程的请求 长期得不到满足的情况。
缺点:由于未对寻道进行优化,致使平均寻道时间可能较长。
磁盘调度算法
最短寻道时间优先(SSTF):要求访问的磁道与当前磁头所在磁道距离最近,每次寻道时间最短,但不保证平均寻道时间最短。可能导致某个进程发生饥饿现象(进程饥饿,指当等待时间给进程推进和响应带来明显影响称为进程饥饿)
电梯调度算法(SCAN):选择与当前磁头移动方向一致且距离最近的进程。有可能出现饥饿现象。
循环扫描算法(CSCAN):可降低饥饿现象,规定磁头单向移动,循环执行。即结束后立即回到起点。
NStepSCAN:将磁盘请求队列分成若干个长度为 N 的子队列,磁盘调度将按 FCFS 算法依次处理这些子队列。 而每个队列的处理是按 SCAN 算法,一个处理完毕再处理下一个队列。
FSCAN:是 NStepSCAN 算法的简化,只分为两个子队列。一个是由当前所有请求磁盘 I/O 的进程形成的 队列,由磁盘调度按 SCAN 算法进行处理。另一个是在扫描期间,将新出现的所有请求磁盘 I/O 的进程 放入等待处理的请求队列
1.平均寻道长度计算
45 + 3 + 19 + 21 + 72 + 70 + 10 + 112 + 146 =498
498 / 9 = 55.3
文件、记录、数据项的概念和层次关系
文件逻辑结构
概念
从用户观点出发所观察到的文件组织形式,即文件是由一系列的逻辑记录组成的,是用户可以直接 处理的数据及其结构,它独立于文件的物理特性,又称为文件组织
分类:
按照结构:有结构文件(由多个记录构成,记录式文件)、无结构文件(由字符流构成,流式文件)
按文件的内容/数据的组织方式:顺序文件、索引文件、索引顺序文件
顺序文件:由一系列记录按某种顺序排列(关键字或时间)所形成的文件。
索引文件:为可变长记录文件建立一张索引表,为每个记录设置一个表项。
索引顺序文件:为一组记录中的第一个记录建立一个索引表项
外存组织方式
连续组织方式
原理:为每个文件分配连续的磁盘空间。(基本不可能)
优点:
缺点:
要求为一个文件分配连续的存储空间,从而产生大量碎片;
必须事先知道文件的长度;
不能灵活地删除和插入记录;
不便于动态增长的文件。
链接组织方式
原理:为文件分配多个不连续的盘块,再通过每个盘块上的链接指针,将同属于一个文件的多个离散的 盘块链接成一个链表, 由此所形成的物理文件称为链接文件。
优点:
消除了磁盘的外部碎片,提高了外存的利用率。
对插入、删除和修改记录都非常容易。
能适应文件的动态增长,无需事先知道文件的大小。
(1)隐式链接
原理:每个目录项含有指向文件第一个和最后一个块的指针。每个盘块中含有指向下一个盘块的指针。
缺点:只能顺序访问,随机访问效率极低,同时也很不安全,中间链接断开,后面全部都找不到了
(2)显式链接
原理:构建一张链接表,把文件各物理块的指针显式存放,该表在整个磁盘中仅仅有一张,即文件分配表 FAT。链首指针对应的盘块号,作为文件地址填入 FCB 的物理地址字段中
索引组织方式
将文件和对应的盘块号集中放在一起,访问文件时将该文件所对应的盘块号一起调入内存。 在索引分配中,为每个文件分配一个索引块(表),文件盘块号都在该索引表中。建立文件时,只需要 在建立的目录项中填上指向索引表达指针即可。
(1)单级索引
优点:支持直接访问,不会产生外部碎片。当文件较大时,索引方式要优于链式分配方式。
缺点:每一个文件都需要一个索引表。对于小文件来说,索引分配利用率低,浪费空间建立索引。
(2)多级索引
优点:对大型文件查找迅速。
缺点:随着索引级数增多,所需启动磁盘的次数增加。对小文件来说浪费资源,只适合大型文件。
文件分配表(FAT)
NTFS的新特征
磁盘组织
分区称为卷 。
NTFS以簇作为磁盘空间分配和回收的基本单位,又称卷因子。
卷因子是物理磁盘扇区的整数倍,是格式化命令时候确定的
一个文件占用若干个簇,一个簇只属于一个文件。
通过卷因子(簇)与逻辑簇号(卷中所有簇按顺序的编号)的乘积定位数据的物理地址。