# OS Services
# User Interface
- CLI (Command Line Interface)
- Command Interpreter / Shell
- 不屬於 OS,打的指令不是直接交給 OS 而是交給 Shell,方便使用者使用指令
- 一台電腦根據每個使用者的喜好不同,可以做一些客製化的調整
- Text-based interface
- Examples: Bash, Zsh, PowerShell
- 下指令的介面,允許使用者透過文字指令與系統互動
- 優點:靈活、資源消耗低
- 缺點:學習曲線較陡峭,不適合初學者
- Command Interpreter / Shell
- GUI (Graphical User Interface)
- Visual-based interface
- Examples: Windows, macOS, GNOME, KDE
- 允許使用者透過圖形元素如視窗、圖示和選單與系統互動
- 優點:使用者友善、直觀、適合初學者
- 缺點:資源消耗較高,對進階任務的彈性較低
多數系統兩者兼具備
# Communication Models
這裡的 Communication 指的不只是 Process 與 Process 之間,也可以是跨電腦的 level
不管是哪種,我們都可以透過 memory 的使用把 Communication 切成 Message Passing 和 Shared Memory 兩種方式
# 還有以下幾類核心服務:
- Program Execution
最基本的服務。OS 負責載入並執行程式,並在程式結束後釋放資源,確保使用者或應用程式能在系統上運行 - I/O Operations
提供輸入 / 輸出操作的介面,例如讀取鍵盤輸入、顯示螢幕輸出、存取磁碟檔案。這些都需要透過 OS 的系統呼叫來完成 - File-system Manipulation
管理檔案系統。包括建立、刪除、讀取、寫入檔案,以及目錄的操作。OS 提供一致的介面讓應用程式能方便地操作檔案 - Error Detection
OS 會監控系統運作,偵測並回報錯誤,例如硬體故障、記憶體存取錯誤或程式執行異常,確保系統穩定性 - Resource Allocation
當多個程式同時執行時,OS 需要分配 CPU、記憶體、I/O 裝置等資源,避免衝突並提升效率 - Accounting
OS 會記錄資源使用情況,例如 CPU 時間、記憶體用量,方便系統管理者進行效能分析或計費 - Protection and Security
提供保護機制,避免程式互相干擾,並確保資料安全。包括存取控制、使用者驗證,以及防止惡意程式破壞系統
# OS-Application Interface
# System Calls
- 由 OS 提供的 function call 為唯一的 interface,所以在 OS 上面會有一個 system call layer
- 也是一種 Software Interrupt,這樣才能去改變 Mode Bit 進入 Kernel Mode
- 為了效能,是使用 Assembly Language 所撰寫
- 類型:
- 行程控制 (process control):abort, create, terminate process, allocate/free memory
- 檔案的管理 (file manipulation):create, delete, open, close file
- 裝置的管理 (device manipulation):read, write, reposition device
- 資訊的維護 (information maintenance):get/set time or date, get/set system data
- 通信 (communication):send receive message
- 保護 (protection):control access to resources
![]()
# API (Application Program Interface)
直接使用 System Call 很麻煩所以 User 的程式通常使用 API 而不是直接呼叫 System Call
- 大部分的 API 都是使用 C 語言做成的 Library
- API 有可能包含很多 System Call,也有可能完全沒有 System Call (方便使用,像是一些數學的計算如 abs ()
因為不一定會用到 system call,所以 Call 了 API 不一定會進到 kernel mode,不一定會有 interrupt
- 一些常見 API
- Win32 API for Windows
- POSIX API for POSIX-based Systems (UNIX、 Linux、Mac OS)
- Java API for Java Virtual Machine (JVM)

# [補充] System Call 的參數如何傳遞給 OS?
在執行中的程式與 OS 之間傳遞參數有三種常見方法:
- 用暫存器儲存這些參數
- 將參數用表儲存在記憶體中,同時用一個暫存器記錄此表起始位址並傳給 OS
- 利用 System Stack。要存放參數時將之 Push 到 Stack 再由 OS 從 Stack 中 Pop 取出參數
# OS Structure
- 使用者目標:簡單使用、學習、安全、可靠
- 系統目標:簡單設計、維護、有效率
# Simple OS Architecture
最早期的 OS 幾乎沒有架構,因為那時候最重要的是 User friendly,除了 Driver 與 OS 其它系統架構全部混在一起
- 優點:開發快
- 缺點:定義不清楚、不安全、不好維護
- 例子:早期的 MS-DOS
# Layered OS Architecture

- 使用由上而下 (top-down) 的作法,每一層只能呼叫比自己低層的服務
- 底層 (第 0 層) 為硬體,最高層 (第 N 層) 為使用者介面
- 優點:好 Debug、好維護
- 缺點:
- 效率較差,因為有 layer 可能會有很多 memory copy
- 難去定義層,像是 Memory 可能也會 call 到 I/O
# Microkernel OS

- kernel 的程式碼精簡化
因為只要那些 code 沒有 bug 就好,比較 reliable - Modularize 的概念
Kernel 只負責溝通不同 Module,Kernel 以外的全部在 User Space - 客戶端與各式服務以 message passing 通訊
![]()
- 優點:容易擴展(加到 user space)、容易 porting(移植到其他硬體平台)
- 缺點:系統功能增加而效能降低、processes 溝通需 interrupt 而較慢
# Modular OS Architecture(現大多採用)

- 跟 microkernel OS 的差別:全部都在 kernel space,所以彈性比較高,至少溝通就不需要透過 message passing
- 用到 object-oriented 的概念
- 可載入的模組核心 (loadable kernel modules):
- 每一核心模組都有定義好的介面
- 核心提供主要的服務,其他的服務則在核心執行時動態的被製作
- 其他核心模組可在需要的時候被載入
# Virtual Machine

透過軟體模擬的機制,創造一份與底層硬體一模一樣的功能介面
- 用處:
- 兼容性
有些軟體可能會有特定的執行環境,我們可以用 VM 來解決這個問題 - 開發用
如果用實機研究要一直重新開機,硬體也很有可能會壞掉,但如果用 VM 就沒這個問題了 - honey bound
當作 honey pot 讓外界攻擊… 再由原本的去觀察 - 雲端計算
一台機器會被切成很多台 VM 供大家使用,然後也方便管理
- 兼容性
- 優點:
- 對於 OS 的測試與開發是一個很好的平台工具
- VM 是孤立的,所以在 OS 的開發或測試過程中所引起的不當錯誤也不會對實體系統造成危害
- 測試 OS 可在 VM 上執行而其它 User Program 仍可在其它的 VM 上正常運行不會中止
- 提供完全的 Protection,使用者不會互相影響
- 缺點:
- 製作極為困難
- VM 之間非常的孤立,所以不易溝通及資源共享。
- 效能沒有真正的系統好
# Full-Virtualization

- Guest OS 的程式碼完全不用動,可以直接裝在原本的 OS 上
- OS 完全不會知道自己是裝在 VM 裡面,所以叫做 Full Virtualization
# Para-virtualization

- 會多一個 global zone,通常叫 manager,他知道所有的 VM 的存在
- 另外裝在上面的 OS (guest) 也需要被修改,好處是這樣就可以開一些後門了速度也不一定會比較慢
# Java Virtual Machine

- Java 本身執行的方式就像執行在一個 VM 上,但因為只執行 instruction 所以相對單純
- Java 編譯完後會有自己的 binary code,它不是 x86 也不是 misc,不是任何一個硬體的指令,它是 JVM 上的 bytecode
- 有一些 Translation 上的優化,像 Just-In-Time (JIT) 記錄 Translation 過的 Instruction
# Ref Notes
- Kipper’s Note
- 933yee’s Notes
- 陳品媛的筆記
- Mr. Opengate. OS - Ch2
- WillyWangkaa’s Note

