處理器由運算器、控制器、一系列暫存器和快取記憶體構成
兩類暫存器:
常見的控制和狀態暫存器:
指令暫存器(ir):記錄最近取出的指令
程式狀態字(psw:program status word):記錄處理器的執行狀態,如條件碼、模式、控制位等資訊
作業系統具有併發和共享的特徵,因此需要實現保護和控制
需要硬體提供基本的執行機制:
現代處理器通常將cpu狀態設計劃分為兩種、三種或四種
在程式狀態字暫存器psw中專門設定一位,根據執行程式對資源和指令的使用許可權而設定不同的cpu狀態(iopl)
作業系統有兩種cpu狀態:
特權指令:只能由作業系統使用、使用者程式不能使用的指令
啟動i/o,記憶體清零,修改程式狀態字,設定時鐘,允許/禁止中斷,停機
非特權指令:使用者程式可以使用的指令
控制轉移,算術運算,訪管指令,取數指令
x86支援4個處理器特權級別
特權環:r0、r1、r2和r3
目前大多數基於x86處理器的作業系統只用了r0和r3兩個特權級別
cpu狀態之間的轉換:
一條特殊的指令:陷入指令(又稱訪管指令)
提供給使用者程式的介面,用於呼叫作業系統的功能(服務)
例如:int,trap,syscall,sysenter/sy***it
暫存器名稱
eflags
標誌位第12、13位iopl是輸入輸出特權級位,在當前任務的特權級cpl(current privilege level,cs段暫存器的乙個兩位字段,用以指明cpu的當前特權級)高於或等於輸入輸出特權級時,就可以執行像in、out、ins、outs、sti、cli和lock等指令而不會產生異常13(即保護異常),在當前任務特權級cpl為0時,popf(從棧中彈出至標誌位)指令和中斷返回指令iret可以改變iopl欄位的值
gdtr
全域性描述符表暫存器gdtr(global descriptor table register),是48位暫存器,用來儲存全域性描述符表(gdt)的32位基位址和16位gdt的界限
idtr
中斷描述符表暫存器idtr(interrupt descriptor table register),是48位暫存器,用來儲存中斷描述符表(idt)的32位基位址和16位idt的界限
ldtr
區域性描述符表暫存器ldtr(global descriptor table register),是16位暫存器,儲存區域性描述符表ldt段的選擇符
tr任務狀態暫存器tr(task state register)是16位暫存器,用於儲存任務狀態段tss段的16位選擇符
中斷與異常機制是cpu對系統發生的某個事件作出的一種反應
cpu暫停正在執行的程式,保留現場後自動轉去執行相應事件的處理程式,處理完成後返回斷點,繼續執行被打斷的程式(隨機,自動,可恢復)
主要作用:
中斷的引入:為了支援cpu和裝置之間的並行操作
i/o中斷,時鐘中斷,硬體故障
異常的引入:表示cpu執行指令時本身出現的問題
系統呼叫,頁故障/頁錯誤,保護性異常,斷點指令,其他程式性異常(如算數溢位等)
類別原因
非同步/同步
返回行為
中斷(interrupt)
來自i/o裝置、其他硬體部件
非同步總是返回到下一條指令
陷入(trap)
有意識安排的
同步返回到下一條指令
故障(fault)
可恢復的錯誤
同步返回到當前指令
終止(abort)
不可恢復的錯誤
同步不會返回
硬體:中斷/異常響應
捕獲中斷源發出的中斷/異常請求,以一定方式響應,將處理器控制權交給特定的處理程式
軟體:中斷/異常處理程式
識別中斷/異常型別並完成相應的處理
在每條指令執行週期的最後時刻掃瞄中斷暫存器,檢視是否有中斷訊號
中斷處理程式:設計作業系統時,為每一類中斷/異常事件編好相應的處理程式,並設定好中斷向量表
以裝置輸入輸出中斷為例:
cpu開始為軟體處理中斷做準備,處理器狀態被切換到核心態,在系統棧中儲存被中斷程式的重要上下文環境,主要是程式計數器pc、程式狀態字psw(硬體)
中斷處理程式開始工作,在系統棧中儲存現場資訊,檢查i/o裝置的狀態資訊,操縱i/o裝置或者在裝置和記憶體之間傳送資料等等(軟體)
中斷處理結束時,cpu檢測到中斷返回指令,從系統棧中恢復被中斷程式的上下文環境,cpu狀態恢復成原來的狀態,psw和pc恢復成中斷前的值,cpu開始乙個新的指令週期(硬體)
x86處理器:
中斷控制器(pic或apic)
負責將硬體的中斷訊號轉換為中斷向量,並引發cpu中斷
實模式:中斷向量表(interrupt vector)
存放中斷服務程式的入口位址
保護模式:中斷描述符表(interrupt descriptor table)
採用門(gate)描述符資料結構表示中斷向量
門描述符:描述控制轉移的入口點
包括任務門(task gate),中斷門(interrupt gate),陷阱門(trap gate),呼叫門(call gate)
中斷門和陷阱門
指向段選擇符,給出中斷/異常程式的段內偏移量
通過中斷門後系統會自動禁止中斷,通過陷阱門則不會
系統呼叫:使用者在程式設計時可以呼叫的作業系統功能
系統呼叫是作業系統提供給程式設計人員的唯一介面
使cpu狀態從使用者態陷入核心態
每個作業系統都提供幾百種系統呼叫(程序控制、程序通訊、檔案使用、目錄操作、裝置管理、資訊維護等)
中斷/異常機制
支援系統呼叫服務的實現
選擇一條特殊指令:陷入指令(亦稱訪管指令)
引發異常,完成使用者態到核心態的切換
系統呼叫號和引數
每個系統呼叫都事先給定乙個編號(功能號)
系統呼叫表
存放系統呼叫服務例程的入口位址
將使用者程式的引數傳遞給核心:
高階語言視角:
#include
int main() ;
write(1, string, 7);
return
0;}
組合語言視角:
.section .data
output:
.ascii 「hello!\n」
output_end:
.equ len, output_end - output
.section .text
.globl _start
_start:
movl $4, %eax
movl $1, %ebx
movl $output, %ecx
movl $len, %edx
int$0x80
end:
movl $1, %eax
movl $0, %ebx
int$0x80
當cpu執行到特殊的陷入指令時:
陷入指令選擇128號
int $0x80
門描述符
系統初始化時:對idt表中的128號門初始化
描述符的2、3兩個位元組:核心**段選擇符
0、1、6、7四個位元組:偏移量(指向system_call())
門型別:陷阱門
dpl:3,與使用者級別相同
系統執行int $0x80指令:
中斷發生後os底層工作步驟:
作業系統原理 作業系統概述
1.2 作業系統的定義和作用 1.3 作業系統的主要特性 1.4典型作業系統的架構 1.5 作業系統的分類 假設有乙個簡單的c語言程式 helloworld,我們通過這個簡單程式的執行過程來看一下作業系統對這個程式的過程有哪些支援!include intmain int argc,char ar 這...
作業系統 第二章 作業系統基礎操作
計算機體系結構概述 計算機記憶體和硬碟布局 開機順序 背景中斷 異常和系統呼叫相比較 中斷和異常處理機制 系統呼叫概念 系統呼叫的實現 程式呼叫與系統呼叫的不同之處開銷 2 disk 存放os 3 bios 存放i o處理系統 4 bios 載入os到記憶體中。5 post 加電自檢 尋找顯示卡和執...
作業系統原理 章節測試 作業系統原理
第一章 單元測試 1 單選題 允許多個使用者將若干個作業提交給計算機系統集中處理的作業系統稱為 選項 a 分時作業系統 b 實時作業系統 c 網路作業系統 d 批處理系統 答案 批處理系統 2 單選題 是指兩個或兩個以上的活動或事件在同一時間間隔內發生。選項 a 共享 b 並行 c 併發 d 同步 ...