1.2操作系统的发展与分类
1.2.1手工操作阶段(次阶段无需操作系统)
用户在计算机上算题的所有工作都要人工干预,如程序的装入,运行,结果的输出等。随着计算机硬件的发展,人机矛盾(速度和资源利用)越来越大,必须寻求新的解决的办法。
手工操作阶段有两个突出的缺点1.用户独占全机,不会出现因资源已被其他用户占用而等待的现象,但资源利用率低2.CPU等待手工操作,CPU的利用不充分。
唯一的解决办法就是用告诉的机器代替相对较慢的手工操作来对作业进行操作。
手工操作“ 主要缺点:用户独占全机,人机速度矛盾导致资源利用率极低。
1.2.2批处理阶段(操作系统开始出现)
为了解决人机矛盾及CPU和I/O设备之间不匹配的矛盾,出现了批处理系统。它按发展历程又分为单道批处理系统,多道批处理系统(多道程序设计出现以后)。
1.单道批处理系统
引入脱机输入输出技术(用磁带完成),并监督程序负责控制作业的输入,输出
系统对作业的处理是成批进行的,但内存中始终保持一道作业。单道批处理系统是在解决人机矛盾及CPU和I/O设备速率不匹配的矛盾中形成的。单道批处理系统的主要特征如下:
1)自动性。在顺利的情况下,磁带上的一批作业能自动地逐个运行,而无须人工干预。
2)顺序性。磁带上的各道作业顺序地进入内存,各道作业的完成顺序与他们进入内存的顺序在正常情况下应完成相同,亦即先调入内存的作业先完成。
3)单道性。内存中仅有一道程序运行,即监督程序每次从磁带上只调入一道程序进入内存运行,当该程序或发生异常情况时,才换入其后继程序进入内存运行。
此时面临的问题是:每次主机内存中仅存放一道作业,每当它在运行时期(注意这里是”运行时“而不是”完成后“)发出输入/输出请求后,高速的CPU便处于等待低俗的I/O完成状态。 为了进一步提高资源的利用率和系统的吞吐量,引入了多道程序技术。
2.多道批处理系统(操作系统开始出现)
主要优点:多道程序并发执行,共享计算机资源。
资源利用率大幅提升,CPU和其他资源保持”忙碌“状态,系统吞吐量增大。
多道程序设计的特点是多道,宏观上并行,微观上串行。
1)多道。计算机内存中同时存放多道相互独立的程序
2)宏观上并行。同时进入系统的多道程序都处于运行过程中,即它们先后开始各自的运行,但都未运行完毕。
3)微观上串行。内存中的多道程序轮流占有CPU,交替执行。
多道程序设计技术的实现需要解决下列问题:
1)如何分配处理器
2)多道程序的内存分配问题。
3)1/0设备如何分配。
4)如何组织和存放大量的程序和数据,以方便用户使用并保证其安全性与一致性。
优点:资源利用率高,多道程序共享计算机资源,从而使各种资源得到充分利用;系统吞吐量大,CPU和其他资源保持“忙碌”状态。缺点:用户响应的时间较长;不提供人机交互能力,用户即不能了解自己的程序的运行情况,又不能控制计算机。
1.2.3 分时操作系统
分时操作系统是指多个用户通过终端同时共享一台主机,这些终端连接在主机上,用户可以同时与主机进行交互操作而互不干扰。因此,实现分时系统最关键的问题是如何使用户能与自己的作业进行交互,即当用户在自己的终端上键入命令时,系统应能接收并及时处理该命令,再将结果返回用户。
1)同时性。同时性也称多路性,指允许多个终端用户同时使用一台计算机,即一台计算机与若干台终端相连接,终端上的这些用户可以同时或基本同时使用计算机。
2)交互性。用户能够方便地与系统进行人机对话,即用户通过终端采用人机对话的方式直接控制系统运行,与同程序进行交互
3)独立性。系统中多个用户可以彼此独立地进行操作,互不干扰,单个用户感觉不到别人也在使用这台计算机,好像只有自己单独使用这台计算机一样。
4)及时性。用户请求能再很短时间获得相应。分时系统采用时间片轮转方式使一台计算器同时为多个终端服务,使用户能够对系统的及时响应感到满意。
虽然分时操作系统较好地解决了人机交互问题,但在一些应用场合,需要系统能对外部的信息在规定的时间(比时间片的时间还短)内做出处理(比如飞机订票系统或导弹制导系统)。因此,实时系统应运而生。
主要缺点:不能优先处理一些紧急任务。
操作系统对各个用户/作业都是公平的,循环地为每个用户/作业服务一个时间片,不区分任务的紧急性。
优点:为了能在某个时间限制内完成某些任务而不需要时间片排队,诞生了实时操作系统。
这里的时间限制可以分为两种情况:若某个动作必须绝对地在规定的时刻(或规定的时间范围)发生,则称为硬实时系统,如飞行器的飞行自动控制系统,这类系统提供绝对保证,让某个特定的动作在规定的时间内完成。若能够接受偶尔违反时间规定且不会引起任何永久性的损害,则称为软实时系统,如飞机订单系统,银行管理系统。
在实时操作系统的控制下,计算机系统接收到外部信号后及时进行处理,并在严格的时限内处理完接收的事件。实时操作系统的主要特点是及时性和可靠性。
1.2.5 网络操作系统和分布式计算机系统
网络操作系统把计算机网络中的各台计算机有机地结合起来,提供一种同一,经济而有效的使用各台计算机的方法,实现各台计算机之间数据的互相传送。网络操作系统最主要的特点是网络中各种资源的共享及各台计算机之间的通信。
分布式计算机系统是由多台计算机组成并满足下列条件的系统: 系统中任意两台计算机通过通信方式交换信息;系统中的每台计算机都具有同等的地位,即没有主机也没有从机;每台计算机上的资源为所有用户共享;系统中的人一台计算机都可以构成一个子系统,并且还能重构;任何工作都可以分布在几台计算机上,由它们并行工作,协同完成。用于管理分布式计算机系统的操作系统称为分布式计算机系统。该系统的主要特点是:分布性和并行性。分布式操作系统与网络操作系统的本质不同是,分布式操作系统中的若干计算机相互接通完成同一任务。
硬实时系统 | 必须在绝对严格的规定事件内完成处理 | |
---|---|---|
实时操作系统 | ||
软实时系统 | 能接收偶尔违反时间规定 |
1.2.6个人计算机操作系统
个人计算机操作系统是目前使用最广泛的操作系统,它广泛应用于文字处理,电子表格,游戏中,常见的有Windows,Linux和Macintosh等。操作系统的发展历程如图1.1所示
独占计算机资源,资源利用率低(手工阶段) | 减少了CPU的空闲时间。提高了I/O速度(脱机处理) | 高效利用CPU的资源(早期批处理) | 多道,宏观上并行,微观上串行(多道批处理) | 交互性强(分时操作系统) |
---|---|---|---|---|
目前最广泛(个人计算机) | 建立在网络系统上,控制功能均为分布式(分布式操作系统) | 服务于计算机网络,集中式控制方式(网络操作系统) | 及时性和可靠性交互性不如分时(实时操作系统) |
嵌入式操作系统,服务器操作系统,智能手机操作系统等。 网络操作系统,分布式操作系统。
1.3.操作系统的运行环境
1.3.1操作系统的运行机制
计算机系统中,通常CPU执行两种不同性质的程序:一种是操作系统内核程序;另一种是用户自编程序(即系统外层的应用程序,或简称“应用程序”)。对操作系统而言,这两种程序作用不同,前者是后者的管理者,因此“管理程序”(即内核程序)要执行一些特权指令,,而“被管理程序”(即用户自编程序)出于安全考虑不能执行这些指令。所谓特权指令,是指计算机中不允许用户直接使用的指令,如I/O指令,置终端指令,存取用于内存保护的寄存器,送程序状态字到程序状态寄存器等的指令。在具体实现上,将Cpu的状态划分为用户态(目态)和核心态(又称管态,内核态)。可以理解为CPU内部有一个小开关,当小开关为1时,CPU处于核心态,此时CPU可以执行特权指令;当小开关为O时,cpu处于用户态,此时CPU只能执行非特权指令。用户自编程序运行的用户态,操作系统内核程序运行在核心态。
内核是计算机上配置的底层软件,是计算机功能的延申。 是操作系统最基本最核心的部分。
1.时钟管理
在计算机的各种部件中,时钟是最关键的设备。时钟的第一功能是计时,操作系统需要通过时钟管理,向用户提供标准的系统时间。另外,通过时钟中断的管理,可以实现进程的切换。例如,在分时操作系统中采用时间片轮转调度,在实时系统中按截止时间控制运行,在批处理系统中那个通过时钟管理来衡量一个作业的运行程度等。因此,系统管理的方方面面无不依赖于时钟。
特权指令:如内存清零指令 | 不允许用户程序的使用 | |
---|---|---|
指令 | 非特权指令:如普通运算指令 | |
2.中断机制
引入终端技术的初衷是提高多道程序运行环境中CPU的利用率,而且主要是针对外部设备的。后来逐步得到发展,形成了多种类型,称为操作系统各项操作的基础。例如,键盘或鼠标信息的输入,进程的管理核调度,系统功能的调用,设备驱动,文件访问等,无不依赖于中段机制。可以说,现代操作系统是靠终端驱动的软件。
中断机制中,只有一小部分功能属于内核,它们负责保护核恢复中断现场的信息,转移控制权到相关的处理程序。这样可以减少中断的处理时间,提高系统的并行处理功能。
用户态(目态) | 此时CPU只能执行非特权指令 | |
---|---|---|
两种处理器状态 | 特权指令,非特权指令都可执行 | |
核心态(管态) |
负责实现中断机制
用程序状态寄存器(psw)中的某标志位来标识当前处理器处于什么状态,如0为用户态,1为核心态。
3.原语
按层次结构设计的操作系统,底层必然是一些可被调用的公用小程序,它们各自完成一个规定的操作。它们的特点如下:
1)处于操作系统的最底层,是最接近硬性的部分。
2)这些程序的运行具有原子性,其操作只能一气呵成(主要从系统安全性核便于管理考虑)。
3)这些程序的运行时间都较短,并且调用频繁。
源于是一种特殊的程序。是最接近硬件的部分,这种程序的运行具有原子性。
通常把具有这些特点的程序称为原语(Atomic Operation)。定义原语的直接方法是关闭中断,让其所有动作不可分割地完成在打开中断。
系统中的设备驱动,CPU切换,进程通信等功能中的部分操作都可定义为原语,使它们称为内核的组成部分。
原语是一种特殊的程序。是最接近硬件的部分,这种程序的运行具有原子性。[于硬件关联较紧密的模块]
实现操作系统内核功能的那些程序就是内核程序。
操作系统的内核
4.系统控制的数据结构及处理 两种程序{ 内核程序 应用程序
系统中用来登记状态信息的数据结构很多,如作业控制块,进程控制块(PCB),设备控制块,各类链表,消息队列,缓冲区,空闲区登记表,内存分配表等。
1)进程管理。进程状态管理,进程调度核分派,创建于撤销进程控制块等。
2)存储器管理。储存器的空间分配核回收,内存系统保护程序,代码对换程序等。
3)设备管理。缓冲区管理,设备分配和回收等。
一条高级语言的代码翻译过来可能会对应多余指令。
1.3.2中断和异常的概念
中断机制的诞生 为了实现多道程序并发执行而引入的一种技术
CPU运行上层程序时唯一能进入这些“门”的途径就是通过中断或异常。发生中断或异常时,运行用户态的Cpu会立即进入核心态。
中断;本质发生中断就意味着需要操作系统接入,开展管理工作。
一条高级语言的代码翻译过来可能会对应多余指令。
1.中断和异常的定义
通过“中断信号来自CPU内部还是内部“判断是内/外中断。
中断(Interruption)也称外中断,指来自CPU执行指令外的事件的发生,如设备发出的I/O结束中断,表示设备输入/输出处理已经完成,希望处理及能够向设备发下一个输入、输出请求,同时让完成输入、输出后的程序继续运行。
时钟中断,表示一个固定的时间片已到,让操作及处理计时,启动定时运行的任务等。这一类中断通常是于当前指令执行无关的事件,即它们与当前处理机运行的程序无关。
内中断 | 自愿中断 | 指令中断 | |
---|---|---|---|
强迫中断 | 硬件故障 | ||
中断 | 软件故障 | ||
外中断(强迫中断) | 外设请求 | ||
人的干预 |
异常(Exception)也称内中断,例外或陷入(trap),指源自CPU执行指令内部的事件。
Cpu内部与当前执行的指令有关。如:缺页如整数除指令无关
Cpu外部与当前执行的指令无关。
侠义的中断
2.中断处理的过程
”用户态“-》核心态是通过中断实现。并且中断是唯一途径。
1)关中断。CPU响应中断后,首先要保护程序的现场状态,在保护现场的过程中,Cpu不应响应更高级中断源的中断请求。
2)保存断点。为保证中断服务程序执行完毕后能正确地返回到原来程序,必须将原来的程序断点(即程序计数器PC)保存起来
3)引出中断服务程序。其实质是取出中断服务程序的入口地址送入程序计数器PC。
4)保存现场和屏蔽字。进入中断服务程序后,首先要保存现场,现场信息一般是指程序状态字存器PSWR和某些通用寄存器的内容。
5)开中断。允许更高级中断请求得到响应。
6)执行中断服务程序 这是中断请求的目的。
7)关中断。保证在恢复现场和屏蔽字时不被中断。
8)恢复现场和屏蔽字 。将现场和屏蔽字恢复到原来的状态。
9)开中断,中断返回。中断服务程序的最后一条指令通常是一条中断返回指令,使其返回到原程序的断点处,以便继续执行原程序。
内中断(也称异常,以外,陷入) | 自愿中断 | 指令中断 | |
---|---|---|---|
中断 | 强迫中断 | 硬件故障 | |
外中断(中断) | 外设请求 | 软件中断 | |
人工干预 |
中断返回由中断服务程序的最后一条中断返回指令完成。
”核心态“->用户态的切换是通过执行一个特权指令, 将程序状态字(psw)的标志位设置为”用户态“。
1.3.3系统调用
所谓系统调用,是指用户在程序中调用系统操作所提供的一些子功能,系统调用可视为特殊的公共子程序。系统中的各种共享资源都由操作系统统一掌管,因此在用户程序中,凡是与资源有关的操作(如储存分配,进行I/O传输及管理文件等),都必须通过系统调用方式向操作系统提出服务请求,并由操作系统代为完成。
通常,一个操作系统提供的系统调用命令有几十条乃至上百条之多。这些系统调用按共嗯大致可分为如下几类。
设备管理 完成设备的请求或释放,以及设备启动等功能。
文件管理 完成文件的读,写,创建及删除等功能。
进程控制 完成进程的创建,撤销,堵塞及唤醒等功能。
进程通信 完成进程之间的消息传递或信号传递等功能。
内存管理 完成内存的分配,回收以及获取作业占用内存区大小及始址等功能。
系统调用会使处理器从用户态进入核心态。
凡是与资源有关的操作,会直接影响到其他进程的操作,一定需要操作系统介入,即需要通过系统调用来实现。
系统调用(按功能分类)
显然,系统调用相关功能设计系统资源管理,进程管理之类的操作,对整个系统的影响非常完成,要运行在核心态。用户程序可以执行陷入指令(又称访管指令或trap指令)来发起系统调用,请求操作系统提供服务。可以这么理解,用户程序执行”陷入指令“相当于把CPU的使用全主交给操作系统内核程序(CPU状态会从用户态进入核心态),之后操作系统内核程序在对系统调用请求做出相应处理。处理完成后,操作系统内核程序又会把Cpu的使用权还给用户程序(即Cpu状态会从核心态回到用户态)。这么设计的目的是:用户程序不能直接执行对系统影响非常大的操作,必须通过系统调用的方式请求操作系统代为执行,以便保证系统的稳定性和安全性,防止用户程序随意更改或访问重要的系统资源,影响其他进程的运行。
(用户态)系统则通过硬件中断机制进入核心态(核心态),运行管理程序;也可能是程序运行结束时,用户程序需要继续运行,此时通过相应的保护的程序现场推出中断处理程序或异常处理程序,返回中断点处继续执行, intx / trapx 指令。
系统调用与库函数的区别。系统调用发生在用户态,对系统调用的处理发生在核心态,执行陷入指令产生会中断,使处理器从用户态进入核心态。
在操作系统这一层面上,我们关心的是系统核心态和用户态的软件实现与切换,对于硬件层面的具体理解,可以结合”计算机组成原理“课程中有关中断的内容进行学习。
下面列举一些由用户态转向核心态的例子:
1)用户程序要求操作系统的服务,即系统调用。
陷入指令:trap .int 房管指令
2)发生一次中断。
3)用户程序中产生了一个错误状态。
4)用户程序中企图执行一条特权指令。
5)从核心态转向用户态由一条指令实现,这条指令也是特权命令。一般是中断返回指令。
若程序的运行由用户态赚到核心态,则会用到访管指令,访管指令是在用户态使用的,所以它不可能是特权指令。
1.4操作系统的体系结构
1.4.1大内核和微内核
操作系统的体系结构是一个开放的问题。如上文所述,操作系统在核心态为应用程序提供公共的服务,那么操作系统在核心态应该提供什么服务,怎样提供服务?有关这一问题的回答形成了两种主要的体系结构:大内核和微内核。
大内核系统将操作系统的主要功能模块作为一个紧密联系的整体运行的核心态,从而为应用提供高性能的系统服务。因为各管理模块之间共享信心,能有效利用相互之间的有效特性,所以具有无可比拟的性能优势。
微内核结构有效地分离了内核与服务,服务于服务,使得它们之间的接口更加清晰,维护的代价大大降低,各部分可以单独地优化和演进,从而保证了操作系统的可靠性。
微内核结构的最大问题是性能问题,因为需要频繁地在核心态和用户态之间进行切换,操作系统的执行开销偏大。因此有的操作系统将那些频繁使用的系统服务又移回内核,从而保证系统性能。但相当多的实验数据表明,体系结构不是引起性能下降的主要因素,体系结构带来的性能提升足以弥补切换开销带来的缺陷。为减少开销,也有人提出将系统服务作为运行库连接到用户程序的一种解决方案,这样的体系结构称为库操作系统。
第二章 进程管理
程序:就是一个指令序列 早期的计算机(只支持单道程序); 引入多道程序技术之后;
进程管理 -进程 -概念:与程序的区别
-特征: 动态性,并发性,独立性,异步性,结构性
-状态:运行,就绪,堵塞,创建,结束
-控制:创建,种植,堵塞和唤醒,切换
-组织:进程控制块PCB,程序段,数据段
- 通信:共享存储,消息传递,管道通信
线程- 概念,与进程的比较,属性
线程的实现方式
处理机调度-概念,三级调度:作业调度,中级调度,进程调度
-调度方式:剥夺式,非剥夺式
-调度准则:cpu利用率,吞吐量,周转时间,等待时间,响应时间
-算法:先来先服务,短作业(SJF)优先,优先级,高响应比优先,时间片轮转,多级反馈队列
进程同步-概念:临界资源,同步,互斥
-实现方法:软件实现的几种算法,硬件实现
-信号量:整理,记录型
- 经典问题:生产者-消费者问题,读者-写者问题,哲学家进餐问题,吸烟者问题
死锁-定义
-原因:系统资源争夺,进程推进顺序非法
-条件:互斥,不剥夺,请求和保持,循环等待
-策略:防止死锁,避免死锁,死锁的检测与解除。
(PCB)进程控制块。 PCB进程实体(进程映像)
2.1进程与线程
2.1.1 进程的概念和特征
1.进程的概念
在多道程序环境下,允许多个程序并发执行,此时它们将失去封闭性,并具有间断性及不可再现性的特征。为此引入了进程(Process)的概念,以便更好的描述和控制程序的并发执行,实现操作系统的并发性和共享性(最基本的两个特性)。
为了使参与并发执行的程序(含数据)能独立地运行,必须为之配置一个专门的数据结构,称为进程控制块(Process Control Block, PCB)。系统利用PCN来描述进程的基本情况和运行状态,进而控制和管理进程。相应地,由程序段,相关数据和PCB三部分构成了进程映像(进程实体)。所谓创建进程,实质上是创建进程映像张的PCB;而撤销进程,实质上是撤销进程的PCB。值得注意的是,进程映像是静态的,进程则是动态的。
注意:PCB是进程存在的唯一标志!
从不同的角度,进程可以有不同的定义,比较典型的定义有:
1)进程是程序的一次执行过程。
2)进程是一个程序及其数据再处理机上顺序执行时所发生的活动。
3)进程是具有独立功能的程序再一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。
我们可以把传统操作系统中的进程定义为“进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位”。
2.进程的特征
进程是由多道程序的并发执行而引出的,它和程序是两个截然不同的概念。进程的基本特征是对比单个程序的顺序执行提出的,也是对进程管理提出的基本要求。
动态性。进程是程序的一次执行,它有着创建,活动,暂停,终止等过程,具有一定的生命周期,是动态地产生,变化和消亡的。 动态性是进程最基本的特征。
并发性。指多个进程实体同时存于内存中,能在一段时间内同时运行。并发性是进程的最重要特征,同时也是操作系统的重要特征。引入进程的目的就是为了使程序能与其他进程的程序并发执行,以提高资源利用率。
独立性。指进程实体是一个能独立运行,独立获得资源和独立接受调度的基本单位。凡为建立PCB的程序,都不能作为一个独立的单位参与运行。
异步性。由于进程的相互制约,使得进程具有执行的间断性,即进程按各自独立的,不可预知的速度向前推进。异步性会导致执行结果的不可再现性,为此再操作系统中必须配置相应的进程同步机制。
结构性。每个进程都配置一个PCB对其进行描述。从结构上看,进程实体是由程序段,数据段和进程控制块三部分组成的。
异步性会导致并发程序执行结果的不确定性。
2.1.2进程的状态与转换
进程在其生命周期内,由于系统中各进程之间的相互制约关系及系统的运行环境的变化,使得进程的状态也在不断地发生变化(一个进程会精力若干不同状态)。通常进程有以下五种状态,前三种是进程的基本状态。
1)运行态。(Running)进程正在处理机上运行。在单处理机环境下,每个时刻最多 只有一个进程处于运行态。
2)就绪态。(Ready)进程获得了除处理机外的一切所需资源,一旦得到处理机,便可立即运行。系统中处于就绪状态的进程可能有多个,通常将它们拍成一个队列,称为就绪队列。
3)阻塞态(waiting/Blocked),又称等待态。进程正在等待某一失去而暂停运行,如等待某资源为可用(不包括处理机)或等待输入输出完成。即使处理机空闲,该进程也不能运行。
4)创建态(new 又称,新建态) 进程正在被创建,尚未转到就绪态。创建进程通常需要多个步骤:首先申请一个空白的PCB,并向PCB中填写一些控制和管理进程的信息;然后由系统为该进程分配运行时所必需的资源;最后把该进程转入就绪态。
5)结束态 (Terminated又称终止态)进程正从系统中消失,可能是进程正常结束或其他原因中断退出运行。进程需要结束运行时,系统首先必须置该进程为结束态,然后再进一步处理资源释放和回收等工作。
注意区别就绪态和等待态:就绪态是指进程仅缺少处理机,只要获得处理机资源就立即运行;而等待态是指进程需要其他资源(除了处理机)或等待某一时间。之所以把处理机和其他资源划分开,是因为在分时系统的时间片转换机制中,每个进程分到的时间片是若干毫秒。也就是说,进程得到处理机的时间很短且非常平凡,进程在运行过程中实际上是频繁地转换到就绪态的:而其他资源(如外设)的使用和分配或某一事件的发生(如I/O操作的完成)对应的时间想多来说很长,进程转换到等待态的次数也相对较少。这样来看,就绪态和等待态是进程生命周期中两个完全不同的状态,显然需要加以区分。
新建(创建) | 就绪 | 调度 时间到 | 运行(退出) | 终止 |
---|---|---|---|---|
事情发生 | 阻塞 | 事件等待 |
不能又阻塞态直接转化为运行态,不能由就绪态直接转换为阻塞态 被动行动
处理机× 其他× 运行态->阻塞态是进程自身做出的主动行为。
就绪态–》运行态;处于就绪态的进程被调度后,获得处理机资源(分派处理机时间片),玉是进程由就绪态转换为运行态。
运行态–》就绪态;处于运行态的进程在时间片用完后,不得不让出处理机,从而进程由运行态转换为就绪态。此外,在不可剥夺的操作系统中,当又更高优先级的进程就绪时,调度程度将正在执行的进程转换为就绪态,让更高优先级的进程执行。
运行态–》阻塞态:进程请求某一资源(如外设)的使用和分配或等待某一时间的发生(如I/O操作的完成)时,它就从运行态转换为阻塞态。进程以操作系统调用的形式请求操作系统提供服务,这是一种特殊的,由运行用户态程序调用操作系统内核过程的形式。
阻塞态–》就绪态:进程等待的事件到来时,如I/O操作结束或中断结束时,中断处理程序必须把相应进程的状态由阻塞态转换为就绪态。
需要注意的是,一个进程从运行态变成阻塞态就是主动的行为,而从阻塞态变成就绪态是被动的行为,需要其他相关进程的协助。
2.1.3 进程控制 用“原语”实现
进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程,撤销已由进程,实现进程状态转换等功能。 在操作系统中。一般把进程控制用的程序段称为原语,原语的特点是执行期间不允许中断,它是一个不可分割的基本单位。
简化理解:反正进程控制就是要实现进程状态转换。
1.进程的创建
允许一个进程创建另一个进程。此时创建者称为父进程,被创建的进程称为子进程。子进程可以继承父进程所拥有的资源。当子进程被撤销是,应将其从父进程哪里获得的资源归还给父进程。此外,在撤销父进程时,必须同时撤销其所有的子进程。
在操作系统中,终端用户登录系统,作业调度,系统提供服务,用户程序的应用请求等都会引起进程的创建。操作系统创建一个新进程的过程如下(创建原语):
为新进程分配一个唯一的进程标识号,并申请一个空白的pcb(pcb是有限的)。若pcb申请失败,则创建失败。
为进程分配资源,为新进程的程序核数据及用户栈分配必要的内存空间(在PCB中体现)。注意,若资源你不足(如内存空间),则并不是创建失败,而是处于阻塞态,等待内存资源。初始化PCB,主要包括初始化标志信息,初始化处理机状态核初始化处理机控制信息,以及设置进程的优先级等。
若进程就绪队列能够接纳新进程,则将新进程插入就绪队列,等待被调度运行。
2.进程的终止。
引起进程终止的事件主要有:1正常结束,标识进程的任务已完成并准备推出运行2 异常结束,标识进程在运行时,发生了某种异常事件,使程序无法继续运行,如存储区越界,保护错,非法指令,特权指令错,运行超时,算数运算错,I/O故障等
3外界干预,指进程应外界的请求而终止运行,如操作员或操作系统干预,父进程请求和父进程终止。
操作系统终止进程的过程如下(撤销原语):
1)根据被终止进程的标识符,检索PCB,从种读书该进程的状态。
2)若被终止进程处于执行状态,立即终止该进程的执行,将处理机资源分配给其他进程。
3)若该进程还有子孙进程,则应将其所有子孙进程终止。
4)将该进程所拥有的全部资源,或归还给其父进程,或归还给操作系统。
5)将该PCB从所在队列(链表)中删除。
撤销原语->(就绪态/阻塞态/运行态->终止态->无)
3.进程的阻塞和唤醒
运行态-》阻塞态
正在执行的进程,由于期待的某些事情未发生,如请求系统资源失败,等待某种操作的完成,新资源尚未到达或无新工作可做等,由系统自动执行阻塞原语(BLOCK),使自己由运行态变为阻塞态。可见,进程的阻塞是进程自身的一种主动行为,也因此只有处于运行态的进程(获得CPU),才可能将其转未阻塞态。阻塞源于的执行过程如下。
1)找到将要被阻塞进程的标识号对应的PCB。(正常结束)
2)若该进程未运行态,则保护其现场,将其状态转为阻塞态,停止运行。(异常结束)
3)把该pcb插入就绪队列,等待调度程序调度。
需要注意的是,BLock原语和Wakeup原语是一堆作用刚好相反的原语,必须成对使用。block原语是由被阻塞进程自我调节实现的,而Wakeup原语则是由一个与被唤醒进程合作或被其他相关的进程调用实现的。
就绪队列 PCB 阻塞队列 PCB
4.进程切换
对于通常 的进程而言,其创建,撤销及要求由系统设备完成的I/O操作,都是利用系统调用而进行内核,再由内核中的相应处理程序予以完成的。进程切换同样是在内核的支持下实现的,因此可以说,任何进程都是咋操作系统内核的支持下运行的,是与内核紧密相关的。
进程切换是指处理机从一个进程的运行转到另一个进程上运行,在这个过程中,进程的运行环境产生了实质性的变化。进程切换的过程如下:
1)保存处理机上下文,包括程序计数器和其他寄存器。
2)更新pcb信息。
3)把进程的pcb移入相应的队列,如就绪,在某事件阻塞等队列。
4)选择另一个进程执行,并更行其pcb。
5)更新内存管理的数据结构。
6)恢复处理机上下文。
2.1.4进程的组织–链接方式—索引方式
进程是一个独立的运行单位i,也是操作系统进行资源分配和调度的基本单位。它由以下三部分组成,其中最核心的是进程控制块(PCB)。
1.进程控制块
进程创建时,操作系统为它新建一个pcb,该结构之后常驻内存,任意时刻都可以存取,并在进程结束是删除。PCB是进程实体的一部分,是进程存在的唯一标志。
进程执行时,系统通过其PCB了解进程的现行状态信息,以便对其进行控制和管理;进程结束时,系统回收其pcb,该进程随之消亡。操作系统通过pcb表来管理和控制进程。
当操作系统欲调度某进程运行时,要从该进程的pcb中查出其现行状态及优先级;在调度到某进程后,要根据其pcb中所保存的处理机状态信息,设置该进程恢复运行的现场,并根据其PCB中的程序和数据的内存始址,找到其程序和数据;进程在运行过程中,当需要和与之合作的进程实现同步,通信或访问文件时,也需要访问PCB;当进程由于某种原因而暂停运行时,又需其断点的处理机环境保存在PCB中。可见,在进程的整各生命期中,系统总是通过PCB对进程进行控制的,亦即系统唯有通过进程的PCB才能感知到该进程的存在。
表2.1PCB通常包括的内容
进程描述信息 | 进程控制和管理信息 | 资源分配清单 | 处理机相关消息 |
---|---|---|---|
进程标识符(PID) | 进程当前状态 | 代码段指针 | 通用寄存器值 |
用户标识符(UID) | 进程优先级 | 数据段指针 | 地址寄存器值 |
代码运行入口地址 | 堆栈段指针 | 控制寄存器值 | |
程序的外存地址 | 文件描述符 | 标志寄存器值 | |
进入内存事件 | 键盘 | 状态字 | |
处理机占用时间 | 鼠标 | ||
信号量使用 |
1)进程描述信息。进程标识符:标志各个进程,每个进程都有一个唯一的标识号。用户标识符:进程归属的用户,用户标识符主要为共享和保存服务。
2)进程控制和管理信号。进程当前状态,描述进程的状态信息,作为处理机分配调度的一句。进程优先级:描述进程抢占处理机的优先级,优先级高的进程可优先获得处理机。
3)资源分配清单,用于有关内存地址空间或虚拟地址空间的状况,所打开问价弄到列表和所使用的输入/输出设备信息。
4)处理机相关信息,主要指处理机中各寄存器的值,当进程被切换时,处理机状态信息都必须保存在相应的PCB中,以便在该进程重新执行时,能从断点继续执行。
在一个系统中,通常存在着许多进程的PCB,有的处于就绪态,有的处于阻塞态,而且阻塞的原因各不相同。为了方便进程的调度和管理,需要将各进程的pcb用适当的方法组织起来。目前,常用的组织方式有链接方式和索引方式两种。链接方式将同以状态的PCB链接称一个队列,不同状态对应不同的队列,也可把处于阻塞态的进程的PCB,根据期阻塞原因的不同,拍成多个阻塞队列。索引方式将同意状态的进程组织在一个索引表中,索引表的表项指向相应的pcb,不同状态对应不同的索引表,如就绪索引表和阻塞索引表等。
2.程序段
程序段就是能被进程调度程序调度到cpu执行的程序代码段。注意,程序可被多个进程想用,即多个进程可以运行同一个程序。
3.数据段-程序度 程序本身的运行所需数据。
一个进程的数据段,可以是进程对应的程序加工处理的原始数据,也可以是程序执行时产生的中间或最终结果;
2.1.5进程的通信
进程通信是指进程之间的信心交换。PV操作(第三节)是低级通信方式,高级别通信方式是指以较高的效率传输大量数据的通信方式。高级通信方式主要有以下三类。
pcb 进程的管理者(操作系统)所需的数据都在PCB中
1.共享存储
共享存储又分为两种:低级方式的共享是基于共享结构的共享;高级方式的共享则是基于存储区的共享。操作系统只负责为通信进程提供可共享使用的存储空间和同步互斥工具,而数据交换则由用户自己安排读/写指令完成。
各进程拥有的内存地址空间相互独立
进程 | 共享空间 | 进程 |
---|
为了保证安全,一个进程不能直接访问另一个进程的地址空间
pcb5->pcb1->pcb4
2.消息传递
在消息传递系统中,进程间的数据交换是以格式化的消息(Message)为单位的。若通信的进程之间不存在可直接访问的共享空间,则必须利用操作系统提供的消息传递方法实现进程通信。进程通过系统提供的发送消息和接受消息连个原语进行数据交换。
直接通信方式,发送进程直接把消息发送给接受进程,并将它挂在接收进程的消息缓冲队列上,接收进程从消息缓冲队列中取得消息,如图2.3所示。
简介通信方式。发送进程把消息发送到某个中间实体,接收进程从中间实体取得消息。各进程要互斥地访问管道。
进程 | 进程 |
---|
这种中间实体一般称为信箱,这种通信方式又称信箱通信方式。对应的通信系统称为电子邮件系统。
然后通过邮差送给乙。直接通信就是邮差把心直接送到乙的手上;间接通信就是乙家门口有一个邮箱,邮差把信放到邮箱里。
3.管道通信
管道通信是消息传递的一种特殊方式。所谓“管道”,是指用于连接一个都进程和一个写进程以实习那它们之间的通信和一个共享文件,又命pipe文件。向管道(共享文件)提供输入的发送进程(即写进程),以字符流形式将大量的数据送入(写)管道;而接收管道输出的接收进程(即读进程)则从管道中接收(读)数据。为了协调双方的通信。管道机制必须提供以下三方面的协调能力:互斥,同步和确定对方的存在。
进程 | 缓冲区 | 进程 |
---|---|---|
在LINUX中,管道是一种使用非常频繁的通信机制。从本质上说,管道也是一种文件,但它又和一般的文件有所不同,管道可以克服使用文件进行通信的两个问题,具体表现如下:
1)限制管道的大小。实际上,管道是一个固定大小的缓冲区。在Linux中,缓冲区的大小为4KB,这使得它的大小不像文件那样不加检验地增长。使用单个固定缓冲区也会达赖问题,比如在写管道时可能变满,这种情况发生时,随后对管道的write()调用将默认地被阻塞,等待某些数据被读取,以便腾出足够的空间供write()调用写。
2)读进程也可以工作得比写进程快。当所有当前进程数据已被读取时,管道变空。当这种情况发生时,一个随后的read()调用将默认地被阻塞,等待某些数据被写入,这解决了read()调用返回文件结束的问题。
缓冲区只允许一边写入,另一边读出,因此只要缓冲区中有数据,进程就能从缓冲区中读出,而不必担心会因为其他进程在其中进行写操作而遭到阻塞,因为写进程会先把缓冲区写满,然后才让读进程读,当缓冲区中还有数据时,写进程不会往缓冲区写数据。当然,这也决定了管道通信必然是半双供通信。
3)同一进程中的各个线程共享该进程所拥有的资源。
4)线程是处理机的独立调度单位,多个线程是可以并发执行的。在单CPU的计算机系统中,各线程可交替地占用CPU;早多CPU的计算机系统中,各线程可同时占用不同的CPU,若各个CPU同时为一个进程内的各线程服务,则可缩短进程的处理 时间。
5)一个线程被创建后,便开始了它的生命周期,直至终止。线程在生命周期内会经历阻塞态,就绪态和运行态等各种状态变化。
4.线程的实现方式
线程的实现可以分为两类:用户线程(User-Level Thread,ULT)和内核级线程(Kernel-level Thread,KLT)。内核级线程又称内核支持的线程。
在用户级线程中,有关线程管理(线程的创建,撤销和切换等)的所有工作都由应用程序完成,内核意志不到线程的存在。应用程序可以通过使用线程库设计成多线程序。通常,应用程序从单线程开始,在该线程中开始运行,在其运行的任何时刻,可以通过调用线程库中的派生例程创建一个在相同进程中运行的新线程。
有些系统中使用组合方式的多线程实现。线程创建完全在用户空间中完成,线程的调度和同步也在应用程序中进行。一个应用程序中的多个用户级线程被映射到一些(小于等于用户级线程的数目)内核级线程上。
重点:
操作系统只”看得见“内核级线程,因此只有内核级线程才是处理机分配的单位。
5.多线程模型
·多对一模型。将多个用户级映射到一个内核级线程,线程管理在用户空间完成。此模式中,用户级线程对操作系统不可见(即透明)。 优点:线程管理是在用户空间进行的,因而效率比较高。 缺点:一个线程在使用内核服务时被阻塞,整个进程都被阻塞;多个线程不能并行地运行在多处理机上。
一对一模型。将每个用户级线程映射到一个内核级线程。 优点:当一个线程被阻塞后,允许另一个线程继续执行,所以并发能力强。缺点:每创建一个用户级线程都需要创建一个内核级线程与其对应,这样创建线程的开销比较大,会影响到应用程序的性能。
多对多模型,将n个用户级线程映射到m个内核级线程上,要求M≤n。
特点:多对多模型是多对一模型和一对一模型的 折中,即克服了多对一模型并发度不高的确定啊,由克服了一对一某型的一个用户进程占用太多内核级线程而开销太大的缺点。 此外,还拥有多对一模型和一对一模型各自的优点,可谓集两者之所长。
进程 目的:更好地描述和控制程序并发执行
定义:进程是进程实体的一次运行,是程序进程资源分配和调度的一个独立单位。
组成 PCB:保存进程运行期间相关的数据,是进程存在的唯一标志。
程序段:能被进程调度程序调度到CPU运行的程序的代码段
数据段:存储程序运行期间的相关数据,可以是原始数据也可以是相关结果
进程状态 :状态种类:运行状态: 进程正在处理机上运行
就绪状态:进程已获得了除处理机之外的一切所需资源
阻塞状态:进程正在等待某一时间而暂停运行
创建状态:进程正在被创建,尚未转到就绪状态
结束状态:进程正从系统中消失,分为正常结束和异常推出
状态变化 就绪状态-》运行状态:经过处理机调度,就绪进程得到处理机资源
运行状态-》就绪状态:时间片用完成在可剥夺系统中由更高优先级进程进入
运行状态-》阻塞状态:进程需要的某一资源还没准备好
阻塞状态-》就绪状态:进程需要的资源已准备好
进程控制:创建:终端用户登录系统,作业调度,系统提供服务,用户程序的应用请求等
终止:正常结束,发生异常,外界干预
阻塞:等待资源
唤醒: 资源到达
切换:时间片用完,主动放弃处理机,被更高优先级的进程剥夺处理机
进程通信:共享存储 :低级方式:基于数据结构的共享
高级方式:基于存储区的共享
消息传递:直接通信方式:直接把消息挂到接收进程的消息队列。
间接通信方式:挂到某个中间实体,接收进程找实体接收消息,类似电子邮件。
管道通信:利用一种特殊的pipe文件连接两个进程。
代价:空间代价:进程控制块及协调各运行结构所占用的内存空间开销
时间代价:进行进程间的切换,同步及通信等所付出的时间开销
线程:引入目的:为了更好的使多道程序并发执行,以提高资源利用率和系统吞吐量,增加程序的并发性
特点:是程序执行的最小单元,基本不拥有任何系统资源
实现方式:用户级线程,系统级线程。