1.哲學家進餐問題:
(1)問題描述:有五個哲學家,他們的生活方式是交替地進行思考和進餐。他們共用一張圓桌,分別坐在五張椅子上。在圓桌上有五個碗和五支筷子,平時乙個哲學家進行思考,飢餓時便試圖取用其左、右最靠近他的筷子,只有在他拿到兩支筷子時才能進餐。進餐畢,放下筷子又繼續思考。
(2)問題分析:
筷子是臨界資源,在一段時間內只允許一位哲學家使用。
semaphore chopstick:array[0…4]
每個訊號量表示乙個筷子,描述如下:
semaphore chopstick[5] = ;
本質:實現程序同步
(3)解決方法總結:
思路一:利用記錄型訊號量解決
可把第i位哲學家的程序描述為:
p(i)while(true);
}
這樣的方法可以看成:每個人先拿左邊的筷子(第i個),再拿右邊的筷子(第(i+1)%5個)。
main( )
當有四個及四個以下哲學家同時拿起了左邊筷子的時候,總能保證有乙個哲學家能執行拿起右邊筷子的動作,另外三個哲學家等待這個哲學家執行了eat後釋放訊號量,再獲得右筷子;而當五個人同時執行了拿起左筷子,這時五個訊號量chopstick都變為零,當他們想要執行拿起右筷子的動作時將陷入無限等待。對於這種死鎖問題,提供三種解決方案:
方法一:至多只允許有四位哲學家同時去拿左邊的筷子,最終能保證至少有一位哲學家能夠進餐:
semaphore mutex = 4;
p(i)while(true);
}
方法二:僅當哲學家的左右筷子均可用時,才拿起筷子進餐:即改為使用and訊號量機制(見後文)
方法三:規定奇數號哲學家先拿起左邊的筷子,然後再拿右邊的筷子;偶數號哲學家先拿起右筷子,再拿起左筷子。即五位哲學家都先競爭奇數筷子,再競爭偶數筷子:
p(i)
}
思路二:利用and訊號量機制解決:
dowhile(true);
這種方法就很簡潔。
2.處理機排程演算法總結:
作業排程:
(1)先來先服務(fcfs)演算法 :first come first served
作業和程序排程都可以用,更利於長作業(使長作業的帶權周轉時間更短),一般採用非剝奪的排程方式。
(2)短作業(程序)優先排程(sjf/spf)演算法 :short job/process first
優點:提高了平均周轉時間和平均帶權周轉時間(從 而提高了系統吞吐量);
缺點:作業執行時間不易確定;對長作業(程序)不利,可能等待超級久;沒有考慮作業(程序)的緊急程度;沒有人機互動。
(3)優先順序排程演算法(psa):priority scheduling algorithm
根據外部賦予作業相應的優先順序進行排程,考慮作業緊迫程度。
(4)高相應比優先排程演算法(hrrn):highest response ratio next
引入動態優先權:優先權 = (等待時間 + 要求服務時間)/ 要求服務時間 = 響應時間 / 要求服務時間 = 相應比(rp)
優點:第一二種演算法的折中,既考慮了等待時間,也考慮了服務時間。缺點:排程前要計算相應比,增加了系統開銷。
程序排程:
排程方式:
(1) 非搶占方式:應用於大多數批處理系統
(2) 搶占方式:可遵循的主要原則:
優先權原則:允許優先順序高的新程序搶占到當前程序執行的處理機上;
短程序原則:允許短的新程序搶占當前長程序的處理機;
時間片原則:各程序按時間片轉輪執行。
3.銀行家演算法:
原理簡述:解決作業排程死鎖問題
作業系統 常用排程演算法 總結
1 常見的批處理作業排程演算法 1.1 先來先服務排程演算法 fcfs 就是按照各個作業進入系統的自然次序來排程作業。這種排程演算法的優點是實現簡單,公平。其缺點是沒有考慮到系統中各種資源的綜合使用情況,往往使短作業的使用者不滿意,因為短作業等待處理的時間可能比實際執行時間長得多。1.2 短作業優先...
作業系統總結
老師每次都要求我們考試之後,要再次看書,去做到真正的學習。我們在前一段時間的學習都是都是在積累,還沒有真正的收穫,這次我嚴格按照要求做到,也算是督促自己能夠養成好的習慣吧。這次我看書花費了乙個小時,但感覺很有收穫。先說一下再看之後的總體感受吧,考完之後忽然就覺得世界亮了 這裡說的有點誇張了 心裡總算...
作業系統總結
作業系統 作業系統是指為程式的生存提供乙個通用的土壤,他為多個程式並存提供了條件,同時避免每個程式都需要自己創造執行空間的精力,如果把程式比喻為人,那麼系統就是自然,人只有在自然中才能生存,假設人類要移民火星,人類首先要做的就是在火星上構建自然這個系統,然後人類才能生存,這個自然也可以理解為作業系統...