计算机操作系统之进程(三)

1.进程的引入?

1.1 在讲述这个问题之前,我们先来进行一下 程序和进程之间的区分?
进程是系统分配资源的单位(拥有资源的基本单位),每一个进程对应与一个活动的程序,当进程激活时,操作系统就将系统的资源包括内存、I/O和CPU等分配给它,使它执行。进程是程序的执行单元,进程可以执行多个程序。一个程序可以对应一个进程或者多个进程,一个进程可以对应一个程序,或者一段程序

1.2 程序,以及进程的引入
程序顺序执行的特征:
① 顺序性,处理机的操作严格按照程序锁规定的顺序执行,即每一操作必须在上一个操作结束之后开始。
② 封闭性,程序是在封闭的环境下执行的,即程序运行时独占全机资源,资源的状态(除初始状态外)只有本程序才能改变它,程序一旦开始执行,其执行结果不受外界因素影响。
③ 可再现性,只要程序执行时的环境和初始条件相同,当程序重复执行时,无论它是从头到尾不停顿地执行,还是走走停停地执行,都将获得相同的结果
程序的并发执行的特征:
① 间断性,程序在并发执行时,由于它们共享系统资源,以及为完成同一项任务而相互合作,致使在这些并发执行的程序之间,形成了相互制约的关系。如计算操作必须在输入操作之后。
② 失去封闭性,程序在并发执行时,是多个程序共享系统中的各种资源,因而这些资源的状态将由多个程序来改变,只是程序的运行失去了封闭性,这样,某程序在运行时,必然会收到其他程序的影响。如当某个程序占用了处理机资源后,另外一个程序必须等待。
③ 不可再现性,程序在并发执行时,由于失去了封闭性,也将导致其再失去可再现性。可能由于不同的操作顺序产生不同的结果。

在未配置OS的系统中,程序的执行方式是顺序执行,即必须在一个程序执行完成后,才允许另外一个程序执行;在多道程序环境下,则允许多个程序并发执行。也正是程序的并发执行,才导致引入进程。
由于程序并发执行时,它们失去了封闭性,间断性和不可再现性,这决定了一般的程序是不能参与并发执行的,因为程序执行的结果是不可再现的。这样,程序的运行也就失去了意义,为了能够是程序能够正确的并发,引入了进程的概念。

2.进程

2.1 进程的定义
进程是一个具有一定独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单元。进程由程序段、相关数据段和PCB(Process control block)进程控制块构成了进程实体。进程是进程实体的运行过程,是系统进行资源分配和调度(在线程未出现之前)的一个独立单位

2.2 PCB
在实际操作系统中,PCB的大小和个数是一定的,系统会为每个进程分配一个PCB结构,操作系统只有通过PCB才能感知进程的存在,因此操作系统中PCB的个数就是该系统可最大并行的进程数.
2.2.1 进程标识信息:用于唯一标识一个进程。作为独立运行的基本单位的标志。

2.2.2 处理机状态信息保存了处理机的上下文: 通用寄存器值、指令寄存器值、PSW值(程序状态字值ProgramStatusWord值)、 用户栈指针值。 通过保存处理机状态,能实现间断性运行方式。

2.2.3 进程调度信息:保存了进程的状态以及调度有关的信息。通过保存处理机状态,能实现间断性运行方式。
包括进程状态(指明进程的当前状态,作为进程调度和对换时的依据),进程优先级(用于描述进程使用处理机的优先级别,优先级高的进程应该优先获取处理机),进程调度所需的其他信息(与进程调度算法有关,如进程已等待CPU的时间总和,进程已执行的时间总和等),事件(进程由执行状态转变为阻塞状态所等待发生的事件,即阻塞原因)

2.2.4 进程控制信息:保存了进程控制的有关信息。 实现进程管理以及进程间通信。
包括程序和数据的地址(进程的程序和数据所在的内存或外存首址,以便在调度该进程时,能从PCB中找到其程序和数据),进程同步和通信机制(实现进程同步和进程通信时必需的机制,如消息队列指针,信号量等),资源清单(除CPU以外的进程所需的全部资源以及已经分配到该进程的资源的清单),链接地址(本进程PCB所在队列中的下一个进程的PCB的首地址)

2.2.5 PCB组织方式: 线性方式(单一队列 如windows系统),连接方式(多级队列),索引方式(表格结构)

2.3进程的特征
① 结构特性,为使程序能够独立运行,应为之配置一进程控制块,即PCB(Process Control Block)。而程序段、相关的数据段和PCB三部分构成进程实体。所谓创建进程,实质上是创建进程实体中的PCB,撤销进程也是撤销进程中的PCB
② 动态性,实质是进程实体的一次执行过程,因此,动态性是进程最基本的特性,进程实体是有一个生命周期的是动态的,而程序则只是一组有序指令的集合,并存放在某种介质上(如硬盘),其本身不具有运动的含义,因而是静态的。
③ 并发性,多个进程实体同存于内存中,并且能够在一段时间内同时运行。并发性是进程的重要特征, 同时也成为OS的重要特征。
④ 独立性,进程实体是一个能独立运行、独立分配资源和独立接受调度的基本单位。凡未建立PCB的程序都不能作为一个独立的单位参与运行。
⑤ 异步性,进程按各自独立的、不可预知的速度向前推进,或者说进程实体按照异步方式运行。

2.4进程的状态
一般是 5种状态:
执行Running:占用处理机(单处理机环境中,某一时刻仅一个进程占用处理机)
就绪Ready:准备执行
阻塞Blocked:等待某事件发生才能执行,如等待I/O完成等
新New:进程已经创建,但未被OS接纳为可执行进程
终止Terminated:因停止或取消,被OS从执行状态释放
这里写图片描述

但是 由于问题:多个进程竞争内存资源,导致 内存资源紧张 并且 无就绪进程,处理机空闲:I/O的速度比处理机的速度慢很多,可能出现全部进程阻塞 等待I/O完成
解决方法:采用交换技术:换出一部分进程到外存,以腾出内存空间、 采用虚拟存储技术:每个进程只能装入一部分程序和数据(存储管理部分)。这就添加了 挂起 状态的 加入。
注意:挂起状态的原因还可能是 操作系统的需要、终端用户的请求、父进程的请求。

合理状态是7种状态:
就绪/挂起:进程在外存,只要调入内存即可执行
阻塞/挂起:进程在外存,等待事件
注意: 激活 挂起状态 是 用 激活原语激活的
这里写图片描述

2.5 进程的调度 这个放在 下节里面 操作系统之CPU的调度与死锁(五)

2.6 进程的控制
进程控制是进程管理中的最基本功能,一般是由OS的内核中的原语(primitive)来实现的。
首先 要介绍一下 操作系统的内核:通常将一些与硬件紧密相关的模块(如中断处理程序,设备驱动程序等)基本的,公共的,运行频率较高的模块(如时钟管理、进程调度),以及关键性数据结构独立开来,使之常驻内存,并对他们进行数据保护,即通常被称为OS内核。

2.6.1 两种执行模式,以及模式切换
2.6.1.1系统模式(又称为系统态)、控制模式或内核模式 :具有较高特权,运行系统特定的指令,包括读写控制寄存器的指令,基本IO指令以及与存储管理有关的指令及一些特定的内存区。内核模式下的处理机及其指令、寄存器和内存都受到完全控制和保护。
2.6.1.2用户模式(或用户态):较低的特权,用户一般运行在用户模式
2.6.1.3模式切换
用户->系统:用户执行到一条系统调用,进入操作系统内核执行
系统->用户:执行完系统调用的功能,返回到用户程序
特殊情况:程序执行到结束语句时,切换到系统模式,不再返回到用户程序

2.6.2 内核主要具备的功能:
支撑功能:提供给OS其他模块的一些基本功能
- 中断处理:内核中最基本的功能,是整个OS赖以活动的基础。
- 时钟管理:
- 统计 监测
- 原语:原子操作(进程的创建与终止、进程的阻塞与唤醒、 进程的挂起与激活、进程切换、模式切换)
进程切换:作用与进程之间的一种操作
模式切换:进程内部所引用的一种操作,当用户程序和转入系统调用,或者相反时,该操作将被引用
进程切换一定会引发模式切换,反之则不然。
资源管理功能:
- 进程管理:进程创建和终止,调度,状态转换,同步和通信,管理PCB
- 存储管理:为进程分配地址空间,对换,段/页管理
- 设备管理:缓存管理,为进程分配IO通道和设备

2.6.3 原子操作
2.6.3.1 进程的创建
一个进程可以创建一个子进程,子进程会继承父进程所拥有的资源,如继承父进程打开的文件、分配到的缓冲区等,当子进程被撤销时,应该讲其从父进程哪里获得的资源归还给父进程,此外,撤销父进程时,也必须同时撤销其所有的子进程。引起创建进程的事件如下:
① 用户登录。② 作业调度。③ 提供服务。④ 应用请求。
进程创建的步骤如下
 ① 申请空白PCB,为新进程申请获得唯一的数字标识符,并从PCB集合中索取一个空白的PCB。
 ② 为新进程分配资源,为新进程的程序和数据以及用户栈分配必要的内存空间。
 ③ 初始化进程控制块,PCB的初始化包括:初始化标识信息,将系统分配的标识符和父进程标识符填入新的PCB中;初始化处理机状态信息,使程序计数器指向程序的入口地址,使栈指针指向栈顶;初始化处理机控制信息,将进程的状态设置为就绪状态或静止就绪状态。
 ④ 将新进程插入到就绪队列,如果进程就绪队列能够接纳新进程,便将新进程插入就绪队列。
 
2.6.3.2 进程的终止
引起进程终止的事件如下:
 ① 正常结束,在任何计算机系统中,都应有一个用于表示进程已经运行完成的指示。
 ② 异常结束,在进程运行期间,由于出现某些错误和故障而迫使进程终止。如越界错误(程序所访问的存储区已越出该进程的区域),保护错(进程试图去访问一个不允许访问的资源或文件,或者以不当的方式进行访问,如写一个只读文件),非法指令(进程试图去执行一个不存在的指令),特权指令错(进程试图执行一条只允许OS执行的指令),等待超时(进程等待谋事件的时间超过了规定的最大值),算术运算错(进程试图执行一个被禁止的运算,如被0除),I/O故障(I/O过程中发生了错误)。
 ③ 外界干预,进程应外界的请求而终止运行,如操作员或操作系统干预,父进程请求(父进程具有终止自己任何子孙进程的能力),父进程终止(父进程终止,其所有子孙进程也将终止)。
终止进程的步骤如下:
① 根据被终止的进程的标识符,从PCB集合汇总检索除该进程的PCB,从中读出该进程的状态。
② 若被终止的进程正处于执行状态,应立即终止该进程的执行,并置调度标志位真,用于指示该进程被终止后应重新进行调度
③ 若该进程还有子孙进程,还应将其子孙进程予以终止,以防他们成为不可控的进程。
④ 将被终止的进程所拥有的全部资源,或者归还给其父进程,或者归还给操作系统。

2.6.3.3 进程的阻塞与唤醒
引起进程阻塞与唤醒的事件如下:
① 请求系统服务,当正在执行的进程请求操作系统提供服务时,由于某种原因,操作系统并不立即满足该进程的要求,该进程只能转变为阻塞状态来等待。
② 启动某种操作,当进程启动某种操作后,如果该进程必须在该操作完成之后才能继续执行,则必须先使该进程阻塞,以等待该操作完成。
 ③ 新数据尚未到达,对于相互合作的进程,如果其中一个进程需要先获得另一合作进程提供的数据后才能对数据进行处理,则只要其所需数据尚未到达,该进程只有(等待)阻塞。
④ 无新工作可做,系统往往设置一些具有某些特定功能的系统进程,每当这种进程完成任务后,便把自己阻塞起来以等待新任务到来。
进程阻塞步骤如下:
正在执行的进程发现上述某件事情时,由于无法继续运行,于是进程便通过调用阻塞原语block把自己阻塞,可见,进程的阻塞是进程自身的一种主动行为,之后进程会停止执行,并将进程控制块的状态由执行改为阻塞,并将PCB插入阻塞队列,如果系统中设置了因不同事件而阻塞的多个阻塞队列,则应将本进程插入到具有相同事件的阻塞队列中,最后,转调度程序进行重新调度,将处理机分配给另一就绪进程并进行切换。即保留被阻塞进程的处理机状态到PCB中,再按新进程的PCB中的处理机状态设置CPU环境。
进程唤醒步骤如下:
当被阻塞进程所期待的时间出现时,如I/O完成获其所期待的数据已经到达,则由有关进程(如用完并释放I/O设备的进程)调用唤醒原语wakeup,将等待该事件的进程唤醒,首先将被阻塞的进程从等待该事件的阻塞队列中移出,将其PCB中的现行状态由阻塞改为就绪,然后再将该PCB插入到就绪队列中。值得注意的是,block原语与wakeup原因应该在不同进程中执行。

2.6.3.4 进程的挂起与激活
进程挂起步骤如下:
当出现引起进程挂起的事件时,如用户进程请求将自己挂起或父进程请求将自己的某个子进程挂起,系统将利用挂起原语suspend将指定进程或处于阻塞状态的进程挂起。 检查被挂起进程的状态,若处于活动就绪状态,便将其改为静止就绪,对于活动阻塞状态的进程,则将其改为静止阻塞,若被挂起的状态正在执行,则转向调度程序重新调度。
进程激活步骤如下:
当发生激活进程的事件时,例如,父进程或用户进程请求激活指定进程,若该进程驻在外存而内存中已有足够的空间时,则可将在外存处于静止就绪状态的该进程换入内存,这时,利用激活原语active将指定进程激活,激活原语先将进程从外存调入内存,检查该进程的现行状态,由对应的静止状态改为活动状态,若使用抢占式调度策略,则有新进程如就绪队列时,应检查是否要进行重新调度,即由调度程序将被激活进程与当前进程进行优先级的比较,如果被激活进程的优先级更低,就不必重新调度,否则,立即剥夺当前进程的运行,把处理机分配给刚被激活的进程。

2.6.4 进程的同步
进程同步主要是对多个相关进程在执行次序上进行协调,以使并发执行的诸进程之间能有效共享资源和相互合作,而从使程序的执行具有可再现性。在多道程序环境下,当程序并发执行时,由于资源共享和进程合作,使处于一个系统中的诸进程之间可能存在着以下两种形式的制约关系。
  ① 间接相互制约关系,同处于一个系统中的进程,通常都共享着某种系统资源,如共享CPU、I/O设备等,间接相互制约即源于这种资源共享。
  ② 直接相互制约关系,这种制约主要源于进程间的合作,如A进程通过缓冲向B进程提供数据,当缓冲为空时,B阻塞,待A输入数据后,B被唤醒,缓冲满时,A阻塞,待B取出数据后,A被唤醒。

2.6.4.1临界区
多硬件资源如打印机,磁带机等,都属于临界资源,诸进程应该采取互斥方式,实现对这种资源的共享。人们把在每个进程中访问临界资源的那段代码成为临界区,显然,若能保证诸进程互斥地进入自己的临界区,便可实现诸进程对临界资源的互斥访问。

2.6.4.2进程的同步机制
信号量机制,信号量分类:整型信号量、记录型信号量、AND信号量、信号量集。信号量用途:实现共享资源互斥、控制进程间的前驱关系。

2.6.4.3进程的同步原则
 ① 空闲让进,当无进程处于临界区时,表明临界资源处于空闲状态,应允许一个请求进入临界区的进程立即进入自己的临界区,以有效的利用临界资源。
 ② 忙则等待,当已有进程进入临界区时,表明临界资源正在被访问,因而其他视图进入临界区的进程必须等待,以保证对临界资源的互斥访问。
 ③ 有限等待,对要求访问临界资源的进程 ,应保证在有限时限内能进入自己的临界区,以免陷入死等状态。
 ④ 让权等待,当进程不能进入自己的临界区时,应立即释放处理机,以免进程陷入忙等状态。

2.6.4.4 进程同步的问题
① 生产者/消费者问题 ② 哲学家进餐问题 ③ 读写问题

2.6.5 进程的通信
进程通信,是指进程之间的信息交换,进程的互斥和同步,由于只能交换很少量的信息而被归结为低级通信,目前的高级通信机制可归结为四大类:
① 共享存储器系统
相互通信的进程共享某些数据结构或共享存储区,进程之间能够通过这些空间进行通信,基于此,又可以分为如下两种类型:基于共享数据结构的通信方式,在这种通信中,要求诸进程共用某些数据结构,借此实现进程间的信息交换。基于共享存储区的通信方式,为了传输大量数据,在存储器中划出一块共享存储区,诸进程可通过对共享存储区中的数据的读或写来实现通信
② 消息传递系统
进程间的数据交换是以格式化的消息为单位,程序员直接利用操作系统提供的一组通信命令(原语),不仅能实现大量数据的传递,而且还隐藏了通信的实现细节,使通信过程对用户是透明的,从而大幅减少通信程序编制的复杂性。
③ 管道通信
连接一个读进程和一个写进程以实现它们之间通信的一个共享文件,又名pipe文件,向管道(共享文件)提供输入的发送进程,以字符流形式将大量的数据送入管道;而接受管道输出的接受进程,则从管道中接受数据,由于发送和接受进程是利用管道进行通信的,因此叫做管道通信。管道通信需要具有三方面的协调能力:互斥(当一个进程正在对pipe执行读/写时,其他进程必须等待),同步(当写进程把一定数量的数据写入pipe,便去睡眠等待,到读进程取走数据后,再把它唤醒,当读进程读一个空pipe时,也应该睡眠等待,直到有数据写入管道,才将其唤醒),确定对方是否存在,只有确定了对方已存在时,才能进行通信。
④ 客户机服务器系统:套接字、RPC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值