操作系统(OS)进程与调度

一、进程的定义、组成、组织方式、特征

1.1 进程的定义

1、程序:一个指令序列,即指令(或语句)的集合。
2、程序的顺序执行:指令之间是顺序关系,是一个静态的概念,仅当前一操作(程序段)执行完后,才能执行后继操作。
3、顺序执行的特点:

  • 顺序性;处理机的操作严格按照程序所规定的顺序执行
  • 封闭性;程序独占全机资源,程序执行结果不受外界因素的影响
  • 可再现性;只要输入的初始条件相同,则无论何时重复执行该程序都会得到相同的结果。

4、程序的并发执行:

  • 间断性:任意程序不可能一直占有CPU
  • 失去封闭性:多个程序共享系统中的各种资源,因而这些资源的状态将由多个程序来改变,致使程序的运行失去了封闭性。
  • 不可再现性:程序在并发执行时,由于失去了封闭性,也导致失去了可再现性。

5、PCB:进程控制块,用来描述进程的各种信息。因为PCB经常被系统访问,所以应常驻内存
6、进程实体:由PCB、程序段、数据段三部分组成,又称为进程
7、进程:进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位
8、PCB与进程的关系:PCB是进程存在的唯一标志。所谓创建进程,即创建进程实体中的PCB;撤销进程即撤销进程实体中的PCB
9、进程的基本属性:进程是一个可拥有资源的独立单位;进程又是一个可独立调度的基本单位。
10、进程与程序的关系:前者是一种动态概念,而后者是一种静态概念,进程是程序的一次执行

1.2 进程的组成

1、PCB:包括进程描述信息、进程控制和管理信息、资源分配清单、处理机相关信息
2、程序段:存放要执行的代码
3、数据段:存放程序运行过程中处理的各种数据

1.3 进程的组织方式

线性方式:按照进程状态将PCB分为多个队列,如就绪队列、阻塞队列等,操作系统持有指向各个队列的指针
索引方式:根据进程状态的不同建立几张索引表,如就绪索引表、阻塞索引表等,操作系统持有指向各个索引表的指针

1.4 进程的特征

动态性:进程是进程实体的一次执行过程(动态性),有一定的生命周期(由创建而产生,由调度而执行,由撤消而消亡)。
并发性:多个进程同存于内存中,且能在一段时间内同时运行。
独立性: 进程是一个能独立运行,独立分配资源和独立接受调度的基本单位。
异步性:进程按各自独立的、不可预知的速度向前推进。
结构性:从结构上看,进程实体至少包括: 程序、数据和进程控制块(PCB) 。

二、进程的状态与转换

2.1 进程的五种状态

  • 运行态:占有CPU、并在CPU上运行
  • 就绪态:已具备运行条件(已分配到除CPU以外的所有必要资源),但由于没有空闲CPU而暂时不能运行
  • 阻塞态:因等待某一事件而暂时不能运行,放弃CPU
  • *创建态:进程正在被创建,操作系统为进程分配资源,初始化PCB
  • *终止态:进程正在从系统中撤销,操作系统会回收进程拥有的资源,撤销PCB
  • 补充:挂起态:挂起进程即把进程放在外存中
  • 引入挂起状态的原因
    终端用户的请求。暂停进程的执行,修改程序。
    (2) 父进程请求。 挂起自己的子进程。
    (3) 负荷调节的需要。把不重要的进程挂起,避免系统负荷较重。
    (4) 操作系统的需要。 检查资源使用情况等。

2.2 进程状态的转换

操作系统(OS)进程与调度

三、进程控制

3.1 操作系统内核

  • 1、内核定义:计算机上配置的底层软件,是操作系统最基本、最核心的部分。操作系统分为非内核部分和内核部分
  • 2、内核目的:便于对软件进行保护,防止遭到其他应用程序的破坏;提高OS的运行效率
  • 3、内核功能:
    • 时钟管理:实现计时功能
    • 中断管理:负责实现中断机制
    • 原语
    • 对系统资源进行管理:进程管理、存储器管理、设备管理
    • 其中,时钟管理、中断管理和原语是与硬件关联较为紧密的部分
  • 4、原语:一种特殊的程序,处于操作系统最底层,是最接近硬件的部分。这种程序的运行具有原子性——其运行只能一气呵成,不可中断

3.2 进程控制

1、进程控制定义:
① 进程控制包括创建新进程、终止已完成的进程、进程的阻塞与唤醒等功能
② 系统为进程进行的操作:创建进程(分配内存、I/O、PCB);进程切换(保留现场、恢复环境);撤消进程(回收资源、撤消PCB)
③ 进程控制一般是由OS内核中的原语实现控制,原语采用“开中断指令”和“关中断指令”实现

操作系统(OS)进程与调度

3.2.1 进程的创建

1、引起创建进程的事件:用户登录、作业调度、提供服务(前三个由系统内核创建)、应用请求(由用户创建)
2、进程状态转换:无 -> 创建态 -> 就绪态
3、创建流程:(如下流程都是在 原语 中实现)

操作系统(OS)进程与调度

3.2.3 进程的阻塞与唤醒

1、引起进程阻塞与唤醒的事件:请求系统服务不能满足时 ;启动某种操作 如I/O;新数据尚未到达;无新工作可做
2、进程状态转换:

  • 阻塞:运行态 -> 阻塞态
  • 唤醒:阻塞态 -> 唤醒态

3、阻塞原语与唤醒原语必须成对出现
4、阻塞过程:

操作系统(OS)进程与调度

四、进程同步

1、进程同步定义:同步又称直接制约关系,它是指未完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调他们的工作次序而产生的制约关系
2、两种形式的制约关系

  • 间接相互制约关系。进程间要通过某种中介发生联系。即互斥关系,排他性地对资源的访问。
    互斥必须满足两个条件:
    (1)多个进程共享同一个临界资源。
    (2)共享的方式是先来者先使用的异步方式。
  • 直接相互制约关系。即同步关系,指多个进程的执行有先后顺序的限制。

3、临界资源: 系统中某些资源一次只允许一个进程使用,称这样的资源为临界资源或互斥资源。如打印机、共享的变量、缓冲区等。
4、临界区(互斥区):在进程中访问临界资源的程序段叫临界区。
5、一个访问临界资源的循环进程应为如下结构:

6、同步机制应遵循的准则

  • 为了保证进程互斥进入临界区,系统需设置专门的同步机制,同步机制应遵循4个准则:
  • 1空闲让进。当无进程在临界区时,任何有权使用临界区的进程可进入。
  • 2忙则等待。不允许两个以上的进程同时进入临界区。
  • 3有限等待。任何进入临界区的进程应在有限的时间内得到满足。
  • 4让权等待。当进程不能进入临界区时,应立即放弃CPU,以免进程陷入“忙等”。

4.1 信号量机制

1、信号量其实就是一个变量,可以用一个信号量来表示系统中某种资源的数量
2、一对原语:包含wait(S)原语和signal(S)原语,简称P、V操作,通常使用这一对原语对信号量S实施操作。该P、V操作必须成对出现
3、整型信号量

注意:注意:在wait操作中,当S≤0时,就会不断测试而使进程处于“忙等”状态。不满足“让权等待”原则。
4、记录型信号量,可以实现让权等待原则。

5、AND型信号量
实现思想:将进程在整个运行过程中需要的所有资源,一次性全部地分配给进程,待进程使用完后再一起释放。只要尚有一个资源未能分配给进程,其它所有可能为之分配的资源,也不分配给他。
目的:避免死锁

6、信号量集

7、信号量集的几种情况:

  • (1) Swait(S, d, d)。 此时在信号量集中只有一个信号量S, 但允许它每次申请d个资源,当现有资源数少于d时,不予分配
  • (2) Swait(S, 1, 1)。 此时的信号量集已蜕化为一般的记录型信号量(S>1时)或互斥信号量(S=1时)。
  • (3) Swait(S, 1, 0)。这是一种很特殊且很有用的信号量操作。当S≥1时,允许多个进程进入某特定区;当S变为0后,将阻止任何进程进入特定区。换言之,它相当于一个可控开关。

8、信号量机制实现进程互斥

  • 1分析并发进程的关键活动,划定临界区
  • 2设置互斥信号量mutex(semaphore类型)
  • 3在临界区之前执行P操作;临界区之后执行V操作

9、信号量机制实现进程同步

  • 1分析什么地方需要同步关系,即必须保证“一前一后”执行的两个操作
  • 2设置同步信号量S,初始为0
  • 3在“前操作”之后执行V操作;在“后操作”之前执行P操作

10、信号量机制实现前驱关系(实际上也是进程同步问题)

操作系统(OS)进程与调度
2、关系分析:
  • 同步关系:
    当Buffer为满时,生产者进程必须等待消费者进程先执行;
    当Buffer为空时,消费者进程必须等待生产者进程先执行。
  • 互斥关系:
    缓冲区是临界资源,各进程必须互斥的访问

3、整理思路
生产者消耗(P)一个缓冲区,同时生产(V)一个产品;
消费者消耗(V)一个产品同时释放(P)一个缓冲区
取走/放入产品需要互斥
4、设置信号量
semaphone mutex = 1; //互斥信号量,实现对缓冲区的互斥访问
semaphone empty = n; //同步信号量,表示空闲缓冲区的数量
semaphone full = 0; //同步信号量,表示产品的数量
5、实现

注意:上述两个P操作不可以改变顺序。假设现在缓冲区已满,即empty=0,full = n,此时先执行P(mutex)操作,进入临界区;再执行P(empty)操作,由于empty=0,因此该进程会被阻塞,此时若执行消费者进程,由于mutex=0,因此消费者进程也会被阻塞,这样会造成死锁的产生。因此,实现互斥的P操作一定要在实现同步的P操作之后,V操作的顺序是可以互换的
6、AND实现

semaphore mutex=1, empty=N, full=0;Producer i:while(true)  {生产数据;  Swait(empty, mutex);  写数据到Buffer; Ssignal(mutex, full);};Consumer i:while(true)  {    	Swait(full,

来源:Cristiano_san

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年5月20日
下一篇 2022年5月20日

相关推荐