3.1BIOS
計算機體系結構概述
cpu加電執行的第一條指令是在內存中,內存分成RAM隨機訪問存儲,還有一個ROM只讀存儲,rom中還有一些原來寫入的一些內容,這些內容系統初始化代碼就從那里開始執行
啟動時計算機內存和磁盤布局
加載程序的內存地址空間
加載程序讀操作系統,再把相應的控制權轉到讀進來的操作系統內核代碼上,操作系統就可以開始運行的
BIOS系統調用 (提供功能)
■BIOS以中斷調用的方式 提供了基本的I/O功能
INT 10h:字符顯示
INT 13h:磁盤扇區讀寫
INT 15h:檢測內存大小
INT 16h:鍵盤輸入
■只能在x86的實模式下訪問(限制)
3.2系統啟動流程
主引導記錄著從哪個文件系統里去讀加載程序,有了主引導記錄之后,然后就進到當前哪個分區里面,分區里面又有一個分區的引導扇區,這個活動分區的引導扇區再來加載之前那個加載程序(BootLoader)
CPU初始化
CPU初始化之后,根據代碼段段寄存器和當前指令指針寄存器這兩個的內容,算出來它的第一條指令在內存當中的什么地方
■CPU加電穩定后從0XFFFF0讀第一條指令
CS:IP = 0xf000:fff0
第一條指令是跳轉指令
■CPU初始狀態為16位實模式
CS:IP是16位寄存器
指令指針PC = 16*CS+IP
最大地址空間是1MB(因為是20為的地址)
BIOS初始化過程
■硬件自檢POST
■檢測系統中內存和顯卡等關鍵部件的存在和工作狀態
■查找并執行顯卡等接口卡BIOS,進行設備初始化;(設備自身有初始化程序)
■執行系統BIOS,進行系統檢測;
檢測和配置系統中安裝的即插即用設備;
■更新CMOS中的擴展系統配置數據ESCD(配置表,每次加電都會更新插入和拔出的卡)
■按指定啟動順序從軟盤、硬盤或光驅啟動(設置啟動順序來讀進第一塊扇區)
主引導記錄MBR格式
■啟動代碼:(只有)446字節(因為分區的信息也要存在512字節中)
檢查分區表正確性
加載并跳轉到磁盤上的引導程序
■硬盤分區表:64字節
描述分區狀態和位置
每個分區描述信息占據16字節
■結束標志字:2字節(55AA)
主引導記錄的有效標志
分區引導扇區格式
■跳轉指令:跳轉到啟動代碼(cpu不一樣,指令也是不一樣的)
與平臺相關代碼
■文件卷頭:文件系統描述信息
■啟動代碼:跳轉到加載程序(存在硬盤上可以改動)
■結束標志:55AA
加載程序(bootloader)
配置文件,不同系統這個文件格式是不一樣的,依據這個選擇你啟動的這種參數,比如說我是在正常啟動,還是說我是在安全模式啟動,還是說我是在一個調試狀態下啟動我的系統,那這些區別都會讀出來之后,它導致我在加載內核的時候的一些內核會不一樣,或者說我加載的時候的參數會不一樣,依據配置去加載內核
系統啟動規范
■BIOS
固化到計算機主板上的程序
包括系統設置、自檢程序和系統自啟動程序
BIOS-MBR、BIOS-GPT、PXE(GPT,全局唯一標識分區表,可以描述更多分區(四個以上))
■UEFI(統一可擴展固件接口)
接口標準
在所有平臺上一致的操作系統啟動服務
擴展:可信流
3.3中斷、異常和系統調用比較
背景
■為什么需要中斷、異常和系統調用
在計算機運行中,內核是被信任的第三方
只有內核可以執行特權指令
方便應用程序
■中斷和異常希望解決的問題(用于解決意外的情況)
當外設連接計算機時,會出現什么現象?
當應用程序處理意想不到的行為時,會出現什么現象?
■系統調用希望解決的問題
用戶應用程序是如何得到系統服務?
系統調用和功能調用的不同之處是什么?
內核的進入與退出
中斷、異常和系統調用
■系統調用(system call)
應用程序主動向操作系統發出的服務請求
■異常(exception)
非法指令或者其他原因導致當前指令執行失敗(如:內存出錯)后的處理請求
■中斷(hardware interrupt)
來自硬件設備的處理請求
中斷可以滿足應用程序,外部設備或者程序執行異常的服務請求
中斷、異常和系統調用比較
■源頭
中斷:外設
異常:應用程序意想不到的行為(可能內部也可能外部)
系統調用:應用程序請求操作提供響應方式服務
■響應方式
中斷:異步
異常:同步
系統調用:異步或同步
■處理機制
中斷:持續,對用戶應用程序是透明的
異常:殺死或者重新執行意想不到的應用程序指令
系統調用:等待和持續
中斷處理機制
硬件處理
■在CPU初始化時設置中斷使能標志
依據內部或外部事件設置中斷標志
依據中斷向量調用相應中斷
服務例程
中斷和異常處理機制
軟件
現場保存(編譯器)
中斷服務處理(服務例程)
清除中斷標記(服務例程)
現場恢復(編譯器)
中斷嵌套
■硬件中斷服務例程可被打斷
不同硬件中斷源可能硬件中斷處理時出現
硬件中斷服務例程中需要臨時禁止中斷請求
中斷請求會保持到CPU做出響應
■異常服務例程可被打斷
異常服務例程執行時可能出現硬件中斷
■異常服務例程可嵌套(異常中還可以出現異常)
異常服務例程可能出現缺頁
3.4系統調用
■操作系統服務的編程接口
■通常由高級語言編寫(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)
系統調用示例
000pt;" ? 2???