所謂搶占式操作系統(tǒng),就是說(shuō)如果一個(gè)進(jìn)程得到了 CPU 時(shí)間,除非它自己放棄使用 CPU ,否則將完全霸占 CPU 。因此可以看出,在搶 占式操作系統(tǒng)中,操作系統(tǒng)假設(shè)所有的進(jìn)程都是“人品很好”的,會(huì)主動(dòng)退出 CPU 。
在搶占式操作系統(tǒng)中,假設(shè)有若干進(jìn)程,操作系統(tǒng)會(huì)根據(jù)他們的優(yōu)先級(jí)、饑餓時(shí)間(已經(jīng)多長(zhǎng)時(shí)間沒有使用過(guò) CPU 了),給他們算出一 個(gè)總的優(yōu)先級(jí)來(lái)。操作系統(tǒng)就會(huì)把 CPU 交給總優(yōu)先級(jí)最高的這個(gè)進(jìn)程。當(dāng)進(jìn)程執(zhí)行完畢或者自己主動(dòng)掛起后,操作系統(tǒng)就會(huì)重新計(jì)算一 次所有進(jìn)程的總優(yōu)先級(jí),然后再挑一個(gè)優(yōu)先級(jí)最高的把 CPU 控制權(quán)交給他。
如果是 Windows 操作系統(tǒng)來(lái)負(fù)責(zé)分蛋糕的,那么場(chǎng)面就很有意思了。他會(huì)這樣定規(guī)矩:我會(huì)根據(jù)你們的優(yōu)先級(jí)、饑餓程度去給你們每個(gè)人計(jì)算一個(gè)優(yōu)先級(jí)。優(yōu)先級(jí)最高的那個(gè)人,可以上來(lái)吃蛋糕——吃到你不想吃為止。等這個(gè)人吃完了,我再重新根據(jù)優(yōu)先級(jí)、饑餓程度來(lái)計(jì)算每個(gè)人的優(yōu)先級(jí),然后再分給優(yōu)先級(jí)最高的那個(gè)人。
另外,雖然上面提到說(shuō)“除非它自己放棄使用 CPU ,否則將完全霸占 CPU”,但這個(gè)行為仍然是受到制約的——操作系統(tǒng)會(huì)監(jiān)控你霸占CPU的情況,如果發(fā)現(xiàn)某個(gè)線程長(zhǎng)時(shí)間霸占CPU,會(huì)強(qiáng)制使這個(gè)線程掛起,因此在實(shí)際上不會(huì)出現(xiàn)“一個(gè)線程一直霸占著 CPU 不放”的情況。至于我們的大循環(huán)造成程序假死,并不是因?yàn)檫@個(gè)線程一直在霸占著CPU。實(shí)際上在這段時(shí)間操作系統(tǒng)已經(jīng)進(jìn)行過(guò)多次CPU競(jìng)爭(zhēng)了,只不過(guò)其他線程在獲得CPU控制權(quán)之后很短時(shí)間內(nèi)馬上就退出了,于是就又輪到了這個(gè)線程繼續(xù)執(zhí)行循環(huán),于是就又用了很久才被操作系統(tǒng)強(qiáng)制掛起。。。因此反應(yīng)到界面上,看起來(lái)就好像這個(gè)線程一直在霸占著CPU一樣。