大型網(wǎng)站改版程序環(huán)境的進(jìn)程調(diào)度與死鎖進(jìn)程調(diào)度的狀態(tài),程序的進(jìn)程調(diào)度即處理器調(diào)度(又稱上下文轉(zhuǎn)換),
網(wǎng)站建設(shè)公司提醒它的主要功能是確定在什么時(shí)候分配處理器,并確定分給哪一個(gè)進(jìn)程,即讓正在執(zhí)行的進(jìn)程改變狀態(tài)并轉(zhuǎn)入就緒隊(duì)列的隊(duì)尾,再由調(diào)度原語(yǔ)將就緒隊(duì)列的隊(duì)首進(jìn)程取出,投入執(zhí)行。引起進(jìn)程調(diào)度的原因有以下幾類:

(1)正在執(zhí)行的進(jìn)程執(zhí)行完畢。
(2)執(zhí)行中的進(jìn)程自己調(diào)用阻塞原語(yǔ)將自己阻塞起來(lái)進(jìn)入睡眠狀態(tài)。
(3)執(zhí)行中的進(jìn)程調(diào)用了Р原語(yǔ)操作,從而因資源不足而阻塞;或調(diào)用V原語(yǔ)操作激活了等待資源的進(jìn)程隊(duì)列。
(4)在分時(shí)系統(tǒng)中,當(dāng)一進(jìn)程用完一個(gè)時(shí)間片。
(5)就緒隊(duì)列中某進(jìn)程的優(yōu)先級(jí)變得高于當(dāng)前執(zhí)行進(jìn)程的優(yōu)先級(jí),也將引起進(jìn)程調(diào)度。
進(jìn)程調(diào)度的方式有兩類:剝奪方式與非剝奪方式。所謂非剝奪方式是指,一旦某個(gè)作業(yè)或進(jìn)程占用了處理器,別的進(jìn)程就不能把處理器從這個(gè)進(jìn)程手中奪走,直到該進(jìn)程自己因調(diào)用原語(yǔ)操作而進(jìn)入阻塞狀態(tài),或時(shí)間片用完而讓出處理機(jī);剝奪方式是指,當(dāng)就緒隊(duì)列中有進(jìn)程的優(yōu)先級(jí)高于當(dāng)前執(zhí)行進(jìn)程的優(yōu)先級(jí)時(shí),便立即發(fā)生進(jìn)程調(diào)度,轉(zhuǎn)讓處理機(jī)。
進(jìn)程調(diào)度的算法是服務(wù)于系統(tǒng)目標(biāo)的策略,對(duì)于不同的系統(tǒng)與系統(tǒng)目標(biāo),常采用不同的調(diào)度算法:
(1)先來(lái)先服務(wù)(First Come and First Serverd,F(xiàn)CFS)調(diào)度算法,又稱先進(jìn)先出(First In and First Out,F(xiàn)IFO)。就緒隊(duì)列按先來(lái)后到原則排隊(duì)。
(2)優(yōu)先數(shù)調(diào)度。優(yōu)先數(shù)反映了進(jìn)程優(yōu)先級(jí),就緒隊(duì)列按優(yōu)先數(shù)排隊(duì)。有兩種確定優(yōu)先級(jí)的方法,即靜態(tài)優(yōu)先級(jí)和動(dòng)態(tài)優(yōu)先級(jí)。靜態(tài)優(yōu)先級(jí)是指進(jìn)程的優(yōu)先級(jí)在進(jìn)程開始執(zhí)行前確定,執(zhí)行過程中不變,而動(dòng)態(tài)優(yōu)先級(jí)則可以在進(jìn)程執(zhí)行過程中改變。
(3)輪轉(zhuǎn)法(Round Robin)。就緒隊(duì)列按FCFS方式排隊(duì)。每個(gè)進(jìn)程執(zhí)行一次占有處理器時(shí)間都不超過規(guī)定的時(shí)間單位(時(shí)間片)若超過,則自行釋放自己所占有的CPU而排到就緒隊(duì)列的末尾,等待下一次調(diào)度。同時(shí),進(jìn)程調(diào)度程序又去調(diào)度當(dāng)前就緒隊(duì)列中的第一個(gè)進(jìn)程。
進(jìn)程管理是操作系統(tǒng)的核心,在進(jìn)程管理的實(shí)現(xiàn)中,如果設(shè)計(jì)不當(dāng),會(huì)出現(xiàn)一種尷尬的局面――死鎖。
當(dāng)若干個(gè)進(jìn)程互相競(jìng)爭(zhēng)對(duì)方已占有的資源,無(wú)限期地等待,不能向前推進(jìn)時(shí)會(huì)造成“死鎖”。例如,P1進(jìn)程占有資源R1,Pz進(jìn)程占有資源R2,這時(shí),P1又需要資源R2,P2也需要資源R1,它們?cè)诘却龑?duì)方占有的資源時(shí),又不會(huì)釋放自己占有的資源,因而使雙方都進(jìn)入了無(wú)限等待狀態(tài)。
死鎖是系統(tǒng)的一種出錯(cuò)狀態(tài),它不僅會(huì)浪費(fèi)大量的系統(tǒng)資源,甚至還會(huì)導(dǎo)致整個(gè)系統(tǒng)的崩潰,特別是針對(duì)大型網(wǎng)站的改版工作,所以死鎖是應(yīng)該盡量預(yù)防和避免的。
(1)死鎖條件。產(chǎn)生死鎖的主要原因是供共享的系統(tǒng)資源不足,資源分配策略和進(jìn)程的推進(jìn)順序不當(dāng)。系統(tǒng)資源既可能是可重復(fù)使用的永久性資源,也可能是消耗性的臨時(shí)資源。產(chǎn)生死鎖的必要條件是:互斥條件、保持和等待條件、不剝奪條件和環(huán)路等待條件。
(2)解決死鎖的策略。處于死鎖狀態(tài)的進(jìn)程不能繼續(xù)執(zhí)行但又占用了系統(tǒng)資源,從而阻礙其他作業(yè)的執(zhí)行。
解決死鎖有兩種策略:一種是在死鎖發(fā)生前采用的預(yù)防和避免策略;另一種是在死鎖發(fā)生后采用的檢測(cè)與恢復(fù)策略。
死鎖的預(yù)防主要是通過打破死鎖產(chǎn)生的4個(gè)必要條件之一來(lái)保證不會(huì)產(chǎn)生死
鎖。采用的死鎖預(yù)防策略通常有資源的靜態(tài)分配法或有序分配法,它們分別打破了資源動(dòng)態(tài)分配條件和循環(huán)等待條件,因此不會(huì)發(fā)生死鎖。但這樣做會(huì)大大降低系統(tǒng)資源的利用率和進(jìn)程之間的并行程度。
死鎖避免策略,則是在系統(tǒng)進(jìn)行資源分配時(shí),先執(zhí)行一個(gè)死鎖避免算法(典型的如銀行家算法),以保證本次分配不會(huì)導(dǎo)致死鎖發(fā)生。由于資源分配很頻繁,因此死鎖避免策略要耗費(fèi)大量的CPU和時(shí)間。
深圳網(wǎng)站建設(shè)公司資深程序工程師提醒提示:實(shí)際上,系統(tǒng)出現(xiàn)死鎖的概率很小,故從系統(tǒng)所花的代價(jià)上看,采用死鎖發(fā)生后的檢測(cè)與恢復(fù)策略要比采用死鎖發(fā)生前的預(yù)防與避免策略代價(jià)小一些。好了,本文關(guān)于“大型網(wǎng)站改版:程序環(huán)境的進(jìn)程調(diào)度與死鎖進(jìn)程調(diào)度的狀態(tài)的原因分析”就分享到這里,謝謝關(guān)注,博納網(wǎng)絡(luò)編輯整理。