进程控制

是进程管理的主要功能,负责创建和终止进程、进程执行过程中的状态转换。

操作系统内核通过原语实现。

1.OS内核

常驻内存的、紧靠硬件的软件层次,运行在系统态(又称管态、内核态),以免遭到用户程序的破坏。

主要包括:一些与硬件紧密相关的模块(如中断处理程序),各种常用设备的驱动程序,运行频率较高的模块(如时钟管理、进程调度和许多模块所公用的一些基本操作)。

2.原语

由若干条指令组成,用来执行某个特定操作。

其执行具有原子性,即执行过程中不允许被中断。

常驻内存,且在系统态下执行。

3.进程的创建

创建子进程的进程被称为父进程,子进程又可以创建子进程,形成进程图

进程创建原语完成,其主要任务是创建PCB

具体过程:从PCB集合申请空闲的PCB,然后为新进程分配内存等资源,再根据父进程提供的参数和分配到的资源情况对PCB进行初始化,然后将新进程插入就绪队列

4.进程的终止

发生在进程完成任务或遇到异常情况和外界干预需要结束时。

进程终止原语完成,实质是回收PCB

具体过程:找到待终止进程的PCB,终止执行,设置重新调度标志,终止其一切子孙进程,释放全部资源,移出队列,回收PCB。

5.进程的阻塞和唤醒

当正在执行的进程需要等待某种事件的完成本身无新工作可做:

执行状态+阻塞原语=阻塞状态

当阻塞进程等待的事情完成了

阻塞状态+唤醒原语=就绪状态

6.进程的挂起与激活

活动阻塞状态+挂起原语=静止阻塞状态

活动就绪状态/执行状态+挂起原语=静止就绪状态

静止阻塞状态+激活原语=活动阻塞状态

静止就绪状态+激活原语=活动就绪状态

进程同步

和进程并发要区分开,进程同步是指对多个相关进程在执行次序上进行协调。

使得系统中诸进程可以按照一定的规则(或者时序),共享资源或相互合作,从而使得程序的进程具有可再现性

用来实现同步的机制被称作同步机制

1.进程间的两种相互制约关系

间接:两个进程之间要共享相同的资源,一个正在占用,另一个则处于阻塞状态,只有等前者释放后者才被唤醒。

直接:两个进程有合作,比如D等着C向缓冲里面放数据,缓冲里没数据,D就阻塞着,缓冲已经满了,C就阻塞。

2.临界资源和临界区

临界资源:一次只允许被一个进程使用的资源。如打印机、共享变量。

临界区:访问临界资源的那段代码。

要想互斥地使用临界资源,就要保证进程互斥地进入临界区。

措施:临界区前面加一段代码,称为进入区,可用来检查对应资源是否正在被其他进程访问,相应地,临界区后面有一段退出区,用来将临界区从正被访问的标识恢复为未被访问的标识。

3.同步机制遵循的4条规则

空闲让进。当临界资源空闲就要允许请求进入临界区使用临界资源的进程进入。

忙则等待。和上一条相对。

有限等待。避免“死等”,任何请求进入临界区的进程要在有限时间内进入。

让权等待。避免“忙等(白等)”,不能进入临界区的进程要立即释放CPU。

4.信号量机制

是一种同步机制,发展历程:整型信号量->记录型信号量->信号量集。

整型信号量

非负的、共享的整数,用来表示一类临界资源的数目

只在三种情况下改变:初始化,P操作,V操作。

P操作即wait

wait(S){while(S<=0);S--;
}

只要S小于0,wait操作就会不断地测试,不符合让权等待原则。

V操作即signal,表示释放资源

signal(S){S++;
}

记录型信号量

除了有整型表示资源量,还有一个进程链表指针,连接所有等待该类资源的进程。

符合让权等待原则,主要是因为有block原语,当资源量小于0的时候,调用这个原语自我阻塞,将PCB插入信号量等待队列中。

应用

1.实现前驱关系

要是有Pi->Pj,即进程Pi是Pj的直接前驱,Pj必须在Pi完成后才能进行

可以设置初值为0的公共信号量S,在Pi后面加Signal(S),在Pj前面加wait(S)。

2.实现多个进程互斥地访问某临界资源

设置初值为1的互斥信号量mutex,在每个进程的临界区前后分别加wait(mutex)和signal(mutex)。

5.经典进程同步问题

生产者-消费者

哲学家进餐

读者-写者

进程通信

根据信息量多寡通信效率高低将进程通信分为低级和高级。

前面提到的互斥进制和共享存储器系统属于低级通信。

1.共享存储器系统

通过读写共享存储区来交换数据。

2.管道通信

管道指连接了两个进程的共享文件。管道是临界资源。必须采用互斥机制。

3.消息传递系统

数据交换以格式化的消息为单位。

分为直接和间接两类。

所谓直接,就是源进程直接把消息发送给目的进程。

所谓间接,就是在收发进程间引入了信箱,这样通信可以是非实时的。

4.C/S系统

分为套接字远程过程调用远程方法调用

5.消息缓冲队列通信机制

媒介:内存中公用的消息缓冲区

对应第三小节中的直接通信

最重要的数据结构是消息缓冲区,可以描述为

struct message_buffer{int sender;//发送进程的标识符int size;//消息长度char *text;//消息正文struct message_buffer *next;//指向下一消息缓冲区的指针
}

PCB中需要加入一下数据项

mq:消息缓冲队列队首指针

mutex:消息缓冲队列的互斥信号量

sm:消息缓冲队列的资源信号量

OS会提供发送原语send接收原语receive

参考: 《计算机操作系统(第四版)--学习指导与题解》 梁红兵 汤小丹 汤子瀛

弄懂“进程”(下):进程的控制、同步和通信相关推荐

  1. 一文弄懂Linux下五种IO模型

    Linux下主要的IO主要分为:阻塞IO(Blocking IO),非阻塞IO(Non-blocking IO),同步IO(Sync IO)和异步IO(Async IO). 同步:调用端会一直等待服务 ...

  2. 计算机操作系统(第四版)第二章(进程的描述与控制)知识点整理

    进程的描述与控制 2.1 前驱图和程序执行 2.1.1 前驱图 2.1.2 程序顺序执行 2.1.3 程序并发执行 2.2 进程的描述 2.2.1 进程的定义与特征 2.2.2 进程的基本状态及转换 ...

  3. 考研OR工作----计算机操作系统简答题及疑难知识点总结(第二章 进程的描述与控制)

    计算机操作系统从第二章开始内容会变得异常多,还是希望能够帮助到大家,在这一章阿婆主还会把书上的典型的PV操作题给打上来,给大家用作参考,如果有问题的地方,还请大家在文章下方留言,我好更正,或者你们有更 ...

  4. 并发、并行、同步、异步、进程,线程、串行、并行?一文弄懂八大概念

    并发.并行.同步.异步.进程,线程.串行.并行?一文弄懂八大概念 参考博文:并发.并行.串行.同步.异步的区别? java多线程详解(并发,并行,同步) 文章目录 并发.并行.同步.异步.进程,线程. ...

  5. Linux下的C编程实战(开发平台搭建,文件系统编程,进程控制与进程通信编程,“线程”控制与“线程”通信编程,驱动程序设计,专家问答)

    Linux下的C编程实战(一) ――开发平台搭建 1.引言 Linux操作系统在服务器领域的应用和普及已经有较长的历史,这源于它的开源特点以及其超越Windows的安全性和稳定性.而近年来,Linux ...

  6. 操作系统——进程管理(一文弄懂进程间的那些事)

    进程管理 进程 进程的概念 PCB 进程的组成 进程的特征 进程的状态与转换 进程的状态 进程间的转换 进程的组织方式 链接方式 索引方式 进程控制 怎么实现进程控制--原语 进程的创建 进程的终止 ...

  7. 弄懂“进程”(上):3个组成部分、4个基本特征、4个基本状态

    目录 进程实体的三个部分 1.PCB 2.程序段 3.相关的数据段 进程的四大特征 1.动态性 2.并发性 3.独立性 4.异步性 进程的状态(3个基本+挂起) 1.三个基本状态 2.挂起状态 进程实 ...

  8. 计算机操作系统-进程的描述与控制

    目录 进程的描述 进程的定义和特征 什么是进程 所以进程到底什么呢? 进程控制块(PCB) PCB的作用 进程的特点 进程的缺点 进程的基本状态 就绪状态 执行状态 阻塞状态 创建状态 终止状态 挂起 ...

  9. javascript等待异步线程完成_前端:什么是单线程,同步,异步?彻底弄懂 JavaScript 执行机制...

    javascript是按照语句出现的顺序执行的. js是一行一行执行的: let a = '1';console.log(a);let b = '2';console.log(b); 然而实际上js是 ...

最新文章

  1. ASP.NET MVC基于标注特性的Model验证:DataAnnotationsModelValidator
  2. 【字符串操作之】大小写转换→→toLocaleLowerCase、toLocaleUpperCase
  3. C++赋值运算符和拷贝构造函数区别
  4. Scanner类的一个小例子
  5. pve网卡直通虚拟机pve失联打不开解决方案,不用重新安装pve
  6. nginx php 5.5 安装,Nginx1.5与PHP5.5安装文档
  7. linux加密狗复制克隆教程,圣天狗SentinelDog
  8. 拼多多搬家上货助手怎么用?方法步骤有?
  9. Java 6-3 锥体体积计算
  10. 51中断编程c语言,有关51单片机中断的形式和C语言编程格式[精选5篇]
  11. 最新IP数据库 号段归属地 省市区镇行政区划
  12. 用tushare数据自定义期货大宗商品指数(2)
  13. 人们对人工智能的看法(消极篇)
  14. 干货!任务型对话中语言理解的鲁棒性测试 |清华刘劼西
  15. 【数字IC手撕代码】Verilog奇数分频|题目|原理|设计|仿真(三分频,五分频,奇数分频及特殊占空比)
  16. matlab如何使用源代码,rosenbrock函数的matlab源程序代码是怎么样的?
  17. LDA主题模型及案例
  18. java eles什么意思_Springboot 那么大,不用什么场景都用它吧,要不尝试下 Mars- Java ?...
  19. 边写边学Python(8)乘法口诀表(对齐)
  20. 飞飞php影视系统源码怎么改,飞飞cms影视系统安装说明 飞飞影视系统建站流程...

热门文章

  1. phpstorm failed to create jvm:error code -6 解决办法 解决方法
  2. MyCAT常用分片规则之分片枚举
  3. Python包管理工具Distribute的安装
  4. linux_shell 第一章 变量
  5. 图像处理工具包ImagXpress的多页TIFF编辑API的使用(1)
  6. 求1 + 2 + 3...+ n的和
  7. 程序员:请你不要对业务「置之不理」
  8. 检测到包降级: Microsoft.Extensions.Configuration.Abstractions 从 2.1.1 降 2.1.0
  9. 加深C# 中字符串前加@符号理解以及使用~~
  10. 定时清理tomcat日志文件