Python 调度算法 死锁 静动态链接 分页分段
1 select poll epoll的區(qū)別
基本上select有3個(gè)缺點(diǎn):
連接數(shù)受限
查找配對(duì)速度慢
數(shù)據(jù)由內(nèi)核拷貝到用戶(hù)態(tài)
poll改善了第一個(gè)缺點(diǎn)
epoll改了三個(gè)缺點(diǎn).
(1)select,poll實(shí)現(xiàn)需要自己不斷輪詢(xún)所有fd集合,直到設(shè)備就緒,期間可能要睡眠和喚醒多次交替。而epoll其實(shí)也需要調(diào)用epoll_wait不斷輪詢(xún)就緒鏈表,期間也可能多次睡眠和喚醒交替,但是它是設(shè)備就緒時(shí),調(diào)用回調(diào)函數(shù),把就緒fd放入就緒鏈表中,并喚醒在epoll_wait中進(jìn)入睡眠的進(jìn)程。雖然都要睡眠和交替,但是select和poll在“醒著”的時(shí)候要遍歷整個(gè)fd集合,而epoll在“醒著”的時(shí)候只要判斷一下就緒鏈表是否為空就行了,這節(jié)省了大量的CPU時(shí)間。這就是回調(diào)機(jī)制帶來(lái)的性能提升。
(2)select,poll每次調(diào)用都要把fd集合從用戶(hù)態(tài)往內(nèi)核態(tài)拷貝一次,并且要把current往設(shè)備等待隊(duì)列中掛一次,而epoll只要一次拷貝,而且把current往等待隊(duì)列上掛也只掛一次(在epoll_wait的開(kāi)始,注意這里的等待隊(duì)列并不是設(shè)備等待隊(duì)列,只是一個(gè)epoll內(nèi)部定義的等待隊(duì)列)。這也能節(jié)省不少的開(kāi)銷(xiāo)。
2 調(diào)度算法
調(diào)度算法是指:根據(jù)系統(tǒng)的資源分配策略所規(guī)定的資源分配算法。
先來(lái)先服務(wù)(FCFS, First Come First Serve)
短作業(yè)優(yōu)先(SJF, Shortest Job First)
最高優(yōu)先權(quán)調(diào)度(Priority Scheduling)
時(shí)間片輪轉(zhuǎn)(RR, Round Robin)
多級(jí)反饋隊(duì)列調(diào)度(multilevel feedback queue scheduling)
實(shí)時(shí)調(diào)度算法:
最早截至?xí)r間優(yōu)先 EDF
最低松弛度優(yōu)先 LLF
一、FCFS——先來(lái)先服務(wù)和短作業(yè)(進(jìn)程)優(yōu)先調(diào)度算法
先來(lái)先服務(wù)調(diào)度算法。
先來(lái)先服務(wù)(FCFS)調(diào)度算法是一種最簡(jiǎn)單的調(diào)度算法,該算法既可用于作業(yè)調(diào)度, 也可用于進(jìn)程調(diào)度。FCFS算法比較有利于長(zhǎng)作業(yè)(進(jìn)程),而不利于短作業(yè)(進(jìn)程)。由此可知,本算法適合于CPU繁忙型作業(yè), 而不利于I/O繁忙型的作業(yè)(進(jìn)程)。
短作業(yè)(進(jìn)程)優(yōu)先調(diào)度算法。
短作業(yè)(進(jìn)程)優(yōu)先調(diào)度算法(SJ/PF)是指對(duì)短作業(yè)或短進(jìn)程優(yōu)先調(diào)度的算法,該算法既可用于作業(yè)調(diào)度, 也可用于進(jìn)程調(diào)度。但其對(duì)長(zhǎng)作業(yè)不利;不能保證緊迫性作業(yè)(進(jìn)程)被及時(shí)處理;作業(yè)的長(zhǎng)短只是被估算出來(lái)的。
二、FPF高優(yōu)先權(quán)優(yōu)先調(diào)度算法
優(yōu)先權(quán)調(diào)度算法的類(lèi)型。
為了照顧緊迫性作業(yè),使之進(jìn)入系統(tǒng)后便獲得優(yōu)先處理,引入了最高優(yōu)先權(quán)優(yōu)先(FPF)調(diào)度算法。 此算法常被用在批處理系統(tǒng)中,作為作業(yè)調(diào)度算法,也作為多種操作系統(tǒng)中的進(jìn)程調(diào)度,還可以用于實(shí)時(shí)系統(tǒng)中。當(dāng)其用于作業(yè)調(diào)度, 將后備隊(duì)列中若干個(gè)優(yōu)先權(quán)最高的作業(yè)裝入內(nèi)存。當(dāng)其用于進(jìn)程調(diào)度時(shí),把處理機(jī)分配給就緒隊(duì)列中優(yōu)先權(quán)最高的進(jìn)程,此時(shí), 又可以進(jìn)一步把該算法分成以下兩種:
1)非搶占式優(yōu)先權(quán)算法
2)搶占式優(yōu)先權(quán)調(diào)度算法(高性能計(jì)算機(jī)操作系統(tǒng))
? 2.優(yōu)先權(quán)
對(duì)于最高優(yōu)先權(quán)優(yōu)先調(diào)度算法,其核心在于:它是使用靜態(tài)優(yōu)先權(quán)還是動(dòng)態(tài)優(yōu)先權(quán), 以及如何確定進(jìn)程的優(yōu)先權(quán)。
? 3.動(dòng)態(tài)優(yōu)先權(quán)
高響應(yīng)比優(yōu)先調(diào)度算法為了彌補(bǔ)短作業(yè)優(yōu)先算法的不足,我們引入動(dòng)態(tài)優(yōu)先權(quán),使作業(yè)的優(yōu)先等級(jí)隨著等待時(shí)間的增加而以速率a提高。 該優(yōu)先權(quán)變化規(guī)律可描述為:優(yōu)先權(quán)=(等待時(shí)間+要求服務(wù)時(shí)間)/要求服務(wù)時(shí)間;即 =(響應(yīng)時(shí)間)/要求服務(wù)時(shí)間
三、基于時(shí)間片的輪轉(zhuǎn)調(diào)度算法
1.時(shí)間片輪轉(zhuǎn)法。
時(shí)間片輪轉(zhuǎn)法一般用于進(jìn)程調(diào)度,每次調(diào)度,把CPU分配隊(duì)首進(jìn)程,并令其執(zhí)行一個(gè)時(shí)間片。 當(dāng)執(zhí)行的時(shí)間片用完時(shí),由一個(gè)記時(shí)器發(fā)出一個(gè)時(shí)鐘中斷請(qǐng)求,該進(jìn)程被停止,并被送往就緒隊(duì)列末尾;依次循環(huán)。
多級(jí)反饋隊(duì)列調(diào)度算法
多級(jí)反饋隊(duì)列調(diào)度算法多級(jí)反饋隊(duì)列調(diào)度算法,不必事先知道各種進(jìn)程所需要執(zhí)行的時(shí)間,它是目前被公認(rèn)的一種較好的進(jìn)程調(diào)度算法。 其實(shí)施過(guò)程如下:
1) 設(shè)置多個(gè)就緒隊(duì)列,并為各個(gè)隊(duì)列賦予不同的優(yōu)先級(jí)。在優(yōu)先權(quán)越高的隊(duì)列中, 為每個(gè)進(jìn)程所規(guī)定的執(zhí)行時(shí)間片就越小。
2) 當(dāng)一個(gè)新進(jìn)程進(jìn)入內(nèi)存后,首先放入第一隊(duì)列的末尾,按FCFS原則排隊(duì)等候調(diào)度。 如果他能在一個(gè)時(shí)間片中完成,便可撤離;如果未完成,就轉(zhuǎn)入第二隊(duì)列的末尾,在同樣等待調(diào)度…… 如此下去,當(dāng)一個(gè)長(zhǎng)作業(yè)(進(jìn)程)從第一隊(duì)列依次將到第n隊(duì)列(最后隊(duì)列)后,便按第n隊(duì)列時(shí)間片輪轉(zhuǎn)運(yùn)行。
3) 僅當(dāng)?shù)谝魂?duì)列空閑時(shí),調(diào)度程序才調(diào)度第二隊(duì)列中的進(jìn)程運(yùn)行;
僅當(dāng)?shù)?到第( i-1 )隊(duì)列空時(shí), 才會(huì)調(diào)度第i隊(duì)列中的進(jìn)程運(yùn)行,并執(zhí)行相應(yīng)的時(shí)間片輪轉(zhuǎn)。
4) 如果處理機(jī)正在處理第i隊(duì)列中某進(jìn)程,又有新進(jìn)程進(jìn)入優(yōu)先權(quán)較高的隊(duì)列, 則此新隊(duì)列搶占正在運(yùn)行的處理機(jī),并把正在運(yùn)行的進(jìn)程放在第i隊(duì)列的隊(duì)尾。
3 死鎖
在多道程序系統(tǒng)中,由于多個(gè)進(jìn)程的并發(fā)執(zhí)行,改善了系統(tǒng)資源的利用率并提高了系統(tǒng)的處理能力。然而,多個(gè)進(jìn)程的并發(fā)執(zhí)行也帶來(lái)了新的問(wèn)題——死鎖。所謂死鎖是指多個(gè)進(jìn)程因競(jìng)爭(zhēng)資源而造成的一種僵局,若無(wú)外力作用,這些進(jìn)程都將無(wú)法向前推進(jìn)。
死鎖產(chǎn)生的原因: 1)系統(tǒng)資源的競(jìng)爭(zhēng) 2)進(jìn)程推進(jìn)順序非法(程序推進(jìn)順序不當(dāng))
死鎖產(chǎn)生的條件: 互斥條件 不剝奪條件 請(qǐng)求和保持條件 循環(huán)等待條件
處理死鎖的基本方法:
預(yù)防死鎖(摒棄除1以外的條件)
避免死鎖(銀行家算法)
檢測(cè)死鎖(資源分配圖)
解除死鎖 : 死鎖的接觸方法 : 剝奪資源 撤銷(xiāo)進(jìn)程 進(jìn)程回退
4 程序的編譯與鏈接
Bulid過(guò)程可以分解為4個(gè)步驟:預(yù)處理(Prepressing), 編譯(Compilation)、匯編(Assembly)、鏈接(Linking)
以c語(yǔ)言為例:
1 預(yù)處理
預(yù)編譯過(guò)程主要處理那些源文件中的以“#”開(kāi)始的預(yù)編譯指令,主要處理規(guī)則有:
將所有的“#define”刪除,并展開(kāi)所用的宏定義
處理所有條件預(yù)編譯指令,比如“#if”、“#ifdef”、 “#elif”、“#endif”
處理“#include”預(yù)編譯指令,將被包含的文件插入到該編譯指令的位置,注:此過(guò)程是遞歸進(jìn)行的
刪除所有注釋
添加行號(hào)和文件名標(biāo)識(shí),以便于編譯時(shí)編譯器產(chǎn)生調(diào)試用的行號(hào)信息及用于編譯時(shí)產(chǎn)生編譯錯(cuò)誤或警告時(shí)可顯示行號(hào)
保留所有的#pragma編譯器指令。
2 編譯
編譯過(guò)程就是把預(yù)處理完的文件進(jìn)行一系列的詞法分析、語(yǔ)法分析、語(yǔ)義分析及優(yōu)化后生成相應(yīng)的匯編代碼文件。這個(gè)過(guò)程是整個(gè)程序構(gòu)建的核心部分。
3 匯編
匯編器是將匯編代碼轉(zhuǎn)化成機(jī)器可以執(zhí)行的指令,每一條匯編語(yǔ)句幾乎都是一條機(jī)器指令。經(jīng)過(guò)編譯、鏈接、匯編輸出的文件成為目標(biāo)文件(Object File).
4 鏈接
鏈接的主要內(nèi)容就是把各個(gè)模塊之間相互引用的部分處理好,使各個(gè)模塊可以正確的拼接。
鏈接的主要過(guò)程包塊 地址和空間的分配(Address and Storage Allocation)、符號(hào)決議(Symbol Resolution)和重定位(Relocation)等步驟。
5 靜態(tài)鏈接與動(dòng)態(tài)鏈接
靜態(tài)鏈接方法:靜態(tài)鏈接的時(shí)候,載入代碼就會(huì)把程序會(huì)用到的動(dòng)態(tài)代碼或動(dòng)態(tài)代碼的地址確定下來(lái)
靜態(tài)庫(kù)的鏈接可以使用靜態(tài)鏈接,動(dòng)態(tài)鏈接庫(kù)也可以使用這種方法鏈接導(dǎo)入庫(kù)
動(dòng)態(tài)鏈接方法:使用這種方式的程序并不在一開(kāi)始就完成動(dòng)態(tài)鏈接,而是直到真正調(diào)用動(dòng)態(tài)庫(kù)代碼時(shí),載入程序才計(jì)算(被調(diào)用的那部分)動(dòng)態(tài)代碼的邏輯地址,等到某個(gè)時(shí)候,程序又需要調(diào)用另外某塊動(dòng)態(tài)代碼時(shí),載入程序又去計(jì)算這部分代碼的邏輯地址,所以這種方式使程序初始化時(shí)間較短,但運(yùn)行期間的性能比不上靜態(tài)鏈接的程序
6 虛擬內(nèi)存技術(shù)與分頁(yè)分段
虛擬存儲(chǔ)器是指具有請(qǐng)求調(diào)入功能和置換功能,能從邏輯上對(duì)內(nèi)存容量加以擴(kuò)充的一種存儲(chǔ)系統(tǒng).
分頁(yè): 用戶(hù)程序的地址空間被劃分成若干固定大小的區(qū)域,稱(chēng)為“頁(yè)”,相應(yīng)地,內(nèi)存空間分成若干個(gè)物理塊,頁(yè)和塊的大小相等??蓪⒂脩?hù)程序的任一頁(yè)放在內(nèi)存的任一塊中,實(shí)現(xiàn)了離散分配。
分段: 將用戶(hù)程序地址空間分成若干個(gè)大小不等的段,每段可以定義一組相對(duì)完整的邏輯信息。存儲(chǔ)分配時(shí),以段為單位,段與段在內(nèi)存中可以不相鄰接,也實(shí)現(xiàn)了離散分配。
分頁(yè)與分段的主要區(qū)別
頁(yè)是信息的物理單位,分頁(yè)是為了實(shí)現(xiàn)非連續(xù)分配,以便解決內(nèi)存碎片問(wèn)題,或者說(shuō)分頁(yè)是由于系統(tǒng)管理的需要.段是信息的邏輯單位,它含有一組意義相對(duì)完整的信息,分段的目的是為了更好地實(shí)現(xiàn)共享,滿(mǎn)足用戶(hù)的需要.
頁(yè)的大小固定,由系統(tǒng)確定,將邏輯地址劃分為頁(yè)號(hào)和頁(yè)內(nèi)地址是由機(jī)器硬件實(shí)現(xiàn)的.而段的長(zhǎng)度卻不固定,決定于用戶(hù)所編寫(xiě)的程序,通常由編譯程序在對(duì)源程序進(jìn)行編譯時(shí)根據(jù)信息的性質(zhì)來(lái)劃分.
分頁(yè)的作業(yè)地址空間是一維的.分段的地址空間是二維的.
頁(yè)面置換算法
最佳置換算法OPT:不可能實(shí)現(xiàn)
先進(jìn)先出FIFO
clock算法
邊沿觸發(fā)和水平觸發(fā)
邊緣觸發(fā)是指每當(dāng)狀態(tài)變化時(shí)發(fā)生一個(gè) io 事件,條件觸發(fā)是只要滿(mǎn)足條件就發(fā)生一個(gè) io 事件
轉(zhuǎn)載于:https://www.cnblogs.com/CK85/p/10294562.html
總結(jié)
以上是生活随笔為你收集整理的Python 调度算法 死锁 静动态链接 分页分段的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java8中方法区的内存大小如何设置_从
- 下一篇: python计算现场得分_浅谈用 Pyt