第二章 进程的描述与控制【操作系统】1

简介: 第二章 进程的描述与控制【操作系统】1

前言

关于操作系统,
CSDN有很多的优秀博客。
在这里,
本文摘取其他博客内容,
并附上相关链接,
如有侵权,
联系删除,
仅供学习交流使用

推荐

操作系统专栏

实验与练习

实验 Linux Shell实现模拟多进程并发执行【操作系统】

经典 生产者-消费者线程【操作系统】

练习 苹果-桔子线程【操作系统】

实验 线程编程-加1操作为什么会出错?【操作系统】

实验 进程通信【操作系统】

第二章 进程的描述与控制

2.1 前趋图和程序执行

进程前言

2.1.1 前趋图

在早期未配置OS的系统和单道批处理系统中,程序的执行方式是顺序执行,即在内存中仅装入一道用户程序,由它独占系统中的所有资源,只有在一个用户程序执行完成后,才允许装入另一个程序并执行。

在多道程序系统中,由于内存中可以同时装入多个程序,使它们共享系统资源,并发执行。

2.1.2 程序顺序执行

程序执行

1. 程序顺序执行
一个应用程序由若干个程序段组成,每一个程序段完成一个特定的功能,在执行时,它们都需要按照某种先后次序顺序执行,仅当前一程序段完成后,才运行后一程序段。即便是一个程序段,也可能存在执行顺序问题。
2. 程序顺序执行时特征

1) 顺序性:处理机严格地按照程序所规定的顺序执行
2) 封闭性:程序运行时独占全机资源,资源的状态(除初始状态)只有本程序才能改变它,程序一旦开始执行,其执行结果不受外界因素影响。

3) 可再现性:只要程序执行时的环境和初始条件相同,当程序重复执行都可获得相同的结果。

2.1.3 程序并发执行

1. 程序的并发执行

只有在不存在前趋关系的程序之间才有可能并发执行,否则无法并发执行。

2. 程序并发执行时特征
引入了程序间的并发执行功能后,虽然提高了系统的吞吐量和资源利用率,但由于它们共享系统资源,以及它们为完成同一项任务而相互合作,致使在这些并发执行的程序之间必将形成相互制约的关系。


1) 间断性 具有“执行——暂停——执行”这种间断性地活动规律。

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

3) 不可再现性 程序在并发执行时,由于失去了封闭性,也将导致其又失去了可再现性。


2.2 进程的描述

2.2.1进程的定义和特征

1. 进程的定义

进程

并发执行 —— 间断性 + 失去封闭性 + 不可再现性 ——决定了通常的程序是不能参与并发执行的


为了能使程序并发执行,并且可以对并发执行的程序加以控制和描述 —— 进程


为了使参与并发执行的每个程序(含数据)都能独立地运行,在操作系统中必须为之配置一个专门的数据结构,称为进程控制块(PCB,Process Control Block)。


系统利用PCB来描述进程的基本情况和活动过程,进而控制和管理进程。


进程实体(进程映像) = 程序段 + 相关的数据段 + PCB


一般情况下,把进程实体就简称为进程;创建进程,实质上是创建进程实体中的PCB;撤销进程,实质上是撤销进程实体中的PCB。


进程的定义:

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

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

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


进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。

一个比喻

我们写好的⼀⾏⾏代码,为了让其⼯作起来,我们还得把它送进城(进程)⾥,那既然进了城
⾥,那肯定不能胡作⾮为了。城⾥⼈有城⾥⼈的规矩,城中有个专⻔管辖你们的城管(操作系
统),⼈家让你休息就休息,让你⼯作就⼯作,毕竟摊位不多,每个⼈都要占这个摊位来⼯作,
城⾥要⼯作的⼈多着去了。所以城管为了公平起⻅,它使⽤⼀种策略(调度)⽅式,给每个⼈
⼀个固定的⼯作时间(时间⽚),时间到了就会通知你去休息⽽换另外⼀个⼈上场⼯作。
另外,在休息时候你也不能偷懒,要记住⼯作到哪了,不然下次到你⼯作了,你忘记⼯作到哪
了,那还怎么继续?有的⼈,可能还进⼊了县城(线程)⼯作,这⾥相对轻松⼀些,在休息的
时候,要记住的东⻄相对较少,⽽且还能共享城⾥的资源。

2. 进程特征

进程和程序是两个截然不同的概念,除了进程具有程序所没有的PCB结构外,还具有下面一些特征:

1) 动态性:

进程的实质是进程实体的执行过程

它由创建而产生,由调度而执行,由撤销而消亡

进程实体有一定的生命期,而程序则只是一组有序指令的集合,并存在于某种介质上,其本身不具有活动的含义,因而是静态的。


2) 并发性:

多个程序实体同存在于内存中,且能在一段时间内同时运行。


3) 独立性:

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

凡未建立PCB的程序都不能作为一个独立的单位参与运行。


4) 异步性:

进程是按照异步方式运行的,即按各自独立的、不可预知的速度向前推进。正是源于此因,才导致了传统意义上的程序若参与并发执行,会产生其结果的不可再现性。为使进程在并发运行时虽具有异步性,但仍能保证进程并发执行的结果是可再现的,在OS中引入了进程的概念,并且配置相应的进程同步机制。

2.2.2 进程的基本状态及转换

1. 进程三种基本状态

由于多个进程在并发执行时共享系统资源,致使它们在运行过程中呈现间断性地运行规律。


三种基本状态:

1)就绪(Ready)状态: 处于准备好运行的状态,即进程已分配到除CPU以外的所有必要资源后,只要再获得CPU,便可立即执行。


2)执行(Running)状态: 已获得CPU,其程序正在执行的状态


3)阻塞(Block)状态: 正在执行的进程由于发生某事件(如I/O请求、申请缓冲区失败等)暂时无法继续执行时的状态。OS会把处理机分配给另一个就绪进程,而让受阻进程处于暂停状态。

2. 三种基本状态的转换

操作系统【两状态、五状态、七状态】

操作系统-进程状态转换图

3. 创建状态和终止状态

1)创建状态: 创建一个进程的步骤:

首先由进程申请一个空白PCB —— 向PCB中填写用于控制和管理进程的信息 —— 为该进程分配运行时所必需的资源 —— 把该进程转入就绪状态并插入就绪队列中


如果进程所需的资源尚不能得到满足,比如系统尚无足够的内存使进程无法装入其中,此时创建工作尚未完成,进程不能被调度运行,于是把此时进程所处的状态称为创建状态。


2)终止状态: 两个步骤:

等待操作系统进行善后处理 —— 将其PCB清零 —— 将PCB空间返还系统


当一个进程到达了自然结束点,或是出现了无法克服的错误,或是被操作系统所终结,或是被其他有终止权的进程所终结,它将进入终止状态。进入终止状态的进程以后不能再执行,但在操作系统中依然保留一个记录,其中保存状态码和一些计时统计数据,供其他进程收集。一旦其他进程完成了对其信息的提取之后,操作系统将删除该进程,即将其PCB清零,并将该空白PCB返还系统。

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

挂起操作Suspend 和 激活操作Active —— 对进程的重要操作

当该操作作用于某个进程时,该进程将被挂起,意味着此时该进程处于静止状态。如果该进程正在执行,它将暂停执行。若原本处于就绪状态,则该进程此时暂不接受调度。与之对应的是激活操作。

1. 引入
引入挂起操作的原因,是基于系统和用户的如下需要:

1)终端用户的需要。 程序运行期间发现有可疑问题 —— 停止修改

2)父进程需要。挂起子进程,以考查和修改子进程,或协调各子进程活动

3)负荷调节需要。 工作负荷较重 —— 挂起一些不重要的进程

4)操作系统需要。 挂起某进程 —— 以检查运行中的资源使用或进行记账

2. 状态转换:

1)活动就绪Readya — Suspend — 静止就绪Readys

可以接受调度 —— 不再被调度执行
2)活动阻塞Blockeda — Suspend — 静止阻塞Blockeds

处于静止阻塞状态的进程在其所期待的事件出现后,将从静止阻塞变为静止就绪。

3)静止就绪Readys — Active — 活动就绪

4)静止阻塞Blockeds — Active — 活动阻塞Blockeda

3. 具有挂起状态的进程状态转换


l 阻塞 → 阻塞/挂起:OS通常将阻塞进程换出,以腾出内存空间


l 阻塞/挂起→ 就绪/挂起:当阻塞/挂起进程等待的事件发生时,可以将其转换为就绪/挂起。


l 就绪/挂起→ 就绪:OS需要调入一个进程执行。


l 就绪 → 就绪/挂起:一般,OS挂起阻塞进程。但是有时也会挂起就绪进程,释放足够的内存空间。


l 新 → 就绪/挂起(新→ 就绪):新进程创建后,可以插入到就绪队列或就绪,挂起队列,若无足够的内存分配给新进程,则需要新→ 就绪/挂起。


2.2.4 进程管理中的数据结构

进程管理中的数据结构

一方面,为了便于对计算机的各类资源(包括硬件和信息)的使用和管理,OS将它们抽象为相应的各种数据结构,以及提供一组对资源进行操作的命令,用户利用这些数据结构和操作命令来执行相关的操作,无需关系具体实现细节


另一方面,操作系统作为计算机资源的管理者,尤其是为了协调诸多用户对系统中共享资源的使用,它还必须记录和查询各类资源的使用及各类进程运行情况的信息,OS对于这些信息的组织和维护也是通过建立和维护各种数据结构的方式来实现的。

1. 操作系统中用于管理控制的数据结构

每个资源和每个进程都设置了一个数据结构,用于表征其实体 —— 资源信息表或进程信息表 —— 包含了资源或进程的标识、描述、状态等信息以及一批指针
通过这些指针,可将同类资源或进程的信息表,或者同一进程所占用的资源信息表分类链接成不同的队列,便于操作系统查找。

OS管理的这些数据结构一般分为以下四类:

内存表、设备表、文件表、进程表(进程控制块PCB)
2.进程控制块PCB的作用

PCB作为进程实体的一部分,记录了操作系统所需的,用于描述进程的当前情况以及管理进程运行的全部信息,是操作系统中最重要的记录型数据结构。
PCB的作用是使一个在多道程序环境下不能独立运行的程序(含数据)成为一个能独立运行的基本单位,一个能与其他进程并发执行的进程。


具体作用进一步阐述:

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

系统是通过PCB感知进程的存在的,PCB已成为进程存在于系统的唯一标识


2)能实现间断性运行方式

进程因阻塞而暂停运行时 —— 必须保留运行时的CPU现场信息


系统将CPU现场信息保存在被中断进程的PCB中,供其再次被调用时恢复


3)提供进程管理所需要的信息


当调度程序调度到某进程运行时,只能根据该进程PCB中记录的程序和数据在内存或外村中的始址指针,找到相应的程序和数据


在进程运行过程中,当需要访问文件系统中的文件或I/O设备时,也需要借助于PCB中的信息


还可根据PCB中的资源清单了解到该进程所需的全部资源等。


4)提供进程调度所需要的信息


PCB中提供了进程处于何种状态的信息


在进行调度时往往还需要了解进程的其他信息 —— 优先级、等待时间、已执行时间


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


进程同步机制是用于实现诸进程的协调运行的,在采用信号量机制时,它要求在每个进程中都设置有相应的用于同步的信号量。在PCB中还具有用于实现进程通信的区域或通信队列指针。

3. 进程控制块PCB中的信息

1)进程标识符

用于唯一地标识一个进程。一个进程通常有两种标识符:

外部标识符 内部标识符
方便用户(进程)访问 方便系统对进程的使用
由字母、数字组成 唯一的数字标识符,通常是一个进程的序号
创建者提供 操作系统设置

2)处理机状态

主要是由处理机的各种寄存器中的内容组成的。

寄存器类型 作用
通用寄存器 用户程序可访问,用于暂存信息
指令计数器 存放要访问的下一条指令的地址
程序状态字PSW 含有状态信息,如条件码、执行方式、中断屏蔽标志等
用户栈指针 用户进程与之相关的系统栈,存放过程、系统调用参数及调用地址

处理机处于执行状态时,正在处理的许多信息都是放在寄存器中。当进程被切换时,处理机状态信息都必须保存在相应的PCB中,以便在该进程重新执行时能再从断点继续执行。


3)进程调度信息

OS进行调度时 —— 须了解进程状态和有关调度的信息 ——


进程状态

进程优先级

进程调度所需的其他信息 与采用的调度算法有关

事件 阻塞原因

4)进程控制信息


①程序和数据的地址

②进程同步和通信机制

实现进程同步和进程通信时必需的机制,如消息队列指针、信号量等(全部或部分存放在PCB)

③资源清单

除了运行期间所需的全部资源(除CPU)外,还有一张已经分配到该进程的资源的清单

④链接指针

给出本进程(PCB)所在队列中的下一个进程的PCB的首地址

4. 进程控制块的组织方式

(1)线性方式

组织在一张线性表中 —— 实现简单、开销小,每次查找需要扫描整个表 —— 适合进程数目不多的系统
(2)链接方式

把同状态进程的PCB分别通过PCB的链接字链接成一个队列

形成就绪队列、若干个阻塞队列、空白队列

就绪队列 —— 按优先级排列,高的在前面

阻塞队列 —— 按阻塞原因的不同,排成多个阻塞队列


(3)索引方式

系统根据所有进程状态的不同,建立几张索引表,例如就绪索引表、阻塞索引表等,把各索引表在内存的首地址记录在内存的一些专用单元中。在每个索引表的表目中,记录具有相应状态的某个PCB在PCB表的地址。


相关文章
|
10月前
|
存储 Linux API
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
在计算机系统的底层架构中,操作系统肩负着资源管理与任务调度的重任。当我们启动各类应用程序时,其背后复杂的运作机制便悄然展开。程序,作为静态的指令集合,如何在系统中实现动态执行?本文带你一探究竟!
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
|
算法 Linux 调度
深入理解Linux操作系统的进程管理
本文旨在探讨Linux操作系统中的进程管理机制,包括进程的创建、执行、调度和终止等环节。通过对Linux内核中相关模块的分析,揭示其高效的进程管理策略,为开发者提供优化程序性能和资源利用率的参考。
367 32
|
调度 开发者 Python
深入浅出操作系统:进程与线程的奥秘
在数字世界的底层,操作系统扮演着不可或缺的角色。它如同一位高效的管家,协调和控制着计算机硬件与软件资源。本文将拨开迷雾,深入探索操作系统中两个核心概念——进程与线程。我们将从它们的诞生谈起,逐步剖析它们的本质、区别以及如何影响我们日常使用的应用程序性能。通过简单的比喻,我们将理解这些看似抽象的概念,并学会如何在编程实践中高效利用进程与线程。准备好跟随我一起,揭开操作系统的神秘面纱,让我们的代码运行得更加流畅吧!
|
8月前
|
缓存 运维 前端开发
|
8月前
|
缓存 运维 前端开发
阿里云操作系统控制台:高效解决性能瓶颈与抖动之进程热点追踪
遇到“进程性能瓶颈导致业务异常”等多项业务痛点时,提供高效解决方案,并展示案例。
|
11月前
|
监控 搜索推荐 开发工具
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
1261 2
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
|
C语言 开发者 内存技术
探索操作系统核心:从进程管理到内存分配
本文将深入探讨操作系统的两大核心功能——进程管理和内存分配。通过直观的代码示例,我们将了解如何在操作系统中实现这些基本功能,以及它们如何影响系统性能和稳定性。文章旨在为读者提供一个清晰的操作系统内部工作机制视角,同时强调理解和掌握这些概念对于任何软件开发人员的重要性。
|
Linux 调度 C语言
深入理解操作系统:从进程管理到内存优化
本文旨在为读者提供一次深入浅出的操作系统之旅,从进程管理的基本概念出发,逐步探索到内存管理的高级技巧。我们将通过实际代码示例,揭示操作系统如何高效地调度和优化资源,确保系统稳定运行。无论你是初学者还是有一定基础的开发者,这篇文章都将为你打开一扇了解操作系统深层工作原理的大门。
165 4
|
存储 算法 调度
深入理解操作系统:进程调度的奥秘
在数字世界的心脏跳动着的是操作系统,它如同一个无形的指挥官,协调着每一个程序和进程。本文将揭开操作系统中进程调度的神秘面纱,带你领略时间片轮转、优先级调度等策略背后的智慧。从理论到实践,我们将一起探索如何通过代码示例来模拟简单的进程调度,从而更深刻地理解这一核心机制。准备好跟随我的步伐,一起走进操作系统的世界吧!
|
算法 调度 开发者
深入理解操作系统:进程与线程的管理
在数字世界的复杂编织中,操作系统如同一位精明的指挥家,协调着每一个音符的奏响。本篇文章将带领读者穿越操作系统的幕后,探索进程与线程管理的奥秘。从进程的诞生到线程的舞蹈,我们将一起见证这场微观世界的华丽变奏。通过深入浅出的解释和生动的比喻,本文旨在揭示操作系统如何高效地处理多任务,确保系统的稳定性和效率。让我们一起跟随代码的步伐,走进操作系统的内心世界。
167 2

热门文章

最新文章

推荐镜像

更多