Day 10 号志的作用

在Kernel里面有一项功能,就是所谓的号志(semaphore)的功能,里面包括:
1.号志控制区块(semaphore control block)
2.ID名称
3.Value数值
4.任务等待列

这个信号机制,主要是方便Kernel追踪用的,号志发送的方式是,当一个任务获取一个号志时,号志里的数值就会因为发送号志,而少掉一个;反之,当任务完成之後,号志就会送回号志控制区块内,号志的数值就收回,加回一个。

一个Kernel能够支援不同的号志,大致分成下列三种:二进位号志、计数号志以及互斥号志

A.二进位的号志binary semaphore:

在二进位的Kernel里面,通常都是0与1的存在,所以号志的产生,就是二进位的号志(binary semaphore)。
如果二进位的号志是0的状态底下,Kernel就会认为这个号志是不能用的(unavailable),或是空的(empty),反之,如果二进位号志的值是1的状态底下,Kernel就会认为这个号志是有用的(available),或是满的(full)。

B.计数号志Counting semaphore:

如果遇到多工的任务的时,通常会一次要求提供多个号志,此时,就会出现大於1个数值的情况发生,也就是其实它是一连串的给1这个值的数量,或许是一个多工任务,一次给4个1,1111这样形态,这样就会一次发出四个号志,这就称做记数号志。

C.互斥号志(mutual exclusion semaphore)

这种互斥信号,跟上述两种号志不同的地方,在於它是一种开关(lock and unlock)的状态,这个互斥的号志主要保证任务不会被删除,通常会有很多任务产生,如果没有这个机制,让Kernel里面有一堆号志互相混杂处在一个即时作业系统内,可能就会意外的剔除或收回,所以如果有这个互斥号志,就能避免过於混乱,而造成被作业系统给剔除的结果,此外,有标示互斥信号情况下,也可以避免优先顺讯任意倒置的状况发生。


<<:  #9 Pandas教学

>>:  DAY22-JAVA的package

D2 - 环境安装 (Miniconda & PyCharm)

之前装Anaconda实在太占空间我看了一下我现在大概占了快5G 这次想来试试看轻量安装的Minic...

AE自动消除画面动态物件-Day27

今天来练习怎麽让动态的物件在影片中消除, 影片范例 但因为没有付钱买,有浮水印,所以不知道能不能去掉...

#27 No-code 之旅 — 客制化 Favicon ~

嗨嗨!今天来讲一下怎麽设定网站的 favicon!还有用 Next.js 也可以快速设定每个页面用不...

[第28天]30天搞懂Python-阶乘

前言 使用递回方法实作一个阶乘函数,来计算阶乘。 程序实作 # 使用递回方法实作一个阶乘函数 def...