【操作系统】第七章:进程管理(Part1:进程的概念)

简介: 【操作系统】第七章:进程管理(Part1:进程的概念)

目录


  • 进程描述
  • 1.定义
  • 2.组成
  • 3.进程与程序的联系
  • 4.特点
  • 进程控制块


正文


进程描述


进程的静态表述部分。


1.定义


902955837b5bee99df7bc1710a35c374_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

进程的概念比较抽象。某些角度上,我们可以把运行的程序看作进程,它代表程序在整个执行过程的描述。随着计算机的不断发展,程序开始出现多元化,一个程序分成几部分运行的例子也很多,此时如果我们再用程序的概念来描述多个程序的实例就比较困难,所以我们引出进程的概念。

进程:一个具有独立功能的程序在一个数据集合上的一次动态执行过程。

如图,我们写程序,然后程序通过编译可以变成一个执行程序,执行程序包含了代码段,数据段和数据结构等。这样的程序是放在文件系统里,以一种执行文件的形态存在,是静态存在的,无法看到它可以完成什么样的功能;只有当OS将其调入内存中,让这个程序跑起来,通过CPU执行程序中的一条条指令、对相应数据进行处理,可以完成一定的功能。这一步是一个动态的执行过程,这个执行过程就是进程。进程是一个动态的过程,程序是静态的,他们之间有很深的联系,因为进程取决于程序的代码。


2.组成


进程具体需要执行的东西:

①相应的代码

②代码需要处理的数据

③现在要执行的指令

④一组通用寄存器的当前值、堆栈

寄存器中一般存着下一条要执行的指令位置,同时整个处理过程中他会用到大量CPU的寄存器,会动态变化。

⑤系统资源(内存、文件系统、网络等一系列的资源)


进程包含了一个正在运行的程序的状态信息。这个状态信息是比较抽象的概念。


3.进程与程序的联系


3bcc78ecc0fe61e1378bf6810eef62fb_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

程序是产生进程的基础,进程的功能受制于程序的代码。程序的每一次执行构成了不同的进程,程序放在系统中可以被多次执行,且每次执行如果数据不同,则得到的结果也可能不同。当有多个进程执行这个程序时,可能会因为获得的资源不一样而获得不同的结果。进程就是程序功能的体现,数据不同,但是其逻辑原理是一样的,排序程序,输入不同输出不一定相同但是一定是一个排序的程序。通过多次执行,一个程序可以对应多个进程;通过调用关系,一个进程可以包括多个程序。


区别:进程是动态的;程序是静态的。程序是有序代码的集合,进程是程序的执行,进程有核心态用户态

核心态就是在操作系统中运行,我们写的程序都是运行在用户态。进程在执行过程中需要一些特定功能,比如读写文件,这个功能需要由OS完成,所以代表进程在内核中执行,也就说进程处于核心态。


进程是暂时的,程序是永久的。进程是一个状态变化的过程,程序可以长久保存。程序保存在硬盘中,可以长久保存;进程随着结束自然也就消失了。


进程与程序的组成不同。进程的组成包括程序、数据和进程控制块(即进程状态信息)。虽然进程用到了程序的代码段和数据段等数据结构,但是进程执行过程中也有一些变化,处理数据时,数据在变;这个过程在程序中不存在的。处理输入数据对应产生输出数据,为了管理进程OS而建立的进程控制块等。

【例子】

ad6269f155f4bd4dbaf2253425ec6701_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

很明显医疗救护的优先级要高于做蛋糕,在处理完伤口后回来做蛋糕发现未完成的蛋糕上落满了苍蝇,科学家决定倒掉重做,这就是杀死进程。也就说CPU在执行进程时,会动态切换不同进程来完成不同的功能,这也是静态程序所没有的特征。


4.特点


动态性:可动态创建、结束进程。在执行过程中还有可能切换或者杀死进程。

并发性:进程可以被独立调度并占用CPU运行。

并发:一段时间内通过不但切换有多个进程在CPU中不断切换执行,如果这个时间很小,给人一种错觉是多个进程在同时执行。假·同时执行,是一种人感觉不到的错觉

并行:一个时刻,有多个进程在同时执行。如果只有一个CPU是不可能完成的,一个CPU在某一时刻只能执行一个进程,执行其他执行必须切换。多核/多处理器CPU时,可以满足并发执行。真·同时执行

独立性:不同进程之间的工作互不影响。执行进程时,OS会调度不同进程执行,所以进程的执行时间可能会受到其他进程的影响;但是进程的正确性不会受到影响,进程不会破坏其他进程的正确执行(代码/数据)。

通过页表可以使得不同的程序访问不同的地址空间,页表就是保证进程独立性的重要机制。有了页表,OS可以给不同进程分配不同页表,让每个进程在独立的空间内运行,使得他们的代码数据相互间不受影响。

制约性:因访问共享数据/资源或进程间同步而产生制约。进程之间可能有交互,或者某一进程需要在另一个进程在执行到某一阶段之后才能执行(前置条件),所以这也需要OS根据进程间的特点来协调进程去执行。

9fdd22e848491164c7d0c3990f144195_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png


左图:体现动态性,在ABCD间切换执行。

中图:四个进程相对独立执行,他们执行的地址空间相对独立

右图:相互之间时间调度有一定的关系,执行的先后顺序需要OS调度策略或算法,或者存在约束关系(必须执行A才能执行B)。


进程控制块


操作系统也是一个软件,一个程序,描述进程的数据结构:进程控制块(Process Control Block,PCB)。描述进程执行过程中状态的变化和资源的需求情况。OS为每一个进程都维护了一个PCB,用于保存该进程执行过程中相关的所有信息,有了这些信息之后OS才可以对其管理,提供相应的独立性、动态性等特征。

1531517c657cd8003f21807f3e5bcb31_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

设计一个程序,数据结构是非常重要的。有了数据结构就可以很好地对进程管理。PCB描述了进程的基本情况和运行变化情况,所以一般来说我们可以把PCB作为进程存在的唯一标识,也就意味着如果进程存在则必然有一个PCB。一旦创建进程,就会相应创建一个进程控制块。

PCB 体现了什么时候开始,什么时候结束,中间是否被切换。

d07438112d7857aaa42f7539308a5331_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

PCB包含的三大类信息:

1.标识信息:一个PCB唯一标识了一个进程,PCB会有一个ID,这个ID就是个标识,他可以识别出进程代表的哪一个程序,或者这一个程序执行了几次,都可以通过PCB的进程标识来体现。还可以体现用户标识,比如这个进程属于哪一个用户,进程的父进程是什么(创建这个进程的进程)

2.处理器的状态信息:其实就是寄存器。处理器是CPU。CPU运行过程中会使用寄存器来做很多事情,比如当前需要对数据进行加减乘除等数学结算,这个过程会把很多数据存到寄存器里进行处理;还会保存状态,比如标志位,做了一个寄存器加法,检验是否溢出;执行过程,堆栈在什么地方;和执行相关的一些过程的保存也放在寄存器里,比如程序计数器和程序状态字,他们 保存了程序执行过程中相关的一些重要信息,还有堆栈执行到什么地方了,这些信息PC里都有记录。

2e524adc8791863f23445c0427df4a7d_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

3.进程的控制信息:OS需要对进程进行管理和控制,我们需要让它占用CPU执行,让他处于一个等待/就绪/运行的状态,这些不同的状态体现了进程在执行过程中临时的情况(执行特征),这些特征会描述出当前进程的执行现状。

进程之间需要通信,通信的信息也会保存在PCB。

进程本身需要内存,代码和数据都在内存中,管理其内存信息。比如占不到内存,是否回收;是否分配新的内存;

包括文件(后续详解)。一个进程可以打开不同的文件,整个过程怎么管理。

进程之间有关系,父进程和子进程。我们可以通过List链表来管理器来一个子进程与父进程的连续序列,从而形成PCB之间的链接信息和管理信息,从而形成了进程控制信息。

ex)进程A创建进程B,进程B可以创建进程C,则A是B的父进程,B是A的子进程;B是C的父进程,C是B的子进程。


PCB的组织方式:

我们可以用链表/索引(数组方式)来组织,但是一般我们会采取链表来组织,因为进程的执行过程是一个动态的执行过程,也就意味着OS在管理进程时,他会一会创建一会结束,在整个组织里他应该可以动态插入和动态删除,用链表的方式可以更好地完成动态插入和删除。如果是数组的话,动态的插入和删除开销可能会比较大。所以目前来说更多采取基于链表的方式,当然如果一个进程个数比较固定且一开始就执行,到结束也不会频繁的创建删除的话,采取索引的方式比较快捷。



目录
相关文章
|
28天前
|
资源调度 监控 算法
深入理解操作系统:进程管理与调度策略
本文旨在探讨操作系统中进程管理的核心概念及其实现机制,特别是进程调度策略对系统性能的影响。通过分析不同类型操作系统的进程调度算法,我们能够了解这些策略如何平衡响应时间、吞吐量和公平性等关键指标。文章首先介绍进程的基本概念和状态转换,随后深入讨论各种调度策略,如先来先服务(FCFS)、短作业优先(SJF)、轮转(RR)以及多级反馈队列(MLQ)。最后,文章将评估现代操作系统在面对多核处理器和虚拟化技术时,进程调度策略的创新趋势。
|
2天前
|
算法 Linux 调度
深入理解操作系统中的进程调度策略
【4月更文挑战第25天】 在多任务操作系统中,进程调度策略是核心组件之一,它负责决定哪个可运行的进程将获得CPU时间。本文将探讨不同的进程调度算法,包括它们的原理、优缺点以及适用场景。我们将重点分析先到先服务(FCFS)、短作业优先(SJF)、轮转调度(RR)和多级反馈队列(MLFQ)等经典算法,并讨论现代操作系统如Linux和Windows中的实际调度策略。文章的目的是为读者提供对操作系统进程调度机制深度了解,并展示其在系统性能和用户体验中的关键作用。
|
2天前
|
负载均衡 算法 调度
深入理解操作系统中的进程调度策略
【4月更文挑战第25天】 在现代操作系统的核心功能中,进程调度策略扮演着至关重要的角色。本文将详细解析进程调度的基本概念、调度算法的种类及其背后的原理,并探讨它们对系统性能的影响。通过比较不同的调度策略,我们可以更深入地理解操作系统如何管理资源,确保多任务环境下的效率和公平性。
|
4天前
|
NoSQL Linux 程序员
【linux进程信号(一)】信号的概念以及产生信号的方式
【linux进程信号(一)】信号的概念以及产生信号的方式
|
4天前
|
存储 Linux Shell
【linux进程(一)】深入理解进程概念--什么是进程?PCB的底层是什么?
【linux进程(一)】深入理解进程概念--什么是进程?PCB的底层是什么?
|
19天前
|
算法 Linux 调度
深入理解操作系统的进程调度策略
【4月更文挑战第8天】本文深入剖析了操作系统中的关键组成部分——进程调度策略。首先,我们定义了进程调度并解释了其在资源分配和系统性能中的作用。接着,探讨了几种经典的调度算法,包括先来先服务(FCFS)、短作业优先(SJF)以及多级反馈队列(MLQ)。通过比较这些算法的优缺点,本文揭示了它们在现实世界操作系统中的应用与局限性。最后,文章指出了未来进程调度策略可能的发展方向,特别是针对多核处理器和云计算环境的适应性。
|
20天前
|
算法 调度 UED
深入理解操作系统中的进程调度策略
【4月更文挑战第7天】 在多任务操作系统中,进程调度策略是决定系统性能和响应速度的关键因素之一。本文将探讨现代操作系统中常用的进程调度算法,包括先来先服务、短作业优先、轮转调度以及多级反馈队列等。通过比较各自的优势与局限性,我们旨在为读者提供一个全面的视角,以理解如何根据不同场景选择合适的调度策略,从而优化系统资源分配和提升用户体验。
|
29天前
|
算法 Unix Linux
深入理解操作系统:进程管理与调度策略
在现代操作系统的核心功能中,进程管理及其调度机制是维护系统稳定与高效运行的基石。本文将深入探讨操作系统中的进程概念、进程状态、以及进程调度策略。我们将从理论和实践两个维度出发,解析不同操作系统如何通过进程管理来优化资源分配,提升系统响应速度,并保证多任务环境下的公平性与效率。特别地,文章还将讨论实时系统中的调度策略,以及它们对于确保关键任务按时完成的重要性。
14 1
|
18天前
|
监控 Unix Linux
Linux操作系统调优相关工具(四)查看Network运行状态 和系统整体运行状态
Linux操作系统调优相关工具(四)查看Network运行状态 和系统整体运行状态
31 0
|
19天前
|
Linux 编译器 开发者
Linux设备树解析:桥接硬件与操作系统的关键架构
在探索Linux的庞大和复杂世界时🌌,我们经常会遇到许多关键概念和工具🛠️,它们使得Linux成为了一个强大和灵活的操作系统💪。其中,"设备树"(Device Tree)是一个不可或缺的部分🌲,尤其是在嵌入式系统🖥️和多平台硬件支持方面🔌。让我们深入了解Linux设备树是什么,它的起源,以及为什么Linux需要它🌳。
Linux设备树解析:桥接硬件与操作系统的关键架构