* 用戶界面(User interface) * 程序執行(Program Execution) * I/O 操作(I/O operations) * 文件系統操作(File-system manipulation) * 溝通(Communication) * 錯誤檢測(Error detection) > 資源分配(Resource allocation) 會計(Accounting) 保護和安全(Protection and security) * 保證系統本身的高效運行 ![](https://hackmd.io/_uploads/SJ-6vztOh.png) ## 用戶界面(User interface) 是指人與電腦系統之間的溝通界面,用於協助使用者與系統進行互動、操作和控制。 * CLI(命令行界面) * 從用戶獲取命令並執行它 * Shell:在命令行界面下運行的軟體程序(CSHELL、BASH) * 根據用戶行為和偏好進行調整 * GUI(圖形用戶界面) * 通常是鼠標、鍵盤和顯示器 * 圖標代表文件、程序、操作等 * 界面中對像上的各種鼠標按鈕會導致各種操作 * 大多數係統都有 CLI 和 GUI ## 溝通模式(Communication Models) Communication 可以使用消息傳遞或共享Memory來進行。 ![](https://hackmd.io/_uploads/BJICL_uun.png) 1. 因為Memory protection的關係,即便是傳遞資料的Memory距離很近,也必須先將process A的資料傳遞到OS,再傳到process B 2. 共享Memory的過程可以使用指標或變數來訪問共享記憶體中的數據,進行資料交換和通信。 ## System call和API * System call * 是作業系統提供給應用程式與硬體資源之間進行溝通的介面。 * 正在運行的程序的作業系統接口 * 通過軟件中斷向內核發出顯式請求 * 通常可用作彙編語言指令 * 請求作業系統服務 * 進程控制-中止、創建、終止進程分配/釋放內存 * 文件管理-創建、刪除、打開、關閉文件 * 設備管理-讀取、寫入、重新定位設備 * 信息維護-獲取時間或日期 * 通訊-發送接收消息 * API:應用程序介面 > 是一組定義了軟體組件之間如何互相溝通的規範和工具。 > 提供了一種標準化的方式,使得不同的軟體系統、服務或庫可以彼此交互操作,進行資訊和功能的交換。 > 用戶主要針對API而不是System call進行編程 ➤ 通常由語言庫實現,例如 C 庫 ➤ 一個 API 調用可能涉及零個或多個System call malloc() 和 free() 都使用System call brk() • 數學API 函數,例如abs(),不需要涉及System call ![](https://hackmd.io/_uploads/SkHkC7Yu3.png) ## API:應用程序接口 三個最常見的API: * 用於 Windows 的 Win32 API * http://en.wikipedia.org/wiki/Windows_API * http://msdn.microsoft.com/en-us/library/windows/desktop/ff818516%28v=vs.85%29.aspx * 用於基於 POSIX 的系統的 POSIX API(包括幾乎所有版本的 UNIX、Linux 和 Mac OS X) * POSIX (Portable Operating System Interface for Unix) “Unix 的便攜式操作系統接口” • http://en.wikipedia.org/wiki/POSIX • http://www.unix.org/version4/GS5_APIs.pdf * Java API for the Java virtual machine (JVM) 的 Java API 為什麼使用API? ■ 簡單 ➤ API是為應用程序設計的 ■ 便攜性 ➤ API是統一定義的接口 ■ 效率 並非所有功能都需要操作系統服務或涉及內核 ## System call:傳遞參數 ■ 三種通用方法用於在運行的程序和作業系統之間傳遞參數。 > 在register中傳遞參數 > 將參數以表單形式存儲在Memory中,表單地址作為參數傳遞到register中 > 由程序將參數壓入(存儲)stack,由作業系統彈出stack ## 通過表傳遞參數(Parameter Passing via Table) ![](https://hackmd.io/_uploads/HkoE-Btd2.png)