【操作系统】第七章:进程管理(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在管理进程时,他会一会创建一会结束,在整个组织里他应该可以动态插入和动态删除,用链表的方式可以更好地完成动态插入和删除。如果是数组的话,动态的插入和删除开销可能会比较大。所以目前来说更多采取基于链表的方式,当然如果一个进程个数比较固定且一开始就执行,到结束也不会频繁的创建删除的话,采取索引的方式比较快捷。



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

热门文章

最新文章

推荐镜像

更多