---
# System prepended metadata

title: CH2-System Calls & API
tags: [作業系統]

---

---
tags: 作業系統
---
# CH2-System Calls & API
## Interrupt
### 分為下面兩種
| trap | interrupt |
| -------- | -------- |
| 軟體產生 | 硬體產生 |
| 需要OS服務或發生錯誤時 | I/O設備對CPU發出訊號(0=kernel, 1=user)時 |
| ex. 除以0 | ex. I/O complete, errors|

就算沒有 interrput，OS 還是可以透過 trap，在 CPU 設置 timer，實現多任務處理系統。

### 相同之處為
* 都會有 context switch 發生。
* 都屬於 "Interrupt" 類別。
* 中斷發生都會轉為 kernel mode 執行
* 都會有中斷向量存放ISR(中斷處理程式)位址，透過該向量才能進一步執行ISR。

## Subroutine Call
就是 user program 呼叫的子程序
* 由 user process 引起
* 在 user mode 下執行
* Process 內部的控制權轉移

## System call
System call 是 user process 與 OS 溝通的介面。
### 步驟：
1. 當需要權限服務時，User process 會發出 system call。
2. 呼叫後會發出 trap 從 user mode 轉換成 kernel mode。
3. OS 收到 trap 會中斷 Process 並執行 system call。
4. OS 執行完會回到 user mode 並將結果回傳給 user process。

![](https://i.imgur.com/8RRepNF.png =20%x)

## 比較
| System call                      | Subroutine call |
| -------------------------------- | --------------  |
| 在 kernel mode 跑                 | 在 user mode 跑 |
| 會引起 interrupt 和 context switch | 不會有左邊的情況  |
| 參數傳遞較麻煩                      | 參數傳遞較簡單    |
## 通常會通過 API 來呼叫 System Call，因為以下優點:
* 簡單
* 可移植性高
* 效率高, why?
因為寫這個 OS 的人才知道怎樣呼叫System Call 最有效率、
有些如 1+1 這種計算不需要到 System Call。

## System Call 的種類:
* Process控制: 操控以下的
![](https://i.imgur.com/ZUJCOBD.png =60%x)
* 檔案管理: 讀寫檔案那些
* 設備管理: 讀、寫、重新分配位址 等等
* 資訊管理: 獲取PCB的資料、系統的資料(系統時間等等)
* 通訊: 操控 process 與 process之間的連線，ex. Pipe(), Shmget(), 創建/刪除連線
* 保護: 讀寫檔案的權限

## Process **傳參數**到 OS 的方法:
* 用暫存器(只適用參數少)
* 利用 Table 存在記憶體，同時傳 Table 的位址給暫存器
* 存在堆疊中

# CH2-System Structure
## Simple Structure
![](https://i.imgur.com/OE1CkHy.png)
``resident system: 常駐程式``
:::info
**缺點**: 不安全，非開放原始碼所以很難讓大家一起 enhance 它。
:::
## Layered Structure
![](https://i.imgur.com/FhSBFLn.png)
:::info
**優點**: 容易debug、維護
**缺點**: 定義層級很困難、內層不能用外層效率很低
:::

## Micro-kernel Structure
把原本在 kernel 的服務通通移到 User 那，kernel 只需負責呼叫module，大大降低 kernel 大小，因此現在很多**嵌入式系統**是這樣做的。

![](https://i.imgur.com/pvW5xay.png)

:::info
**優點**: 容量小
**缺點**: 每次通訊都需要用message passing的方式一直copy，速度很慢
:::

## Modular Structure
* 現代OS所使用
* 物件導向，類似Layerd但拆開來更靈活了

## Virtual Machine
虛擬機軟體可以在 kernel mode 跑，而虛擬機本身是在 user mode。
| 好處 | 說明 |
| -------- | -------- |
| 保護 | 一台OS被攻擊，另一台依然能好好的。 |
| 相容性 | 業界常常需要不同OS、不同版本的問題，透過VM可以輕鬆解決。 |
| 研究或開發 | 因為是 run 在 User mode 底下，因此就算被攻擊也不影響硬體。如資安就可以蒐集被攻擊的 log。 |
| 計算速度 | 能夠提升雲端計算、Container的效率。 |

### 全虛擬化(Full Virtualization)
![](https://i.imgur.com/1ZzFm6g.png)
### 半虛擬化(Para Virtualization)
半虛擬化情況下，guest os 一定要客製化，透過管理平台告訴 global zone 要使用哪一個 guest os，可以提高特定情況下的效能。
![](https://i.imgur.com/Q39Mg1F.png)

:::info
**Simulation**: 複製一份與硬體一模一樣的功能。
* 透過 CPU Scheduling 達到多個 CPU 共享
* 透過 Virtual Memory 擴大記憶體空間
* 透過 spooling 達到 I/O 設備共享

**Emulator**: 能夠轉換舊版 OS 的指令變成最新版本的指令。
:::
