初步了解进程、进程调度的基本属性、进程间通信

目录

一、什么是进程?

1、什么是程序?

2、什么是进程控制块(PCB)?

3、什么是进程实体(进程映像)?

 4、什么是进程?

4.1、进程的五种基本状态:

4.2、 进程的执行周期

4.3、并发和并行 

二、为了实现进程调度的一些基本属性

状态

优先级

记账信息

上下文

所谓的调度就是进行时间管理

三、进程间通信

进程通信的方式分类:

第一种:共享存储。

第二种进程通信方式:消息传递。

 第三种通信方式:管道通信


一、什么是进程?

1、什么是程序?

  • 程序就是一个指令序列

2、什么是进程控制块(PCB)?

  • 系统为每个运行的程序排至一个数据结构,称为进程控制块 (PCB——progress control block)
  • 里面有进程的寄存器、进程编号、内存界限、程序计数器等

3、什么是进程实体(进程映像)?

  • PCB、程序段、数据段三部分构成进程实体
  • PCB:内存中存储,记录进程生存周期内状态变化的存储区域。不同操作系统有不同的进程控制块格式和信息,但基本包括进程标识符,当前状态,现场保护区,存储指针,占用资源表以及进程优先级等信息。它是进程存在的唯一标志。
  • 程序段:描述进程本身要完成的功能
  • 数据段:程序加工的对象和场所

 4、什么是进程?

  • 进程是进程实体的运行过程,是系统进行资源和资源调度的一个独立单位
  • 进程并不等同于进程实体,进程实体是静态的,进程是动态的

4.1、进程的五种基本状态:

创建态:进程正在被创建,系统为其初始化PCB,分配资源。

运行态:占有cpu,并且就在cpu上执行。

就绪态:已经具备运行条件,但由于没有空闲cpu,而暂时不能运行。(也就是cpu没有调度到它)

阻塞态:因等待某一事件而不能运行。

终止态:进程正在从系统中撤销,回收进程的资源,撤销其PCB。

图示:

注:

  • 就绪态通过进程调度可以变为运行态,运行态通过中断变为就绪态,运行态通过io请求等待事件进入阻塞态,阻塞态被唤醒,即等待事件结束,就变为了就绪态。
  • 不能由阻塞态直接转换为运行态,也不能由就绪态直接转换为阻塞态
  • 运行态——>阻塞态是一种进程自身做出的主动行为

4.2、 进程的执行周期

为了管理进程,系统会先创建一个PCB,PCB被创建后,会做以下五项工作:

  1. 标记进程身份:为每个进程创建一个pid,用于区分不同的进程;
  2. 标记进程状态:运行、阻碍、就绪等状态;
  3. 存储进程的内存指针;
  4. 为进程创建描述符表;
  5. 记录进程的调度信息:如执行了多少行代码,等待了多久等;

4.3、并发和并行 

  • 系统以时间片轮转的方式“同时”执行多个进程的情况,我们把它叫做并发;
  • 随着计算机硬件水平的飞速发展,如今的计算机不再是单一核心的CPU,多核心的好处就是每一个核心都能执行一个进程,所以一个CPU可以同时执行多个进程,我们把这种情况叫做并行;

二、为了实现进程调度的一些基本属性

状态

这个状态描述了当前这个进程接下来应当怎么调度

就是上述的五种基本状态

优先级

先给谁分配时间,后给谁分配时间

以及给谁分的多,给谁分的少

记账信息

统计了每个进程,都分别执行了多久,分别执行了哪些指令

分别都排队等了多久

给进程调度是供指导依据的

上下文

就表示了上次进程被调度出CPU的时候,当时程序的执行状态

下次进程上CPU的时候,要可以恢复之前的状态,然后继续执行下去。

进程呗调度出CPU之前,要先把cpu中的所有寄存器中的数据都给保存到内存中

详单与存档了

下次进程再被调度上CPU的时候,就可以从刚才的内存中恢复这些数据到寄存器中

相当于读档

存档+读档----

所谓的调度就是进行时间管理

进程的调度,其实就是系统在考虑CPU资源如何给各个进程分配~

由于操作系统上,同时进行多个进程

如果某个进程,出现BUG,进程崩溃了,是否影响其他进程呢?

依靠“进程的独立性”来保证,依靠“虚拟地址空间'

进程之间现在通过虚拟地址空间,已经各自隔离开了

但实际工作中进程之间的的时候还是需要相互交互的。

三、进程间通信

        进程是操作系统进行资源分配的最小单位,这意味着各个进程互相之间是无法感受到对方存
在的,这就是操作系统抽象出进程这一概念的初衷,这样便带来了进程之间互相具备 隔离性
Isolation )”
        要完成一个复杂的业务需求,往往无法通过一个进程独立完成,总是需要进程和进程进
行配合地达到应用的目的,因此,进程之间就需要有进行 信息交换 的需求。因此就产生了进程间
通信。

进程通信的方式分类:

第一种:共享存储。

        共享存储就是操作系统另外分配一个内存区域用于进程间的通信,这就是共享空间,两个进程都可以访问这个共享空间,但是两个进程对共享空间的访问必须是互斥的,即同一时间段只能有一个进程访问这个空间。

然后共享存储又分为基于数据结构的共享和基于存储区的共享

  1. 基于数据结构的共享:比如它的共享空间只能放一个长度为10的数组,数据量比较小,存储的数据形式也有限制。所以这种方式速度慢,限制多, 是一种低级通信
  2. 基于存储区的共享:此时操作系统只负责提供内存,然后由进程来控制数据的形式和存放位置。所以这种方式速度更快,是一种高级的共享方式。

第二种进程通信方式:消息传递。

        进程间的数据交换以格式化的消息为单位,进程通过操作系统提供的“发送消息/接收消息”两个原语进行数据交换。也就是说:一个进程调用“发送原语"这个api就可以把消息发送出去,通过”接收原语“就能取出消息。

        一个消息包括消息头和消息体,消息头包括:发送进程的id,接收进程id,消息类型,消息长度等格式化的消息(计算机网络中发送的”报文“其实就是一种格式化的消息)。而消息体就是消息内容了。

消息传递又包括两种通信方式:直接通信方式和间接通信方式

  1.  直接通信方式:消息直接挂到接收进程的消息缓冲队列上。也就是说,每个进程都有一个消息缓存队列。当进程A要给进程B通信,就先调用发送原语,把消息发送到进程B的消息缓存队列当中,然后进程B会调用接收原语,从自己的消息缓存队列当中取出消息。
  2. 间接通信方式:消息要先发送到中间实体(信箱)中,因此也称信箱通信方式,比如计算机网络中的电子邮箱系统。这就类似于,有一个中间部门专门管理这些信息,每个进程发送消息都是发送到这里,每个进程接收消息都是从这里取出。因为有消息头的目的进程id等信息,所以这一切都可以实现。

 第三种通信方式:管道通信

        管道:是指用于连接读写进程的一个共享文件,又名pipe文件。其实就是在内存中开辟一个大小固定的缓冲区。它的大小一般是和系统的内存页面大小一样,比如linux默认的内存页面大小是4kb,所以linux的管道大小也是4kb.

1.管道是才有半双工通信,简单说就是同一时间只能实现单向传输,要实现双向同时通信,则需要两个管道。

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

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

4.如果没写满,就不会允许读。如果没读空,就不允许写。

5.数据一旦被读出,就会从管道中抛弃,这就意味着读进程最多只能有一个,否则可能会有读错数据的情况。

目前,主流操作系统提供的进程通信机制有如下:
1. 管道
2. 共享内存
3. 文件
4. 网络
5. 信号量
6. 信号
         其中,网络是一种相对特殊的 IPC 机制,它除了支持同主机两个进程间通信,还支持同一网络内部非同 一主机上的进程间进行通信。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙洋静

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值