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

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

文章目录

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的迁移。
相关文章
|
1天前
|
消息中间件 算法 调度
深入理解操作系统:进程管理与调度策略
【10月更文挑战第29天】本文将带领读者深入探讨操作系统中的核心组件之一——进程,并分析进程管理的重要性。我们将从进程的生命周期入手,逐步揭示进程状态转换、进程调度算法以及优先级调度等关键概念。通过理论讲解与代码演示相结合的方式,本文旨在为读者提供对进程调度机制的全面理解,从而帮助读者更好地掌握操作系统的精髓。
|
1天前
|
算法 调度 UED
深入理解操作系统中的进程调度
【10月更文挑战第29天】探索进程调度的奥秘,本文将带你深入了解在操作系统中如何管理和控制多个并发执行的程序。从简单的调度算法到复杂的多级反馈队列,我们将逐步揭示如何优化系统性能和提高资源利用率。准备好一起揭开进程调度的神秘面纱吧!
|
2天前
|
调度 Python
深入浅出操作系统:进程与线程的奥秘
【10月更文挑战第28天】在数字世界的幕后,操作系统悄无声息地扮演着关键角色。本文将拨开迷雾,深入探讨操作系统中的两个基本概念——进程和线程。我们将通过生动的比喻和直观的解释,揭示它们之间的差异与联系,并展示如何在实际应用中灵活运用这些知识。准备好了吗?让我们开始这段揭秘之旅!
|
5天前
|
消息中间件 算法 调度
深入理解操作系统:进程管理的艺术
【10月更文挑战第25天】在数字世界的幕后,操作系统扮演着至关重要的角色,它如同一位精心策划的指挥家,协调着硬件与软件之间的和谐交响。本文将带领读者走进操作系统的核心——进程管理,探索它是如何在幕后默默支撑起整个计算系统的运行。我们将从进程的基本概念出发,逐步深入到进程调度、同步以及死锁处理等高级话题,旨在为读者提供一次深入浅出的技术之旅。
|
5天前
|
算法 调度
探索操作系统的心脏:内核与进程管理
【10月更文挑战第25天】在数字世界的复杂迷宫中,操作系统扮演着关键角色,如同人体中的心脏,维持着整个系统的生命力。本文将深入浅出地剖析操作系统的核心组件——内核,以及它如何通过进程管理来协调资源的分配和使用。我们将从内核的概念出发,探讨它在操作系统中的地位和作用,进而深入了解进程管理的机制,包括进程调度、状态转换和同步。此外,文章还将展示一些简单的代码示例,帮助读者更好地理解这些抽象概念。让我们一起跟随这篇文章,揭开操作系统神秘的面纱,理解它如何支撑起我们日常的数字生活。
|
6天前
|
算法 大数据 Linux
深入理解操作系统之进程调度算法
【10月更文挑战第24天】本文旨在通过浅显易懂的语言,带领读者深入了解操作系统中的进程调度算法。我们将从进程的基本概念出发,逐步解析进程调度的目的、重要性以及常见的几种调度算法。文章将通过比喻和实例,使复杂的技术内容变得生动有趣,帮助读者建立对操作系统进程调度机制的清晰认识。最后,我们还将探讨这些调度算法在现代操作系统中的应用和发展趋势。
|
7天前
|
消息中间件 算法 调度
深入浅出操作系统:进程管理的艺术
【10月更文挑战第23天】在数字世界的幕后,操作系统扮演着不可或缺的角色,而进程管理则是其核心魔法之一。本文将带你探索操作系统中进程管理的奥秘,从进程的诞生到成长,再到最终的消亡,揭示它如何协调资源、响应中断,并保证多任务的顺畅执行。通过直观的比喻和生动的故事,我们将简化复杂的概念,让每一位读者都能轻松理解这一技术的核心原理。准备好跟随我们的脚步,深入操作系统的灵魂深处,一探进程管理的艺术吧!
19 1
|
1天前
|
算法 调度 开发者
探索操作系统的核心:进程管理与调度
【10月更文挑战第29天】本文深入探讨了操作系统中至关重要的一环——进程管理。通过浅显易懂的语言,我们将了解到什么是进程,进程如何被创建和管理,以及操作系统如何决定哪个进程应该获得CPU时间。文章还将揭示进程调度对系统性能的影响,并分享一些优化技巧。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供宝贵的知识。
|
6天前
|
Linux 调度
探索操作系统核心:进程与线程管理
【10月更文挑战第24天】在数字世界的心脏,操作系统扮演着至关重要的角色。它不仅是计算机硬件与软件之间的桥梁,更是管理和调度资源的大管家。本文将深入探讨操作系统的两大基石——进程与线程,揭示它们如何协同工作以确保系统运行得井井有条。通过深入浅出的解释和直观的代码示例,我们将一起解锁操作系统的管理奥秘,理解其对计算任务高效执行的影响。
|
7天前
|
消息中间件 调度 UED
深入浅出操作系统之进程管理
【10月更文挑战第23天】本文旨在通过浅显易懂的方式介绍操作系统中的核心概念——进程管理。我们将从进程的基本概念出发,逐步深入到进程的生命周期、状态转换、以及进程调度策略等高级主题。文章将通过生动的比喻和实例,使读者能够轻松理解这些复杂的概念,并掌握它们在操作系统设计和应用中的重要性。