【时间:2020年4月的某日】
【地点:一辆绿皮火车上,18th车厢(别问我为什么买到了最后的车厢啊QAQ)】
【人物A:我,特点:聪明机智】
【人物B:王五,特点:就喜欢找事】
【人物C:OS老师,特点:知识渊博】
那么让我娓娓道来发生了什么:
场景一:
王五:“肚子有点不舒服,上个厕所去!”。
我:“我待会也准备去”。
当王五进入厕所,关上厕所门的时候.....
我:“发生了什么,我怎么动不了了啊!”(这里就有关中断啦~)。
OS老师:“别慌,这个是厕所的并发互斥的策略,一会就好了”。
王五:“我上好了,真舒服啊”,此时王五打开厕所门。
我:“我可以动了,老师,刚刚你说的是什么意思啊?”
OS老师:“火车上的厕所是临界资源,而王五和你作为进程都想进入厕所,为了避免临界区冲突,厕所的互斥机制就会启动,当王五进入临界区时,作为另一个想要进入厕所的你,就会被关掉,此时你就无法操作,直到王五退出来,你才可以进入临界区,这样就避免了临界区资源冲突”。
我:“我明白了,这就是操作系统里面的关中断”,说完我就去上了厕所。回来之后,我求老师利用技术改变厕所机制,不然刚刚那个不能动的时间,完全忽视了我的能动性嘛。
场景二:
王五:“不行,我肚子又不舒服了,再去厕所”。
我:“我也是,真奇怪”。我想着王五是去18节的厕所,那么我就去17节,当我走到厕所门口时,进行判断,厕所门是关上的,显示有人。于是我被新的机制放到一旁,一直盯着厕所门(空转,一直占有我的资源),一直盯着,直到,门开了......
我:“......老师的新机制,我真开心啊!!!!”。
王五:“咦?你怎么在这,我发现厕所都满了,就这一个,所以就来这里上厕所了”,此时王五走了,我在一瞬间冲上去关上门,别问我为什么这么勇猛,因为我突然想起来可以老师给的新机制是TS测试并设置指令。它长这样:
bool TS(boolean *lock){Boolean old;old = *lock;*lock = TREU;return old;
}
我:“让我来说一说新的机制吧,首先我们每个人去临界区都要判断,空闲使用,并且将门关上,如果正在使用,那么就空转等待,直到上一个进程结束。为什么我要冲呢,因为会存在饥饿现象(等等,额,去厕所貌似有点尴尬),会出现一个进程一直使用,而其它进程得不到资源的情况”。
我:“老师,可不可以在改个机制呀,给我加一个if语句,当厕所关门的时候我也可以做其他的事情呀!”。
OS老师:“没问题,老师可是万能的哦!”。
场景三:
王五:“中邪了,肚子又不舒服,再去个厕所”。
我:“我也是(被迫营运呜呜呜呜)”。
于是我又去了厕所,都关门了呀.....然后回到位子上做事情(内心:新机制真好用!!!)。
这个时候王五出来了
王五:“cat,快来啊,我解决了”。
我:“好的”。一路小跑,刚到门口.....!王五瞬间又进去了,关上门。
王五:“不行,又痛了”。
我:“......记得叫我啊”。
又过了好长时间......
王五:“我好了,快来!”
我:“好勒,都快不行了”
又刚跑到门口,nm,王五又关上门(一直占有,我抢到的几率几乎为零)。
此时的我已经快不行了,幸好17节有人出来,我快快冲了进去,然后跑到老师那里!
我:“老师,虽然等待的时候我是自由的,但是还是没有解决饥饿现象啊,可以换换嘛,换个机制吧,求你了!”一脸苦涩
老师:“那你观察一下刚刚的上锁原语有什么缺点:”
上锁原语如下:
Lock(x)
{if(x==true){保护现行进程的CPU现场;现行进程进入x的等待队列;设置改进程为等待状态;转进程调度;}x = true;
}UnLock(x)
{if(x等待队列不空){移出队列首元素;将进程放入就绪队列;设置该进程为就绪状态;}x = false;
}
我:“虽然刚刚王五做完之后叫我,但是太不公平了,他一直进去,主要是每次都有个判断机制,佛le。老师帮帮我吧”。
老师:“这个问题,幸好迪杰斯特拉大佬已经解决了。就是定义一个信号量,这里我们的话,待会找一个工作人员看守厕所,如果想要进去,就必须进行登记,然后再进行判断。我给你看看PV原语吧”。
P原语wait(s)
--s.count;//表示申请一个资源
if(s.count<0)//表示没有空闲资源;
{调用进程进入等待队列s.queue;阻塞调用进程;
}V原语signal(s)
++s.count;//表示释放一个资源;
if(s.count<=0)//表示有进程处于阻塞状态
{从等待队列中取出一个进程P;进程P进入就绪队列;
}
我:“我懂了,每次都做记录的话,就不会发生这种情况了,感谢迪杰斯特拉大牛!”。
老师:“那你知道要放在哪里吗?这些语句?”。
我:“我知道,老师你看!”
P |
临界区 |
V |
老师:“是的,你见识到了操作系统的魅力了吗?”
我:“懂了懂了,上厕所去!”。
从此,我和王五就快乐的上起了厕所,火车上的厕所真好啊!
后记:
不做人系列还有的哦,喜欢的可以点个赞,评个论,谢谢,有错误也可以指出来哦。