一步步编写操作系统 59 cpu的IO特权级1
在保護模式下,處理器中的“階級”不僅體現(xiàn)在數(shù)據(jù)和代碼的訪問,還體現(xiàn)在指令中。
一方面將指令分級的原因是,有些指令的執(zhí)行對計算機有著嚴(yán)重的影響,它們只有在0特權(quán)級下被執(zhí)行,因此被稱為特權(quán)指令(Privilege Instruction)。比如hlt指令,它可以讓計算機停機,處理器只信任操作系統(tǒng),所以它不得不放在0特權(quán)級下。同類的指令還有l(wèi)gdt,lidt,ltr,popf等,這些對計算機的正常運行起著非同小可的影響,操作系統(tǒng)只有親自執(zhí)行它們才放心。
另一方面體現(xiàn)在I/O讀寫控制上。IO讀寫特權(quán)是由標(biāo)志寄存器eflags中的IOPL位和TSS中的IO位圖決定的,它們用來指定執(zhí)行IO操作的最小特權(quán)級。IO相關(guān)的指令只有在當(dāng)前特權(quán)級大于等于IOPL時才能執(zhí)行,所以它們稱為IO敏感指令(I/O Sensitive Instruction),如果當(dāng)前特權(quán)級小于IOPL時執(zhí)行這些指令會引發(fā)處理器異常。這類指令有in、out、cli、sti。所以你懂的,不止是操作系統(tǒng)可以進行IO端口訪問,用戶進程也是可以的,只是操作系統(tǒng)不允許用戶進程這么做。
平時我們被灌輸?shù)乃枷胧怯脩暨M程無法直接訪問硬件,必須要向操作系統(tǒng)求助,只有高高在上的操作系統(tǒng)才有能力訪問外設(shè)。操作系統(tǒng)的職責(zé)就是管理計算機中的資源,資源包括軟件和硬件,不允許用戶進程直接操作外設(shè),這只是操作系統(tǒng)的一種管理策略,因為這是出于對計算機的保護,誰能保證用戶程序個個都那么善良可靠呢,萬一用戶程序非法使用硬件,這種破壞可是難以估量呢,保護計算機安全是操作系統(tǒng)的責(zé)任,不應(yīng)該讓不受信任的程序有破壞計算機的可能。
我們在很久以前就介紹過eflags寄存器啦,現(xiàn)在來查看下eflags寄存器的IOPL位,如圖
在eflags寄存器中第12~13位便是IOPL(I/O Privilege Level),即IO特權(quán)級,它除了限制當(dāng)前任務(wù)進行IO敏感指令的最低特權(quán)級外,還用來決定任務(wù)是否允許操作所有的IO端口,對,沒錯,是全部IO端口,IOPL位是打開所有IO端口的開關(guān)(用來單獨設(shè)置端口訪問的方式是IO位圖,一會介紹)。每個任務(wù)(內(nèi)核進程或用戶進程)都有自己的eflags寄存器,所以每個任務(wù)都有自己的IOPL,它表示當(dāng)前任務(wù)的要想執(zhí)行全部IO指令的最低特權(quán)級,也就是處理器最低的CPL,只有任務(wù)的當(dāng)前特權(quán)級大于等于IOPL才允許執(zhí)行全部IO指令,即數(shù)值上CPL <= IOPL。
CPL為0時處理器是法力無邊的,所以0特權(quán)級下處理器是不受IO限制的。IOPL如何設(shè)置呢?下節(jié)再說。
總結(jié)
以上是生活随笔為你收集整理的一步步编写操作系统 59 cpu的IO特权级1的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 广东和江苏的GDP总量,均已突破万亿美元
- 下一篇: 金银自古以来都被当成货币,现在白银存在感