【操作系统篇】第三篇——进程(概念,组成,状态与转换,控制以及通信)

简介: 【操作系统篇】第三篇——进程(概念,组成,状态与转换,控制以及通信)

进程的概念


  • 为什么要引入进程的概念?

 从理论角度看,是对正在运行的程序过程的抽象;

 从实现角度看,是一种数据结构,目的在于清晰地刻画动态系统的内在规律,有效管理和调度进入计算机系统主存储器运行的程序。

  • 什么是进程?

狭义定义:进程就是一段程序的执行过程。

 广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。

  • 进程有怎么样的特征?

动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。

并发性:任何进程都可以同其他进程一起并发执行

独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;

异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推 进

结构特征:进程由程序、数据和进程控制块三部分组成;

多个不同的进程可以包含相同的程序:一个程序在不同的数据集里就构成不同的进程,能得到不同的结果; 但是执行过程中,程序不能发生改变。

  • 进程的三种基本状态?

  a> 就绪状态:进程已获得除处理器外的所需资源,等待分配处理器资源;只要分配了处理器进程就可执行。就绪进程可以按多个优先级来划分队列。例如,当一个进程由于时间片用完而进入就绪状态时,排入低优先级队列;当进程由I/O操作完成而进入就绪状态时,排入高优先级队列。

  b> 运行状态:进程占用处理器资源;处于此状态的进程的数目小于等于处理器的数目。在没有其他进程可以 执行时(如所有进程都在阻塞状态),通常会自动执行系统的空闲进程。

  c> 阻塞状态:由于进程等待某种条件(如I/O操作或进程同步),在条件满足之前无法继续执行。该事件发生 前即使把处理机分配给该进程,也无法运行。

  • 进程和程序的区别?

   a> 程序是指令和数据的有序集合,是一个静态的概念。而进程是程序在处理机上的一次执行过程,它是一个 动态的概念。

     b> 程序可以作为一种软件资料长期存在,而进程是有一定生命期的。程序是永久的,进程是暂时的。

c> 进程是由进程控制块、程序段、数据段三部分组成;

   d> 进程具有创建其他进程的功能,而程序没有。

   e> 同一程序同时运行于若干个数据集合上,它将属于若干个不同的进程,也就是说同一程序可以对应多个进 程。

   f> 在传统的操作系统中,程序并不能独立运行,作为资源分配和独立运行的基本单元都是进程。

进程的组成


进程是由程序控制块(PCB),程序段,数据段组成。

操作系统是通过PCB来管理进程,因此PCB中应该包含操作系统对其进行管理所需的各种信息,如进程描述信息,进程控制和管理信息,资源分配清单和处理机相关信息。

程序段:程序代码存放的位置。

数据段:程序运行时使用,产生的运算数据。如全局变量,局部变量,宏定义的常量就存放在数据段内。

image.png

注意:PCB是给操作系统用的;程序段,数据段是给进程自己用的。

思考:操作系统是这些进程的管理者,它要怎么区分各个进程?

当进程被创建的时候,操作系统会为该进程分配一个唯一的,不重复的"身份证号"--PID

操作系统要记录PID,进程所属用户ID(UID),基本的进程描述信息,可以让操作系统区分各个进程。

还要记录给进程分配了那些资源(如:分配了多少内存,正在使用哪些文件),可用于实现操作系统对资源的管理。

还要记录进程的运行情况(如:CPU使用时间,磁盘使用情况,网络流量使用情况),可用于实现操作系统对进程的控制,调度。

这些信息都被保存在一个数据结构PCB中,即进程控制块

操作系统需要对各个并发运行的进程进行管理,但凡管理时所需要的信息,都会被放在PCB中

image.png

进程的特征


程序是静态的,进程是动态的,相比于程序,进程拥有以下特征:

动态性:进程的最基本的特征,进程是程序的一次执行过程,是动态的产生,变化和消亡。

并发性:内存中有多个进程实体,各进程可以实现并发执行

独立性:进程是能独立运行,独立获得资源,独立接受调度的基本单位

异步性:各个进程按各自独立的,不可预知的速度向前推进,操作系统要提供进程同步机制来解决异步问题。

结构性:每个进程都会配置一个PCB,结构上看,进程由程序段,数据段和PCB组成。

image.png

进程的状态


平时我们写的文件放在硬盘上,运行的时候会被加载内存,同时操作系统会为他建立相应的PCB,进程正在被创建的期间,这个状态就被称为":创建态",在这个阶段操作系统会为进程分配资源,初始化PCB;当进程创建完成后,便进入"就绪态',处于就绪态的进程已经具备运行条件,但由于没有空闲CPU,就暂时不能运行。一个系统当中可能会存在很多个进程都处于就绪态,当CPU空闲的时候,操作系统就会选择一个就绪进程,让它上处理机运行。

image.png

如果一个进程此时在CPU上运行,那么这个进程就处于"运行态", CPU会执行该进程对应的程序(执行指令序列)。

image.png

此时执行指令三,发出系统调用请求使用打印机资源,但是此时打印机正在忙,指令四在获得所需要资源之前进程无法再往下执行.


在进程运行的过程中,可能会请求等待某个事件的发生(如等待某种系统资源的分配,或者等待其他进程的响应)。在这个事件发生之前,进程无法继续往下执行,此时操作系统会让这个进程下CPU,并让它进入"阻塞态",

image.png

当CPU空闲时,又会选择另一个"就绪态"进程上CPU运行。

image.png

当打印机空闲下来后,就会把打印机分配给进程2,此时进程2再次有了运行的条件,把进程2从阻塞态变为就绪态,此时假设进程1在CPU上运行结束了,一个进程可以执行exit系统调用,请求操作系统终止该进程。此时该进程会进入"终止态",操作系统会让该进程下CPU.并回收内存空间等资源,最后还要回收该进程的PCB。当终止进程的工作完成后,这个进程就彻底消失了。

image.png

进程间的转换


image.png

注意:不能由阻塞态直接转换为运行态,也不能由就绪态直接转换为阻塞态(因为进入阻塞态是进程主动请求的,必然需要进程在运行时才能发出这种请求)。

image.png

进程的组织


在一个系统中,通常有数十,数百乃至数千个PCB,为了能对他们加以有效的管理,应使用适当的方式把这些PCB组织起来。

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

image.png

链接方式

image.png

索引方式

image.png

进程控制


什么是进程控制


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

简化理解:反正进程控制就是要实现进程状态转换

image.png

如何实现进程控制


需要用"原语"来实现,原语是一种特殊的程序,它的执行具有原子性,也就是说,这段程序的运行必须一气呵成,不可中断

思考:为什么进程控制(状态转换)的过程要"一气呵成"?

Eg:假设PCB中的变量state表示进程当前所处的状态,1表示就绪态,2表示阻塞态....

image.png

假设此时进程2等待的事件发生,则操作系统中,负责进程控制的内核程序至少需要做这样两件事:

1.奖PCB2的state设为1:完成了第一步后收到中断信号,那么PCB2的state=1,但是它却被放在阻塞队列里。

2.将PCB2从阻塞队列放到就绪队列

如果不能"一气呵成",就有可能导致操作系统中的某些关键数据结构信息不统一的情况,这会影响操作系统进行别的管理工作。

如何实现原语的"原子性"?

原语的执行具有原子性,即执行过程只能一气呵成,期间不允许被中断

可以用"关中断指令"和"开中断指令"这两个特权指令实现原子性。

image.png

正常情况:CPU每执行完一条指令都会例行检查是否会有中断信号需要处理,如果有,则暂停运行当前这段程序,转而执行相应的中断处理程程序。当执行关中断指令后,就不再检查是否有中断信号,直到执行开中断指令之后才会恢复检查。

这样,关中断,开中断之间的这些指令序列就是不可被中断的,这就实现了"原子性"。

进程控制相关的原语


进程的创建


创建原语(创建态->就绪态)

  • 申请空白PCB
  • 为新进程分配所需资源
  • 初始化PCB
  • 将PCB插入就绪队列

引起进程创建的事件

  • 用户登录:分时系统中,用户登录成功,系统会为其建立一个新的进程
  • 作业调度:多道批处理系统中,有新的作业放入内存时,会为其建立一个新的进程
  • 提供服务:用户向操作系统提出某些请求时,会新建一个进程处理该请求
  • 应用请求:由用户进程主动请求创建一个子进程

进程的终止


撤销原语(就绪态/阻塞态/运行态->终止态->无)

  • 从PCB集合中找到终止进程的PCB
  • 若进程正在运行,立即剥夺CPU,将CPU分配给其他进程
  • 终止其所有子进程
  • 将该进程拥有的所有资源归还给父进程或操作系统
  • 删除PCB

引起进程终止得事件

  • 正常结束:进程自己请求终止(exit系统调用)
  • 异常结束:整数除以0,非法使用特权指令,然后被操作系统强行杀掉
  • 外界干预:Ctrl+Alt+delete,用户选择杀掉进程

进程的阻塞


阻塞原语(运行态->阻塞态)

  • 找到要阻塞得进程对应的PCB
  • 保护进程运行现场,将PCB状态信息设置为"阻塞态",暂时停止进程运行
  • 将PCB插入相应事件得等待队列

引起进程阻塞得事件

  • 需要等待系统分配某种资源
  • 需要等待相互合作得其他进程完成工作

进程的唤醒


唤醒原语(阻塞态->就绪态)

  • 在事件等待队列中找到PCB
  • 将PCB从等待队列移除,设置进程为就绪态
  • 将PCB插入就绪队列,等待被调度

引起进程唤醒得事件

  • 等待事件发生:因何事阻塞,就应由何事唤醒)

进程的切换


切换原语(运行态->就绪态/就绪态->运行态)

  • 将运行环境信息存入PCB
  • PCB移入相应队列
  • 选择另一个进程执行,并更新其PCB
  • 根据PCB恢复新进程所需的运行环境

引起进程切换的事件

  • 当前进程时间片到
  • 有更高优先级的进程到达
  • 当前进程主动阻塞
  • 当前进程终止

无论是哪个进程控制原语,要做的无非三类事情:

1.更新PCB中的信息

2.将PCB插入合适的队列

3.分配/回收资源

image.png

进程通信


进程间通信是指两个进程之间产生数据交互。

为什么进程通信需要操作系统支持?

进程是分配系统资源的单位,因此各进程拥有的内存地址空间相互独立

为了保证安全,一个进程不能直接访问另一个进程的地址空间

image.png

共享存储


为避免出错,各个进程对共享空间的访问应该是互斥的。各个进程可使用操作系统内核提供的同步互斥工具。

image.png

注:通过“增加页表项/段表项”即可将同一片共享内存区映射到各个进程的地址空间中(第三章内容)

基于数据结构共享


基于数据结构的共享:比如共享空间里只能放一个长度为10的数组。这种共享方式速度慢、限制多,是一种低级通信方式

image.png

基于存储区共享


基于存储区的共享:操作系统在内存中划出一块共享存储区,数据的形式、存放位置都由通

信进程控制,而不是操作系统。这种共享方式速度很快,是一种高级通信方式。

消息传递


进程间的数据交换以格式化的消息Message)为单位。进程通过操作系统提供的“发送消息/接收

消息”两个原语进行数据交换。

直接通信方式


image.png

间接通信方式


image.png

管道通信


   

image.png

1.管道只能采用 半双工通信 ,某一时间段内只能实现单向的传输。如果要实现 双向同时通信 ,则 需要设置两个管道

2. 各进程要 互斥 地访问管道(由操作系统实现)

3.当 管道写满 时, 写进程 将 阻塞 ,直到读进程将管道中的数据取走,即可唤醒写进程

4.当 管道读空 时, 读进程 将 阻塞 ,直到写进程往管道中写入数据,即可唤醒读进程

5. 管道中的数据一旦被读出,就彻底消失。因此,当多个进程读同一个管道时,可能会错乱。对此,通常有两种解决方案:① 一个管道允许多个写进程,一个读进程(2014年408真题高教社官方答案);②允许有 多个写进程,多个读进程,但系统会让各个读进程轮流从管道中读数据(Linux 的方案)。

相关文章
|
存储 Linux API
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
在计算机系统的底层架构中,操作系统肩负着资源管理与任务调度的重任。当我们启动各类应用程序时,其背后复杂的运作机制便悄然展开。程序,作为静态的指令集合,如何在系统中实现动态执行?本文带你一探究竟!
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
|
11月前
|
Unix Linux
对于Linux的进程概念以及进程状态的理解和解析
现在,我们已经了解了Linux进程的基础知识和进程状态的理解了。这就像我们理解了城市中行人的行走和行为模式!希望这个形象的例子能帮助我们更好地理解这个重要的概念,并在实际应用中发挥作用。
210 20
|
12月前
|
缓存 运维 前端开发
|
12月前
|
缓存 运维 前端开发
阿里云操作系统控制台:高效解决性能瓶颈与抖动之进程热点追踪
遇到“进程性能瓶颈导致业务异常”等多项业务痛点时,提供高效解决方案,并展示案例。
|
10月前
|
存储 Linux Shell
Linux进程概念-详细版(二)
在Linux进程概念-详细版(一)中我们解释了什么是进程,以及进程的各种状态,已经对进程有了一定的认识,那么这篇文章将会继续补全上篇文章剩余没有说到的,进程优先级,环境变量,程序地址空间,进程地址空间,以及调度队列。
177 0
|
10月前
|
Linux 调度 C语言
Linux进程概念-详细版(一)
子进程与父进程代码共享,其子进程直接用父进程的代码,其自己本身无代码,所以子进程无法改动代码,平时所说的修改是修改的数据。为什么要创建子进程:为了让其父子进程执行不同的代码块。子进程的数据相对于父进程是会进行写时拷贝(COW)。
237 0
|
存储 Linux 调度
【Linux】进程概念和进程状态
本文详细介绍了Linux系统中进程的核心概念与管理机制。从进程的定义出发,阐述了其作为操作系统资源管理的基本单位的重要性,并深入解析了task_struct结构体的内容及其在进程管理中的作用。同时,文章讲解了进程的基本操作(如获取PID、查看进程信息等)、父进程与子进程的关系(重点分析fork函数)、以及进程的三种主要状态(运行、阻塞、挂起)。此外,还探讨了Linux特有的进程状态表示和孤儿进程的处理方式。通过学习这些内容,读者可以更好地理解Linux进程的运行原理并优化系统性能。
469 4
|
消息中间件 Linux C++
c++ linux通过实现独立进程之间的通信和传递字符串 demo
的进程间通信机制,适用于父子进程之间的数据传输。希望本文能帮助您更好地理解和应用Linux管道,提升开发效率。 在实际开发中,除了管道,还可以根据具体需求选择消息队列、共享内存、套接字等其他进程间通信方
356 16
|
存储 算法 数据处理
进程基础:概念、状态与生命周期
进程是操作系统进行资源分配和调度的基本单位,由程序段、数据段和进程控制块(PCB)组成。线程是进程中更小的执行单元,能独立运行且共享进程资源,具有轻量级和并发性特点。进程状态包括就绪、运行和阻塞,其生命周期分为创建、就绪、运行、阻塞和终止阶段。
880 2
|
监控 搜索推荐 开发工具
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
2559 2
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新

热门文章

最新文章

推荐镜像

更多