操作系統概述以及啓動、中斷和系統調用

操作系統概述

什麼是操作系統?

沒有公認定義,可以理解爲起協助作用的控制程序,或者是介於軟硬件之間的資源管理器。

操作系統軟件組成

  1. Shell 命令行接口

    • 通過鍵盤操縱
    • 方便用戶進行命令輸入
  2. GUI 圖形用戶接口

    • WIMP
      視窗(windows)、t圖標(icon)、選單(menu)、指標(pointer)
    • 直接操作、所見即所得
  3. Kernel 操作系統內核

    • 執行各種資源管理等功能

操作系統內核

  • 併發:計算機系統中同時存在多個運行的程序,需要 OS 管理和調度
  • 共享:“同時”訪問(宏觀),互斥共享(微觀:對資源進行隔離保護)
  • 虛擬:高頻率交替(多道程序設計技術),使用戶感覺在專用系統
  • 異步:程序執行時間難於預測,運行環境相同時,os需要保證輸出結果相同

系統類型

  1. UNIX(開放):UNIX BSD、Mac OS等
  2. Linux(與UNIX同一類,API兼容或類似,開放程度更完整):Ubuntu、安卓等
  3. Windows(專用和封閉,圖形用戶接口,易用)

操作系統主要功能:硬件抽象和協調管理

操作系統的演變

  • 單用戶系統
  • 批處理系統
  • 多程序系統
  • 分時
  • 個人計算機:每個用戶一個系統
  • 分佈式計算:每個用戶多個系統

操作系統結構

  1. 簡單結構:無模塊劃分,主要彙編,不可移植
  2. 分層結構:
    • 將操作系統分爲多層(levels)
      • 每層建立在底層之上
      • 最底層(layer 0)是硬件
      • 最高層(layer N)是用戶界面
    • 每一層僅使用更低一層的功能(操作)和服務
  3. 微內核結構(Microkernel):
    • 儘可能把內核功能移到用戶空間
    • 用戶模塊間的通信使用消息傳遞
    • 好處:靈活、安全
    • 缺點:性能
  4. 外核結構(Exokernel):
    • 內核少放東西,資源管理由應用態代碼完成,一個系統支起不同的操作系統服務
    • 讓內核分配機器的物理資源給多個應用程序,並讓每個程序決定如何處理這些資源
    • 程序能鏈接到操作系統庫(libOS)實現了操作系統抽象
    • 保護和控制隔離
  5. VMM(虛擬機管理器,非操作系統結構):
    • 負責和硬件接觸(隔離資源),操作系統負責資源管理
    • 虛擬機管理器將單獨的機器接口轉換成很多的虛擬機,每個虛擬機都是一個原始計算機系統的有效副本,並能完成所有的處理器指令

對於主流操作系統的結構分析

  • Windows
    Windows 屬於比較接近微內核的混合內核結構,這樣的結構有一個特點,那就是驅動是單獨分發的,並不會和 Windows 的微內核混合在一起。因此,其驅動配置比較簡單,無需改動 Windows 內核代碼。

  • Linux
    Linux是一個宏內核的結構,在保留了微內核結構優點的基礎上進行了優化。Linux的驅動和內核是整合在一起的,要適配某種硬件,得把驅動都整合進Linux內核。它是模塊化的、多線程的以及內核本身可調度的操作系統。Linux 僅僅是一個單塊內核,單個內核負責管理 CPU、內存、進程間通信、設備驅動程序、文件系統和系統服務器調用。

  • Mac OS
    Mac OS 的內核(XNU)結合了微內核(Mach)和單片內核的(BSD)的特性。根據蘋果公司的 Github 頁面,XNU 是將卡耐基梅隆大學開發的 Mach 內核和 FreeBSD 組件整合而成的混合內核,加上用於編寫驅動程序的 C++ API。代碼的 BSD 子系統部分在微內核系統中,通常實現爲用戶空間的服務。Mach 部分負責底層工作,例如多任務、內存保護、虛擬內存管理、內核調試支持和控制檯 I/O。

啓動、中斷、異常和系統調用

BIOS啓動固件

基本功能:

  • 基本輸入輸出的程序
  • 系統設置信息
  • 開機後自檢程序
  • 系統自啓程序等

BIOS 系統調用:

  • BIOS 以中斷調用的方式提供了基本的 I/O 功能
    • INT 10h:字符顯示
    • INT 13h:磁盤扇區讀寫
    • INT 15h:檢測內存大小
    • INT 16h:鍵盤輸入
  • 只能在 x86 的實模式下訪問

系統啓動流程

  1. CPU 初始化
    • CPU 加電穩定後從 0XFFFF0 讀第一條指令
      • CS:IP = 0xf000:fff0
      • 第一條指令是跳轉指令
    • CPU 初始狀態爲16位實模式
      • CS:IP 是16位寄存器
      • 指令指針 PC = 16 * CS + IP
      • 最大地址空間是 1MB
  2. BIOS 初始化
    • 硬件自檢 POST
    • 檢測系統中內存和顯卡等關鍵部件的存在和工作狀態
    • 查找並執行顯卡等接口卡 BIOS ,進行設備初始化
    • 執行系統 BIOS ,進行系統檢測,檢測和配置系統中安裝的即插即用設備
    • 更新 CMOS 中的擴展系統配置數據 ESCD
    • 按指定啓動順序從軟盤、硬盤或光驅啓動
  3. 主引導記錄 MBR 格式
    • 啓動代碼:446字節
      • 檢查分區表正確性
      • 加載並跳轉到磁盤上的引導程序
    • 硬盤分區表:64字節
      • 描述分區狀態和位置
      • 每個分區描述信息佔據16字節
    • 結束標誌字:2字節 (55AA)
      • 主引導記錄的有效標誌
  4. 分區引導扇區格式
    • 跳轉指令:跳轉到啓動代碼
      • 與平臺相關代碼
    • 文件卷頭:文件系統描述信息
    • 啓動代碼:跳轉到加載程序
    • 結束標誌:55AA
  5. 加載程序(bootloader)

系統啓動規範

  • BIOS
    • 固化到計算機主板上的程序
    • 包括系統設置、自檢程序和系統自啓動程序
    • BIOS-MBR、BIOS-GPT、PXE
  • UEFI
    • 接口標準
    • 在所有平臺上一致的操作系統啓動服務

中斷、異常和系統調用

  • 系統調用 (system call)
    • 應用程序主動向操作系統發出的服務請求
  • 異常
    • 非法指令或者其他原因導致當前指令執行失敗 (如:內存出錯)後的處理請求
  • 中斷
    • 來自硬件設備的處理請求
  • 區別:
    • 源頭
      • 中斷:外設
      • 異常:應用程序意想不到的行爲
      • 系統調用:應用程序請求操作提供服務
    • 響應方式
      • 中斷:異步
      • 異常:同步
      • 系統調用:同步或異步
    • 處理機制
      • 中斷:持續,對用戶應用程序是透明的
      • 異常:殺死或者重新執行意想不到的應用程序指令
      • 系統調用:等待和持續

中斷處理機制

  • 硬件處理
    • 在 CPU 初始化時設置中斷使能的標誌
      • 依據內部或外部事件設置中斷標誌
      • 依據中斷向量調用相應中斷的服務例程
  • 軟件
    • 現場保存(編譯器)
    • 中斷服務處理(服務例程)
    • 清除中斷標記(服務例程)
    • 現場恢復(編譯器)
  • 中斷嵌套
    • 硬件中斷服務例程可被打斷
      • 不同硬件中斷源可能硬件中斷處理時出現
      • 硬件中斷服務例程中需要臨時禁止中斷請求
      • 中斷請求會保持到 CPU 做出響應
    • 異常處理例程可被打斷
      • 異常服務例程執行時可能出現硬件中斷
    • 異常服務例程可嵌套
      • 異常服務例程可能出現缺頁

系統調用的外界使用

  • 操作系統服務的編程接口
  • 通常由高級語言編寫 (C 或者 C++)
  • 程序訪問通常是通過高層次的 API 接口而不是直接進行系統調用
  • 三種最常用的應用程序編程接口 (API)
    • Win32 API 用於 Windows
    • POSIX API 用於 POSIX-based systems (包括 UNIX, LINUX, Mac OS X的所有版本)
    • Java API 用於 JAVA 虛擬機 (JVM)

系統調用的內部實現

  • 每個系統調用對應一個系統調用號
    • 系統調用接口根據系統調用號來維護表的索引
  • 系統調用接口調用內核態中的系統調用功能實現,並返回系統調用的狀態和結果
  • 用戶不需要知道系統調用的實現
    • 需要設置調用參數和獲取返回結果
    • 操作系統接口的細節大部分都隱藏在應用編程接口後
      • 通過運行程序支持的庫來管理

函數調用和系統調用的不同處

  • 系統調用
    • INT 和 IRET 指令用於系統調用
      • 系統調用時,堆棧切換和特權級的轉換
  • 函數調用
    • CALL 和 RET 用於常規調用
      • 常規調用時沒有堆棧切換

中斷、異常和系統調用的開銷

系統調用比函數調用更安全,但是系統調用的開銷超過函數調用。
中斷、異常和系統調用具體開銷:

  • 引導機制
  • 建立內核堆棧
  • 驗證參數
  • 內核態映射到用戶態的地址空間
    • 更新頁面映射權限
  • 內核態獨立地址空間
    • TLB

內存層次

操作系統的內存管理

操作系統的內存管理方式

  • 操作系統中採用的內存管理方式
    • 重定位 ( relocation )
    • 分段 ( segmentation )
    • 分頁 ( paging )
    • 虛擬存儲 ( virtual memory )
      • 目前多數系統(如 Linux )採用按需頁式虛擬存儲
  • 實現高度依賴硬件
    • 與計算機存儲架構緊耦合
    • MMU(內存管理單元):處理 CPU 存儲訪問請求的硬件
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章