###### tags: `111期中準備` # 作業系統預測(從106開始往後寫 重複就不寫了) *品:我寫的東西有錯幫我改感恩~* *茜:我要先去睡了 預計明早5.繼續 晚安* ## 請說明哪三種方法可將系統呼叫(system call)的參數(parameter)傳遞給作業系統? ![](https://i.imgur.com/UE6gsfs.png) - ==簡寫( register , block , stack)== - 利用 Registers 儲存參數 - 將參數存在 Memory Block 後,把該 block 的起始位址存在一個 register 中,之後將此 register 傳遞給 OS - 利用 system stack 儲存參數,藉由 push 來保存參數,pop 來取出參數 ## Interrupt / trap / exception ![](https://i.imgur.com/aT2tuBf.png) - Interrupt 中斷,通知系統工作已完成,分為外部中斷、內部中斷 - 中斷是系統中由硬體所產生的訊號。調用中斷處理程序來處理中斷的原因; 然後將控制返回到中斷的上下文和指令。 - Trap 由軟體產生的中斷,因為錯誤或不合法所造成的中斷,內部中斷的一種 - 可以用來呼叫作業系統功能(如:發出I/O完成的訊號,以消除對裝置輪詢)或捕獲算數錯誤 - Trap:不合法的使用(/0、overflow);當使用者需要OS服務時,用systemcall呼叫OS執行ISR(品) ## DMA ![](https://i.imgur.com/rncxKvh.png) - (a)DMA傳輸前,CPU把匯流排控制權交給DMA控制器,結束DMA傳輸後,DMA立即把匯流排控制權交回給CPU。(*設備控制器將數據塊從緩衝存儲器直接傳輸到主存儲器,無需 CPU 干預*) - (b)當傳輸結束的時候,裝置就會以中斷的方式通知中央處理器。 - (c ) 停止CPU訪問內存,使內存的效能沒能充分發揮;週期挪用,當有DMA需求時會挪用多個週期。(品) ## IPC (message passing) - direct : - send (P, message) – 向process P 發送消息 - receive(Q, message) – 從process Q 接收消息 - 鏈接是自動建立的 - 一個鏈接只與一對通信進程相關聯 - 每對之間恰好存在一個鏈接 - 鏈接可能是單向的,但通常是雙向的 - indirect : - 從mailbox郵箱(也稱為端口)定向和接收消息(每個郵箱都有一個唯一的 id) - 只有共享郵箱的process才能進行通信 - 僅當進程共享公共郵箱時才建立鏈接 - 一個鏈接可能與許多進程相關聯 - 每對進程可能共享多個通信鏈接 - 鏈接可以是單向的或雙向的 ![](https://i.imgur.com/YkqNQVt.jpg) 字醜見諒(筆誤mobileA->mailboxA)(品) ## process在主記憶體中所佔的空間可分為四個部分 - data segment - 存放global variable及static local variable - text segment - 存放程式指令 - stack - 存放 臨時數據(temporary data) - Function parameters, return addresses, local variables - heap - 動態記憶體配置 - 包含在運行時動態分配的內存(containing memory dynamically allocated during run time)(此為講義說法) ## process state diagram ![](https://i.imgur.com/hI6mcXL.png) ## CPU scheduling 於哪四種時機執行 (哪些事件發生時須做CPU scheduling)?(品) - running->terminated - running->waiting - running->ready - waiting->ready - (茜 講義ppt5 6) 1. Switches from running to waiting state 2. Switches from running to ready state (V 容許preemption) 3. Switches from waiting to ready (V 容許preemption) 4. Terminates ## fork() / exec() - fork() 可能會有以下三種回傳值: - -1: 發生錯誤 - 0: 代表為子程序 - 大於 0: 代表為父程序, 其回傳值為子程序的 ProcessID - fork() 執行次數為2的n次方( 執行n次fork() ) - 每次呼叫 fork 時,就會讓程式行程的數量變成原來的兩倍 - exec() : 幫助建立一個全新的process (華:好像有錯??)(茜:我看到是一個函式的統稱 找不到合適的講法) - exec() :引入另外一個process用來取代原來的process(不一定是全新) - exec() :用systemcall載入特定binary code file到memory中執行(品) ## Linux或Unix環境下C program中,(1) fork() function產生另一process,並且傳回(return) process id,若程式中一敘述為pid = fork(); 請說明pid各種值代表之意義。(2) 請說明exec()之作用。 - (1)-1:發生錯誤,0:代表為子程序,大於0 :代表為父程序,其傳回process id. ( 2 )幫助建立一個全新的進程 replace the process’s memory space with a new program. ## 請說明(a) Multi-Level Queue排班法,(b) 為何此排班法可能會有Starvation現象?(品) - (a) - 1.將原本single ready queue分成許多不同優先權等級之ready queue - 2.queue 與queue之間採fixed priority preemptive scheduling - 3.每個queue可有自己的排班法則 - (b)一旦process被assigned to a queue,就不允許move between queue,而這種方法就會造成starvation (華)![](https://i.imgur.com/G2hVzlg.jpg) ## 從OS角度,解釋或說明(不必翻譯) (a) interrupt vector, (b) privileged instructions, (c) system call 與要求system service API 之差異, (d) DMA, (e) context switch - (a)中斷服務程式的入口位址,幫助作業系統可以根據此尋找中斷處理程式的位址,再依據相應位址去執行中斷處理程式 - (b)可能造成系統重大危害的指令被稱為privilege instructions.只能在kernel mode 下執行,不允許在user mode - (c ) - system call:一種計算機系統程序向操作系統內核請求服務的技術。用戶進程使用系統調用請求操作系統服務。 - system sevice:為程序創建和運行提供了環境,將用戶請求轉換為滿足需求所需的一組系統調用。 - (d)允許電腦內部的硬體子系統(電腦外殼),可以獨立的直接讀寫系統記憶體,而不需要CPU介入處理 - (e)當CPU 要切換到另一個processor時,os要儲存舊process狀態,並載入新的process 狀態 ## 請說明採用最短剩餘時間先做時,CPU burst time如何決定,請說明之。 - (講義ppt5 15) - 與每個進程關聯其下一個 CPU 突發的長度 - 使用這些長度以最短的時間安排流程 - How do we determine the length of the next CPU burst? - ==Could ask the user== - ==Estimate (須和前一個相似)== - 華:行程下一次 CPU burst time設為前幾次CPU burst time的指數平均值(我覺得是這樣) ## 請說明 CPU 從一 process “Switch” 至另一 process 之動作。(品) ![](https://i.imgur.com/VA9Xmgg.png) Context Switch 的發生是因為 interrupt 或程式自己做了 system call,此時程式就會把資源讓出來,等 interrupt 或 system call 完成之後再繼續執行。當程式讓出資源時,作業系統會先將原程式的狀態存進 PCB,再讀入新程式的 PCB,以此類推。 ## 請舉出 Interprocess Communication (IPC) 的兩種做法,並簡略說明之。 ![](https://i.imgur.com/qULN0wX.png) ## 請說明non-uniform memory access - 當系統在執行程式時,會因為資料存放的記憶體位置不同,而產生讀取速度的差異,所以在實行上會盡量將執行的 CPU core 與記憶體排在一起。(妮) ## 請說明Asymmetric 與 Symmetric差異 - Asymmetric 與 Symmetric 兩種,Asymmetric 作業系統會將要執行的程式交給 master,再由 master 分配給其它 CPU core 執行,由於 master 只負責分配任務,所以機器的效能會略為低下;Symmetric 則相反,是所有的 CPU 各自去從 queue 中拉取程式執行,這時就會產生同步問題。(妮) ## 請說明multilevel feedback queue 作為schedualing時設計應該注意事項 - queue 的數量、每個queue 的演算法,考慮程序往上或往下到其他 queue 的時機 ## 在UNIX/Linux作業系統,C program中呼叫fork() function來建立另一process,系統複製parent process給child process,但fork()傳回之 process id不同外,(a) 請說明fork()傳回之 process id有何不同;(b)以下程式執行後,printf()被執行幾次(文字說明你的想法)。 ```C== #include <stdio.h> #include <unistd.h> int main() { fork(); // first fork(); // second fork(); // third printf("Done!\n"); return 0; } ``` -(a)process 如果在那組fork分出去是PID 是 0的話代表他是children process 如果有自己的編碼 則是parents process(b) 第4行時 parent process 會產生一個child1 第五行時,parent 跟child1會產生2個child child2跟child3 第六行時,會再產生四個child ︎ 最後總共有8個process會print