進(jìn)程管理-問(wèn)答

  1. 什么是進(jìn)程模型?
    所有的程序,包括操作系統(tǒng),都被組織成若干順序進(jìn)程
  2. 進(jìn)程怎么創(chuàng)建?
    (1)正在運(yùn)行的進(jìn)程創(chuàng)建(2)用戶要求創(chuàng)建(3)系統(tǒng)初始化(4)批處理初始化
  3. unix可以直接創(chuàng)建進(jìn)程嗎?
    不行,得fork和execve連著來(lái)
  4. fork會(huì)做什么?
    fork會(huì)讓子進(jìn)程得到一個(gè)跟父進(jìn)程一樣的地址空間(副本),但是他們時(shí)間不會(huì)共享內(nèi)存,要么是共享內(nèi)存無(wú)法寫入,要么是共享內(nèi)存只能通過(guò)寫時(shí)復(fù)制的方式
  5. 進(jìn)程存在層次嗎?
    在unix中存在,父進(jìn)程和子進(jìn)程之間有著繼承關(guān)系形成進(jìn)程組,當(dāng)用戶發(fā)出一個(gè)信號(hào)時(shí),進(jìn)程組所有成員都可以得到,windows中 不存在層次(有句柄,但是句柄可以賦值傳遞)
    6.進(jìn)程的狀態(tài)以及轉(zhuǎn)換方式?
    阻塞,運(yùn)行,就緒,操作系統(tǒng)發(fā)現(xiàn)無(wú)法運(yùn)行就轉(zhuǎn)入阻塞(比如說(shuō)等待IO),調(diào)度程序負(fù)責(zé)運(yùn)行和就緒之間的轉(zhuǎn)換,如果等待的事情發(fā)生(比如說(shuō)輸入),那么阻塞會(huì)轉(zhuǎn)為就緒
  6. 什么是進(jìn)程表?作用是什么?
    進(jìn)程表是操作系統(tǒng)為了可以再次啟動(dòng)進(jìn)程而存儲(chǔ)的信息, 也成為進(jìn)程控制塊(PCB)
  7. 線程和進(jìn)程的區(qū)別?
    線程共享了地址空間
  8. 為什么設(shè)定了thread_yield
    因?yàn)榫€程沒有辦法通過(guò)時(shí)鐘中斷來(lái)強(qiáng)制讓出CPU所以需要讓線程自動(dòng)交出CPU,而且進(jìn)程之間互不認(rèn)識(shí)需要競(jìng)爭(zhēng),而線程往往是由同一個(gè)程序員編寫,可以協(xié)作
  9. 用戶態(tài)的線程實(shí)現(xiàn)與核心態(tài)的線程實(shí)現(xiàn)的區(qū)別?
    優(yōu)點(diǎn):
    (1)用戶態(tài)不依賴于操作系統(tǒng),通用性強(qiáng)
    (2)用戶態(tài)不需要陷入內(nèi)核,不需要對(duì)內(nèi)存高速緩存刷新,快
    (3)用戶態(tài)可以控制自己的線程調(diào)度,比如說(shuō)一個(gè)垃圾回收線程你可能不希望不經(jīng)意的停止
    缺點(diǎn):
    (1) 如何處理一個(gè)會(huì)導(dǎo)致阻塞的系統(tǒng)調(diào)用是一個(gè)問(wèn)題,因?yàn)槲覀冎杂镁€程,就是希望說(shuō)避免阻塞的線程影響其他線程,而一個(gè)會(huì)導(dǎo)致阻塞的系統(tǒng)調(diào)用是不可接受的,目前有兩種方式,要么我就直接改寫操作系統(tǒng),實(shí)現(xiàn)非阻塞系統(tǒng)調(diào)用,但是這個(gè)成本很高,還需要修改系統(tǒng),違背了我們之前的第一條,第二種辦法適用于一些操作系統(tǒng),它們會(huì)提供select語(yǔ)義讓你知道這個(gè)系統(tǒng)調(diào)用是否會(huì)導(dǎo)致阻塞,如果有這個(gè)語(yǔ)義,我們就可以說(shuō)在執(zhí)行系統(tǒng)調(diào)用之前,先判斷一下,如果會(huì)阻塞,那就切換運(yùn)行另外一個(gè)線程,直到語(yǔ)義安全為止
    (2)第二個(gè)問(wèn)題也有點(diǎn)像,就是缺頁(yè)中斷,由于程序的所有指令不是一次性放入的,所以如果內(nèi)存發(fā)現(xiàn)沒有,操作系統(tǒng)會(huì)中斷這個(gè),進(jìn)行磁盤IO獲取指令(頁(yè)面故障)
    (3)單獨(dú)進(jìn)程里面是沒有時(shí)鐘中斷的,因此沒有辦法用輪轉(zhuǎn)調(diào)度,所以如果一個(gè)線程開始運(yùn)行,那么沒有任何辦法中斷(除非它自己放棄回歸),一種解決辦法是進(jìn)程自己主動(dòng)要時(shí)鐘中斷,但是效率不高,而且可能會(huì)導(dǎo)致破壞了進(jìn)程自身的時(shí)鐘(如果線程也有時(shí)鐘中斷)
    核心態(tài)線程的話就沒有這些問(wèn)題,最大的問(wèn)題就是慢,即便如此,還是可能有其他潛在問(wèn)題,比如說(shuō)一個(gè)進(jìn)程被fork之后,線程是否該被復(fù)制呢?
    11.列舉一下實(shí)現(xiàn)互斥的幾種方案
    (1)屏蔽中斷,就是不對(duì)任何中斷響應(yīng)(包括時(shí)鐘中斷),那么就不會(huì)切換進(jìn)程,就不用擔(dān)心共享內(nèi)存被修改,缺點(diǎn)在于,將屏蔽中斷的權(quán)利交給用戶不是一個(gè)讓人放心的選擇(不過(guò)在內(nèi)核中倒是不錯(cuò)),而且對(duì)于多核CPU無(wú)助于是
    (2)鎖,但是軟件方案的鎖沒法處理(兩進(jìn)程同時(shí)看到,同時(shí)設(shè)置)的情景
    (3)嚴(yán)格的控制轉(zhuǎn)入,嚴(yán)格按1,2,3,4來(lái)一次進(jìn)入臨界區(qū),缺點(diǎn)是如果有一個(gè)很慢的進(jìn)程,則需要等待(因?yàn)檩喌剿M(jìn)去,而它在執(zhí)行非臨界區(qū)代碼)
    (4) Peterson算法,可以保證嚴(yán)格意義上的軟件方案的鎖
    (5)硬件支持,有些多核cpu支持指令(測(cè)試并加鎖test and set lock),該指令將會(huì)讀取內(nèi)存字,將其放入寄存器,然后對(duì)內(nèi)存字寫入,硬件保證了該讀寫過(guò)程是不可分割的(用鎖住內(nèi)存總線的方式),因此可以讀取并設(shè)置為1,判斷讀取的前值是否是0,是就進(jìn)入,否則就循環(huán)
    以上的算法都是忙等待的,需要浪費(fèi)cpu時(shí)間,而且會(huì)有優(yōu)先級(jí)反轉(zhuǎn)的問(wèn)題(A比B優(yōu)先級(jí)高,只要有就緒態(tài)就一定會(huì)運(yùn)行A,但是假設(shè)A先阻塞了,B進(jìn)入了臨界區(qū),這時(shí)候A又就緒了,由于優(yōu)先級(jí)高,A會(huì)一直獲取時(shí)間,但是又在忙等待,而B呢因?yàn)闆]有CPU時(shí)間沒法執(zhí)行到退出)
  10. 管程是什么?作用是什么?

硬件時(shí)鐘會(huì)提供一定頻率的周期性中斷,進(jìn)程調(diào)度算法可以在每一個(gè)中斷時(shí)間或者是每k個(gè)中斷時(shí)間進(jìn)行調(diào)度決策,調(diào)度算法可以分為兩類,非搶占式和搶占式,非搶占式會(huì)隨機(jī)挑選一個(gè)進(jìn)程,然后允許長(zhǎng)時(shí)間執(zhí)行,直至被阻塞(IO或等待另一個(gè)進(jìn)程)或者自動(dòng)釋放CPU,在時(shí)鐘中斷時(shí),非搶占算法不會(huì)進(jìn)行調(diào)度,處理完時(shí)鐘中斷后,沒有優(yōu)先級(jí)更高的進(jìn)程等待
批處理系統(tǒng)的話希望吞吐量大,周轉(zhuǎn)時(shí)間小,經(jīng)常用的調(diào)度算法包括First ComeFirst Served和最短作業(yè)時(shí)間優(yōu)先(需要都可以選擇且知道時(shí)間)以及最短剩余時(shí)間(搶占式,選擇剩下時(shí)間最短的,用于新的短作業(yè))
交互式系統(tǒng)的話,一是輪轉(zhuǎn)調(diào)度(round robin),分時(shí)間片,要考量時(shí)間片的長(zhǎng)度,一般20-50ms,二是優(yōu)先級(jí)調(diào)度,高優(yōu)先級(jí)先運(yùn)行,為了能讓低優(yōu)先級(jí)也運(yùn)行,可以再每個(gè)時(shí)鐘中斷降低當(dāng)前進(jìn)程的優(yōu)先級(jí),然后如果什么時(shí)候優(yōu)先級(jí)下降到?jīng)]有其他高了,就切換進(jìn)程,或者設(shè)置最長(zhǎng)時(shí)間片,三是多級(jí)隊(duì)列,就是說(shuō)最高優(yōu)先級(jí)一個(gè)時(shí)間片,次高2個(gè),以此類推,每次進(jìn)程用完,就降級(jí),這樣的話,隨著時(shí)間退役,進(jìn)程頻率越來(lái)越低(因?yàn)閮?yōu)先級(jí)低)但是每次執(zhí)行的時(shí)間片越來(lái)越長(zhǎng),第四種辦法是最短進(jìn)程優(yōu)先,估算該進(jìn)程要花的時(shí)間,然后越短越優(yōu)先(估算辦法可能是老化,比如說(shuō)(prev+pres)/2 第五種辦法是保證調(diào)度,比如說(shuō)我有N個(gè)進(jìn)程,那么每個(gè)就應(yīng)該1/N,我就統(tǒng)計(jì)已經(jīng)實(shí)現(xiàn)的時(shí)間片數(shù),然后來(lái)判斷應(yīng)該要給多少 第六中辦發(fā)就是彩票調(diào)度,優(yōu)先級(jí)高的獲得更多的彩票(有更多的可能獲取時(shí)間)

  1. 實(shí)時(shí)調(diào)度的可調(diào)度性怎么判斷?
    sum(處理時(shí)間/周期)<1
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容