freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

操作系統(tǒng)設(shè)計與實(shí)現(xiàn)(第二章)(參考版)

2025-01-21 20:16本頁面
  

【正文】 如:在 2小時內(nèi)完成 4個作業(yè),而每個周轉(zhuǎn)時間是 1小時,則吞吐量是 2個作業(yè) /小時 ?處理機(jī)利用率:--大中型主機(jī) ?各種設(shè)備的均衡利。 ? 優(yōu)先級:可以使關(guān)鍵任務(wù)達(dá)到更好的指標(biāo)。 ? 公平性:不因作業(yè)或進(jìn)程本身的特性而使上述指標(biāo)過分惡化。 1. 面向用戶的調(diào)度性能準(zhǔn)則 ? 周轉(zhuǎn)時間:作業(yè)從提交到完成(得到結(jié)果)所經(jīng)歷的時間。實(shí)際的處理機(jī)調(diào)度算法選擇是一個綜合的判斷結(jié)果。進(jìn)程狀態(tài): Ready - Running I/O調(diào)度:選擇哪個 I/O等待進(jìn)程,使其請求可以被空閑的 I/O設(shè)備進(jìn)行處理。進(jìn)程狀態(tài): New- Ready suspend, Running - Exit ?中期 (mediumterm):將進(jìn)程的部分或全部加載到內(nèi)存中。因?yàn)閳?zhí)行頻繁,要求在實(shí)現(xiàn)時達(dá)到高效率。從 CPU資源的角度,執(zhí)行的單位。指令和數(shù)據(jù)必須在內(nèi)存里才能被 CPU直接訪問。從存儲器資源的角度。時間上通常是分鐘、小時或天。 進(jìn)程調(diào)度 ** 調(diào)度的類型 (scheduling) 1. 按照調(diào)度的層次 ? 作業(yè):又稱為 宏觀調(diào)度 、 高級調(diào)度 。 ReleaseMutex(g_hMutex)。 WaitForSingleObject(g_hFullSemaphore,INFINITE)。 hThreads[i]=CreateThread(NULL,0,Producer,NULL,0,amp。 g_hFullSemaphore= = CreateSemaphore(NULL,SIZE_OF_BUFFER1,SIZE_OF_BUFFER1,NULL)。 /* 否則,等候服務(wù) */ } else { up(mutex)。 /* 解除鎖定 */ down(barbers)。 /* 等待的顧客數(shù)目加一 */ up(customers)。 /* 理發(fā) */ } } void customer(void) { down(mutex)。 /* 一個理發(fā)師開始理發(fā) */ up(mutex)。 /* 鎖定臨界區(qū) */ waiting = waiting 1。 /* 等待的顧客(未理發(fā)的) */ void barber(void) { while (TRUE) { down(customers)。 /* 理發(fā)師的數(shù)目 */ semaphore mutex = 1。 /* 自定義 */ semaphore customers = 0。 特殊的多進(jìn)程對有界資源的使用。} /*所有寫進(jìn)程完成,允許新讀者進(jìn)入 */ up(y)。 writecount。 up(db)。 down(db)。 if(writecount==1){ down(rsem)。 Void writer() { while(TRUE) { down(y)。 READUNIT()。 up (rsem)。 if (readcount==1) { down(db)。 down(mutex)。 Void reader() { while (TRUE){ down( z)。 b)寫進(jìn)程設(shè)置 rsem; c) 寫進(jìn)程在 db上排隊; d)一個讀進(jìn)程在 rsem上 排 隊; e)其他讀進(jìn)程在 z上排隊。 b)寫進(jìn)程設(shè)置 rsem; c)所有寫進(jìn)程在 db上排隊; d)一個讀進(jìn)程在 rsem上排隊; e)其他讀進(jìn)程在 z上排隊。 一個額外的信號量 z,為了寫進(jìn)程優(yōu)先,不要多余的讀進(jìn)程在rsem里等待,將多余的讀進(jìn)程放入 z中,在那里排隊。只要至少一個讀進(jìn)程在讀,就為讀保留了數(shù)據(jù)區(qū)的控制權(quán),所以寫進(jìn)程可能會被餓死。 故此種解法為讀者優(yōu)先。db)。 /* 鎖定臨界區(qū) — 數(shù)據(jù)庫 */ write_data_base ( )。 /* 非臨界區(qū) */ down (amp。 /* 恢復(fù)允許訪問 ’ rc’ */ use_data_read()。 /* 如果是最后一個讀者 ... */ up(amp。 /* 讀者離開 */ if (rc == 0) up(amp。mutex)。 /* 恢復(fù) 允許訪問 ’ rc’ */ read_data_base()。 /* 如果是第一個讀者 ... */ up(amp。 /* 讀者進(jìn)入 */ if (rc == 1) down(amp。mutex)。 /* 控制對數(shù)據(jù)庫的訪問 */ int rc = 0。 /* 根據(jù)需要自定義 */ semaphore mutex = 1。 ; ,禁止任何讀進(jìn)程讀文件。 讀者 寫者問題 問題描述: 有一個許多進(jìn)程共享的數(shù)據(jù)區(qū),這個數(shù)據(jù)區(qū)可以是一個文件或者主存的一塊空間,甚至可以是一組處理器寄存器,有一些只讀取這個數(shù)據(jù)區(qū)的進(jìn)程,和一些只向數(shù)據(jù)區(qū)中寫數(shù)據(jù)的進(jìn)程。不是單獨(dú)的進(jìn)程。 /* 喚醒阻塞 */ } } 如果第一個進(jìn)入,通過 test來表示自己的狀態(tài),表示可以進(jìn)餐,如果他完成以后,通過 test標(biāo)識可以進(jìn)餐的人的標(biāo)號,在 test函數(shù)里將阻塞的進(jìn)程喚醒,即每個哲學(xué)家放下叉子之后,再去判斷兩側(cè)的是否有阻塞,如果有,將它喚醒,之后,放開對臨界區(qū)的控制,讓兩側(cè)的哲學(xué)家進(jìn)餐。 up(amp。amp。amp。mutex)。 /* 測試左側(cè)是否能進(jìn)餐 */ test (RIGHT)。 /* 進(jìn)入臨界區(qū) */ state[i] = THINKING。 /* 得不到就阻塞 */ } void putforks (i) /* i: 某個哲學(xué)家的編號 , 從 0 到 N1 */ { down (amp。 /* 退出臨界區(qū) */ down(amp。 /* 嘗試去拿兩個叉子 */ up(amp。 /* 進(jìn)入臨界區(qū) */ state[i] = HUNGRY。 /* 放回兩只叉子 */ } } void takeforks (int i) /* i: 某個哲學(xué)家的編號 , 從 0 到 N1 */ { down (amp。 /* 想取兩個叉子,有可能阻塞 */ eat( )。 /* 各個哲學(xué)家的信號量 */ void philosopher ( int i ) /* i: 哲學(xué)家的號碼 , 從 0 到 N1 */ { while (TRUE) { /* 循環(huán) */ think( )。 /* 記錄每個人狀態(tài)的數(shù)組 */ Semaphore mutex = 1。 define N 5 /*哲學(xué)家的人數(shù) */ define LEFT (i1)%N /* 某個哲學(xué)家左邊人的號碼 */ define RIGHT (i+1)%N /*某個哲學(xué)家右邊人的號碼 */ define THINKING 0 /* 思考 */ define HUNGRY 1 /* 想取叉子 */ define EATING 2 /* 哲學(xué)家在進(jìn)餐 */ typedef int semaphore。 缺陷:太不可靠 解決辦法 2:在 think后加上一個 mutex,使哲學(xué)家都要首先訪問臨界區(qū),才能進(jìn)餐,可以解決問題。 /*放下左邊叉子 */ putfork((i+1) % N)。 /*取右邊叉子 */ eat()。 /* 思考 */ takefork(i)。 如果說,這個緩沖區(qū)內(nèi)始終沒有東西,而消息的發(fā)送和接收仍在運(yùn)行,則說明這是處于會合態(tài),即消息的發(fā)送和接收是同時的,沒有遲延。 /* 回送空消息作為應(yīng)答 */ consume_item(item)。 /* 從消息中提取數(shù)據(jù) */ send(producer ,amp。m ,amp。m )。m)。 iN。 message m。m)。m ,item)。item)。item ) 。 message m。 **如果消息隊列為空,所有進(jìn)程被阻塞,當(dāng)有一條消息可用時,只有一個阻塞進(jìn)程被激活并得到這條消息。消息函數(shù)可以看成是在進(jìn)程之間傳遞的一個令牌。 描述: 這里使用的是阻塞 receive原語和無阻塞 send原語,一組并發(fā)進(jìn)程共享一個信箱 mutex,它可以供所有的進(jìn)程在發(fā)送和接收時使用,該信箱被初始化成一個無內(nèi)容的消息。 parbegin( P(1) , P(2) , … ,P(n))。 /*其余部分 */ } } Void main() { create_mailbox(mutex)。 while ( true ) { receive ( mutex , msg ) 。 3)無阻塞 send,無阻塞 receive,不要求任何一方等待。 2)無阻塞 send,阻塞 receive,發(fā)送方盡管發(fā)送,接收者會阻塞,直到自己等到自己需要的信息來為止。message ) 都屬于系統(tǒng)調(diào)用 針對與通信進(jìn)程位于網(wǎng)絡(luò)中不同機(jī)器上的情況 1)由于進(jìn)程發(fā)送了消息以后,接受者才能接收,故 **對于一個執(zhí)行 send的進(jìn)程 **對于一個執(zhí)行 receive的進(jìn)程 發(fā)送被阻塞,等回復(fù) 發(fā)送沒有阻塞,做別的 接受消息,繼續(xù)執(zhí)行 等待消息 a)等,直到接收到 b)放棄接收 2)消息接收的處理 發(fā)送者發(fā)送消息,接收者收到后發(fā)送一個應(yīng)答,這時: **應(yīng)答信息被發(fā)送者收到,則繼續(xù)發(fā)送新的消息; **應(yīng)答信息丟失,則重發(fā)剛才的信息,此時,接收者需要區(qū)分消息的新舊,利用給消息加上連續(xù)序號來解決; 3) 消息系統(tǒng) 設(shè)計的其他注意事項(xiàng) **系統(tǒng)需要解決進(jìn)程命名的問題,保證消息的正確發(fā)送和接收; **效率的提升:嚴(yán)格控制系統(tǒng)中所用信息的長度,保證能夠送入寄存器。 消息傳遞 Send ( destination , amp。所以這兩種都不是很實(shí)際的解決方法。但對于一個具有多個 CPU,且每個 CPU有自己的內(nèi)存,有一個局域網(wǎng)相連的分布式系統(tǒng)來說,這些原語將完全失敗。 弊端, 支持管程的編程語言太少,因?yàn)樗缶幾g器的支持 ,而信號量對于一個操作系統(tǒng)來說是很容易添加的;他們都是用來解決訪問同一個公共存儲器的一個或多個 CPU的互斥問題。管程可以函數(shù)庫的形式實(shí)現(xiàn)。 用信號量可實(shí)現(xiàn)進(jìn)程間的同步,但由于信號量的控制分布在整個程序中,其正確性分析很困難。 管程與信號量的比較 由于管程的機(jī)制,在某個時刻,只能有一個管程過程是活躍的,就類似于原語操作一樣,也能夠很好地解決 Spooler目錄的問題,而且更為簡潔,在使用的過程中,能夠直接分析代碼,更容易理解使用。 consume_item。 Procedure consumer。 begin while true do begin produce_item。 End monitor。 count:=count1。 begin if count=0 then wait (empty ) 。 count:=count+1。 begin if count=N then wait (full ) 。 integer count。這些原語本身是互斥的,任一時刻只允許一個進(jìn)程去調(diào)用,其余需要訪問的進(jìn)程就等待。 共享變量說明 define 本管程內(nèi)所定義、本管程外可調(diào)用的過程(函數(shù))名字表 use 本管程外所定義、本管程內(nèi)將調(diào)用的過程(函數(shù))名字表 PROCEDURE 過程名(形參表); 過程局部變量說明; BEGIN 語句序列; END。每個表示一種等待原因,并不取具體數(shù)值--相當(dāng)于每個原因?qū)?yīng)一個隊列。 當(dāng)進(jìn)入管程的進(jìn)程因資源被占用等原因不能繼續(xù)運(yùn)行時使其等待。一個操作系統(tǒng)或并發(fā)程序由若干個這樣的模塊所構(gòu)成,一個模塊通常較短,模塊之間關(guān)系清晰。 管程的定義: 管程是關(guān)于共享資源的數(shù)據(jù)結(jié)構(gòu)及一組針對該資源的操作過程所構(gòu)成的軟件模塊。 管程 1. 信號量同步的缺點(diǎn) ? 同步操作分散:信號量機(jī)制中,同步操作分散在各個進(jìn)程中,使用不當(dāng)就可能導(dǎo)致各進(jìn)程死鎖(如 P、 V操作的次序錯誤、重復(fù)或遺漏) ? 易讀性差:要了解對于一組共享變量及信號量的操作是否正確,必須通讀整個系統(tǒng)或者并發(fā)程序; ? 不利于修改和維護(hù):各模塊的獨(dú)立性差,任一組變量或一
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1