併發處理
1.程式的執行有兩種方式:順序執行和併發執行。
程式的順序執行是指:乙個計算由若干個操作組成,而這些操作必須按照某種先後次序來執行,以保證操作的結果是正確的。程式的順序執行具有順序性、封閉性、可再現性;
程式的併發執行是指:若干個程式段同時在系統中執行,這些程式段的執行在時間上是重疊的,乙個程式段執行尚未結束,另乙個程式段的執行已經開始。即使這種重疊是很小的一部分時間,也稱這幾個程式是併發執行的。程式併發執行特點:失去了程式的封閉性與可再現性,程式與計算不再一一對應,程式併發執行時存在相互制約。
順序執行是單道批處理系統的執行方式,也用於簡單的微控制器系統;現代作業系統多為併發執行,併發執行的目的是為了提高資源的利用率。
注意:區分併發concurrency和並行parallel的區別。
2.與時間有關的錯誤
程式併發執行時,若共享了公共變數,其執行結果將與併發執行程式的相對速度有關,此時即便給定相同的初始條件,也可能會得到不同的結果。
封閉性:若乙個程式的變數與其他程式執行時是不可接觸的,則這個程式執行後的輸出結果一定是其輸入的乙個與時間無關的函式。
3.程序:是指乙個具有獨立功能的程式關於某個資料集合的一次執行活動,程序是程式在處理機上的執行過程和分配資源的基本單位。
程序和程式的區別:(1)程式是指令的有序集合,其本身沒有任何執行的含義,是乙個靜態的概念,而程序是程式在處理機上的一次執行過程,是乙個動態概念;(2)程序是乙個能獨立執行的單位,能與其他程序並行地活動,而程式沒有並行特徵;(3)各個程序在併發執行過程中會產生相互制約關係,程序是競爭計算機系統有限資源的基本單位,也是進行處理機排程的基本單位。
程序和程式的聯絡:程序一定包含乙個程式,因為程式是程序完成功能的邏輯描述;而乙個程式可以對應多個程序,即:如果乙個程式同時執行於若干不同的資料集合上時,它將屬於若干個不同的程序。
4. 讀者-寫者問題
5. 哲學家進餐問題
6. 程序有哪幾種基本的狀態?
對於乙個實際作業系統,程序活動期間至少要區分三個基本狀態:執行、就緒、等待(又稱阻塞、睡眠、掛起)。做如此區分的原因是:如果系統能夠為每乙個程序提供一台處理機,則系統中所有的程序都可以同時執行,但實際上處理機的數目總是少於程序數,則系統中往往只有少數幾個程序(單處理機系統中只有乙個程序)可以真正獲得處理機的控制權。把獲得處理機控制權的程序的狀態稱為執行狀態,把希望獲得處理機控制權但是暫時還沒得到的程序的狀態稱為就緒狀態,把因為某種原因暫時不能執行的程序的狀態稱為等待狀態。
8. 程序控制塊:為了描述乙個程序與其他程序以及系統資源的關係,為了刻畫乙個程序在各個不同時期所處的狀態,人們採用了乙個與程序相聯絡的資料塊,稱為程序控制塊pcb或者程序描述器 process descriptor。當系統建立乙個程序時,必須為它設定乙個pcb,然後根據pcb的資訊對程序實施控制和管理。程序任務完成時,系統撤銷它的pcb,程序也就隨之消亡。
13. 程序的互斥:作業系統中,當乙個程序進入臨界區使用臨界資源時,另乙個程序必須等待,當占用臨界資源的程序退出臨界區後,另一程序才被允許去訪問此臨界資源。我們稱程序之間的這種相互制約關係為互斥。
程序同步是指多個相關程序在執行次序上的協調。這些程序相互合作,在一些關鍵點上可能需要互相等待或互通訊息。
14. 程序與執行緒的比較
執行緒有時也稱為輕量級程序,它是比程序更小的活動單位,它是程序中的乙個執行路徑。乙個程序可以有多個執行路徑即執行緒。 執行緒和程序的主要區別如下:
(1)執行緒是程序的乙個組成部分。乙個程序可以有多個執行緒,而且至少有乙個可執行的執行緒。
(2)程序是資源分配的基本單位,它擁有自己的位址空間和各種資源。執行緒是處理機排程的基本單位,它只能和其他執行緒共享程序的資源,而本身並不具有任何資源。
(3)程序的多個執行緒都在程序的位址空間內活動。這樣,在以執行緒為單位進行處理機排程和切換時,由於不發生資源變化特別是位址空間的變化,因此切換時間較短。而以程序為單位進行處理機排程和切換時,由於涉及到資源轉移及現場保護等問題,將導致切換時間變長和資源利用率降低。
(4)執行緒和程序一樣,都有自己的狀態和相應的同步機制。但是,由於執行緒沒有自己單獨的程式和資料空間,因而不能像程序的程式和資料那樣交換到外存去。
(5)程序的排程和控制大多由作業系統的核心完成,而執行緒的控制既可以由作業系統核心完成,也可以由使用者控制完成。
17. 程序建立的主要過程及其功能:主要功能就是建立乙個新的程序,當作業系統執行程序建立原語時,首先從程序控制塊池中申請乙個pcb結構,然後把相應的表項填入,這樣就形成了乙個程序實體。具體包括:
(1)申請空白pcb(程序控制塊);
(2)為新程序分派資源;
(3)初始化pcb;
(4)將新程序插入就緒佇列。
18.用於程序控制的原語主要有哪幾個?
在作業系統中,用於程序控制的原語主要有建立原語、撤消原語、阻塞原語、喚醒原語。在unix系統中,分別對應fork,exit,sleep,wakeup原語。
建立原語
在實際系統中建立乙個程序有兩種方法:一是由作業系統建立,0#程序就是由作業系統建立的;二是由其他程序建立乙個新的程序。基本操作都是一樣的。建立程序原語總是先為新建程序申請一空白pcb,並為之分配唯一的數字表示符,使之獲得pcb的內部名稱,若該程序所對應的程式不在記憶體中,則應將它從外儲存器調入記憶體,並將該程序有關資訊填入pcb中,然後置該程序為就緒狀態,並將它排入就緒佇列和程序家族佇列中。
撤消原語
撤消程序的實質是撤消程序存在標誌——程序控制塊pcb。一旦pcb被撤消,程序就消亡了。撤消原語的操作過程大致如下:以呼叫者提供的標誌符n為索引,從該程序所在的佇列,將它從該佇列中消去,並撤消屬於該程序的一切「子孫程序」,若有父程序則從父程序pcb中刪除指向該程序的指標,並釋放撤消程序所占用的全部資源,或則將其歸還給其父程序,或則歸還給系統。若被撤消的程序處於執行狀態,應立即中斷該程序的執行,並設定排程標誌為真,以指示該程序被撤消後系統應重新排程。
阻塞原語
阻塞原語的大致工作過程如下:開始時,程序正處於執行狀態,因此首先應中斷cpu執行,並儲存該程序的cpu現場,然後把阻塞狀態賦予該程序,並將它插入到具有相同實體的阻塞佇列中。
喚醒原語
一程序因為等待事件的發生而處於阻塞狀態,當等待的事件完成後,程序又具有了繼續執行的條件,這時就要把該程序從阻塞狀態轉變為就緒狀態。這個工作由喚醒原語來完成。
喚醒原語執行的操作有:先把被喚醒程序從阻塞佇列中移出,設定該程序當前狀態為就緒狀態,然後再將該程序插入到就緒佇列中。
19. unix系統中程序的主要狀態:
執行狀態、就緒狀態、睡眠狀態、建立狀態、僵死狀態。
作業系統第四章
2 分割槽分配演算法 動態分割槽方式,分割槽多 大小差異各不相同,此時把乙個新作業裝入記憶體,更需選擇乙個合適的分配演算法,從空閒分割槽表 鏈中選出一合適分割槽 首次適應演算法ff 迴圈首次適應演算法 最佳適應演算法 最差適應演算法 快速適應演算法 4 動態重定位分割槽分配 有緊湊功能的動態分割槽分...
作業系統第四章
常用排程演算法 先來先服務演算法 fcfs 短程序優先演算法 spf 短剩餘時間優先演算法 srt 最高響應比優先演算法 hrrn 時間片輪轉演算法 rr 和多級反饋演算法 mfq 先來先服務演算法 fcfs 基本思想是按照程序進入就緒佇列的先後次序來分配處理機.採用不可剝奪方式 fcfs演算法很少...
作業系統第四章作業
什麼是臨界資源?什麼是臨界區?對臨界資源的訪問有哪些原則?臨界資源 一次僅允許乙個程序使用的共享資源。臨界區 每個程序中訪問臨界資源的那段程式。訪問原則 空閒讓進,如果有若干程序要求進入空閒的臨界區,一次僅允許乙個程序進入。忙則等待,任何時候,處於臨界區內的程序不可多於乙個。如已有程序進入自己的臨界...