操作系统是配置在计算机硬件上的第一层软件,是对硬件系统的首次扩充。操作系统是系统软件
五种,批处理系统、分时系统、实时系统、网络操作系统、分布式操作系统
批处理系统:批处理是指用户将一批作业提交给操作系统后就不再干预,由操作系统控制他们的自动运行。批处理系统不具有交互性,它是为了提高CPU的利用率;
特点:多道,在内存中同时存放多个作业,一个时刻只有一个作业运行,这些作业共享CPU和外部设备资源; 成批,用户和他的作业之间没有交互性,用户自己不能干预自己的作业的运行,发现作业错误不能及时改正。
优缺点:资源利用率高,系统吞吐量大,平均周转时间长,无交互能力
分时系统:是使一台计算机采用时间片轮转的方式同时为几个、几十个甚至几百个用户服务的一种操作系统。
特点:同时性,计算机系统能被多个用户同时使用; 独立性:用户和用户之间都是独立操作系统的,在同时操作时并不会发生冲突,破坏,混淆等现象; 及时性:系统能以最快的速度将结果显示给用户; 交互作用性:用户能和电脑进行人机对话;
实时系统:指当外界时间或数据产生时,能够接受并以足够快的速度予以处理,其结果又能在规定的时间内来控制生产过程或对处理系统做出快速响应,调度一切可利用资源完成实时任务,并控制所有实时任务协调一致运行的操作系统
网络操作系统:是一种能代替操作系统的软件程序,是网络的心脏和灵魂,是向网络计算机提供服务的特殊的操作系统。借由网络达到互相传递数据与各种消息,分为服务器(Server)及客户端(Client)。 而服务器的主要功能是管理服务器和网络上的各种资源和网络设备的共用,加以统合并控管流量,避免有瘫痪的可能性,而客户端就是有着能接收服务器所传递的数据来运用的功能,好让客户端可以清楚的搜索所需的资源。
分布式操作系统:是支持分布式处理的软件系统,是在由通信网络互联的多处理机体系结构上执行任务的系统。它包括分布式操作系统、分布式程序设计语言及其编译(解释)系统、分布式文件系统和分布式数据库系统等。
并发、虚拟、异步、共享
并发性:是指两个或多个时间在同一时间间隔内发生;在多道程序环境下,并发性是指在一段时间内宏观上有多个程序在同时运行;但在单处理机系统中,每一时刻却仅能有一带程序执行,故微观上这些程序只能是分时地交替运行。
共享性:是指系统中的资源可供内存中多个并发执行的进程共同使用。
虚拟性:通过技术将物理实体变为若干条逻辑信道,使原先只能提供一对用户通话的物理通道,变为能供多个用户同时通话的逻辑通道。
异步性:在多道程序环境下,系统允许多个进程并发执行。
处理机管理功能、存储器管理功能、设备管理功能、文件管理功能、操作系统与用户之间的接口
CP/M
MOS,Windows系统
UNIX、Linux和Solaris等。
为了更好地描述程序的顺序和并发执行情况,介绍了用于描述程序执行先后顺序的前趋图,前趋图是指一个有向无循环图,可记为DAG用于描述进程之间执行的先后顺序。
程序顺序执行的特征有:(1)顺序性:指处理机严格地按照程序所规定的顺序执行,即每一操作必须在下一操作开始之前结束;(2)封闭性:指程序在封闭的环境下运行,即程序运行时独占全机资源,资源的状态(除初始状态外)只有本程序才能改变它,程序一旦开始执行,其执行结果不受外界因素影响;(3)可再现性:指只要程序执行是的环境和初始条件相同,当程序重复执行时,不论它是从头到尾不停顿地执行,还是“走走停停”地执行,都可以获得相同的结果。程序顺序执行时的这种特性,为程序员检测和校正程序的错误带来了极大的方便。
进程是进程实体的运行过程,是系统资源分配和调度的一个独立单位。
PCB:为了使参与并发执行的每个程序(含数据块)都能独立的运行,在操作系统中必须为之配置一个专门的数据结构,称谓进程控制块(PCB)
程序不能调用自己的PCB
PCB中的指针只想的是页表和段的指针
进程即运行中的程序,表示程序是在运行中的;程序是一种非运行的文件类型,表示程序未在运行中,两者的本质区别就是状态的不同:即为动态和静态的区别。
进程的特性:动态性、独立性、异步性、并发性
进程的是三种状态:就绪、执行、阻塞
就绪-执行:进程调度
执行-阻塞:I/O请求
阻塞-就绪:I/O完成
执行-就绪:时间片完
用户态和内核态
两种状态之间的转换:
当一个进程执行系统调用而陷入内核代码中执行时,称其处于内核运行状态(内核态);
当进程在执行用户自己的代码时,则称其处于用户运行状态(用户态)
用户态转换到核心态是通过中断实现的,并且中断是唯一途径
中断是指计算机在执行期间,系统内发生的任何非寻常的或非预期的急需处理时间,使得CPU暂时中断当前正在执行的程序而转去指向相应的事件处理程序,待处理完毕后又返回原来被中断处继续执行或调度新的进程执行的过程。
系统调用、键盘命令、进程调度可以中断
原语是由若干条指令组成的,用于完成一定功能的一个过程,原语在执行过程中不可中断
一般的进程原语:进程的创建、进程的退出
先分配一个pid(进程标识符),再分配一个空白的PCB
为新进程和数据分配内存空间
初始化进程控制块。
设置相应链接,尽力进程家族树
检查PCB,检查进程状态
将进程从运行态转换成终止态
检查是否有子进程需要终止
将获取到的资源归还给父进程或系统
将该进程的PCB从PCB队列中移出
保存当前进程的CPU现场;
置该进程状态(执行到阻塞);
进入阻塞队列(根据不同的阻塞原因进入不同的队列);
转进程调度程序进行重新调度,把处理器分配给别人。(阻塞是进城自身的一种主动行为)
把被阻塞的进程从阻塞队列中移出;
PCB状态改阻塞为就绪;
将PCB插入就绪队列
间接相互制约关系、直接相互制约关系
临界资源是指每次仅允许一个进程访问的资源。
临界区存放的是每个进程中访问临界资源的那段代码
进入区:每个进程在进入临界区之前,应该先对欲访问的临界资源金检查,看它是否正被访问。如果此刻临界资源未被访问,进程便可进入临界区对该资源进行访问,并设置它正被访问的标志;如果此刻该临界资源正被某进程访问,则本进程不能进入临界区。因此必须在临界区前增加一段用于进行上述检查的代码,把这段代码称为进入区。
退出区:与进入区相对应,在临界区后面也要加上一段称为退出区的代码,用于将临界区正在被访问的标志恢复为未被访问的标志。
空闲让进、忙则等待、让权等待、有限等待
整型信号量、记录型信号量、AND型信号量、信号量集
低级通信(信号量机制)、高级通信(共享存储区、管道、消息传递和客户机和服务器)
线程是操作系统能够进行运算调度的最小单位。它被包含在进程中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
1.调度
在传统的操作系统中,拥有资源的基本单位和独立调度、分派的基本单位都是进程。而在引入线程的操作系统中,则把线程作为调度和分派的基本单位。而把进程作 为资源拥有的基本单位,使传统进程的两个属性分开,线程便能轻装运行,从而可显著地提高系统的并发程度。在同一进程中,线程的切换不会引起进程的切换,在 由一个进程中的线程切换到另一个进程中的线程时,将会引起进程的切换。
2.并发性
在引入线程的操作系统中,不仅进程之间可以并发执行,而且在一个进程中的多个线程之间,亦可并发执行,因而使操作系统具有更好的并发性,从而能更有效地使 用系统资源和提高系统吞吐量。例如,在一个未引入线程的单CPU操作系统中,若仅设置一个文件服务进程,当它由于某种原因而被阻塞时,便没有其它的文件服 务进程来提供服务。在引入了线程的操作系统中,可以在一个文件服务进程中,设置多个服务线程,当第一个线程等待时,文件服务进程中的第二个线程可以继续运 行;当第二个线程阻塞时,第三个线程可以继续执行,从而显著地提高了文件服务的质量以及系统吞吐量。
3.拥有资源
不论是传统的操作系统,还是设有线程的操作系统,进程都是拥有资源的一个独立单位,它可以拥有自己的资源。一般地说,线程自己不拥有系统资源(也有一点必 不可少的资源),但它可以访问其隶属进程的资源。亦即,一个进程的代码段、数据段以及系统资源,如已打开的文件、I/O设备等,可供问一进程的其它所有线 程共享。
4.系统开销
由于在创建或撤消进程时,系统都要为之分配或回收资源,如内存空间、I/o设备等。因此,操作系统所付出的开销将显著地大于在创建或撤消线程时的开销。类 似地,在进行进程切换时,涉及到整个当前进程CPU环境的保存以及新被调度运行的进程的CPU环境的设置。而线程切换只须保存和设置少量寄存器的内容,并 不涉及存储器管理方面的操作。可见,进程切换的开销也远大于线程切换的开销。此外,由于同一进程中的多个线程具有相同的地址空间,致使它们之间的同步和通信的实现,也变得比较容易。在有的系统中,线程的切换、同步和通信都无须
5.独立性
6.支持多处理机系统
三个层次,低级、中级和高级
周转时间:指从作业被提交给系统开始,到作业完成为止的这段时间间隔(称为作业周转时间)
带权周转时间=周转时间/服务时间;
平均周转时间=作业周转总时间/作业个数;
平均带权周转时间=带权周转总时间/作业个数
在多道程序处理系统中,作业是用户提交给系统的一项相对独立的工作。它不仅包括通常的程序和数据,而且还应有一份作业说明书。把作业中每一个加工步骤称为一个作业步。
(1)收容阶段(用户提交的作业输入到硬盘上,为作业建立JCB,并放入作业后备队列)
(2)运行阶段(一个作业从进入就绪直到运行结束前,均处于“运行状态”)
(3)完成阶段。
“后备状态”、“运行状态”、“完成状态”
先来先服务(FCFS)、短作业优先(SJF)、优先级调度算法(PSA)、高响应比优先调度算法(HRRN)
非抢占方式、抢占方式
高优先级进程(或线程)被低优先级进程(或线程)延迟或阻塞
解决方法:(1)加入进程P3在进入临界区后P3所占用的处理机就不允许被强占。
(2)建立在动态优先级继承基础上的,当高优先级进程P1要进入临界区,去使用临界资源R,如果已经有一个低优先级进程P3正在使用该资源,此时一方面P1被阻塞,另一方面有P3继承P1的优先级,并一直保持到P3退出临界区。这样做的目的在于不让比P3优先级稍高,但比P1优先级低的进程如P2进程插进来,导致延缓P3退出临界区。
死锁是源于多个进程对资源的争夺,不仅对不可抢占资源进行争夺时会引起死锁,而且对可消耗资源进行争夺时,也会引起死锁。
(1)互斥条件(资源的临界性)
(2)请求和保持条件
(3)不可抢占条件
(4)循环等待条件
四种:
(1)预防死锁。这是一种比较简单和直观的事先预防方法。该方法是通过设置某些限制条件,去破坏产生死锁四个必要条件中的一个或多个来预防死锁。比较容易实现
(2)避免死锁:同样是事先预防策略,但它并不是事先采取各种限制措施,去破坏产生死锁的四个必要条件,而是在资源的动态分配过程中,用某种方法防止系统进入不安全状态,从而可以避免死锁。
(3)检测死锁:这种方式无须事先采用任何限制性措施,允许进程在运行过程中发生死锁。但可以通过检测机构及时地检测出死锁的发生,然后采取适当的措施,把进程从死锁中解脱出来。
(4)解除死锁:当检测到系统中已发生死锁时就采取相应措施,将进程从死锁状态中解脱出来。常用的方法是撤销一些进程,回收他们的资源,将它们分配给已处于阻塞状态的进程,使其能继续运行。
三种
破坏“请求和保持”条件、破坏“不可抢占”条件、破坏“循环等待”条件
互斥条件不能破坏
安全状态是什么?如何看是否有安全序列?
安全状态是指系统能按某种进程推进顺序(P1、P2、···、Pn)为每个进程Pi分配其所需资源,直至满足每个进程对资源的最大需求,使每个进程都可以顺利地完成。
如何看是否有安全序列:
银行家算法的完整步骤
编译、链接、装入
绝对装入方式(装入前)、可重定位装入方式(装入时)、动态运行时的装入方式(程序执行时)
两种,静态链接、装入时动态链接
为了能在系统中装入多道程序,且使这些程序之间又不会发生互相干扰,于是将整个用户空间划分为若干个固定大小的区域,在每个分区中只装入一道作业。
首次适应(FF)算法、循环首次适应(NF)算法、最佳适应(BF)算法、最坏适应(WF)算法。
最佳适应算法产生的碎片最多,最坏适应算法产生的碎片最少,首次适应算法低地址最少
不相同,固定分区导致分区内部浪费,成为“内部碎片”,动态分区是使分区内部剩余内存空置造成浪费。
保护信息:
为什么要进行紧凑,其作用是什么?
紧凑是指通过移动内存中作业的位置,把原来多个分散的小分区拼接成一个大分区的方法
为什么引入对换?磁盘空间的文件区和兑换区各有什么特点?
由于早期计算机的内存都非常小,为了使操作系统能分时运行多个用户程序而引入对换技术。
文件区占用磁盘空间的大部分,用于存放各类文件。由于通常的文件都是较长时间地驻留在外存上,对它访问的频率是较低的,故对文件区管理的主要目标是提高文件存储空间的利用率,然后才是提高文件的访问速度。因此,对文件区空间的管理采取离散分配方式。
对换空间只占磁盘空间的小部分,用于存放从内存换出的进程。由于这些进程在对换区中驻留的时间是短暂的,而对换操作的频率较高,故对对换空间管理的主要目标,是提高进程换入和换出的速度,然后才是提高文件存储空间的利用率。为此,对对换区空间的管理采取连续分配方式,较少考虑外存中的碎片问题。
将逻辑地址按位拆分出页号和页内地址而不用做除法
实现从页号到物理块号的地址映射
逻辑地址首先转换为(页号,页内地址)然后用页号区检索相关信息。
有快表访问内存一次,没有快表访问两次。
由于页表是存放在内存中的,这使CPU在每存取一个数据时,都要两次访问内存。第一次是访问内存中的页表,从中找到指定页的物理块号,再将块号与页内偏移量W拼接,以形成物理地址。第二次访问内存时,才是从第一次所得地址中获得所需数据(或向此地址中写入数据)
1、根据逻辑地址中段号S查找块表。如果找不到,则形成物理地址,否则进行如下步骤;
2、通过段表始址寄存器SB,查找段表在内存中的始址。
3、通过短标并根据段号S,查找页表所在位置。
4、访问页表并根据逻辑页号P查找该页所在内存块号p’;
5、将内存块号p’和逻辑地址中的页内地址D拼接,形成访问内存的物理地址;
6、将有关内容填入块表,如有必要,则根据淘汰算法淘汰块表的一行,一行填入新的内容。
虚拟存储器是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩容的一种存储器系统。其逻辑容量由内存容量和外存容量之和决定,其运行速度接近于内存速度,而每位成本却又接近于内存。
多次性、对换性、虚拟性
页号、物理块号、状态位P、访问字段A、修改位M、外存地址
例题
(考两个)
有哪几个?各有什么优点,如何来进行页面置换?最佳置换算法(OPT)、先进先出(FIFO)页面置换算法、最近最久未使用(LRU)置换算法、最少使用(LFU)置换算法
先进先出(FIFO)是最简单的页面置换算法。
最佳(OPT)是最低的缺页错误率;
最近最久未使用(LRU)要求系统有较多的支持硬件。
产生抖动的原因是由于CPU的利用率和多道程序的对立统一矛盾关系引起的,为了提高CPU的利用率,可提高多道程序度,但单纯提高多道程序度又会造成缺页率的急剧上升,导致CPU的利用率下降,而系统调度程序又会为了提高CPU的利用率而继续提高多道程序度,形成恶循环。
(1)采取局部置换策略
(2)把工作集算法融入到处理机调度中
(3)利用”L=S“准则调节缺页率
(4)选择暂停的进程
段名、段长、段基址、存取方式、访问字段A、修改位M、存在位P、增补位、外存地址
通道是一种通过执行通道程序管理I/O操作的控制器,它使主机(CPU和主存)与I/O操作之间达到更高的秉性程度。由于他的任务是管理实现输入/输出操作,提供一种传送通道,所以讲这种部件称作“通道”。
三种类型
字节多路通道、数组选择通道、数组多路通道
由于通道价格昂贵,致使机器中所设置的通道数量势必较少,这往往又使它成了I/O的瓶颈。
中断是指CPU对I/O设备发来的中断信号的一种响应。CPU暂停正在执行的程序,保留CPU环境后,自动地转去执行该I/O设备的中断处理程序,执行完后,在回到断点,继续执行原来的程序。I/O设备可以使字符设备,也可以是块设备、通信设备等。
(1)测定是否有未响应的中断信号
(2)保护被中断进程的CPU环境
(3)转入相应的设备处理程序
(4)中断处理
(5)恢复CPU的现场并退出中断
使用轮询的可编程I/O方式
使用终端的可编程I/O方式
直接存储器访问方式
I/O通道控制方式
(1)设备控制表DCT
用于记录设备的情况
(2)控制器控制表
系统为每一个控制器都设置了用于记录控制器情况的控制器控制表
(3)通道控制表
每个通道都有一张通道控制表
(4)系统设备表
这是系统范围的数据结构,记录了系统中全部设备的全部设备的情况
逻辑设备到物理设备的映射。设备分配灵活、I/O重定向
用户进程不能进入系统态,用户态到系统态的一个接口就是系统调用
将一台物理I/O设备虚拟为多台逻辑I/O设备,这样也就允许多个用户共享一台物理I/O设备
(1)输入井和输出井
(2)输入缓冲区和输出缓冲区
(3)输入进程和输出进程
(4)井管理程序
1.在磁盘缓冲区中为之申请一个空闲盘块,并将将要打印的数据送入其中暂存;
2.为用户进程申请一张空白的用户请求打印表,并将用户的打印要求填入其中,再将该表挂到假脱机文件队列上。在这两项工作完成后,虽然还没有进行任何实际的打印输出,但对于用户进程而言,其打印请求已经得到满足,打印输出任务已经完成
(1)缓和CPU与I/O设备间速度不匹配的矛盾
(2)减少对CPU的中断频率,放宽对CPU中断响应时间的限制
(3)解决数据粒度不匹配的问题
(4)提高CPU和I/O设备之间的并行性
(1)寻道时间Ts
(2)旋转延迟时间
(3)传输时间Tt
先来先服务,最简单的磁盘调度算法
最短寻道时间有限,平均每次磁头移动的距离明显低于先来先服务算法的距离
逻辑结构、物理结构
记录式文件、流式文件
顺序、索引文件、索引顺序文件
为了能对系统中的大量文件施以有效的管理
索引结点是指在许多文件系统中的一种数据结构。每个索引结点保存了文件系统中的一个文件系统对象的元信息数据,但不包括数据内容或者文件名
Unix文件系统把FCB拆分成目录和索引节点两部分,加快文件检索、便于文件共享。
单级、两级、多级(树形目录)
连续、链接和索引
连续:
优点:顺序访问容易;顺序访问速度快;
缺点:降低外存空间的利用率;必须事先知道文件的长度;不能灵活地删除和插入纪录;对于动态增长的文件,很难为其分配空间
链接:
优点:消除了磁盘的外部碎片,提高了外存的利用率;对插入、删除和删除纪录都非常容易;能适应文件的动态增长;
单机索引、多级索引和增量索引(混合索引)
Unix的文件物理系统是增量式(混合索引)结构,它是在索引节点中用13个地址项表示,其中有10个直接地址,1个一次间接地址,1个三次间接地址。
空闲表法、空闲链表法
AND型信号量
int in=0,out=0;
item buffer[n];
semaphore mutex=1, empty=n, full=0;
void producer(){
do{
producer an item 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)
}
用AND型信号量机制解决
semaphore chopstick[5] = {
1,1,1,1,1};
do{
...
//think
...
Swait(chopstick[(i+1)%5],chopstick[i]);
...
//eat
...
Ssingnal(chopstick[(i+1)%5],chopstick[i]);
...
}while[TRUE]
记录型信号量
semaphore rmutex = 1, wmutex = 1;
int readcount = 0;
void reader(){
do{
wait(rmutex);
if(readcount == 0)wait(wmutex);
readcount++;
signal(rmutex);
...
perform read operation;
...
wait(rmutex);
readcount--;
if(readcount == 0)signal(wmutex);
signal(rmutex);
}while(TRUE)
}
void Writer(){
do{
wait(wmutex);
perform write operation;
signal(wmutex);
}while(TRUE)
}
void main(){
cobegin
Reader(); Writer();
coend
}
设有四个批作业A,B,C,D其到达时间、运行时间如下:
作业 作业到达时间 运行时间 作业优先级
A 10:00 5 1
B 10:03 7 3
C 10:04 4 2
D 10:05 8 4
试计算:按SJF和PSA算法执行作业,请列出作业执行的顺序和A的周转时间为;B的周转时间为;C的周转时间为;D的周转时间为;所有作业的平均周转时间是和带权周转时间?
请用opt置换算法、LRU算法和FIFO算法计算缺页次数以及缺页率。
段号 段长 是否在内存主存 起始地址
0 240 1 2100
1 120 1 600
2 400 0 3100
3 900 1 3200
请回答下列问题:(1)计算该作业访问[0,160],[1,800],[2,220]和[4,810] (方括号中第一个元素为段号,第二个元素为段内地址)时的是否地址合法,如果合法请计算出绝对地址(物理地址),如果不合法请给出原因。(注意1表示在内容,0表示不在内存)
逻辑地址1200=(1,176)物理地址=4*1024+176
逻辑地址2300=(2,252)缺页中断
逻辑地址5000=(4,804)页号越界中断