《计算机操作系统-第四章》之进程

简介: 《计算机操作系统-第四章》之进程

文章目录

1.进程

2.为什么需要进程?

3.什么是进程?

4.进程的组成

4.1PCB中的部分属性

5.进程的组织

5.1链接方式

5.2索引方式

6.进程的特征

7.进程的状态

7.1进程的基本状态

7.2进程状态的转换

8.进程控制

8.1原语

8.1.1进程的创建

8.1.2进程的终止

8.1.3进程的阻塞

8.1.4进程的唤醒

8.1.5总结原语

9.进程间通信

9.1为什么需要进程通信?

9.2共享存储

9.3管道通信

9.4消息通信

9.4.1直接通信

9.4.2间接通信

1.进程

2.为什么需要进程?

先来思考一个问题,什么是程序?程序等于数据+指令,举个例子,qq具有删除好友的功能,当你高兴时好友就是躺在列表中的数据(本质上是数据,只不过为了用户体验,整了图形化),当你不高兴了你就可以把他删除(指令)了。在早期时计算机只是处理单道程序,即CPU为它服务,内存被它一个人占了,IO设备也是为了服务,总之在一个程序在内存中运行时,计算机的一切都是它的,而程序被加载到了内存中其实它有2个去处,一个是位于低地址处的程序段(保存指令序列),一个是位于高地址处的数据段(存放程序中的数据)。随着多道程序设计的引入,内存中同时可以放入多道程序,各个程序的代码,运算数据存放的位置不同。并且程序又是并发的执行,那么操作系统是怎么找到各程序存放的位置?除此之外系统中的IO设备以及其它的资源都有可能分配给不同的程序而每一个运行的程序分配了什么样的资源这些信息也是需要被记录下来,这样才能方便操作系统的管理,因此引入了进程,进程实体的概念。操作系统会给每一个即将执行的程序配置一个数据结构(链表),称为进程控制块(PCB),用来描述进程的各种信息(进程代码存放的位置,资源分配情况)

3.什么是进程?

程序段,数据段,PCB三部分组成了进程实体(进程映像)。一般情况,进程实体就是进程。简单而言进程就是一个正在运行的程序,当双击qq的可执行文件(exe),操作系统就会把该程序加载到内存中,然后再分配各种各样的资源,这个exe程序就跑来了,所以进程就是一个正在跑的程序或者是一个任务。

可以打开电脑上的任务管理器.就能查看我们电脑的进程

注意

  1. 1.所谓的创建进程,实质是创建了进程实体中的PCB;而撤销进程,实质上是撤销进程实体中的PCB
  2. 2.PCB的进程存在的唯一标识
  3. 3.进程是操作系统分配资源的基本单位
  4. 4.进程实体和进程并不一样,进程实体是静态的,进程则是动态的。

4.进程的组成

进程(进程实体)由程序段,数据段,PCB三部分组成,如下图所示。

4.1PCB中的部分属性

进程标识符PID:当进程创建时,操作系统会为该进程分配一个唯一的,不重复,用于不同区别进程。

用户标识符UID:标识进程的用户

各种寄存器的值:当进程需要切换时需要把当前的进程运行情况记录下来保存在PCB中,此操作相当于魔兽世界玩到一半不玩了,为了下次能继续玩就得存档,进程也是如此,可能程序执行到一半,数据处理到一半,为了下次能接上所以需要保存。

内存指针:指明该进程的指令存放位置,数据存放位置以及维护运行转态。

文件描述表:文件描述表可以看做是一个结构体数组,数组内容则是存放进程打开文件后以及操作文件(存放在硬盘上的数据)的信息。数组的下标则是文件描述符。

下面一些属性时有关进程调度的

进程调度

首先要明确进程调度的最小单位是线程,而进程是包含下线程的,接下来为了更加方便的说明进程的调度,就假设此处的进程有且只有一个线程,这样就可以将线程的调度试做进程的调度。操作系统作为计算机的管理者,在线程的调度上堪称时间管理大师以及海王。假设目前有三个线程A,B,C分别看做是最帅的男人,最有前的男人,最会舔的男人。而操作系统则是有才华,有颜值的小姐姐。因为小姐姐是海王,想和这三个男孩子谈恋爱,但是她又不能让男孩子认为她是渣女,所以就提前规划好与这些男孩子的约会时间,并用小本本记录下来以及记录她和三个男孩子之间的一些事,避免日后翻车。因为小姐姐特别喜欢有钱的,其次是帅的,然后是会舔的。所以她对三者有着明确的优先级,因此将周一至周三的时间和有钱的男孩子逛街,周四和周六和最帅的男孩子玩,周天呢就和会舔的男孩子聊天。这就是进程的调度。

进程的优先级:像上述列子,就是操作系统将进程排好等级,优先级高的先执行 ,优先级低的后执行。

进程的上下文:进程可能执行到一半就暂停实行了,因此需要保存当前的状态,以便后续进程再次被调度时,能够接着执行。

进程的记账信息:统计进程的执行时间,进程的执行指令的条数等,是进程都尽可能的都被调度,也就是雨露均沾。

5.进程的组织

在一个操作系统中,通常有上百乃至上千个PCB。因此需要对进行有效的管理。进程的组织有两种组织方式,一种是链接方式,一种是索引方式。

5.1链接方式

按照进程状态将PCB分为多个队列。操作系统持有指向各个队列的指针。如下图所示。

5.2索引方式

1根据进程状态不同,建立索引表。2操作系统持有执行各个索引表的指针。如下图所示。

6.进程的特征

1.动态性:进程是程序的一次执行过程,是动态地产生,变化和消亡的。

2.并发性:内存中有多个进程实体,各进程可并发执行。

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

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

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

7.进程的状态

进程是程序的一次运行。在这个运行的过程中,有的进程正在被CPU处理,有的进程需要等待CPU服务,由此可见,进程的状态是会有各种各样的变化。为了对个个进程进行管理,操作系统将进程合理的划分为几种状态。

7.1进程的基本状态

1.创建态:进程正在被创建,操作系统为该进程分配时所需的内存空间等系统资源,并为其创建,初始化PCB。

2.运行态:占用CPU,并在CPU上运行。

3.就绪态:已具备运行条件(分配好了资源),但由于没有闲置的CPU,而暂时不能运行。

4.阻塞态(等待态):因等待某一事件而暂时不能运行。(如等待系统分配打印机)。

5.终止态:进程运行结束或者由于bug导致进程无法继续工作下去,如数组越界错误等。此时需要撤销进程,操作系统回收进程拥有的资源,撤销PCB。

7.2进程状态的转换

进程间的转换如图所示

注意

1.运行态—>阻塞态是一种进程自身做出的主动行为

2.阻塞态—>就绪态是不受进程自身所控制的,是一种被动行为

3.不能由阻塞态直接转换成运行态,也不能由就绪态直接转换成阻塞态(进入阻塞态是进程主动请求的,必然需要进程在运行时才能发出请求)

8.进程控制

简单理解,进程控制就是要实现进程状态转换

图解进程的组织

说明

首先创建进程,有了进程后需要修改PCB的内容和相应的队列就可以从创建态–>就绪态,进程处于就绪态时就可以被调度和切换,当就绪态–>运行态也需要修改PCB内容以及调整到相应的队列,运行态的进程如若正常完成或者异常结束,都需要回收资源以及撤销PCB。而运行态–>就绪态或者运行态—>阻塞态需要保存运行环境和需要修改PCB的内容,同时调整到对应的队列。阻塞态–>就绪态同样也是修改PCB内容和相应队列。上述的进程状态的切换都涉及PCB的修改以及出队入队的操作,假如一旦这些操作出了问题,就会导致进程的崩溃。为了准确的实现进程的切换,原语就产生了。

8.1原语

原语采用关中断指令和开中断指令实现

在执行原语代码之前会先执行关中断指令然后执行原语代码,指向原语代码过程中如果收到了外部中断信号会被直接忽略,当执行完开中断指令后外部信号才会被接收进而运行中断程序。

8.1.1进程的创建

创建原语

步骤如下

  1. 1.申请空白的PCB
  2. 2.为新进程分配所需资源
  3. 3.初始化PCB
  4. 4.将PCB 插入到就绪队列

引起进程创建的事件

  1. 1.应用请求:由用户进程主动请求一个子进程
  2. 2.作业调度:多道批处理系统中,有新的作业放入内存时,会为其建立一个新的进程

8.1.2进程的终止

撤销原语

步骤如下

  1. 1.从PCB集合中找到终止线程的PCB
  2. 2.若进程正在运行,立刻剥夺CPU,将CPU分配给其它进程
  3. 3.终止其所有至子线程
  4. 4.将该进程拥有的所有资源归还给父进程或者操作系统
  1. 5.删除PCB

引起进程终止的事件

  1. 1.正常结束
  2. 2.异常结束(数组索引越界)
  1. 3.外界干预(使用任务管理器杀死进程)

8.1.3进程的阻塞

步骤如下

  1. 1.找到要阻塞的进程对应的PCB
  2. 2.保护进程运行环境,将PCB转态信息设置为阻塞态,暂时停止进程运行
  3. 3.将PCB插如相应事件的等待队列

引起进程阻塞的事件

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

8.1.4进程的唤醒

步骤如下

  1. 1.在等待队列中找到PCB
  2. 2.将PCB从等待队列中移除,设置进程为就绪态
  3. 3.将PCB插入到就绪队列,等待被调度

引起进程唤醒的事件

  • 等待事件的发生

8.1.5总结原语

无论何种原语,都是做一下三件事

  1. 1.更新PCB中的信息(如修改进程转态标志,将运行环境保存到PCB,从PCB恢复运行环境)
  • 所有的进程控制原语一定会修改进程转态标志
  • 剥夺当前运行进程的CPU使用权必然需要保存其运行环境
  • 某进程开始运行前必然要恢复其运行环境
  1. 2.将PCB插入到合适的队列
  2. 3.分配/回收资源

9.进程间通信

字面意思就是进程之间的信息交换

9.1为什么需要进程通信?

因为各个进程所有的内存地址空间是相互独立的,一个进程是不能直接访问另一个进程的地址空间。但是进程之间的信息交换又是必须是实现的,为了保证进程间的安全通信,操作系统提供了一些解决方法。

9.2共享存储

两个进程对共享空间的访问必须是互斥的。当进程1在往共享空间里面写数据时,进程2是不被允许访问该空间。

共享空间

1.基于数据结构的共享

比如共享空间里面只能存放一个长度为10的数组。这种方式速度慢,是一种低级通信方式。

2.基于存储区的共享

在内存中划分出一块专门共享的存储区,里面的数据形式,存放的位置都由进程控制。相对于基于数据结构的共享,此种方式速度快,是一种高级通信。

9.3管道通信

管道是指用于连接读写进程的一个共享文件。本质是在内存开辟一个大小固定的缓冲区。

注意

1.各进程要互斥地访问管道

2.管道只能采用半双工通信,某段时间只能实现单向的传输。如果要实现双向同时通信,则需要2根管道

3.如果没写满,不允许读。如果没读空,不允许写。

4.数据一旦被读出,就意味着管道中已经不存在该数据了,所以读进程最多只能有一个,否则可能会有读错数据的情况。

5.数据以字符流的形式写入通道,当通道写满时,写进程的write()系统调用将被阻塞.等待读进程将数据取走。当读进程将数据全部取走后。管道变空,此时读进程的read()系统调用将会被阻塞。

9.4消息通信

进程间的数据交换以格式化的消息为单位。进程通过操作系统提供的发送消息/接收消息两个原语进行数据交换

格式化消息包含2部分,一部分为消息头,一部分为消息体。其中消息头包含发送进程ID,接收进程ID,消息类型等信息

9.4.1直接通信

进行1若给向进程2传递信息,首先会创建格式化信息,然后通过发送原语告知进程2,进程2使用接收原语,将进程1产生的格式化消息插入进程2的消息缓冲队列中的队列.然后进程2依次接收消息对列中的消息。

9.4.2间接通信

消息要发送中间实体(信箱)中,因此这种方式也被称为信箱通信方式。举个栗子,进程1通过发送原语将消息传递到信箱中,然后进程2使用接收原语从信箱中拿到属于自己的消息。

最后的话

各位看官如果觉得文章写得不错,点赞评论关注走一波!谢谢啦!。如果你想变强那么点我点我 牛客网


相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
相关文章
|
23天前
|
算法 Linux 调度
深入理解Linux操作系统的进程管理
本文旨在探讨Linux操作系统中的进程管理机制,包括进程的创建、执行、调度和终止等环节。通过对Linux内核中相关模块的分析,揭示其高效的进程管理策略,为开发者提供优化程序性能和资源利用率的参考。
54 1
|
27天前
|
调度 开发者 Python
深入浅出操作系统:进程与线程的奥秘
在数字世界的底层,操作系统扮演着不可或缺的角色。它如同一位高效的管家,协调和控制着计算机硬件与软件资源。本文将拨开迷雾,深入探索操作系统中两个核心概念——进程与线程。我们将从它们的诞生谈起,逐步剖析它们的本质、区别以及如何影响我们日常使用的应用程序性能。通过简单的比喻,我们将理解这些看似抽象的概念,并学会如何在编程实践中高效利用进程与线程。准备好跟随我一起,揭开操作系统的神秘面纱,让我们的代码运行得更加流畅吧!
|
25天前
|
C语言 开发者 内存技术
探索操作系统核心:从进程管理到内存分配
本文将深入探讨操作系统的两大核心功能——进程管理和内存分配。通过直观的代码示例,我们将了解如何在操作系统中实现这些基本功能,以及它们如何影响系统性能和稳定性。文章旨在为读者提供一个清晰的操作系统内部工作机制视角,同时强调理解和掌握这些概念对于任何软件开发人员的重要性。
|
24天前
|
Linux 调度 C语言
深入理解操作系统:从进程管理到内存优化
本文旨在为读者提供一次深入浅出的操作系统之旅,从进程管理的基本概念出发,逐步探索到内存管理的高级技巧。我们将通过实际代码示例,揭示操作系统如何高效地调度和优化资源,确保系统稳定运行。无论你是初学者还是有一定基础的开发者,这篇文章都将为你打开一扇了解操作系统深层工作原理的大门。
|
25天前
|
存储 算法 调度
深入理解操作系统:进程调度的奥秘
在数字世界的心脏跳动着的是操作系统,它如同一个无形的指挥官,协调着每一个程序和进程。本文将揭开操作系统中进程调度的神秘面纱,带你领略时间片轮转、优先级调度等策略背后的智慧。从理论到实践,我们将一起探索如何通过代码示例来模拟简单的进程调度,从而更深刻地理解这一核心机制。准备好跟随我的步伐,一起走进操作系统的世界吧!
|
25天前
|
算法 调度 开发者
深入理解操作系统:进程与线程的管理
在数字世界的复杂编织中,操作系统如同一位精明的指挥家,协调着每一个音符的奏响。本篇文章将带领读者穿越操作系统的幕后,探索进程与线程管理的奥秘。从进程的诞生到线程的舞蹈,我们将一起见证这场微观世界的华丽变奏。通过深入浅出的解释和生动的比喻,本文旨在揭示操作系统如何高效地处理多任务,确保系统的稳定性和效率。让我们一起跟随代码的步伐,走进操作系统的内心世界。
|
26天前
|
运维 监控 Linux
Linux操作系统的守护进程与服务管理深度剖析####
本文作为一篇技术性文章,旨在深入探讨Linux操作系统中守护进程与服务管理的机制、工具及实践策略。不同于传统的摘要概述,本文将以“守护进程的生命周期”为核心线索,串联起Linux服务管理的各个方面,从守护进程的定义与特性出发,逐步深入到Systemd的工作原理、服务单元文件编写、服务状态管理以及故障排查技巧,为读者呈现一幅Linux服务管理的全景图。 ####
|
29天前
|
算法 Linux 调度
深入浅出操作系统的进程管理
本文通过浅显易懂的语言,向读者介绍了操作系统中一个核心概念——进程管理。我们将从进程的定义出发,逐步深入到进程的创建、调度、同步以及终止等关键环节,并穿插代码示例来直观展示进程管理的实现。文章旨在帮助初学者构建起对操作系统进程管理机制的初步认识,同时为有一定基础的读者提供温故知新的契机。
|
28天前
|
消息中间件 算法 调度
深入理解操作系统之进程管理
本文旨在通过深入浅出的方式,带领读者探索操作系统中的核心概念——进程管理。我们将从进程的定义和重要性出发,逐步解析进程状态、进程调度、以及进程同步与通信等关键知识点。文章将结合具体代码示例,帮助读者构建起对进程管理机制的全面认识,并在实践中加深理解。
|
1月前
|
负载均衡 算法 调度
深入理解操作系统:进程管理与调度
在数字世界的心脏,操作系统扮演着至关重要的角色。它如同一位精明的指挥家,协调着硬件资源和软件需求之间的和谐乐章。本文将带你走进操作系统的核心,探索进程管理的艺术和调度策略的智慧。你将了解到进程是如何创建、执行和消亡的,以及操作系统如何巧妙地决定哪个进程应该在何时获得CPU的青睐。让我们一起揭开操作系统神秘的面纱,发现那些隐藏在日常计算背后的精妙机制。

热门文章

最新文章