操作系统——进程

一.进程的概念

程序:静态的,存放在磁盘里的可执行文件,一系列的指令集合

进程:进程实体的运行过程(类比:类和对象)是系统进行资源分配盒调度的一个独立单位

        动态的,程序的一次执行过程,由PCB、程序段、数据段三部分组成。

(同一个程序多次执行会产生多个进程,例:多次打开QQ会产生多个进程)

注意:进程是动态的,进程实体(进程映像)是静态的

PID,UID,内存,使用哪些I/O设备,CPU使用时间,磁盘使用时间,网络流量使用情况   以上信息会存放在PCB(Process Control Block进程控制块)中(进程描述信息、进程控制和管理信息、资源分配清单、处理机相关信息)

PS:PCB是进程存在的唯一标志,进程创建时,操作系统为其创建PCB,进程结束时,回收其PCB

程序段:能被进程调度程序调度到CPU执行的程序代码段。

注意:程序可被多个进程共享,即多个进程可以运行同一个程序。

数据段:一个进程的数据段,可以是进程对应的程序加工处理的原始数据,也可以是程序执行时产生的中间或最终结果。

二.进程的特征

  1. 动态性(进程最基本的特征),进程是程序的一次执行过程,是动态地产生、变化和消亡
  2. 并发性 内存中多个进程实体,各进程可并发执行
  3. 独立性 进程是能独立进行、独立获得资源、独立接受调度的基本单位
  4. 异步性:各进程按各自的、不可预知的速度向前推行,操作系统要提供“进程同步机制”来解决异步问题
  5. 结构性:每个进程都会配置一个PCB。结构上看进程由程序段、数据段、PCB组成。

三.进程的状态

      状态            使用的资源

1.创建态 

2.就绪态          其他所需资源

3.运行态          CPU、其他所需资源

4.阻塞态          都没有

5.终止态

注意:一个进程从运行态变成阻塞态是主动的行为,而从阻塞态变成就绪态是被动的行为,需要其他相关进程的协助。

进程的组织方式

1.链接方式(主流方式)

2.索引方式

四.进程的控制

进程控制:改变进程的状态

如何实现进程的控制:

如何实现原语(Primitive)的原子性(不能被中断):通过关中断指令开中断指令(两个特权指令)实现内核在其过程中不再一条指令后检查中断指令,从而实现原子性。

1.进程的创建

允许一个进程创建另一个进程,此时创建者称为父进程,被创建的进程称为子进程子进程可以继承父进程所拥有的资源。当子进程被撤销时,应将其在父进程那里获得的资源归还给父进程。在撤销父进程时,通常也会同时撤销其所有的子进程。

2.进程的终止

3.进程的堵塞和唤醒

Block阻塞和Wakeup唤醒是成对存在的。

4.进程的切换

总结:

1.更新PCB中的信息

2.将PCB插入合适的队列

3.分配/回收资源

五.进程的通信

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

1.共享存储

        原则上,进程有独属于自己的存储空间(为了进程之间不会互相访问存储空间,确保安全)但为了方便进程间的通信,设置了共享存储。

共享存储分为两类:基于数据结构的共享、基于存储区的共享

        基于数据结构的共享:定义一个数组,类似于全局变量,多个进程可以读写,这种共享方式速度慢、限制多,是一种低级通信的方式。

        基于存储区的共享:操作系统划分出一块共享存储区,数据的形式、存放位置、读写顺序都由通信进程决定,而不是操作系统。这种共享方式,速度很快,是一种高级通信方式。

        在共享存储中,进程1可以写入数据,进程2可以访问进程1在共享存储空间写入的数据,达到一个进程之间通信的目的。但是为了避免共享存储空间内的数据被覆盖,每个进程对共享空间的访问都是互斥的  如何做到互斥?各个进程可以使用操作系统内核提供的同步互斥工具(PV操作)。

例:

Linux中

int shm_open(  );   通过shm_open系统调用,申请一片共享内存区。

void *mmap(  );    通过mmap系统调用,将共享内存区映射到进程自己的空间。

2.消息传递

1.直接通信方式:消息发送进程要指明接收进程的ID

操作系统的内核区域管理着各个进程的PCB(进程控制块),PCB中包含消息队列(其他进程要发给本进程的消息都在消息队列中)。

进程1用发送原语send(2,msg)使操作内核接收到msg,操作内核会将msg挂到进程2的消息队列,进程2使用接受原语receive(1,&msg),接收进程2 的消息。

进程1 的内存空间—复制—》内核空间——》进程2 的内存空间

2.间接通信方式:通过“信箱”间接地通信。

进程1向操作系统申请一个邮箱A,用发送原语将send(A,msg)  //A:信箱的ID

进程2使用接受原语receive(A,&msg),间接接收进程2 的消息。注意:间接通信只是指明了信箱的ID,没有指明进程ID

可以多个进程往一个信箱send消息,也可以多个进程从同一个信箱中receive信息。

3.管道通信

        管道是指一个特殊的共享文件,又名pipe文件。就是在内存中开辟一个大小固定的内存缓冲区。管道通信要求:先进先出!(循环队列)。与共享内存类似,但是共享内存中数据的形式、存放位置、读写顺序都由通信进程决定

注意:

  1. 管道只能采用半通信,某一段时间段内只能实现单向传输。如果要实现双向传输则需要设置两个管道
  2. 各进程要互斥地访问管道(由操作系统实现)
  3. 管道写满时,写进程将阻塞,直到读进程将管道中的数据取走,即可唤醒写进程。
  4. 管道读空时,读进程将阻塞,直到写进程往管道中写入数据,即可唤醒读进程。
  5. 管道的数据一旦被读出,就彻底消失。因此,当多个进程读同一个管道时,可能会错乱。

两种解决方案:

  1. 一个管道允许多个写进程,一个读进程
  2. 允许多个写进程,多个读进程,但系统会让各个读进程轮流从管道中读数据。(Linux)

好了,这次先写到这,希望对大家能有所帮助

本次博客的图片均来自网络

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

头发尚存的猿小二

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

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

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

打赏作者

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

抵扣说明:

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

余额充值