我们上课讲的并不全,所以这里的内容也不全,而且大部分是书上的内容,可以先看看目录。
目录
1.单道批处理系统(Simple Batch Processing System)的处理过程
1.2.3 多道批处理系统(Multiprogrammed Batch Processing System)
1.2.4 分时系统(Time Sharing System)
1.先来先服务调度算法(first-come first-served,FCFS)
2.短作业优先调度算法(short job first,SJF)
3.高相应比优先调度算法(Highest Response Ratio Next,HRRN)
3.最近最久未使用页面置换算法(Least Recently Used,LRU)
第一章
1.1.1 操作系统的目标
1.方便性
一个未配置OS的计算机系统是极难使用的。用户如果想直接在计算机硬件(裸机)上运行自己所编写的程序,就必须用机器语言书写程序。但如果在计算机硬件上配置了 OS,系统便可以使用编译(把高级语言变成计算机能识别的二进制语言)命令将用户采用高级语言书写的程序翻译成机器代码。
2.有效性
OS 可以通过合理地组织计算机的工作流程,加速程序的运行,缩短程序的运行周期,从而提高了系统的吞吐量。
3.可扩充性
4.开放性
1.1.2 操作系统作用
1.OS作为用户与计算机硬件系统之间的接口
用户在OS 帮助下能够方便、快捷、可靠地操纵计算机硬件和运行自己的程序。图1-1是OS 为接口的示意图。由图可看出,用户可通过三种方式使用计算机,即通过命令方式、系统调用方式和图标一窗口方式来实现与操作系统的通信,并取得它的服务。
2.OS作为计算机系统资源的管理者
在一个计算机系统中,通常都含有多种硬件和软件资源。归纳起来可将这些资源分为四类:处理机、存储器、I/O 设备以及文件(数据和程序)。相应地,OS 的主要功能也正是对这四类资源进行有效的管理。
3.OS实现了对计算机资源的抽象
为了方便用户使用 I/O 设备,人们在裸机上覆盖上一层 I/O 设备管理软件,如图1-2所示,由它来实现对I/O设备操作的细节。在裸机上铺设的 I/O 软件隐藏了 I/O 设备的具体细节,并向上将 I/O 设备抽象为一组数据结构以及组 I/O 操作命令。I/O 设备管理软件实现了对计算机硬件操作的第一个层次的抽象。
同理,为了方便用户使用文件系统,又可在第一层软件(I/O 管理软件)上再覆盖一层用于文件管理的软件,由它来实现对文件操作的细节,并向上层提供一组实现对文件进行存取操作的数据结构及命令。这样,用户可利用该软件提供的数据结构及命令对文件进行存取。
由此可知,OS是铺设在计算机硬件上的多层软件的集合,它们不仅增强了系统的功能还隐藏了对硬件操作的具体细节,实现了对计算机硬件操作的多个层次的抽象模型。
1.2.2 单道批处理系统
1.单道批处理系统(Simple Batch Processing System)的处理过程
为实现对作业的连续处理,需要先把一批作业以脱机方式输入到磁带上,并在系统中配上监督程序(Monitor),在它的控制下,使这批作业能一个接一个地连续处理。虽然系统对作业的处理是成批进行的,但在内存中始终只保持一道作业,故称为单道批处理系统。(脱机I/O技术:该技术是事先将装有用户程序和数据的纸带装入纸带输入机,在一台外围机的控制下,把纸带(卡片)上的数据(程序)输入到磁带上。当CPU 需要这些程序和数据时,再从磁带上高速地调入内存。)
2.单道批处理系统的缺点
单道批处理系统最主要的缺点是,系统中的资源得不到充分的利用。这是因为在内存中仅有一道程序,每逢该程序在运行中发出I/O请求后,CPU 便处于等待状态,必须在其IO完成后才继续运行。又IO设备的低速性,更使CPU 的利用率显著降低。
1.2.3 多道批处理系统(Multiprogrammed Batch Processing System)
1.多道程序设计的基本概念
在该系统中,用户所提交的作业先存放在外存上设计技术,由此形成了多道批处理系统并排成一个队列,称为“后备队列”。然由作业调度程序按一定的算法,从后备队列中选择若干个作业调入内存,使它们共享 CPU 和系统中的各种资源。由于同时在内存中装有若用其因I/O操作而暂停执行时的 CPU 空档时间干道程序,这样便可以在运行程序A时,再调度另一道程序B运行,同样可以利用程序B在IO操作时的 CPU 空档时间,再调度程便可以保持 CPU 处于忙碌状态。
1.2.4 分时系统(Time Sharing System)
这里书上讲的比较多,我给出搜索结果和自己的理解,如有错误望指正
1.分时操作系统的定义
分时操作系统通过将计算机的处理时间划分为若于时间片(time sice),并轮流分给不的用户或服务,实现了多个用户之间的交互和共享。每个用产通过终端(temninal)或者远程登录方式连接到计算机系统,并可以在同一时间内并发地运行多个程序。简单来说,就是多个人使用一台计算机。
2.分时操作系统的特征
1.时间片轮转:将处理时间划分为固定长度的时间片,并按照一定的调度算法(如轮转调度算法依次分配给不同用户或任务,实现并发执行。
2.多用户支持,系统能够同时支持多个用户登录,并提供交与式的操作界面,使用户能够并发地使用计算机资源。
3.资源共享:不同用户之间可以共享计算机的硬件设备、文件系统和其他系统资源,提高资源利用率。
1.2.5 实时系统(RealTime System)
这里书上讲的比较多,我给出搜索结果和自己的理解,如有错误望指正
1.实时操作系统的定义
硬实时操作系统要求任务在指定的时间内必须完成,并对任务的响应时间有极严格的要求。这类系统主要用于航空航天、工业自动化和医疗设备等对实时性要求很高的领域,例如飞行控制系统、核电站控制系统、导弹制导系统。
软实时操作系统则相对灵活,虽然也要求任务在某个时间范围内完成,但对响应时间的要求相对宽松。软实时系统广泛应用于嵌入式系统、网络通信和多媒体应用等领域,例如智能手机、车载导航系统、飞机或火车订票系统、视频音频播放系统。
总的来说,实时操作系统对完成任务的时间和任务的响应有特定的要求。
2.实时操作系统的特征
1.及时调度:实时任务根据其优先级和时间约束进行调度,确保高优先级任务能够及时得到处理。
2.快速响应:实时操作系统能够快速响应外部事件和中断请求,并及时处理相应的任务。
3.时间可预测性:实时操作系统能够提供精确的时间管理和预测能力,以满足任务的时间要求。
1.3.1 并发(Concurrence)
1.并行与并发的定义
并行:是指两个或多个事件在同一时刻发生。
并发:是指两个或多个事件在同一时间间隔内发生。宏观上有多个程序在同时运行,微观上这些程序只能是分时地交替执行,如分时操作系统。(比如有五个任务给计算机处理,规定一个任务只能执行0.5s,由于CPU速度很快,在五个任务之间反复横跳执行,直观上给人的感觉是五个任务在一起执行。)
1.3.2 共享(Sharing)
1.共享的定义
OS 环境下的资源共享或称为资源复用,是指系统中的资源可供内存中多个并发执行的进程共同使用。
2.互斥共享方式
在多个进程或线程共享资源时,规定在一段时间内只允许一个进程访问该资源。互斥访问主要解决的是资源竞争和数据一致性的问题,保证共享资源在任意时刻只被一个进程或线程访问,避免了数据的混乱和冲突。
3.同时访问方式
允许在一段时间内由多个进程“同时”对它们进行访问。这里所谓的“同时”,在单处理机环境下是宏观意义上的,而在微观上,这些进程对该资源的访问是交替进行的。
1.3.3 虚拟(Virtual)
在OS中,把通过某种技术将一个物理实体变为若干个逻辑上的对应物的功能称为“虚拟”。前者是实的,即实际存在的,而后者是虚的,是用户感觉上的东西。相应地,把用于实现虚拟的技术称为虚拟技术。在OS 中也是利用时分复用和空分复用技术来实现“虚拟”的。
1.3.4 异步(Asynchronism)
在操作系统中,异步通常指的是一种非阻塞式的并行执行模型,在该模型中,应用程序可以在等待某个操作完成的同时继续执行其他任务,而不必阻塞等待。进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。
进程的执行通常是“走走停停”,而不是“一气呵成”,也就是进程执行直接存在直接制约关系与间接制约关系,实际上进程执行所需的资源是“陆陆续续”的到达,进程所需的资源影响了进程的执行。
第二章
2.1.1 前趋图的定义
进程(或程序)之间的前趋关系可用“→”来表示,如果进程 Pi和Pj存在着前趋关系可表示为Pi→Pj,表示在Pj开始执行之前 Pi必须完成。此时称 Pi是Pj的直接前趋,而称Pj是Pi的直接后继。在前趋图中,把没有前趋的结点称为初始结点(InitialNode),把没有后继的结点称为终止结点(Final Node)。
如图表示S3执行之前S1、S2都要执行完毕,S1、S2为S3的直接前趋,S3为S1、S2的直接后继。S1、S2为初始结点,图中没有终止结点。
2.2.1 进程的定义
为了使参与并发执行的每个程序(含数据)都能独立地运行,在操作系统中必须配置一个专门的数据结构,称为进程控制块(Process Control Block),描述进程的基本情况和活动过程,进而控制和管理进程。这样,由程序段、相关的数据段我们把进程实体就简称为和PCB三部分便构成了进程实体(又称进程映像)。一般情况下,我们把进程实体就简称为进程,例如,所谓创建进程,实质上是创建进程实体中的 PCB;而撤消进程,实质上是撤消进程的PCB。
2.2.2 进程三种状态的转换
2.2.3 进程控制块PCB的作用
PCB的作用是使一个在多道程序环境下不能独立运行的程序(含数据)成为一个能独立运行的基本单位,一个能与其他进程并发执行的进程。下面对PCB 的具体作用作进一步的阐述:
(1)作为独立运行基本单位的标志。
(2)能实现间断性运行方式。
(3)提供进程管理所需要的信息。
(4)提供进程调度所需要的信息。
(5)实现与其它进程的同步与通信。
2.3.2 进程的创建
1.引起创建进程的事件
(1)用户登录。
(2)作业调度。
(3)提供服务。
(4)应用请求。
2.进程的创建
(1)申请空白PCB。
(2)为新进程分配其运行所需的资源。
(3)初始化进程控制块(PCB)。
(4)如果进程就绪队列能够接纳新进程,便将新进程插入就绪队列。
2.3.3 进程的终止
1.引起进程终止的事件
(1)正常结束。(2)异常结束。(3)外界干预。
2.进程终止的过程
如果系统中发生了要求终止进程的某事件,OS便调用进程终止原语,按下述过程去终如果系统中发生了要求终止进程的某止指定的进程:
(1)根据被终止进程的标识符,从PB集合中检索出该进程的PCB,从中读出该进程的状态;
(2)若被终止进程正处于执行状态应立即终止该进程的执行,并置调度标志为真用于指示该进程被终止后应重新进行调度
(3)若该进程还有子孙进程,还应将其所有子孙进程也都予以终止,以防它们成为不可控的进程;
(4)将被终止进程所拥有的全部资源或者归还给其父进程,或者归还给系统(5)将被终止进程(PCB)从所在队列(或链表)中移出,等待其它程序来搜集信息。
2.3.4 进程的阻塞与唤醒
1.引起进程阻塞和唤醒的事件
(1)向系统请求共享资源失败。
(2)等待某种操作的完成。
(3)新数据尚未到达。
(4)等待新任务的到达。
2.4.1 进程同步
在多道程序环境下,对于同处于一个系统中的多个进程,由于它们共享系统中的资源,或为完成某一任务而相互合作,它们之间可能存在着以下两种形式的制约关系:
1. 间接相互制约关系
间接制约关系最典型的是临界资源,临界资源是指一种只能同时由一个进程或线程访问的共享资源。这样的资源通常是关键的系统资源,如共享内存区域、硬件设备、临界区等。书中常见的临界资源:互斥锁 (mutex) 和信号量 (semaphore)。
2.直接相互制约关系
直接制约最典型的是前趋图,S2想要执行,必须S1先完成,S1、S2就是直接制约关系。
2.4.3 信号量机制
1. 记录型信号量
在信号量机制中,除了需要一个用于代表资源数目的整型变量 value外,还应增加一个进程链表指针 list,用于链接上述的所有等待进程。记录型信号量是由于它采用了记录型的数据结构而得名的。它所包含的上述两个数据项可描述如下:
typedef struct {
int value;
struct process_control_block *list;
}semaphore;
wait(semaphore *S) {
S->value--;
if(S->value < 0){
block(S->list);
}
}
signal(semaphore *S) {
S->value++;
if (S->value <= 0){
wakeup(S->list);
}
}
S->value(S.value) > 0 表示有资源
S->value(S.value) = 0 表示资源用尽
S->value(S.value) < 0 表示有进程在阻塞队列里等待
2.4.4 信号量的应用
1.利用信号量实现进程互斥
进程访问临界资源之前,先要对mutex执行wait操作,检测该资源是否正在被其他进程访问。当进程访问完毕临界资源后,会对mutex执行signal操作,释放该临界资源,以便下一个进程访问。
利用信号量实现两个进程互斥的描述如下:
设mutex为互斥信号量,其初值为1,取值范围为(-1,0,1)。当mutex=1时,表示两个进程皆未进入需要互斥的临界区;当mutex=0时,表示有一个进程进入临界区运行另外一个必须等待,挂入阻塞队列;当mutex=-1时,表示有一个进程正在临界区运行,另外一个进程因等待而阻塞在信号量队列中,需要被当前已在临界区运行的进程退出时唤醒。
其实就是对应实现了间接相互制约关系。
2.利用信号量实现前趋关系
2.5.1 生产者-消费者问题
1.利用记录型信号量解决生产者-消费者问题
int in = 0;
int out = 0;
item buffer[n];
semaphore mutex = 1;
semaphore empty = n;
semaphore full = 0;
void proceducer() {
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
proceducer();
consumer();
coend
}
第三章
3.2.3 作业/进程调度算法
一般来说,题目会给出各作业/进程的到达时间和服务时间,对于不同算法下的作业/进程的开始时间会有差异,从而结束时间也有差异,但周转时间的求法相同,周转时间 = 结束时间 - 到达时间,从直观上理解,一个作业的周转时间 = 作业结束的时间 - 他到达的时间,好比在一个只能容纳一个人吃面的面馆,从到达面馆,排队,吃面到吃完面的这个过程,用我吃完面的时刻减去我刚开始排队的时刻,就是周转时间。所以说周转时间还有另一个等式,周转时间 = 等待时间+服务时间,等待时间 = 上一个作业的结束时间 - 所求作业的到达时间,那么再拿面馆的例子来说,我的上一个人吃完面的时刻 - 我刚开始排队的时刻 = 我排队待定的时间(也就是我从开始排队到吃上面这段时间,就是我的等待时间),我们经常所说的排队排了多久,实际上就是我们在用此刻的时间减去我们刚开始排队的时间,言归正传,理解了等待时间之后,对于周转时间 = 结束时间 - 到达时间,也就等于我排队的时间 + 我吃面的时间(等待时间 + 服务时间)。带权周转 = 周转时间 / 服务时间。
1.先来先服务调度算法(first-come first-served,FCFS)
按到达时间先后顺序执行,先来的先服务
按到达时间排序,Job1先到,Job2再到,Job3后到,Job4最后到,先来先服务,执行顺序就是Job1—>Job2—>Job3—>Job4。
2.短作业优先调度算法(short job first,SJF)
短指的是服务时间短,服务时间短的作业先执行,但前提是得先到达。
3.高相应比优先调度算法(Highest Response Ratio Next,HRRN)
响应比(R)大的优先执行。上文解释过等待时间 = 上一个作业的结束时间 - 所求作业的到达时间。
4.时间片轮转调度算法(RR)
设定一个时间片,每个作业都执行规定的时间片大小,时间片的大小设定很关键,如果时间片过大,算法就会变成类似FCFS,如果时间片过小,会执行频繁的调度或者等待。
3.5.3 死锁的定义、必要条件和处理方法
1.死锁的定义
在一组进程发生死锁的情况下,这组死锁进程中的每一个进程,都在等待另一个死锁进程所占有的资源。或者说每个进程所等待的事件是该组中其它进程释放所占有的资源。但由于所有这些进程已都无法运行,因此它们谁也不能释放资源,致使没有任何一个进程可被唤醒。这样这组进程只能无限期地等待下去。
由此可以给死锁做出如下的定义:如果一组进程中的每一个进程都在等待仅由该组进程中的其它进程才能引发的事件,那么该组进程是死锁的(Deadlock)。
从上述解释和定义可以看出,死锁指的是一组进程发生死锁,而不是整个系统发生死锁,一组进程发生死锁也是源于这组中的一个或多个进程没有释放其他进程执行所需要的资源,所以其他进程只能无限等待。
2.产生死锁的必要条件
(1)互斥条件。
(2)请求和保持条件。
(3)不可抢占条件。
(4)循环等待条件。
3.处理死锁的方法
(1)预防死锁。
(2)避免死锁。
(3)检测死锁。
(4)解除死锁。
3.7.2 利用银行家算法避免死锁
首先画出完整的资源分配表
对于是否同意分配的问题,要验证三步:
(1)
(2)
4.3.4 基于顺序搜索的动态分区分配算法
1.首次适应算法(first fit,FF)
按首地址从小到大分配,每次都从第一个分区开始分配。
2.循环首次适应算法(next fit,NF)
按首地址从小到大分配,从上次分配的分区紧接着的下一个分区开始分配。
3.最佳适应算法(best fit,BF)
按分区空闲容量大小把分区从小到大排序,每次都从第一个分区开始分配。
4.最差适应算法(worst fit,WF)
按分区空闲容量大小把分区从大到小排序,每次都从第一个分区开始分配。
4.5.1 分页存储管理的基本方法
根据页面0、1、2、3、4、5、6分别对应块号8、7、4、10、9、3可画出页表如下:
有32个页面(2^5=32),每页1k(2^10=1k),可得到如下地址结构:
A.
B.
CD计算同理。
需要注意的是,如果题目直接给出的逻辑地址是十进制的,比如4000,那么直接用4000/1024=3...928,直接得出在第3页,余数就是偏移量,随后利用公式:
物理地址 = 块号*块长 + 偏移量(在页表中找到页号对应的块号;页长=块长)
4.6.2 分段系统的基本原理
做题思路基本与分页相同,得到段号之后,用偏移量与段长相比,看是否越界,最后利用公式:
物理地址 = 基地址 + 偏移量
第五章
5.3.1 页面置换算法
1.先进先出页面置换算法(FIFO)
先进来的先被淘汰
2.最佳页面置换算法(Optiimal,OPT)
简单来说,淘汰以后用不访问(使用)的或者最后访问(使用)的
3.最近最久未使用页面置换算法(Least Recently Used,LRU)
简单来说,淘汰以前最久没访问(使用)的
十一章
11.7 磁盘调度算法
某磁盘有8192个磁道,编号为0~8191,在完成了磁道1250处的请求后,当前正在磁道3500处为一个请求服务。若此时请求队列的先后顺序为1000,4000,3300,5600,1300,6000,1200,2500。请采用FCFS、SSTF、SCAN、CSCAN算法请写出磁头移动的顺序,并计算平均寻道长度。
1.FCFS
先来先服务
2.SSTF
每次都访问距离当前磁道最近的磁道。
3.SCAN
4.CSCAN
参考书目
汤小丹,梁红兵,哲凤屏,汤子瀛编著. 计算机操作系统(第四版). 西安电子科技大学出版社. 2014