操作系统进程深层理解
本文最后更新于:2 年前
前言
近期复习回顾了一下操作系统的一些知识点,关于进程的一些深层理解。
一.讲一个小故事
很久很久以前,有一个人,开了一家公司。
投资建造了一个工厂,叫 东厂,招聘了很多工人,有 东甲 东乙 东丙 三个人。
后面赚钱了,又开了第二个厂,叫 西厂,又招了很多人去西厂,有 西甲 西乙 西丙 三个人。
1.单核与多核
当然这是人的世界,而对于计算机来说,CPU就像是那家 公司。
单核的CPU就是一个工厂;
多核的CPU就是多个工厂。
2.进程与线程
工厂其实就是进程,工厂里的工人就是线程。
这就是进程与线程之间的关系,一个进程可以包括多个线程。
3.并发与并行
东厂单独生产的时候,东甲 东乙 东丙 一起工作,这就是并发。
东厂和西厂同时生产,东甲 西甲 一起工作,这就是并行。
二.小老板的一些变化
OK,相信听完这个小故事,你应该对这些概念有了一个初步的理解,我们接下来就研究一下并发的一些线程关系。
接上面的故事,小老板做生意亏掉了,变卖了很多资产,只剩下一个东厂,还有他的三个工人 东甲 东乙 东丙。
1.互斥
因为资产缩水,小老板克扣工厂,压缩工人工时,只建造了一个厕所。
那么问题来了,东甲 东乙 东丙 想要同时上厕所,怎么办呢?
相信上过公共厕所的同学应该都知道啊,应该是以下步骤:
- 看厕所门标识,绿的表示没人 可以上 红的表示有人 等一等
- 如果标识是绿的 开门进去上厕所,关门标识变红
- 上完厕所 开门出去 标识变绿
这个其实就是互斥的概念。
指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。
东甲 东乙 东丙 是都具有一个上厕所的权力的,人人平等,没有先后,因此
互斥无法限制访问者对资源的访问顺序,即访问是无序的。
2.Mutex与Semaphore
事实上,这种单个资源,也是“互斥锁”(Mutual exclusion)(缩写 Mutex)的概念,
互斥锁主要是为了防止多个线程同时读写某一块内存区域。
小老板后来良心发现了,他改良了一下厕所,新增了2个厕所,这样上厕所就不用排队了,但是要是后面又有新员工来了怎么办呢?
再加N个厕所?也不现实,只能让员工排队,加了一块电子屏幕,无人显示绿色,有人显示红色。
后到的人发现全是红色,就得门口排队等。
这种做法叫做“信号量”(Semaphore),用来保证多个线程不会互相冲突。
Mutex是Semaphore的一种特殊情况(N=1的情况)。
Mutex简单且效率高,因此在单独资源的情况下,还是采用Mutex。
3.同步
同步的概念其实不难理解,它其实就是通过其它机制实现访问者对资源的有序访问。
比如说
小老板的东厂,东甲负责生产产品,东乙负责把生产的产品存到仓库里,东丙负责把仓库里的产品搬出去卖掉。
先后顺序肯定是 先东甲再东乙再东丙。
这个就是同步。
三.信号量中的PV操作含义
原来这是狄克斯特拉用荷兰文定义的。
因为在荷兰文中
通过叫passeren
释放叫vrijgeven
PV操作因此得名。这是在计算机术语中不是用英语表达的极少数的例子之一。
P操作:信号量 - 1
V操作:信号量 + 1