標籤:

操作系統引論 | 操作系統的用戶介面

操作系統引論 | 操作系統的用戶介面

來自專欄 操作系統筆記

操作系統提供給用戶的由兩種介面:

  • 命令介面:
    • 作業控制語言
    • 鍵盤命令
    • 圖形界面
  • 程序介面:
    • 系統功能調用

命令介面

命令介面是普通用戶與操作系統的介面。

  • 命令介面類型:
    • 聯機用戶介面:
      • 由一組鍵盤操作命令及命令解釋程序組成(通過命令解釋程序對用戶從鍵盤輸入的命令進行檢查命令格式、完成命令的執行)。
    • 圖形介面:
      • 菜單驅動方式、圖符驅動方式(使用滑鼠或者觸摸屏來實現交互)
    • 離線用戶介面:
      • 由一組作業控制語言(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:操作系統 |