王道OS-进程

本文详细介绍了操作系统中进程的概念,包括进程的定义、组成、组织方式和特征。阐述了进程的状态转换,如运行态、就绪态和阻塞态,并讲解了进程控制和进程通信。还探讨了线程的概念、多线程模型以及处理机调度的基本概念、层次和算法,如FCFS、SJF等。最后,文章涵盖了进程同步和互斥的各种实现方法,包括信号量机制和管程。
摘要由CSDN通过智能技术生成

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

进程的定义

程序:就是一个指令序列 早期的计算机(只支持单道程序)

在这里插入图片描述
引入多道程序技术之后
在这里插入图片描述

内存中同时放入多道程序,各个程序的代码、运算数据存放的位置不同。操作系统要怎么才能找到各程序的存放位置呢?

为了方便操作系统管理,完成各程序并发执行,引入了进程、进程实体的概念
系统为每个运行的程序配置了一个数据结构,称为进程控制块(PCB),用来描述进程的各种信息(如程序代码存放位置)

在这里插入图片描述

PCB、程序段、数据段三部分构成了进程实体(进程映像)。一般来说,我们把进程实体就简称为进程,例如,所谓创建进程,实际上是创建进程实体中的PCB,而撤销进程,实质上是撤销进程实体中的PCB
注意:PCB是进程存在的唯一标识

从不同的角度,进程可以有不同的定义,比较传统典型的定义有:
1、进程是一个程序的一次执行过程
2、进程是一个程序及其数据在处理机上顺序执行时所发生的活动
3、进程是具有独立功能的程序在数据集合上运行的过程,它是系统进行资源分配和调度的一个单位
都在强调动态性

引入进程实体的概念后,可以把进程定义为:
进程是进程实体的运行过程,是系统进行资源分配调度的一个独立单位
注:严格来说,进程实体和进程不一样,进程实体是静态的,进程是动态的

进程的组成

进程(进程实体) 由程序段、数据段、PCB三部分组成
程序段:存放程序代码
数据段:程序运行时使用、产生的运算数据。如全局变量、局部变量、宏定义的常量就存放在数据段内
PCB:操作系统通过PCB来管理进程,因此PCB中应该包含操作系统对其进行管理所需的各种信息

在这里插入图片描述

进程标识符PID
当进程被创建时,操作系统会为该进程分配一个唯一的、不重复的ID,用于区分不同的进程
用户标识符UID
标识这个进程所属那个用户
各种寄存器值
当进程切换时需要把进程当前的运行情况记录下来保存在PCB中,如程序计数器的值表示当前程序执行到那一句

在这里插入图片描述

进程的组织方式

进程的组成讨论的是一个进程内部由哪些部分构成的问题,而进程的组织讨论的是多个进程之间的组织方式问题

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

进程的特征

动态性:进程是程序的一次执行过程,是动态的产生、变化和消亡的(进程最基本的特征)
并发性:内存中有多个进程实体,各进程可并发执行
独立性:进程是能独立运行、独立获取资源、独立接受调度的基本单位
异步性:各进程按各自独立的、不可预知的速度向前推进,操作系统要提供‘进程同步机制’来解决异步问题
结构性:每个进程都会配置一个PCB。结构上看,进程由程序段、数据段、PCB组成。

进程的状态和转换

进程的三种基本状态

运行态
占有CPU,并在CPU上运行
注意:单核处理机环境下,每一个时刻最多只有一个进程处于运行态(双核可以两个)
就绪态
已经具备运行条件,但由于没有空闲CPU,而暂时不能运行
进程已经拥有了除处理机之外所有需要的资源,一旦获得处理机,即可立即进行运行态开始运行。
阻塞态/等待态
因等待某一时间而暂时不能运行
如:等待操作系统分配打印机、等待读磁盘操作的结果。CPU是计算机中最昂贵的部件,为了提高CPU的利用率,需要先将其他进程需要的资源分配到位,才能得到CPU的服务

创建态
操作系统需要完成创建进程。操作系统为该进程分配所需的内存空间等系统资源,并为其创建、初始化PCB
**终止态 **
进程运行结束,需要撤销进程。操作系统需要完成撤销进程相关的工作。完成将分配给进程的资源回收,撤销进程PCB等工作

进程状态的转换

在这里插入图片描述

进程控制

什么是进程控制

进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能

原语实现进程控制。原语的特点是执行期间不允许中断,只能一气呵成,这种不可被中断的操作即原子操作。
原语采用关中断指令开中断指令实现
显然,关/开中断指令的权限非常大,必然是只允许在核心态下执行的特权指令

进程控制相关的原语

进程控制会导致进程状态的转换。无论那个原语,要做的无非三类事:
1、更新PCB中的信息(如修改进程状态标志、将运行环境保存到PCB、从PCB恢复运行环境)
a、所有的进程信息控制原语一定会修改进程状态标志
b、剥夺当前运行进程的CPU使用权必然需要保存其运行环境
c、某进程开始前必然要1恢复其运行环境
2、将PCB插入合适的队列
3、分配/回收资源

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

进程通信

什么是进程通信

进程通信指进程之间的信息交换
进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立
为了保证安全,一个进程不能直接访问另一个进程的地址空间。
但是进程之间的信息交换又是必须实现的。为了保证进程间的安全通信,操作系统提供了一些方法

共享存储

在这里插入图片描述

管道通信

在这里插入图片描述

消息传递

在这里插入图片描述

线程概念和多线程模型

什么是线程,为什么要引入线程

有的进程可能需要“同时”做很多事情,而传统的进程只能串行执行一系列程序,为此,引入了线程,来增加并发度

可以把线程理解为“轻量级进程”
线程是一个基本的CPU执行单元也是程序执行流的最小单位
引入线程之后,不仅是进程之间可以并发,进程内的各线程之间也可以并发,从而进一步提升了系统的并发度,使得一个进程内也可以并发处理各种任务
引入线程后,进程只作为除CPU之外的系统资源的分配单位

线程的属性

在这里插入图片描述

线程的实现方式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

多线程模型

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

处理机调度的概念和层次

调度的基本概念

当有一堆任务要处理,但由于资源有限,这些事情没法同时处理。这就需要确定某种规则来决定处理这些任务的顺序,这就是“ 调度 ”研究的问题。
在多道程序系统中,进程的数量往往是多于处理机的个数的,这样不可能同时并发地处理各个进程。
处理机调度 ,就是从就绪队列中按照一定的算法选择一个进程将处理机分配给它运行,以实现进程的并发执行。

调度的三个层次

高级调度

由于内存空间有限,有时无法将用户提交的作业全部放入内存,因此需要确定某种规则来决定将作业调入内存的顺序。
高级调度(作业调度)。按一定的原则从外存上处于后备队列的作业中挑选一个(或多个)作业,给他们分配内存等必要资源,并建立相应的进程(建立PCB),以使它们获得竞争处理机的权利
高级调度是辅存(外存)与内存之间的调度。每个作业只调入一次,调出一次。作业调入时会建立相应的PCB,作业调出时才撤销PCB。高级调度主要是指调入的问题,因为只有调入的时机需要操作系统来确定,但调出的时机必然是作业运行结束才调出。

中级调度

引入了虚拟存储技术之后,可将暂时不能运行的进程调至外存等待。等它重新具备了运行条件且内存又稍有空闲时,再重新调入内存
这么做的目的是为了提高内存利用率系统吞吐量
暂时调到外存等待的进程状态为挂起状态。值得注意的是,PCB并不会一起调到外存,而是会常驻内存。PCB中会记录进程数据在外存中的存放位置,进程状态等信息,操作系统通过内存中的PCB来保持各个进程的监控、管理。被挂起的进程PCB会被放到挂起队列中。
中级调度(内存调度),就是决定将那个处于挂起状态的进程重新调入内存

在这里插入图片描述

挂起阻塞的区别,两种状态都是暂时不能获得CPU的服务,但挂起态是将进程映像调到外存中去了,而阻塞状态下进程映像还在内存中
有的操作系统会把就绪挂起、阻塞挂起分为两个挂起队列,甚至会根据阻塞原因不同再把阻塞挂起进程进一步细分为多个队列。

低级调度

低级调度(进程调度),其主要任务是按照某种方法和策略从就绪队列中选取一个进程,将处理机分配给它。
进程调度是操作系统中最基本的一种调度,在一般的操作系统中都必须配置进程调度
进程的调度频率很高

在这里插入图片描述

进程调度的时机、切换与过程、方式

在这里插入图片描述

进程调度的时机

在这里插入图片描述

在这里插入图片描述

进程在操作系统内核程序临界区不能进行调度与切换
临界资源:一个时间段内只允许一个进程使用的资源。各进程需要互斥地访问临界资源
临界区:访问临界资源的那段代码
内核程序临界区:一般是用来访问某种内核数据结构的,比如进程的就绪队列

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

进程调度方式

非剥夺调度方式,又称非抢占方式。即只允许进程主动放弃处理机。在允许过程中即使有更紧迫的任务到达,当前进程依然会继续使用处理机,直到该进程终止或主动要求进入阻塞态。
实现简单,系统开销小但是无法及时处理紧急任务,适合于早期的批处理系统。

剥夺调度方式,又称抢占方式。当一个进程正在处理机上执行时,如果有一个更重要或更紧迫的进程需要使用处理机,则立即暂停正在执行的进程,将处理机分配给更重要紧迫的那个进程。
可以优先处理更紧急的系统,也可以实现让各进程按时间片轮流执行的功能(通过时钟中断)。适合分时操作系统、实时操作系统

进程切换与过程

狭义的进程调度指的是从就绪队列中选取一个要运行的进程(这个进程可以是刚刚被暂停执行的进程,也可能是另一个进程,后一种情况就需要进程切换)
进程切换:一个进程让出处理机,由另一个进程占用处理机的过程
广义的进程调度:包含选择一个进程和进程切换两个步骤
进程切换的过程主要完成了:
1、对原来运行进程各种数据的保存
2、对新的进程各种数据的恢复
注意:进程切换是有代价的,因此过于频繁的进行进程调度、切换,必然会使整个系统的效率降低,使系统大部分时间都花在进程切换上,而真正用于执行进程的时间减少

调度算法的评价指标

在这里插入图片描述

CPU利用率: 指CPU“忙碌”的时间占总时间的比例。

系统吞吐量: 单位时间内完成作业的数量。

周转时间: 指作业被提交给系统开始到作业完成为止的时间
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

等待时间

等待时间,指的是进程/作业处于等待处理机状态时间之和,等待时间越长,用户满意度越低
在这里插入图片描述

响应时间

响应时间,指从用户提交请求到首次产生响应所用的时间

调度算法

先来先服务(FCFS)

在这里插入图片描述

短作业优先(SJF)

短作业/进程优先调度算法(非抢占式): 每次调度时选择当前已到达且运行时间最短的作业/进程
最短剩余时间优先算法(抢占式 ): 每当有进程加入就绪队列改变时就需要调度,如果新到达的进程剩余时间比当前运行的进程剩余时间更短,则由新进程抢占处理机,当前运行进程重新回到就绪队列。另外当一个进程完成时也需要调度

在这里插入图片描述

高响应比优先(HRRN)

高响应比优先: 非抢占式的调度算法,只有当前运行的进程主动放弃CPU时,才需要进行调度,调度时计算所有就绪进程的响应比,选响应比最高的进程上处理机

在这里插入图片描述

时间片轮转调度算法(RR)

时间片轮转调度算法: 轮流让就绪队列中的进程依次执行一个时间片
如果时间片太大,使得每个进程都可以在一个时间片内完成,则时间片轮转调度算法退化为先来先服务调度算法,并且会增大进程响应时间。
另一方面,进程调度、切换是有时间代价的,因此如果时间片太小,会导致进程切换过于频繁,系统会花大量的时间来处理进程切换,从而导致实际用于进程执行的时间比例减少。

在这里插入图片描述

优先级调度算法

非抢占式的优先级调度算法: 每次调度时选择当前已到达且优先级最高的进程。当前进程主动放弃处理机时发生调度。
抢占式的优先级调度算法: 每次调度时选择当前已到达且优先级最高的进程。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

多级反馈队列调度算法

在这里插入图片描述

在这里插入图片描述

进程同步、进程互斥

进程同步

进程具有异步性的特征。异步性是指,各并发执行的进程以各自独立的、不可预知的速度向前推进。

在这里插入图片描述

同步亦称直接制约关系,它是指为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调它们的工作次序而产生的制约关系。进程间的直接制约关系就是源于它们之间的相互合作

进程互斥

进程的并发需要共享的支持。各个并发执行的进程不可避免的需要共享一些系统资源(比如内存,又比如打印机、摄像头这样的I/O设备)

两种资源共享方式
互斥共享方式
系统中的某些资源,虽然可以提供给多个进程使用,但一个时间段内只允许一个进程访问该资源
同时共享方式
系统中的某些资源,允许一个时间段内由多个进程同时对它们进行访问

在这里插入图片描述
对临界资源的互斥访问,可以在逻辑上分为如下四个部分
在这里插入图片描述

进入区
负责检查是否可进入临界区,若可进入,则应设置正在访问临界资源的标志,以阻止其它进程同时进入临界区
临界区
访问临界资源的那段代码
退出区
负责解除正在访问临界资源的标志
剩余区
做其它处理

注意:
临界区是进程中访问临界资源的代码段
进入区和退出区是负责实现互斥的代码段
临界区也可称为临界段

为了实现对临界资源的互斥访问,同时保证系统整体性能,需要遵循以下原则
1、空闲让进。临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区。
2、忙则等待。当已有进程进入临界区时,其它试图进入临界区的进程必须等待。
3、有限等待。对请求访问的进程,应保证能在有限时间内进入临界区。
4、让权等待。当进程不能进入临界区时,应立即释放处理机,防止进程忙等待。

进程互斥的软件实现方法

在这里插入图片描述

单标志法

两个进程在访问临界区后会把使用临界区的权限转交给另一个进程。也就是说每个进程进入临界区的权限只能被另一个进程赋予。

在这里插入图片描述

双标志先检查法

在这里插入图片描述

双标志后检查法

在这里插入图片描述

Peterson算法

在这里插入图片描述
在这里插入图片描述

进程互斥的硬件实现

在这里插入图片描述

中断屏蔽方式

利用“开/关中断指令”实现(与原语的实现思想相同,即在某进程开始访问临界区到结束访问为止都不允许被中断,也不能发生进程切换,因此也不可能发生两个同时访问临界区的情况)

优点
简单、高效
缺点
不适用于多处理机,只适用于操作系统内核进程,不适用于用户进程

TestAndSet指令

简称TS指令,也有地方称为TestAndSetLock指令,或TSL指令
TSL指令是用硬件实现的,执行过程不允许被打断,只能一气呵成。

在这里插入图片描述

SWAP指令

有的地方也叫Exchange指令,或简称XCHG指令
Swap指令是用硬件实现的,执行过程不允许被中断,只能一气呵成。

在这里插入图片描述
在这里插入图片描述

信号量机制

用户进程可以通过使用操作系统提供的一对原语来对信号量进行操作,从而很方便的实现了进程互斥、进程同步
信号量其实是一个变量(可以是一个整数,也可以是更复杂的记录型变量),可以用一个信号量来表示系统中某种资源的数量。
原语是一种特殊的程序段,其执行只能一气呵成,不可被中断。原语是由关中断/开中断指令实现的。
一对原语:wait(s)原语和signal(s)原语,可以把原语理解为我们自己写的函数,函数名分别为wait和signal括号里的信号量s其实就是函数调用时传入的一个参数
wait、signal简称P、V

整形信号量

用一个整数型的变量作为信号量,用来表示系统中某种资源的数量
与普通整数变量的区别:对信号量的操作只有三种,即初始化、P操作、V操作
在这里插入图片描述

记录型信号量

记录型数据结构

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

用信号量实现进程互斥、同步、前驱关系

信号量机制实现进程互斥

在这里插入图片描述

信号量机制实现进程同步

在这里插入图片描述

信号量机制实现前驱关系

同上

生产者消费者问题

在这里插入图片描述

多生产者多消费者

在这里插入图片描述

在这里插入图片描述

吸烟者问题

在这里插入图片描述

在这里插入图片描述

读者-写者问题

在这里插入图片描述

在这里插入图片描述

哲学家问题

在这里插入图片描述

在这里插入图片描述

管程

为什么要引入管程

信号量机制存在的问题:编写程序困难、易出错

管程的定义和基本特征

管程是一种特殊的软件模块,有这些部分组成:
1、局部于管程的共享数据结构说明
2、对该数据结构进行操作的一组过程
3、对局部于管程的共享数据设置初始值的语句
4、管程有一个名字

管程的基本特征
1、局部于管程的数据只能被局部于管程的过程访问
2、一个进程只有通过调用管程内的过程才能进入管程访问数据
3、每次仅允许一个进程在管城内执行某个内部过程

在这里插入图片描述

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值