--- 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。  ## 比較 | 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控制: 操控以下的  * 檔案管理: 讀寫檔案那些 * 設備管理: 讀、寫、重新分配位址 等等 * 資訊管理: 獲取PCB的資料、系統的資料(系統時間等等) * 通訊: 操控 process 與 process之間的連線,ex. Pipe(), Shmget(), 創建/刪除連線 * 保護: 讀寫檔案的權限 ## Process **傳參數**到 OS 的方法: * 用暫存器(只適用參數少) * 利用 Table 存在記憶體,同時傳 Table 的位址給暫存器 * 存在堆疊中 # CH2-System Structure ## Simple Structure  ``resident system: 常駐程式`` :::info **缺點**: 不安全,非開放原始碼所以很難讓大家一起 enhance 它。 ::: ## Layered Structure  :::info **優點**: 容易debug、維護 **缺點**: 定義層級很困難、內層不能用外層效率很低 ::: ## Micro-kernel Structure 把原本在 kernel 的服務通通移到 User 那,kernel 只需負責呼叫module,大大降低 kernel 大小,因此現在很多**嵌入式系統**是這樣做的。  :::info **優點**: 容量小 **缺點**: 每次通訊都需要用message passing的方式一直copy,速度很慢 ::: ## Modular Structure * 現代OS所使用 * 物件導向,類似Layerd但拆開來更靈活了 ## Virtual Machine 虛擬機軟體可以在 kernel mode 跑,而虛擬機本身是在 user mode。 | 好處 | 說明 | | -------- | -------- | | 保護 | 一台OS被攻擊,另一台依然能好好的。 | | 相容性 | 業界常常需要不同OS、不同版本的問題,透過VM可以輕鬆解決。 | | 研究或開發 | 因為是 run 在 User mode 底下,因此就算被攻擊也不影響硬體。如資安就可以蒐集被攻擊的 log。 | | 計算速度 | 能夠提升雲端計算、Container的效率。 | ### 全虛擬化(Full Virtualization)  ### 半虛擬化(Para Virtualization) 半虛擬化情況下,guest os 一定要客製化,透過管理平台告訴 global zone 要使用哪一個 guest os,可以提高特定情況下的效能。  :::info **Simulation**: 複製一份與硬體一模一樣的功能。 * 透過 CPU Scheduling 達到多個 CPU 共享 * 透過 Virtual Memory 擴大記憶體空間 * 透過 spooling 達到 I/O 設備共享 **Emulator**: 能夠轉換舊版 OS 的指令變成最新版本的指令。 :::
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up