---
tags: 大三筆記
---
# 海大作業系統(上)
> 內容節錄於:蔡國輝教授的課程。
## 測驗檢討
### ch1
#### 1. 作業系統的歸類
作業系統是**軟體程式**,管控電腦的軟硬體資源。
#### 2. Concurrently 與 simultaneously
* Concurrently:事件剛好同時進行。
* Simultaneously:發生事件的時間有**緊密關聯**。
disk controller與network interface controller-> Simultaneously
電腦同時執行多個應用-> Concurrently
西洋棋車輪戰-> Concurrently
目的:OS需同時管理多個程序及同時運作的硬體。
#### 3. [非同步(Asynchronous)與 同步(Synchronous) 及 interrupt](https://medium.com/@hyWang/%E9%9D%9E%E5%90%8C%E6%AD%A5-asynchronous-%E8%88%87%E5%90%8C%E6%AD%A5-synchronous-%E7%9A%84%E5%B7%AE%E7%95%B0-c7f99b9a298a)
* 非同步(Asynchronous):接收到需求,不用一直等到需求完成再執行其他需求
* 同步(Synchronous):必須等待對方完成動作,才能執行其他事情。
差別:發送需求的人是否需要等到需求完成後,才可以執行其他事情。
* **跟CPU無關** → Asynchronous:來源是外部。
如鍵盤、I/O、disk、Device Driver。
* **時序與CPU同步** → Synchronous:CPU執行的指令與程序。
-> Asyn 會使用interrupt(類似External interrupt)。
Synchronous interrupt分為兩類:
* Processor-detected exceptions:執行普通的指令後,發生異常(overflow、out of range、除以零)引發中斷。
Faults(違規):違法操作,比如寫入沒有寫入權限的檔案。
Traps(陷阱):原本在執行的程式,因interrupt被trap到OS中。
* Programmed exceptions:執行特定的指令引發中斷。
[**interrupt**](https://mropengate.blogspot.com/2015/01/operating-system-ch2-os-structures.html)
* #### 過程:
> 發生event → 產生signal → solve
> * Polling
> CPU命令裝置執行 → ==**"CPU等它完成並不斷詢問"**== → 直到收到完成訊號 → CPU處理後續
> * Interrupt
> CPU命令裝置執行 → ==**"CPU去處理其他事情"**== → 設備完成後發出 ==**"中斷"**== → CPU處理後續
* #### 目的:
> 1. 要從一個process到另一個process。
> 2. 跳出無限迴圈。
> 3. 需要反應外界的event(執行ISR)。
> ex. Device需要引起CPU的注意,讓CPU來幫Device做事。
分為External與Internal:
* 外部 External:由CPU周邊(I/O Device)引發
* 內部 Internal:由CPU本身的不合法使用引發(Debug、Divide-by-zero、overflow)
#### 4. 什麼情況下有中斷信號
* 網路線被拔掉(由硬體引發的External interrupt)
* 本身的電腦網卡收到封包(由硬體引發的External interrupt)
#### 5. 一個行程只有20%的時間使用CPU,要讓CPU的使用率達到65%,至少需要載入幾個行程到記憶體
一個行程:$0.8閒置$
兩個行程:$0.8^2閒置$
三個行程:$0.8^3閒置$
n個行程:$0.8^n閒置$
當$0.8^n≤0.35$時,使用率為65%,n即為答案。
#### 6. multi-programming系統
能夠同時執行多個程序的系統
* Passive:透過**事件中斷**,執行多個程序,由OS接受到中斷後切換
* Active:透過**system clock**更換執行的程序,由OS每段時間自主切換。
差別:OS是被動還是主動去切換執行的程序。
<hr>
### ch2
#### 1. User mode 與 Kernel mode
User mode:有限制的模式,避免使用者產生無法回復的錯誤。
Kernel mode:Kernel取得系統的控制權。可以執行特權指令(Privileged Instruction)。
特權指令:I/O instruction、修改Timer、關閉中斷、修改Base/limit register
![](https://i.imgur.com/lahTa87.png)
* 同一個使用者行程,有時會執行使用者程式碼,有時也會執行OS的程式碼。
* 使用者行程執行的時候,不一定都在user mode裡。
user space 與kernel space 是兩塊隔絕的記憶體空間,無法直接引用
透過register、stack、table傳遞
#### 14. 特權指令
Set value of **timer**. Y
Read the clock. Y or N
**Clear memory**. Y or N
Issue a trap instruction. N
**Turn off interrupts**. Y
Modify entries in **device-status** table. Y
Switch from **user to kernel mode**. Y or N
Access **I/O device**. Y
#### 3. 程式設計師,更需要了解API勝過system call。
* System Call : OS專屬, 移植性較差,研究OS必要
* API : 跨越多個OS , 移植性較高,寫程式必要
![](https://i.imgur.com/kwU9RMN.png)
#### 4. write data to memory 並非特權指令
記憶體的保護交由MMU(Memory Management Unit, 內存管理單元)
#### 7. 檔案總管也需要透過system call來操作檔案(改名字)。
#### 8. 打開powerpoint使用那些system call
createProcess(), open(), read()
![](https://i.imgur.com/fQo5F4E.png)
System call分為:
Process Control:fork(), wait()
File Management:open(), read(), write(), close()
Device Management:ioctl()
Information Maintenance:getpid()
Communication:socket()
#### 13. system call 查表
![](https://i.imgur.com/LvLNtDC.png)
%eax 是 x86_32 的 register
%eax == 0x26h 為第38號的系統呼叫:rename
register需要輸入 %ebx(oldname) 與 %ecx(newname)
int 0x80為中斷常式,對應的是system call。
<hr>
### ch3
#### 1. Context switch
從process A 切換到 B 的過程中
kernel memory保存目前running process的狀態PCB
(行程的狀態、CPU register、stack、記憶體相關資訊、已開檔案。)
並載入下一個Process的PCB。
稱為Context switch
去讀取上一次執行時的狀態。
#### 2. fork()
建立程序的新副本,達到多工處理。
* fork()產生兩個獨立的行程。
* 執行的程式與計數器都一樣。
* 起始值一樣,但變數相互獨立。
* local variable經過fork()後,在父子行程間是相互獨立的。
差別:return value of fork()
* For parent, the return value is child’s PID
* For child, the return value is 0
exit():讓OS回收程序所使用的資源。
wait():讓行程等待另一個行程完成才執行,可以避免zombi。
#### 3. 子行程通常會先結束
#### 4. Process的記憶體
![](https://i.imgur.com/0U76gMU.png)
包含stack、heap、data、text。
**stack與heap是動態成長**
#### 5. 行程狀態
![](https://i.imgur.com/yLAXFjH.png)
* running轉變為waiting
I/O:行程等待使用者輸入
Event-Wait:行程發出讀取檔案的要求,行程發出wait()。
* new:將 process 載入記憶體並初始化。
* ready:由於 CPU 的 core 有限,因此 process 在載入之後會先被存放在佇列(ready queue)中等待執行。
* running:程式執行中。
* waiting:程式執行的過程中,會遇到 I/O 需求,此時就會進入等待狀態,等 I/O 需求完成後再回到執行狀態 。
* terminated:程式執行完成,歸還資源。
ready status -> ready queue
waiting status -> device queue
#### 6. OS記錄行程狀態的用途
* 排程(scheduling)時只需考慮ready狀態的行程。
* 可以讓使用者查詢行程狀態
#### 12. importance hierarchy
foreground process, visible process, service process, background process, empty process, 資源緊繃的時候, 由**重要性**來決定從哪一個行程回收資源。
#### 13 zombie and orphan process
![](https://i.imgur.com/1Us2Icr.png)
zombie被收回的過程
* zombie process
child process結束,沒有人去接住他的回傳值,導致child process還卡在process table(不占用CPU與記憶體)
* orphan process
parent process已經終止,但child process還在執行。(無意:父進程崩潰、有意:長時間的服務進程)
<hr>
### ch4
#### 1. 單核心不具備平行處理parallelism
#### 2. thread
OS中運算的最小單位。
* 一個行程可以有多個thread
* 每個thread各有不同的起點與歷程
* 有自己的執行狀態(running, ready, waiting)
* 有自己私有的儲存(local variables)
* 有自己的context (registers, stack, ...)
* 與同屬相同行程的thread 分享data section(static global variable), 檔案
共用Global variables
共用Process的資源:像Heap memory
![](https://i.imgur.com/0U76gMU.png)
#### 3. 兄弟 sibling threads
* sibling threads:同一行程的threads
* 如果是sibling threads,切換thread只需要thread context switch
* 而不同行程的轉換會需要process context switch
#### 4. Virtually all contemporary operating systems support kernel threads.
#### 5. It is possible to create a thread library without any kernel-level support.
透過Thread Libraries提供的API
能夠新增和管理threads。
存在user space 或 kernel-level由OS調用
#### 7. User-Level Thread(ULT)
Kernel 只認得 Process 不知道 Thread
倚靠user space的Thread Libraries
管理threads
優點
* switch 快,無須讓kernel參與
* 任何OS都可,library可以跨平台
缺點
* 一個thread waiting, 整個process waiting
* 同一行程的兩個ULTs,無法被兩個CPU分別執行
<hr>
### ch5
#### 1. Scheduling
* Preemptive:搶先
* FCFS(FIFO):先進先出
1. 公平
2. No Starvation
3. Non-preemptive
![](https://i.imgur.com/2R42eXK.png)
* SJF(Shortest Job First):不可搶先
1. Average waiting time最小
2. 不公平
3. long-burst-time job可能有starvation
4. Non-preemptive
* SRT(Shortest Remaining Time First):搶先
![](https://i.imgur.com/Y2pW2h6.png)
1. 更多的context switch
2. 不公平
3. 排班效率更好
4. starvation
5. preemptive
* Round-Robin:輪流執行time quantum=2
![](https://i.imgur.com/EvFhURt.png)
* Priority Scheduling
1. 不公平
2. 可以Preemptive or Non-Preemptive
3. Starvation
4. 可與RR結合(同樣priority RR)
#### 3. Preemptive system,哪些事件會觸發CPU scheduler?
![](https://i.imgur.com/yLAXFjH.png)
**Preemptive**
* Waiting 🡪 Ready
* Running 🡪 Waiting
* New 🡪 Ready
* Running 🡪 Terminated
有程序進入就需比較優先序
所以只要有進入ready或Running離開,皆會觸發scheduler
**Non-Preemptive**
* Running 🡪 Waiting
* Running 🡪 Terminated
只有Running的程序離開時,才會觸發scheduler
* 優缺點
**Preemptive**
優點:有彈性、效率較高、適用於real-time system和time-sharing system。
缺點:context-switch的次數頻繁、容易使priority低的process發生starvation。
**Non-Preemptive**
優點:公平、可預測
缺點:沒有彈性(工作時間短的需要等待時間長的)、較沒有效率
#### 10. Disk scheduler
Disk scheduler使用Disk queue:被挑中的行程可存取disk
Disk scheduler應該優先挑選CPU bound行程:average waiting(for disk)time比較短
<hr>
### ch5
#### 6. virtual machine
#### 7. I/O-burst 與 CPU-burst
有9個CPU bursts,正常情況下,會有 8 個I/O bursts順利執行完畢。
會進入ready queue 9次以上
![](https://i.imgur.com/dHbc9Mm.png)
#### 13. Solaris Scheduling
![](https://i.imgur.com/veEAopa.png)
#### Multilevel Feedback Queues
![](https://i.imgur.com/3RrZ5GC.png)
<hr>
#### 2021 mid
2. open-source operating system
有利:人人都可以維護與監督(更穩定與安全)、更多的衍伸作品(比如基於linux內核的Android、ubuntu、)
免費的資源能讓電腦公司用更低的成本建構伺服器、開發軟體。
讓用戶不需要花錢就能用穩定的系統。
不利:影響商用或是授權軟體的發展
因為開源系統是免費的,會影響到販賣作業系統的公司。
3. RR priority
7. preemptive, non-preemptive
#### 討論區
![](https://i.imgur.com/Xel1gut.png)
* 使用者程式(User Program):使用者執行的程式或軟體
* 系統程式(System Program):與作業系統相關,用以控制硬體的程式
* 作業系統(Operating System):負責掌控電腦的資源,是使用者跟硬體之間的橋樑
```c=
int main(){
int i;
for(i = 0;i < 3; i++) {
if(fork() == 0) {fork(); fork(); fork()}
}
}
```
9+8x9+8x(9+8x9)=729
## ch1課堂筆記
### [中斷 (Interrupt)](https://cihcih.medium.com/%E4%BD%9C%E6%A5%AD%E7%B3%BB%E7%B5%B1-interrupt-d2fced694da5)
* #### 過程:
> 發生event → 產生signal → solve
> * Polling
> CPU命令裝置執行 → ==**"CPU等它完成並不斷詢問"**== → 直到收到完成訊號 → CPU處理後續
> * Interrupt
> CPU命令裝置執行 → ==**"CPU去處理其他事情"**== → 設備完成後發出 ==**"中斷"**== → CPU處理後續
* #### 目的:
> 1. 要從一個process到另一個process。
> 2. 跳出無限迴圈。
> 3. 需要反應外界的event(執行ISR)。
> ex. Device需要引起CPU的注意,讓CPU來幫Device做事。
#### Interrupt根據來源分為兩類:
**1. 跟CPU無關 → Asynchronous**:如鍵盤、IO、disk、Device Driver。
**2. 跟CPU有關 → Synchronous**:CPU執行的指令與程序。
* **Synchronous:**
> **1. Processor-detected exceptions**:
> CPU執行的指令與偵測狀況
> * **Faults(違規)**:修正錯誤。
> * **Traps(除錯)**:找出錯誤的地方與程式,跟Debugger有關。
> * if 情況可修正->修正
> else -> 行程會被殺掉
>
> **2. Programmed exceptions**:
> 一個軟體指令,專門處理**System Calls**。
* **ISR(Interrupt Service Routine or Interrupt Handler)**
> 1. 保留會使用的暫存器。
> 2. 中斷處理完成:發出EOI(End of interrupt)command
> 給PIC(programmable interrupt controller),讓CPU處理這個Interrupt。
> 4. 為Device提供服務。
> 5. 恢復暫存器。
> 6. 發出Iret指令(Interrupt Return) 代表結束->回復原狀。
---
### Computer System
![](https://i.imgur.com/toq5Jlu.png)
#### Operating System
* 對使用者更友善:順利執行應用程式
* 管理硬體更效率:管理與分配資源
##### **兩種功能:**
> **1. resources allocator**
> 控管所有資源
> **2. control program**
> 管理程序的執行
---
### Computer Startup
Firmware:Bios
---
### Storage Hierarchy
* Caching
* Device Driver
#### **電腦運作模型**
![](https://i.imgur.com/pksPbJl.png)
#### DMA
讓CPU可與週邊裝置的工作同時進行
把週邊裝置的協調交給DMA
#### Cycle Sealing
讓DMA能夠完整控制BUS
避免與CPU之間發生衝突
1. 向CPU申請使用BUS
2. CPU核准
3. 取用BUS的所有權
---
### Process management
#### Program Counter:
> 透過OS管理行程的啟用與關閉
---