别只做CRUD程序员,收下这篇操作系统干货(二)——进程管理!

简介: 别只做CRUD程序员,收下这篇操作系统干货(二)——进程管理!

别只做CRUD程序员,收下这篇操作系统干货(二)——进程管理!

一、进程的概念

1.进程的定义

现代操作系统的重要特点是程序的并发执行,及系统所拥有的资源被共享和系统的用户随机地使用。通常,操作系统的重要任务之一是使用户充分、有效地利用系统资源。

进程是描述程序的执行过程和作为资源分配的基本单位。

2.程序的并发执行

(1)程序是一个在时间上按严格次序前后相继的操作序列,是一个静态的概念。

(2)程序的顺序执行

Repeat  IR ← M [pc]
  pc ← pc+1
  〈 Execute (instruction in IR)〉
Until CPU halt

把一个具有独立功能的程序独占处理机直至最终结束的过程称为程序的顺序执行。顺序执行的特点:


顺序性。程序顺序执行时,其执行过程可看作一系列严格按程序规定的状态转移过程。

封闭性。程序执行得到的最终结果由给定的初始条件决定,不受外界因素的影响。

可再现性。只要输入的初始条件相同,则无论何时重复执行该程序都会得到相同的结果。

(3)多道程序系统中程序执行环境的变化

计算机能够同时处理多个具有独立功能的程序。批处理系统、分时系统、实时系统以及网络与分布式系统等都是这样的系统。

这样的执行环境的特点如下:


独立性。每道程序都是逻辑上独立的,它们之间不存在逻辑上的制约关系。

随机性。在多道程序环境下,特别是在多用户环境下,程序和数据的输入与执行开始

时间都是随机的。

资源共享。资源共享将导致对进程执行速度的制约。

(4)程序的并发执行


分为两种:


多道程序系统的程序执行环境变化所引起的多道程序的并发执行。由于资源的有限性,多道程序的并发执行总是伴随着资源的共享与竞争。从而制约各道程序的执行速度。在宏观上并发执行,在微观上(指令级)仍是顺序执行;

并发执行是在某道程序的几个程序段中(例如几个程序),包含着一部分可以同时执行或顺序颠倒执行的代码。

程序的并发执行可总结为:一组在逻辑上互相独立的程序或程序段在执行过程中,其执行时间在客观上互相重叠,即一个程序段的执行尚未结束,另一个程序段的执行已经开始的这种执行方式。


程序的并发执行不同于程序的并行执行。 程序的并行执行是指一组程序按独立的、异步的速度执行。


一般情况下,并发执行的各程序段如果共享软、硬件资源,都会造成其执行结果受执行速度影响的局面。


3.进程和程序是两个既有联系又有区别的概念:


(1) 进程是一个动态概念,而程序则是一个静态概念。程序是指令的有序集合,没有任何执行的含义。而进程则强调执行过程,它动态地被创建,并被调度执行后消亡。

(2)进程具有并行特征,而程序没有。由进程的定义可知,进程具有并行特征的两个方面,即独立性和异步性。也就是说,在不考虑资源共享的情况下,各进程的执行是独立的,执行速度是异步的。显然,由于程序不反映执行过程,所以不具有并行特征。

(3)进程是竞争计算机系统资源的基本单位,从而其并行性受到系统自己的制约。这里,制约就是对进程独立性和异步性的限制。

(4)不同的进程可以包含同一程序,只要该程序所对应的数据集不同。


二、进程的描述


进程的静态描述由三部分组成:进程控制块PCB,有关程序段和该程序段对其进行操作的数据结构集。


1.进程控制块PCB

PCB包含一个进程的描述信息、控制信息及资源信息,有些系统中还有进程调度等待所使用的现场保护区。


PCB 集中反映一个进程的动态特征。在进程并发执行时,由于资源共享,带来各进程之间的相互制约。为了反映这些制约关系和资源共享关系,在创建一个进程时,应首先创建其 PCB,然后才能根据PCB 中信息对进程实施有效的管理和控制。当一个进程完成其功能之后,系统则释放PCB,进程也随之消亡。


进程PCB中以下内容是必须的:

(1)描述信息


进程名或进程标识号

用户名或用户标识号

家族关系

(2)控制信息


进程当前状态。进程在活动期间可分为初始态、就绪态、执行态和等待状态、终止状态。

进程优先级。进程优先级是选取进程占有处理机的重要依据。与进程优先级有关的PCB表项有:a. 占有CPU时间;b. 进程优先级偏移;c. 占据内存时间,等。

程序开始地址。

各种计时信息。给出进程占有和利用资源的有关情况。

通信信息。通信信息用来说明该进程在执行过程中与别的进程所发生的信息交换情况。

(3)资源管理信息

PCB 中包含最多的是资源管理信息,包括有关存储器的信息、使用输入输出设备的信息、有关文件系统的信息等。


占用内存大小及其管理用数据结构指针,例如后述内存管理中所用到的进程页表指针等。

在某些复杂系统中,还有对换或覆盖用的有关信息,如对换程序段长度,对换外存地址等。这些信息在进程申请、释放内存中使用。

共享程序段大小及起始地址。

输入输出设备的设备号,所要传送的数据长度、缓冲区地址、缓冲区长度及所用设备的有关数据结构指针等。这些信息在进程申请释放设备进行数据传输中使用。

指向文件系统的指针及有关标识等。进程可使用这些信息对文件系统进行操作。

(4)CPU 现场保护结构

当前进程因等待某个事件而进入等待状态或因某种事件发生被中止在处理机上的执行时,为了以后该进程能在被打断处恢复执行,需要保护当前进程的 CPU现场(或称进程上下文)。PCB 中设有专门的 CPU现场保护结构,以存储退出执行时的进程现场数据。


总之,进程控制块PCB 是系统感知进程存在的唯一实体。通过对PCB 的操作,系统为有关进程分配资源从而使得有关进程得以被调度执行;而完成进程所要求功能的程序段的有关地址,以及程序段在进程过程中因某种原因被停止执行后的现场信息也都在PCB 中。最后,当进程执行结束后,则通过释放PCB 来释放进程所占有的各种资源。


由于PCB 中包含有较多的信息,因此,一个PCB表往往要占据较大的存储空间(一般占几百到几千个字节)。在有的系统中,为了减少 PCB对内存的占用量,只允许PCB中最常用的部分,如CPU现场保护、进程描述信息、控制信息等常驻内存。PCB 结构中的其他部分则存放于外存之中,待该进程将要执行时与其他数据一起装入内存。


2、进程上下文

进程上下文是一个抽象的概念,它包含了每个进程执行过的、执行时的以及待执行的指令和数据,在指令寄存器、堆栈、状态字寄存器等中的内容。


把已执行过的进程指令和数据在相关寄存器与堆栈中的内容称为上文。

正在执行的指令和数据在相关寄存器与堆栈中的内容称为正文。

待执行指令和数据在相关寄存器与堆栈中的内容称为下文。

如图,进程上下文结构:


20200911154911860.png

3、进程上下文切换

切换过程:


20200911162419253.png

三、进程状态及其转换

1.进程状态

系统根据PCB结构中的状态值控制进程。


一个进程至少具有三种基本状态,它们是:执行状态Running、等待状态Waiting和就绪状态Ready。


在有些系统中,为了有效地利用内存,就绪状态又可进一步分为内存就绪状态和外存就绪状态(挂起状态Suspend)。


在单CPU系统中,任一时刻处于执行状态的进程只能有一个。只有处于就绪状态的进程经调度选中之后才可进入执行状态。


在某些操作系统中,一个进程在其生命期内的执行过程中,总要涉及到用户程序和操作系统内核程序两部分。因此,进程的执行状态又可进一步划分为用户执行状态和系统执行状态。划分用户态和系统态最主要的原因是要把用户程序和系统程序区分开来,以利于程序的共享和保护。


进程因等待某个事件发生而放弃处理机进入等待状态。显然,等待状态可根据等待事件的种类而进一步划分为不同的子状态,例如内存等待、设备等待、文件等待和数据等待等。


2.进程状态转换

20200914102755784.png


四、进程控制

进程和处理机管理的一个重要任务是进程控制。所谓进程控制,就是系统使用一些具有特定功能的程序段来创建、撤消进程以及完成进程各状态间的转换,从而达到多进程高效率并发执行和协调、实现资源共享的目的。


把系统态下执行的某些具有特定功能的程序段称为原语。原语分为两类:


一类是机器指令级的,其特点是执行期间不允许中断,在操作系统中,它是一个不可分割的基本单位。

一类是功能级的,其特点是作为原语的程序段不允许并发执行。

在操作系统中,通常把进程控制用程序段做成原语。用于进程控制的原语有:创建原语、撤消原语、阻塞原语、唤醒原语等。


1. 进程创建

(1)由系统程序模块统一创建,例如在批处理系统中,由操作系统的作业调度程序为用户作业创建相应的进程以完成用户作业所要求的功能。

(2)由父进程创建,例如在层次结构的系统中,父进程创建子进程以完成并行工作。

20200914110837280.png

无论是系统创建方式还是父进程创建方式,都必须调用创建原语来实现。创建原语扫描系统的PCB链表,在找到一定PCB表之后,填入调用者提供的有关参数,最后形成代表进程的PCB结构。这些参数包括:进程名、进程优先级P0 、进程正文段起始地址d0 、资源清单R0等。



2.进程撤销

以下几种情况导致进程被撤消:


该进程已完成所要求的功能而正常终止。

由于某种错误导致非正常终止。

祖先进程要求撤消某个子进程。

进程被撤消都必须释放它所占用的各种资源和PCB 结构本身,以利于资源的有效利用;当一个祖先进程撤消某个子进程时,还需审查该子进程是否还有自己的子孙进程,若有的话,还需撤消其子孙进程的PCB结构和释放它们所占有的资源。


撤消原语首先检查 PCB进程链或进程家族,寻找所要撤消的进程是否存在。如果找到了所要撤消的进程的 PCB结构,则撤消原语释放该进程所占有的资源之后,把对应的 PCB结构从进程链或进程家族中摘下并返回给 PCB空队列。如果被撤消的进程有自己的子进程,则撤消原语先撤消其子进程的 PCB结构并释放子进程所占用的资源之后,再撤消当前进程的 PCB结构和释放其资源。


20200914111345944.png


3.进程的阻塞block与唤醒wake up

实现进程的执行状态到等待状态,又由等待状态到就绪状态转换的两种原语,即阻塞原语与唤醒原语。


阻塞原语在一个进程期待某一事件发生,但发生条件尚不具备时,被该进程自己调用来阻塞自己。阻塞原语在阻塞一个进程时,由于该进程正处于执行状态,故应先中断处理机和保存该进程的CPU现场。然后将被阻塞进程置“阻塞”状态后插入等待队列中,再转进程调度程序选择新的就绪进程投入运行。

20200914113806903.png

当等待队列中的进程所等待的事件发生时,等待该事件的所有进程都将被唤醒。

唤醒一个进程有两种方法:


由系统进程唤醒

由事件发生进程唤醒

唤醒原语首先将被唤醒进程从相应的等待队列中摘下,将被唤醒进程置为就绪状态之后,送入就绪队列。在把被唤醒进程送入就绪队列之后,唤醒原语既可以返回原调用程序,也可以转向进程调度,以便让调度程序有机会选择一个合适的进程执行。

20200915110350588.png


五、进程互斥

1.资源共享所引起的制约

进程的并发执行不仅仅是用户程序的执行开始时间的随机性和提高资源利用率的结果,也是资源有限性导致资源的竞争与共享对进程的执行过程进行制约所造成的。


(1)临界区

设有两个计算进程PA,PB共享内存MS。其中 MS分为三个领域,即系统区、进程工作区和数据区。这里数据区被划分大小相等的块,每个块中既可能放有数据,也有可能未放有数据。系统区主要是堆栈S,其中存放那些空数据块的地址。

20200915112608810.png

相关文章
|
2月前
|
算法 Linux 调度
深入理解Linux操作系统的进程管理
本文旨在探讨Linux操作系统中的进程管理机制,包括进程的创建、执行、调度和终止等环节。通过对Linux内核中相关模块的分析,揭示其高效的进程管理策略,为开发者提供优化程序性能和资源利用率的参考。
109 1
|
3月前
|
算法 调度 Python
深入理解操作系统中的进程调度算法
在操作系统中,进程调度是核心任务之一,它决定了哪个进程将获得CPU的使用权。本文通过浅显易懂的语言和生动的比喻,带领读者了解进程调度算法的重要性及其工作原理,同时提供代码示例帮助理解。
|
2月前
|
调度 开发者 Python
深入浅出操作系统:进程与线程的奥秘
在数字世界的底层,操作系统扮演着不可或缺的角色。它如同一位高效的管家,协调和控制着计算机硬件与软件资源。本文将拨开迷雾,深入探索操作系统中两个核心概念——进程与线程。我们将从它们的诞生谈起,逐步剖析它们的本质、区别以及如何影响我们日常使用的应用程序性能。通过简单的比喻,我们将理解这些看似抽象的概念,并学会如何在编程实践中高效利用进程与线程。准备好跟随我一起,揭开操作系统的神秘面纱,让我们的代码运行得更加流畅吧!
|
1月前
|
监控 搜索推荐 开发工具
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
128 2
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
|
2月前
|
C语言 开发者 内存技术
探索操作系统核心:从进程管理到内存分配
本文将深入探讨操作系统的两大核心功能——进程管理和内存分配。通过直观的代码示例,我们将了解如何在操作系统中实现这些基本功能,以及它们如何影响系统性能和稳定性。文章旨在为读者提供一个清晰的操作系统内部工作机制视角,同时强调理解和掌握这些概念对于任何软件开发人员的重要性。
|
2月前
|
Linux 调度 C语言
深入理解操作系统:从进程管理到内存优化
本文旨在为读者提供一次深入浅出的操作系统之旅,从进程管理的基本概念出发,逐步探索到内存管理的高级技巧。我们将通过实际代码示例,揭示操作系统如何高效地调度和优化资源,确保系统稳定运行。无论你是初学者还是有一定基础的开发者,这篇文章都将为你打开一扇了解操作系统深层工作原理的大门。
|
2月前
|
存储 算法 调度
深入理解操作系统:进程调度的奥秘
在数字世界的心脏跳动着的是操作系统,它如同一个无形的指挥官,协调着每一个程序和进程。本文将揭开操作系统中进程调度的神秘面纱,带你领略时间片轮转、优先级调度等策略背后的智慧。从理论到实践,我们将一起探索如何通过代码示例来模拟简单的进程调度,从而更深刻地理解这一核心机制。准备好跟随我的步伐,一起走进操作系统的世界吧!
|
2月前
|
算法 调度 开发者
深入理解操作系统:进程与线程的管理
在数字世界的复杂编织中,操作系统如同一位精明的指挥家,协调着每一个音符的奏响。本篇文章将带领读者穿越操作系统的幕后,探索进程与线程管理的奥秘。从进程的诞生到线程的舞蹈,我们将一起见证这场微观世界的华丽变奏。通过深入浅出的解释和生动的比喻,本文旨在揭示操作系统如何高效地处理多任务,确保系统的稳定性和效率。让我们一起跟随代码的步伐,走进操作系统的内心世界。
|
2月前
|
运维 监控 Linux
Linux操作系统的守护进程与服务管理深度剖析####
本文作为一篇技术性文章,旨在深入探讨Linux操作系统中守护进程与服务管理的机制、工具及实践策略。不同于传统的摘要概述,本文将以“守护进程的生命周期”为核心线索,串联起Linux服务管理的各个方面,从守护进程的定义与特性出发,逐步深入到Systemd的工作原理、服务单元文件编写、服务状态管理以及故障排查技巧,为读者呈现一幅Linux服务管理的全景图。 ####
|
3月前
|
算法 Linux 调度
深入浅出操作系统的进程管理
本文通过浅显易懂的语言,向读者介绍了操作系统中一个核心概念——进程管理。我们将从进程的定义出发,逐步深入到进程的创建、调度、同步以及终止等关键环节,并穿插代码示例来直观展示进程管理的实现。文章旨在帮助初学者构建起对操作系统进程管理机制的初步认识,同时为有一定基础的读者提供温故知新的契机。

热门文章

最新文章