操作系統引論 | 操作系統的用戶介面
來自專欄 操作系統筆記
操作系統提供給用戶的由兩種介面:
- 命令介面:
- 作業控制語言
- 鍵盤命令
- 圖形界面
- 程序介面:
- 系統功能調用
命令介面
命令介面是普通用戶與操作系統的介面。
- 命令介面類型:
- 聯機用戶介面:
- 由一組鍵盤操作命令及命令解釋程序組成(通過命令解釋程序對用戶從鍵盤輸入的命令進行檢查命令格式、完成命令的執行)。
- 圖形介面:
- 菜單驅動方式、圖符驅動方式(使用滑鼠或者觸摸屏來實現交互)
- 離線用戶介面:
- 由一組作業控制語言(JCL)組成:
- I/O命令;編譯命令;操作命令;條件命令。
- * 程序員在提交作業時會書寫作業說明書,包括作業基本情況描述(作業名、用戶名、編程語言、允許的最長處理時間等)、作業控制描述(各作業步的操作順序、出錯處理等)和作業資源要求描述(要求處理時間、內存大小、外設種類及數量、優先順序等)。
- 命令介面類型與操作系統類型的關係
- 批處理系統 —— 作業控制語言
- 互動式系統(分時操作系統、微機操作系統)—— 鍵盤命令及圖形用戶界面
- 實例操作系統提供的用戶界面
- MS-DOS —— 鍵盤命令、系統功能調用
- Windows —— 圖形用戶界面、系統功能調用(鍵盤命令相對來說使用的比較少)
- Linux UNIX —— 鍵盤命令、圖形用戶界面、系統功能調用
系統調用
應用程序與OS的介面,在應用程序中使用系統調用。
系統功能調用是用戶在程序一級請求操作系統服務的一種手段,它是帶有一定功能號的「訪管指令」。訪管指令是由硬體提供的一條機器指令,但是其功能是由操作系統中的程序完成的,即由軟體方法實現的。
- 系統調用流程
在應用程序中需要在顯示器上顯示一串字元,那麼需要使用C語言中的 printf 函數,在 printf函數中包含了一條訪管指令 0x80, 這條訪問指令其實就是發出一條軟中斷信號,讓 CPU 執行 int 0x80 的中斷處理程序。這條中斷處理程序對應的就是內核中的 system_call 。按照我們之前講解的中斷處理程序的執行過程執行 0x80 的中斷處理程序。
- 系統調用處理程序: system_call()
- 系統調用處理程序 system_call() 執行 int 0x80 異常的處理程序,是所有程序調用的入口點。其所完成的主要工作是:
- 宏SAVE_ALL保護現場;
- 正確性檢查 ;
- 依eax中所包含的系統調用號,調用其對應的服務常式:
call *SYMBOL_NAME(sys_call_table)(0,%eax,4) // eax 存放的是系統調用號
- 系統服務常式結束時,通過宏RESTORE_ALL恢復寄存器;
- 最後通過iret指令返回。
- 系統調用號
- linux中,每個系統調用被賦予一個唯一的系統調用號
- 系統調用號定義在include/asm-i386/unistd.h頭文件中
- 系統調用號格式如下:
#define __NR_restart_syscall 0 #define __NR_exit 1 #define __NR_fork 2 #define __NR_read 3 #define __NR_write 4 #define __NR_open 5 ………… #define __NR_fremovexattr 237
- 系統調用入口表
- 系統調用表記錄了內核中所有已註冊過的系統調用,它是系統調用的跳轉表。
- 系統調用表是一個函數指針數組,表中依次保存所有系統調用的函數指針。
- Linux系統調用表保存在arch/i386/kernel/下的entry.S中。
- 系統調用參數傳遞
- 寄存器傳遞
- eax:系統調用號
- ebx, ecx, edx, esi和edi按照順序存放前五個參數
- 系統調用執行流程
推薦閱讀:
※命令行中四個常見命令的使用
※主存管理 | 分區存儲管理
※設備管理 | 緩衝管理
※文件系統 | 文件目錄管理
※Linux內核
TAG:操作系統 |