进程管理和P V操作
【版权声明:】 本文为博主原创,未经博主允许不得转载。
计算机的核心是CPU,它承担了所有的计算任务;而操作系统是计算机的管理者,它负责任务的调度、资源的分配和管理,统领整个计算机硬件。
一、操作系统的相关定义
1、操作系统的定义:操作系统是控制和管理计算机硬件和软件资源、合理的组织计算机流程以方便用户使用的程序的集合。
2、操作系统的特点:
(1) 并发性。 并发性和并行性是有区别的两个不同概念。并行性是指两个或多个事件在同一时刻发生,而并发性是指两个或多个事件在同一时间间隔内发生。并发在宏观上是同时发生的,而在微观上是交替执行的。
(2)共享性。 两种共享方式:互斥共享和在一段时间内同时共享
(3)虚拟性
(4)不确定性。多道程序环境下执行是以异步的方式进行,每个程序在何时执行,多个程序的执行顺序都是不确定的。
3、多核单CPU
目前我们计算机都是多核单CPU 或者是多核多CPU。多核单CPU是只需要一套芯片组,一套存储,多核之间通过芯片内部总线进行通信,共享使用内存。如果跑一个多线程程序,可以做到并行执行,执行速度更快,具有较高的计算能力。
二、进程的相关概念
1、进程的定义:进程是程序的一次执行,改程序可以和其他程序并发执行;它是一个动态的实体,在传统的计算机设计中,进程即使基本的分配单元,也是基本的执行单元。
从上面的概念可以看出。进程主要有以下几个特点:
(1)进程是一个实体。每一个进程都有自己的地址空间,一般情况下,包括文本域 数字域和堆栈。
(2)进程是一个执行中的程序,具有独立性 并发性和动态性。
2、进程的组成:
3、进程的状态与转换
(1)进程的基本状态:
运行态:进程已经获得资源,并占有处理机,处理机正在执行该进程的程序。
阻塞态:等待态、挂起态或者睡眠态。此时程序因为某个事件而暂时不能运行。如等待IO操作
就绪态:进程等待为其分配CPU,而CPU被其他进程占用,所以暂时不能运行,但是该进程已经具备了执行的所有条件。
运行--阻塞转换:进程出让CPU,等待系统分配资源或某些事件的发生,如等待用户输入。
运行--就绪:分配的CPU 时间片已经用完,或者在中断模式下,有更高优先级的进程进入系统。
阻塞--就绪:处于阻塞队列的进程,当其等待的事件已发生或者等到可用资源时,进入就绪列竞争CPU。
就绪--运行:进程被调用程序选中CPU。
(2)五种进程状态转换
三 进程的交互---协作和竞争
在多道程序设计系统中,同一时刻可能有多种进程,这些进程之间存在两种基本关系:竞争关系和协作关系。
1、竞争关系 系统中多个进程之间彼此无关,它们不知道其他进程的存在,并且也不受其他进程的影响。由于多个进程共用一套计算机系统资源,因而,必然会出现多个进程竞争计算机资源的问题。由于相互竞争资源的进程并不交换信息,但是一个进程的执行会影响其他进程的执行。如果两个资源要访问同一资源,那么一个进程通过操作系统分配得到了该资源,另一个不得不等待,极端情况下,会造成被阻塞的进程永远得不到执行。
资源竞争出现的两个控制问题:
(1)死锁,一组进程获得了部分资源,还想要得到其他进程所拥有的资源,最终所有的进程都陷入死锁。
(2)饥饿,一个进程由于其他进程总是优先于它而被无限的拖延。
2、协作关系 某些进程完成一项任务需要分工协作,由于合作的进程都是独立的以不可确定的速度执行,这就需要相互协作的进程在某些协调点协调自己的工作。当合作进程中一个到达协调点后,在尚未得到其伙伴进程发来的信息之前,阻塞自己。直到被伙伴进程唤醒。
3、解决竞争问题的方案--进程互斥
进程的互斥是解决竞争问题的手段。进程互斥是指若干个进程要使用共享资源时,任何时刻最多允许一个进程使用,其他进程等待。直到占有资源的进程释放该资源。
注意几个名词:临界资源:称为独占资源,是指一段时间内只允许一个进程去使用的资源。
临界区:访问临界资源的代码称为临界区。
对临界区使用的必要准则:
(1)当若干个进程要求进入临界区时,应是一个进程进入临界区,他们不应该改互相等待而是谁都不能进入。
(2)一次只允许一个进程去访问临界区,其他进程互斥的访问临界区。
(3)各进程使用临界区的时间是有限的,进程必须要早有限时间内释放临界资源。
4、解决进程协作关系的方案--进程的同步
进程的同步是指两个或两个以上进程基于某个条件来协调他们的活动。一个进程的执行依赖于另外一个进程的信息。当一个进程没有受到另一个协作进程发来的消息是,进程会阻塞状态。
四、进程管理--P V操作
1、信号量--semaphore
信号量是一个表示资源的实体,是一个与队列有关的整型变量,信号量只支持P操作和V操作。其具体的意义如下述代码所示:
对于value取值的说明:
当value >0 时:信号量可用的资源个数
value=0 时:无空闲资源,无空闲进程,正在执行一个进程;
value< 0时:value的绝对值代表使用该资源的阻塞进程的个数;
信号量分为私有信号量和公有信号量。
公有信号量:用于进程之间的互斥,初始值通常设定为1;
私有信号量:用于实现进程之间的同步,初始值设定为0或者n,允许进程对其实施P操作。
2、P(proberen)操作
P操作代表的是对资源的申请,其伪代码如下:
流程图如下:
3、V(verhogen)操作
V操作是释放资源的操作,其伪代码如下:
4、打印机作业详解P V操作
在并发程序中,有进程A B C 执行打印作业,但是我们拥有的打印机台数为1台,若各进程竞争使用打印机,会造成的作业的错误,因此,必须使用进程互斥的手段来解决进程竞争的状态。设定 semaphor S=1 (代表着共享资源 打印机);利用PV操作实现进程的互斥。
以上的PV操作实现了进程的互斥。整个过程可以很好的帮助大家理解PV操作的过程。
五、经典的IPC问题
1、生产者与消费者的问题----这是一个非常好的例子,关于进程同步
问题描述:一组生产者进程和一组消费者进程共享一块初始为空,大小确定的缓冲区,只有当缓冲区没满时,生产者进程才可以把信息放入缓冲区,否则就要等待;只有缓存区不为空时,消费者进程才能从中取出消息,否则就要等待。缓冲区一次只能一个进程访问(临界资源)。
(1)问题分析:假定生产者是面包店,消费者是购物的人,缓存区为放面包的盒子(资源);
(2)关系分析:生产者和消费者对于资源的访问时互斥的关系;生产者把面包放入盒子,消费者才可以去拿走面包,或者消费者拿走面包后,生产者在放入面包;生产者放面包与消费者那面包不能同时进行。
生产者与消费者是相互依赖的关系,只有生产者产面包,消费者才可以取走面包;只有消费者取走面包后,生产者才可以继续生产。
(3)信号量的设定:
semaphore empty=n;代表当前的空格子数,对于生产者来说,空格子是生产者的资源;
semaphore full =0;代表当前具有面包的盒子数量,对于消费者来说,放面包的盒子是消费者资源
这就是我们可以称为 empty 和 full 是私有信号量的原因。
semaphore mutex=1 ;代表临界区互斥信号量
生产者生产一个面包,就会给消费者一个通行证,告诉消费者,可以拿走面包;
消费者消费一个面包,就会给生产者一个通行证,告诉生产者,可以生产面包;
代码如下:
如果生产者进程先执行P(mutex),然后执行P(empty),消费者执行P(mutex),然后执行P(fall),这样可不可以?
设想生产者进程已经将缓冲区放满,消费者进程并没有取产品,即empty = 0,当下次仍然是生产者进程运行时,它先执行P(mutex)封锁信号量,再执行P(empty)时将被阻塞,希望消费者取出产品后将其唤醒。轮到消费者进程运行时,它先执行P(mutex),然而由于生产者进程已经封锁mutex信号量,消费者进程也会被阻塞,这样一来生产者、消费者进程都将阻塞,都指望对方唤醒自己,陷入了无休止的等待。进入死锁状态。
有关读者写着、理发师的IPC问题会在下一篇进行介绍。
进程管理和P V操作相关推荐
- 一个海底隧道中只有一个车道,规定同一个方向的可以连续过隧道。某方向有列车过隧道时,另一个方向的列车就要等待, 现在东岸和西岸都有列车要过隧道,如果把每个过隧道的列车看作一个进程,使用P、V操作
海底隧道问题 一个海底隧道中只有一个车道,规定同一个方向的可以连续过隧道.某方向有列车过隧道时,另一个方向的列车就要等待, 现在东岸和西岸都有列车要过隧道,如果把每个过隧道的列车看作一个进程,为保证安 ...
- 操作系统P/V操作(V操作中的典型理解偏差)
信号量是操作系统提供的⼀种协调共享资源访问的⽅法. 通常信号量表示资源的数量,对应的变量是⼀个整型( sem )变量. 另外,还有两个原⼦操作的系统调⽤函数来控制信号量的,分别是: P 操作:将 se ...
- 一阅览室只能容纳150人,当少于150人时,可以进入,否则,需在外等候,若将每一个读者作为一个进程,请用P、V操作编程(类C、类pascal),并写出信号量的初值。(PV操作伪代码)
1.第一种情况:现实生活中阅览室的门可以同时进入或出去多个人,题目中也没有其他限定时,可以只设立同步信号量即可. 伪代码如下: int n = 150;semaphore empty = n;/*em ...
- 操作系统信号量与P、V操作 初步认识整理
初步接触,若有不足之处,请各位不吝赐教.谢谢! 首先介绍:信号量 信号量包括整型信号量.结构型信号量.二值信号量. ① 整型信号量 最初,将信号量定义为一个共享的整型量,它保存可供使用的唤醒数目.如果 ...
- c语言p,用C语言实现P、V操作
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 操作系统中关于信号量操作的代码示例(Linux+windows) 原文:操作系统中关于信号量操作的代码示例(Linux+windows) 有一个生产者进程 ...
- 试用 P、V操作描述下列理发师和顾客之间的同步问题
P.V操作解决同步问题 题目: 试用 P.V操作描述下列理发师和顾客之间的同步问题: 某个理发理师当没有顾客时,去睡觉:当有顾客来理发,若理发师正在睡觉时,这个顾客会叫醒他,理发师给该顾客理发,理发期 ...
- 关于P,V操作理解的分析
P-V操作定义: 假设sem是个整型变量. P原语的主要操作是: (1)sem减1: (2)若sem减1后仍大于或等于零,则该进程继续执行: (3)若sem减1后小于零,则该进程被阻塞,在相应队列中排 ...
- c语言 pv操作,用C语言实现P、V操作
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 操作系统中关于信号量操作的代码示例(Linux+windows) 原文:操作系统中关于信号量操作的代码示例(Linux+windows) 有一个生产者进程 ...
- C语言实现操作系统简单的P V操作
C语言实现操作系统简单的P V操作 简单说明 cpp的文件,C语言的语法 代码如下 实现效果 简单说明 cpp的文件,C语言的语法 代码如下 #include "stdio.h" ...
- 进程间同步---system v ipc 对象信号灯集
一.信号灯简介 Linux支持System V的信号灯(semaphore),是一种进程间通信的方式,只不过它和管道.FIFO或者共享内存不一样,信号灯主要用于同步或者互斥对共享资源的访问,它的发明来 ...
最新文章
- SOTA排行榜大变天!MIT研究十个CV测试集,平均错误率超3.4%
- iOS 宏(define)与常量(const)的正确使用
- 《Effect Java》学习笔记1———创建和销毁对象
- go 获得 mysql 实际运行 SQL,Golang实践录:一个数据库迁移的代码记录
- 图机器学习中的数据增强技术
- CodeForces - 1141ESuperhero Battle简单模拟
- 【汇编语言】王爽第六章程序6.3解答,8086汇编语言实现数据的倒序存放
- java 线程转储_获取Java线程转储的常用方法(推荐)
- 用html5点击消失,input点击后placeholder中的提示消息消失
- Unity3D基础37:Input控制面板
- 在Python中安装meta模块
- MATLAB实现非线性动态范围调整算法
- hazy的leetcode刷题笔记(一)
- 天气很热,用Python告诉你奶茶哪家最好喝性价比最高?
- 4.5 GPO的编辑
- Opencv inRang() 和HSV色彩空间表
- 计算机高级工程师如何评正高,如何评高级职称
- typec扩展坞hdmi没反应_解决电脑接口不足难题,实测绿联九合一type-c扩展坞到底有多强...
- flutter如何获取连接高德地图的SHA1和PackageName
- 下载Linux ISO镜像的方法 (带你快速了解)
热门文章
- Python 发出警报声音 简单播放声音 beep 在linux 上
- sklearn.metrics.confusion_matrix
- Python学习实验报告(1)
- Android 蓝牙协议栈消息(bta_sys_sendmsg)发送机制 ---- 全网唯一解析
- 在Excel中批量生成条形码
- 计算机网络维护服务承诺书,网络信息技术中心服务承诺书
- 音乐资源免费_3个免费的音乐研究在线资源
- 【大学物理】第一章:质点运动学
- 为什么网线接法要分交叉连接和直连连接两种方式
- 方正飞鸿智能信息平台产品白皮书(一)