操作系统学习笔记-进程描述与控制

进程的描述

程序执行

程序顺序执行时的特征

顺序性:指处理机严格地按照程序所规定地顺序执行,即每一操作必须在下一个操作开始之前结束

封闭性:程序在封闭的环境执行,即程序运行时独占全机资源,资源的初始状态只有本程序才能改变他,程序一旦执行其结果不受外界因素的影响

可再现性:只要程序执行时的环境和初始条件相同,当程序重复执行时,不论它是从头到尾不停顿地执行,还是“停停走走”地执行,都可以获得相同地结果。

程序顺序执行时地这种特性,为程序员检测和校正程序地错误带来了很大地方便

程序并发执行时的特征

间断性:程序在并发执行时,由于它们共享系统资源,以及为完成同一项任务而相互合作,致使这些并发执行的程序之间形成了相互制约的关系。相互制约将导致程序具有“执行-暂停-执行”这种间断性的活动规律

失去封闭性:当系统中存在着多个可以并发执行的程序时,系统中的各种资源将为它们所共享,而这些资源的状态也由这些程序来改变,致使其中任一程序在运行时,其环境都必然会受到其他程序的影响。

不可再现性:由于失去了封闭性也将导致其失去了可再现性

进行的定义和特征

进程的定义

为了使参与并发执行的每个程序(含数据)都能独立运行,在操作系统中为之配置了一个专门的数据结构,称为进程控制块(PCB),由程序段、相关的数据段和PCB三部分便构成了进程实体(又称进程映像)。我们把进程实体就称为进程。所谓创建撤销进程,就是创建撤销进程实体中的PCB

典型的进程定义:

1.进程是程序的一次执行

2.进程是一个程序及其数据在处理机上顺序执行时所发生的活动

3.进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分类和调度的一个独立单位。

在引入进程实体的概念后,我们可以把传统OS中的进程定义为:“进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位”

可并发执行的程序在一个数据集合(该程序所需的相关数据(变量、工作区间、缓冲区))的运行过程

进程的特征

动态性:由创建而产生,由调度而执行,因得不到资源而阻塞,由撤销而消亡。

并发性:多个进程实体存在于内存中,且能在一段时间内同时运行。

独立性:独立性是指进程实体是一个能独立运行、独立获得资源和独立接受调度的基本单位。

异步性:是指进程是按异步方式运行的,即按各自独立的、不可预知的速度向前推进

进程的三种基本状态

就绪状态:如果系统中有许多处于就绪状态的进程,通常将他们按一定的策略(如优先级策略)排成一个队列,称该队列为就绪队列

执行状态

阻塞状态:指正在执行的进程由于发生某事件(I/O请求、申请缓冲区失败等)暂时无法继续执行的状态,即进程的执行受到阻塞。此时引起进程调度,OS把处理机分配给另一个就绪进程,而让受阻进程处于暂停状态,一般将这种暂停状态称为阻塞状态,有时也称为等待状态或封锁状态

创建和终止状态

为了满足进程控制块对数据及操作的晚自习要求以及增强管理的灵活性,通常在系统中又为进程引入了两种常见状态:创建和终止状态

创建状态:进程是由创建而产生的。对于处于创建状态的进程,当期获得了所需的资源以及对其PCB的初始化工作完成后,便可由创建状态转入就绪状态

终止状态:两个步骤,首先等待操作系统进行善后处理,最好将其PCB清零,并将PCB返还系统

在这里插入图片描述

挂起操作和进程状态的转换

为了系统和用户观察和分析进程的需要

挂起操作的引入

基于系统和用户的如下需求

终端用户的需要:以便研究程序运行期间的可疑问题的执行情况或对程序进行修改

父进程请求:以便考察和修改该子程序或者协调各子进程间的活动

负荷调节的需要:当实时系统中的工作负荷较重,已可能影响到对实时任务的控制时,可由系统把一些不重要的进程挂起,以保证系统能正常运行。

操作系统的需要:以便检测运行中的资源使用情况或进行记账

进程状态的转换

在这里插入图片描述

进程控制块的作用

为了便于系统描述和管理进程的运行。是操作系统中最重要的记录型数据结构

作为独立运行基本单位的标志

能实现间断性运行方式:系统可以将cpu现场信息保存在中断进程的pcb中,供该进程再次被调度执行时恢复cpu现场时使用

提供进程管理所需的信息

提供进程调度所需要的信息:提供进程所处状态,优先级信息等

实现与其他进程的同步与通信

进程控制块的信息

进程标识符

进程标识符用于唯一地标识一个进程

外部标识符(由创建者提供)内部标识符(进程地序号)

处理机状态

处理机状态信息也称为处理机地上下文,主要是由处理机地各种寄存器地内容组成的。

这些寄存器包括:

通用寄存器

指令寄存器:其中存放了要访问地下一条指令地地址

程序状态字PSW:其中含有状态信息,如条状码,执行方式,中断屏蔽标志等

用户栈指针

进程调度信息

进程状态,指明进程当前状态

进程优先级

进程调度所需其他信息,它们与所采取的进程调度算法有关,如进程等待cpu的时间总和、进程已执行的时间总和等

事件:指进程由执行专题转变为阻塞状态所等待发生的事件,即阻塞原因。

进程控制信息

程序和数据的地址

进程同步和通信机制(协调各种进程)

资源清单

链接指针

进程控制块的组织方式

线性方式,将系统中所有的PCB都组织在一张线性表中

链接方式,把具有相同状态进程的PCB分别通过PCB中的链接字链接成一个队列

索引方式,系统根据所有进程状态的不同,建立几张索引表

进程控制

操作系统内核

通常将一些与硬件紧密相关的模块(如中断处理程序等)、各种常用设备的驱动程序以及运行频率比较高的模块(如时钟管理、进程调度和许多模块公用的一些基本操作),都安排在紧靠硬件的软件层次中,将它们常驻内存,即通常被称为的OS内核。

目的:便于对这些软件进行保护,防止遭受其他应用程序的破坏;提高OS运行效率

为了防止OS本身及其关键数据(如PCB等)遭受程序有意或无意的破坏,通常将处理机的执行状态分为系统态和用户态两种

系统态又称管态,也称为内核态。它具有较高的特权,能执行一切指令,访问所有寄存器和存储区,传统的OS都在系统态运行

用户态又称目态。它是具有较低特权的执行状态,仅能执行规定的指令,访问指定的寄存器和存储区。

一般情况下,应用程序只能在用户态运行

支持功能

中断处理中断处理是内核最基本的功能,是整个操作系统赖以活动的基础,OS中许多重要的活动(系统调用、键盘命令的输入、进程调度、设备驱动)无不依赖于中断

时钟管理(时间片轮转调度、实时系统中断截止时间控制、批处理中的最长运行事件控制等)

原语操作所谓原语就是由若干指令组成的,用于完成一定功能的一个过程

资源管理功能

进程管理

存储器管理

设备管理

进程的创建

OS运行一个进程(父进程)创建另一个进程(子进程)

在系统中每当出现了创建新进程的请求后,OS便调用进程创建原语Creat按下述步骤创建一个新进程:

1.申请空白PCB

2.为新进程分配其运行所需资源。新进程对资源的需求一般也要提前告知操作系统或其父进程

3.初始化进程控制块(PCB)

包括:初始化标识信息;初始化处理机状态信息;初始化处理机控制信息

4.如果进程就绪队列能够接纳新进程,便将新进程插入到就绪队列

进程的终止

引起进程终止的事件

1.正常结束

2.异常结束:

1.越界错:程序访问的存储区,已越出该进程的区域

2.保护错,指进程试图访问一个不允许访问的资源或文件,或以不适当的方式进行访问(如进程试图去写一个只读文件)

3.非法指令,程序试图区执行一条不存在的指令

4.特权指令错,指用户进程试图去执行一条只允许OS执行的指令

5.运行超时,指进程的执行时间超过了指定的最大值

6.等待超时,指进程等待某事件的时间超过规定的最大值

7.算术运算错,值进程试图去执行一个被禁止的运算

8.I/O故障,指在I/O过程中发生了错误

3外界干预

1.操作员或操作系统干预

2.父进程请求

3.因父进程终止,当父进程终止时,它的所有子进程都应该结束

进程的终止过程

1.根据被终止进程的标识符,从PCB集合中检索出该进程的PCB。从中读出该进程的状态

2.若被终止进程正处于执行状态,应立即终止该进程的执行,并置调度标志为真,用于至少该进程被终止后应重新进行调度

3.若该进程还有子孙进程,还应该将其所有子孙进程也都予以终止,以防它们成为不可控的进程

4.若被终止进程所拥有的全部资源或者归还给其父进程或者归还给系统

5.将被终止进程(PCB)从所在队列(或链表)中移出,等待其他程序来搜索信息

进程的阻塞与唤醒

下述几类事件会引起进程阻塞或被唤醒:

向系统请求共享资源失败;等待某种操作完成;新数据尚未到达;等待新任务的到达

在执行的过程中,如果发生了上述某事件,进程便调用阻塞原语block将自己阻塞。阻塞是进程自身的一种主动行为

当被阻塞进程所期待的事件发生时,则由有关进程调用唤醒原语wakeup,将等待该事件的进程唤醒。weakup执行的过程是:首先把阻塞的进程从等待该事件的阻塞队列中移除,将其PCB中的现性状态由阻塞改为就绪,然后将该PCB插入就绪队列中。

进程同步

进程同步的基本概念

两种形势的制约关系

1.间接相互制约(打印机等)2.直接相互制约(相互合作)

临界资源

许多硬件资源如打印机、磁带机等

临界区

人们把在每个进程中访问临界资源的那段代码称为临界区

可把一个访问临界资源的循环进程描述未:

while(TRUE)

{

​ 进入区

​ 临界区

​ 退出区

​ 剩余区

}

同步机制应遵循的规则

1.空闲让进(有效的使用临界资源)

2.忙则等待(互斥的使用临界资源)

3.有限等待(避免”死等“)

4.让权等待(拥有cpu的权利,不能进入临界区的进程,应释放cpu(如转换到阻塞状态))(忙等)

信号量机制

记录型信号量

记录型信号量机制是一种不存在忙等现象的进程同步机制。但在采取了“让权等待”的策略后,又会出现多个进程等待访问同一临界资源的情况。为此,在信号量机制中,除了一个用于代表资源数目的整型变量value外,还应增加一个进程链表指针list,用于连接上述的所有等待进程。记录型信号量是由于它采用了记录型的数据结构而得名。它包含的两个数据项可描述如下

		typedef struct{
			int value;
			struct process_control_block *list;
		}semaphore

相应的,wait(S)和signal(S)的操作可描述如下

		wait(semaphore *S){
			S->value--;
			if(S->value<0)block(S->list)
		}
		signal(semaphore *S){
			S->value++;
			if(S->valuee<=0)wakeup(S->list);
		}

​ 在记录型信号量机制中。S->value的初值表示系统中某类资源的数量因而又称为资源信号量,对他的每次wait操作,意味着进程请求一个单位的该资源,使系统中可供分配的该类资源数减少一个,因此描述为S->value–;

​ 当S.value<0时,表示该类资源已分配完毕,因此进程应调用block原语进行自我阻塞。放弃处理机,并插入到信号量链表S->list中。可见,该机制遵循了“让权等待”准则。

​ 此时S->value的绝对值表示在该信号量链表中已阻塞进程的数目。对信号量的每次signal操作表示执行进程释放一个单位资源,使系统中可供分配的该类资源数增加一个,故S->value++操作表示资源数目加一。

​ 若加1后仍是S->value<=0,则表示该信号量链表中仍有等待该资源的进程被阻塞,故还应调用wakeup原语,将S->list链表中的第一个等待进程唤醒。

​ 如果S->value的初值为1,表示只允许一个进程访问临界资源,此时的信号量转化为互斥信号量,用于进程互斥。

信号量的应用

1.利用信号量机制实现进程互斥

为使多个进程能互斥地访问某临界资源,只需为该资源设置一互斥信号量mutex,并将其初始值设为1,然后将各进程访问该资源地临界区CS置于wait(mutex)和signal(mutex)操作之间即可。

利用信号量实现两个进程互斥地描述如下:

1.设mutex为互斥信号量,其初值为1,取值范围为(-1,0,1)。

当mutex为1时,表示两个进程皆未进入需要互斥地临界区;

当mutex为0时,表示有一个进程进入临界区运行,另一个必须等待,挂入阻塞队列;

当mutex为-1时,表示有一个进程正在临界区运行,另外一个进程因等待而阻塞在信号量队列中,需要被当前已在临界区运行的进程退出时唤醒。

2.代码描述

semaphore mutex = 1;         
PA(){
while(1){
	wait(mutex);
	临界区;
	signal(mutex);
	剩余区;
}
}
PB(){
while(1){
	wait(mutex);
	临界区;
	signal(mutex);
	剩余区;
}
}

利用信号量机制实现进程互斥时应该注意,wait(mutex)和signal(mutex)必须成对出现,缺少wait会导致系统混乱,不能保证对临界资源的互斥访问;而缺少signal将会导致临界资源永远不被释放,从而使因等待该资源而阻塞的进程不能被唤醒。

2.利用信号量实现同步

分别为某种关系设置一个同步的信号量S,其初值为0,在需要等待其他进程的地方插入wait(S),在完成其他进程所等的动作处插入signal(S)

步骤:

1.确定进程:包括进程的数量、进程的工作内容

2.驱动进程之间的互斥、同步关系:

检查进程间要竞争哪些临界资源,以及有哪些工作必须在合作进程完成某个动作后才能进行,以此来确定进程间是互斥还是同步。

3.确定信号量:分别为某种临界资源定义一个信号量,初值为临界资源的初始个数;分贝为某种同步关系定义一个信号量,初值为0。

(每个信号量在使用以前都必须先定义并赋好处值。)

4。用类程序语言描述算法。

根据进程的工作内容写出进程对应的关键动作;然后:

在需要使用临界资源的程序段前通过加相应的信号量的P操作来申请该资源,在使用完临界资源后加相应信号量的V操作来释放该资源。

在相应等合作进程完成某个动作才能执行的程序段之前加相应信号量的P操作;在完成被合作进程所等的动作之后加相应信号量的V操作

注意:每个信号量的PV操作通常是成对的。

进程通信

进程通信是指进程间的信息交换。由于进程的互斥与同步,需要在进程间交换一定的信息,故不少学者将它们野归为进程通信,但只能吧它们称为低级进程通信。

低级通信只能传递状态和整数值(控制信息),包括进程互斥和同步所采用的信号量和管程机制

优点:速度快

缺点:传递信息量小、效率低;通信对用户不透明;编程复杂

在进程之间要传递大量暑假时,应利用OS提供的高级通信工具,该工具的主要特点是:

使用方便,通信对用户是透明的;高效传送任意数量的暑假,包括三类:消息缓冲、管道、共享存储区。

进程通信的类型

共享存储器系统

在共享存储器系统中,相互通信的进程共享某些数据结构或共享存储区,进程之间能够通过这些空间进行通信。

基于共享数据结构的通信方式

在这种通信方式中,要去诸进程公用某些数据结构,借以实现诸进程间的信息交换。这种通信方式仅适用于传递相对少量的数据,通信效率低下,属于低级通讯。

基于共享存储区的通信方式

为了传递大量数据,在内存中划出了一块共享存储区域,诸进程可通过对该共享区的读写交换信息,实现通信,数据的形式和位置甚至访问控制都是由进程负责,而不是OS。这种通信方式属于高级通信

管道通信系统

所谓管道,是指用于连接一个读进程和一个写进程以实现它们之间通信的一个共享文件,又名pipe文件。向管道(共享文件)提供输入的发送过程(即写进程)以字符流形式将大量的数据送入管道;而接受管道输出的接受进程(即读进程)则从管道中接受数据。

  • 常用于命令行所指定的输入输出重定向和管道命令。

  • 在使用管带前要建立相应的管道,然后才可使用

    无名管道:用于父子进程或子进程间通信

    有名管道:用于父进程之间通信(又称FIFO通信)

管道机制必须提供以下三方面的协调能力:

1.互斥,即当一个进程正在对pipe执行读写操作时,其他的进程必须等待

2.同步,值当输入(写)进程把一定数量的数据写入pipe,便去睡眠等待,直到输出(读)进程取走数据后再把它唤醒。当读进程读一空pipe时,也应该睡眠等待,直到写进程将数据写入管道后才将之唤醒。

3.确定对方是否存在,只有确定了对方已存在时才能进行通信。

消息传递系统

在该机制中,进程不必借助任何共享存储区或数据结构,而是以格式化的消息为单位,将通信的数据封装在消息中,并利用操作系统提供的一组通信命令(原语),在进程间进行消息传递,完成进程间的数据交换

该方式隐藏了通信实现的细节,使通信过程对用户透明化,降低了通信程序设计的复杂度和错误率。

该通信方式属于高级通信方式,因其实现方式不同,可进一步分为两类:

1.直接通信方式(消息缓冲机制):使指发送进程利用OS所提供的发送原语,直接把消息发送给目标进程;

2.间接通信方式(信箱通信方式):指发送和接受进程,都通过共享中间实体(称为邮箱)的方式进行消息的发送和接受,完成进程间的通信。

客户机-服务器系统

该通信机制,在网络环境的各种应用邻域已成为当前主流的通信实现机制,其主要的实现方法分为三类:套接字、远程过程调用和远程方法调用

1.套接字:一个套接字就是一个通信标识类型的数据结构,包含了通信目的的地址、通信使用的端口号、通信网络的传输层协议、进程所在的网络地址,以及针对客户或服务器程序提供的不同系统调用(或api函数)等,是进程通信和网络通信的基本构件。套接字是为客户/服务器模型还设计的。

2.远程过程调用和远程方法调用

远程过程(函数)调用RPC,是一个通信协议,用于通过网络连接的系统。该协议允许运行与一台主机(本地)系统上的进程调用另一台助教(远程)系统上的进程。如果涉及的软件采用面向对象编程,那么远程过程调用亦可称为远程方法调用。

负责处理远程过程调用的进程有两个,一个是本地客户进程,另一个是远程服务器进程,这两个进程通常也被称为网络守护进程,主要负责在网络间的消息传递,一般情况下,这两个进程都处于阻塞状态,等待消息。

线程

线程的引入

进程的两个基本属性

1.进程是有个可拥有资源的独立单位,有个进程要能独立运行,它必须拥有一定的资源。

2.进程同时又是一个可独立调度和分配的基本单位。

程序并发执行所需要付出的时空开销

1.创建进程,系统在创建一个进程时,必须为它分配其所必须的、除处理机外的所有资源。

2.撤销进程,系统在撤销进程时,又必须先对其所占的资源执行回收操作,然后再撤销PCB。

3.进程切换,对进程进行上下文切换时,需要保留当前进程的CPU环境,设置新选中进程的CPU环境,因而须花费不少处理机时间。

由于进程是一个资源的拥有者,因而再创建、撤销和切换中,系统必须为之付出较大的时空开销。这就限制了系统中所设置进程的数目,而且进程切换也不宜过于频繁,从而限制了并发程度的进一步提高。

线程

作为调度和分配的基本单位

线程与进程的比较

由于线程具有许多传统进程所具有的特征,所以又称为轻型进程或进程元,把传统进程称为重型进程。

调度的基本单位

在传统OS中,进程是作为独立调度和分派的基本单位,因而进程是能独立运行的基本单位,在每次调度时,都需要进行上下文切换,开销较大

在引入线程的OS中,已把线程作为调度和分派的基本单位,因而线程是能独立运行的基本单位。当线程切换时,仅需保存和设置少量寄存器内容,切换代价远低于进程。

在同一进程中,线程的切换不会引起进程的切换,但从一个进程中的进程,切换到另一进程的线程时,必然会引起进程的切换。

并发性

在引入线程的OS中,不仅进程之间可以并发执行,而且在一个进程中的多个线程之间亦可以并发执行,甚至还允许在一个进程中的所有进程都能并发执行。同样,不同进程中的线程亦可并发执行,甚至还允许在一个进程中的所有进程并发执行。

拥有资源

进程可以拥有资源,并作为系统中拥有资源的一个基本单位。然而,线程本身并不拥有系统资源,而是仅有一点必不可少的、能保证独立运行的资源。

线程除了拥有自己的少量资源外,还允许多个线程共享该进程所拥有的资源,这首先表现在:属于同一进程的所有线程都具有相同的地址空间,这意味着,线程可以访问该地址空间中的每一个虚地址;此外,还可以访问进程所拥有的资源,如已打开的文件、定时器、信号量机构等的内存空间和它所申请到的I/O设备等。

独立性

在同一进程中的不同线程之间的独立性要比不同进程之间的独立性低的多,这是因为,为防止进程之间彼此的干扰和破坏。

系统开销

在创建或撤销进程时,系统都要为之分配和回收进程控制块、分配和回收其他资源。OS为此的开销明显大于线程创建或撤销时所付出的开销。在进程切换时,涉及到进程上下文的切换,而线程的切换代价也远低于进程的。

此外,由于一个进程中的多个线程具有相同的地址空间,线程之间的同步和通信也比进程简单。因此,在一些OS中,线程的切换、同步和通信都无需操作系统内核的干预。

支持多处理机

在多处理机系统中,对于传统的进程,即单线程进程,不管有多少处理机,该进程只能运行在一个处理机上,但对于多线程进程,就可以将一个进程中的多个进程分配到多个处理机上,使他们并行执行,着无疑将加速进程的完成。

多线程OS中的进程属性

通常在多线程OS中的进程都包含了多个线程,并为他们提供资源。OS支持在一个进程中的多个线程能并发执行,但此时的进程就不再作为一个执行的实体。多线程OS中的进程有以下属性

1.进程是一个可拥有资源的基本单位

2.多个线程可并发执行。通常一个进程第一含有若干给相对独立的进程(至少一个)。系统为这些进程提供资源和运行环境,使他们能并发执行。在OS中所有线程都只能属于某一个特定进程。

3.进程不再是可执行的实体,在多线程OS中,是把线程作为独立运行(或称调度)的基本单位

、分配和回收其他资源。OS为此的开销明显大于线程创建或撤销时所付出的开销。在进程切换时,涉及到进程上下文的切换,而线程的切换代价也远低于进程的。

此外,由于一个进程中的多个线程具有相同的地址空间,线程之间的同步和通信也比进程简单。因此,在一些OS中,线程的切换、同步和通信都无需操作系统内核的干预。

支持多处理机

在多处理机系统中,对于传统的进程,即单线程进程,不管有多少处理机,该进程只能运行在一个处理机上,但对于多线程进程,就可以将一个进程中的多个进程分配到多个处理机上,使他们并行执行,着无疑将加速进程的完成。

多线程OS中的进程属性

通常在多线程OS中的进程都包含了多个线程,并为他们提供资源。OS支持在一个进程中的多个线程能并发执行,但此时的进程就不再作为一个执行的实体。多线程OS中的进程有以下属性

1.进程是一个可拥有资源的基本单位

2.多个线程可并发执行。通常一个进程第一含有若干给相对独立的进程(至少一个)。系统为这些进程提供资源和运行环境,使他们能并发执行。在OS中所有线程都只能属于某一个特定进程。

3.进程不再是可执行的实体,在多线程OS中,是把线程作为独立运行(或称调度)的基本单位

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

curtain灬、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值