文章目錄
本文主要介紹兩部分內容:
1、操作系統如何從加電後啓動到正常運行,然後讓應用程序能夠正常的工作?
2、操作系統如何提供相應的接口,來爲應用提供服務,以及控制外設?這個問題涉及到中斷、異常和系統調用。
一、操作系統的運行機制
OS的啓動過程:計算機未啓動前,操作系統一直存放在硬盤上。計算機加電後,BIOS
首先從一個特定的內存地址開始執行一系列自檢,自檢成功後,把Bootloader
加載到內存中。進而通過Bootloader
將OS加載到內存中,纔可以讓CPU去執行。
簡單來說就是,BIOS負責加載BootLoader,BootLoader負責加載OS。
BIOS,即(Basic Input Output System)
基本IO處理系統)功能:在計算機加載電源後,能夠讓計算機系統開始自檢, 即檢測各種外設。檢測完成後,才能加載相應的軟件進行執行。
- DISK:存放OS。
- BIOS:基本I/O處理系統。
- BootLoader功能:將OS從硬盤加載到內存。
在計算機內存中,一部分內存已經被BIOS佔滿,加電後BIOS首先從一個特定的內存地址(在x86上是0xf000:fff0
)開始執行,進而完成一系列工作,包括POST(加電自檢),當外設都能正常工作,就會把Bootloader加載到內存中。
- 內存地址
CS:IP = 0xf000:fff0
(CS:段寄存器,IP:指令寄存器) - POST:加電自檢,尋找顯卡和執行BIOS。
1.1 BIOS加載Bootloader
加電前Bootloader被放在硬盤的第一個主引導扇區
,方便BIOS查找。一般硬盤的第一個扇區大小爲512個字節。這意味着bootloader僅有512個字節,就可以完成有趣的功能,最主要的功能就是將OS從硬盤放入內存。
1.2 cpu控制權的轉移
由BIOS到bootloader
:當BIOS將bootloader從硬盤放入內存之後,CPU的控制器也隨之移交給bootloader,bootloader接下來會去尋找硬盤起始扇區、硬盤上操作系統的起始扇區、操作系統的長度,將這幾個磁盤塊兒從硬盤讀到內存中。
由bootloader到OS
:bootloader的功能完成之後,將CPU的控制權交給OS。
1.3 OS與外設和應用程序交互
OS與外設和應用程序交互是通過interface
實現的,面向外設通過中斷與IO
處理,面向應用程序通過系統調用
和異常
提供相應的功能。
interface | 來源 | 定義 | 處理時間 | 響應 |
---|---|---|---|---|
系統調用 | 應用程序 | 應用程序主動向操作系統發出服務請求 | 異步或同步 | 等待和持續 |
異常 | 應用程序意想不到的行爲 | 非法指令或其他壞的處理狀態(如:內存出錯) | 同步 | 殺死或重新執行 |
中斷 | 外設 | 來自不同的硬件設備的計時器和網絡的中斷 | 異步 | 持續,對用戶應用程序是透明的 |
爲什麼應用程序不能直接訪問外設,而是由OS來操作?
- 計算機中,內核是被信任的第三方,使用OS操作外設更
安全
。 - 只有內核可以執行
特權指令
。 - 爲了
方便應用程序
。
1.4運行機制的幾個概念
問題1:“指令”與“代碼”有什麼區別?
“指令”
就是處理器能識別並執行的最基本的命令,分爲特權指令和非特權指令。
- 特權指令:如內存清零。
- 非特權指令:如普通的運算指令。
問題2:普通用戶是無法使用特權指令的,那麼cpu是如何判斷當前是否可以執行特權指令?
爲此,引入了cpu的兩種狀態
:
- 用戶態(目態):此時cpu只能執行非特權指令。
- 核心態(管態):特權指令、非特權指令都可以執行。
和心態-->用戶態
的切換:使用程序狀態字寄存器(PSW)
中的某個標誌位來標識當前處理器處於什麼狀態。如0爲用戶態,1爲核心態。
兩種程序:有的程序需要使用特權指令,有的程序只能使用非特權指令,因此計算機系統將程序分爲
內核程序
和普通程序
。
- 內核程序:內核程序是系統的管理者,既可以執行特權指令,也可以執行非特權指令,運行於核心態。
- 應用程序:爲了保證系統的安全運行,普通應用程序只能執行非特權指令,運行在用戶態。
二、操作系統的體系結構
2.1 OS的內核
操作系統中並不是所有的東西都是核心的、並不是所有的東西都是必須存在的。
內核
:內核是計算機上配置的底層軟件
,是操作系統最基本、最核心的部分。
實現操作系統內核功能的程序就是內核程序
。