---
# System prepended metadata

title: 作業系統預測(從106開始往後寫 重複就不寫了)
tags: [111期中準備]

---

###### 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



