1. 操作系統啟動過程
① BIOS加電自檢, 查找啟動設備
③ 主引導記錄MBR
④ 硬盤啟動
⑤ OS取得系統控制權,加載OS內核
1.1 BIOS加電自檢,查找啟動設備
BIOS(Basic Input/Output System)是基本輸入輸出系統的簡稱。BIOS 能為電腦提供最低級、最直接的硬件控制與支持,是聯系最底層的硬件系統和軟件系統的橋梁。為了在關機后使 BIOS 不會丟失,早期的 BIOS 存儲在 ROM 中,並且其大小不會超過 64KB;而目前的 BIOS 大多有 1MB 到 2MB,所以會被存儲在閃存(Flash Memory)中。
1.1.1 BIOS的主要作用:
(1)CPU 加電后會首先執行 BIOS 程序,其中 POST(Power-On Self-Test)加電自檢程序是執行的第 一個例行程序,主要是對 CPU、內存等硬件設備進行檢測和初始化。
(2)BIOS 中斷調用即 BIOS 中斷服務程序,是計算機系統軟、硬件之間的一個可編程接口。開機時,BIOS 會通知 CPU 各種硬件設備的中斷號,並提供中斷服務程序。軟件可以通過調用 BIOS 中斷對軟盤驅動器、鍵盤及顯示器等外圍設備進行管理。
(3)BIOS 會根據在 CMOS 中保存的配置信息來判斷使用哪種設備啟動操作系統,並將 CPU 移交給操作系統使用。
1.1.2 BIOS的執行過程:
(1)在CPU加電之后,會把CPU所有寄存器的值設為默認值,除了CS寄存器的值改為0xFFFF,其他寄存器的值都為0,這樣,根據CS 和 IP的值就可以找到指令的物理地址0xFFFF:0x0000,也就是0xFFFF0。
(2)這時CPU就在這個位置開始執行,這里存放的一條無條件跳轉指令JMP,跳轉到BIOS的真正啟動代碼處。
(3)BIOS首先進行POST(Power-On Self Test,加電后自檢),POST的主要檢測系統中一些關鍵設備是否存在和能否正常工作,例如內存和顯卡等設備。如果硬件出現問題,主板會發出不同含義的蜂鳴,啟動中止。如果沒有問題,屏幕就會顯示出CPU、內存、硬盤等信息。
(4)BIOS 程序在執行一些必要的開機自檢和初始化后,會將自己復制到從 0xA0000 開始的物理內存中並繼續執行
(5)然后,BIOS 開始搜尋可引導的存儲設備(即根據用戶指定的引導順序從軟盤、硬盤或是可移動設備中尋找)。如果找到,則將存儲設備中的引導扇區讀入物理內存 0x7C00 處,並跳轉到 0x7C00 繼續執行,從而將 CPU 交給引導扇區中的 Boot 程序。
1.1.3 BIOS總結:
- 不屬於硬件與軟件,屬於固件(以硬件存在的軟件);
- 位置:F0000——FFFFF;
- 功能:引導啟動配置→基本的設備I/O服務→加電自檢和自舉;
1.2 主引導記錄MBR
BIOS按照"啟動順序",把控制權轉交給排在第一位的儲存設備。之后計算機加載該設備中第一塊扇區到0x7c00,大小為512個字節,如果這512個字節的最后兩個字節是0x55和0xAA,表明這個設備可以用於啟動;如果不是,表明設備不能用於啟動,控制權於是被轉交給"啟動順序"中的下一個設備。這最前面的512個字節,就叫做"主引導記錄"(Master boot record,縮寫為MBR)。
1.2.1 主引導記錄的結構
主引導記錄只有512個字節,放不了太多東西。它的主要作用是,告訴計算機到硬盤的哪一個位置去找操作系統。
主引導記錄由以下三部分組成:
(1) 第1-446字節:調用操作系統的機器碼。
在CPU上電之后,若由硬盤啟動,則BIOS將硬盤的主引導記錄(位於0柱面、0磁道、1扇區)讀入7C00處,然后將控制權交給主引導代碼。主引導代碼的任務包括:
① 掃描分區表,找到一個激活(可引導)分區;
② 找到激活分區的起始扇區;
③ 將激活分區的引導扇區裝載到內存0x7C00處;
(2) 第447-510字節:分區表(Partition table),將硬盤分成若干個區。
(3) 第511-512字節:主引導記錄簽名(0x55和0xAA)。
1.2.2 分區表
硬盤分區有很多好處,考慮到每個區可以安裝不同的操作系統,"主引導記錄"因此必須知道將控制權轉交給哪個區。分區表的長度只有64個字節,里面又分成四項,每項16個字節。所以,一個硬盤最多只能分四個一級分區,又叫做"主分區"。
每個主分區16個字節,由6個部分組成:
(1) 第1個字節:如果為0x80,就表示該主分區是激活分區,控制權要轉交給這個分區。四個主分區里面只能有一個是激活的。
(2) 第2-4個字節:主分區第一個扇區的物理位置(柱面、磁頭、扇區號等等)。
(3) 第5個字節:主分區類型。
(4) 第6-8個字節:主分區最后一個扇區的物理位置。
(5) 第9-12字節:該主分區第一個扇區的邏輯地址。
(6) 第13-16字節:主分區的扇區總數。
1.3 硬盤啟動
這時,計算機的控制權就要轉交給硬盤的某個分區了,這里又分成三種情況。
1.3.1 情況A:卷引導記錄
前面提到,四個主分區里面,只有一個是激活的。計算機會讀取激活分區的第一個扇區,叫做"卷引導記錄"(Volume boot record,縮寫為VBR)。"卷引導記錄"的主要作用是,告訴計算機,操作系統在這個分區里的位置。然后,計算機就會加載操作系統了。
1.3.2 情況B:擴展分區和邏輯分區
隨着硬盤越來越大,四個主分區已經不夠了,需要更多的分區。但是,分區表只有四項,因此規定有且僅有一個區可以被定義成"擴展分區"(Extended partition)。所謂"擴展分區",就是指這個區里面又分成多個區。這種分區里面的分區,就叫做"邏輯分區"(logical partition)。
-
計算機先讀取擴展分區的第一個扇區,叫做"擴展引導記錄"(Extended boot record,縮寫為EBR)。它里面也包含一張64字節的分區表,但是最多只有兩項(也就是兩個邏輯分區)。
-
計算機接着讀取第二個邏輯分區的第一個扇區,再從里面的分區表中找到第三個邏輯分區的位置,以此類推,直到某個邏輯分區的分區表只包含它自身為止(即只有一個分區項)。因此,擴展分區可以包含無數個邏輯分區。
但是,似乎很少通過這種方式啟動操作系統。如果操作系統確實安裝在擴展分區,一般采用下一種方式啟動。
1.3.3 情況C:啟動管理器
在這種情況下,計算機讀取"主引導記錄"前面446字節的機器碼之后,不再把控制權轉交給某一個分區,而是運行事先安裝的"啟動管理器"(boot loader),由用戶選擇啟動哪一個操作系統。
Linux環境中,目前最流行的啟動管理器是Grub。
1.4 OS取得系統控制權,加載OS內核
控制權轉交給操作系統后,操作系統的內核首先被載入內存。以Linux系統為例,先載入/boot目錄下面的kernel。內核加載成功后,第一個運行的程序是/sbin/init。它根據配置文件(Debian系統是/etc/initab)產生init進程。這是Linux啟動后的第一個進程,pid進程編號為1,其他進程都是它的后代。
然后,init線程加載系統的各個模塊,比如窗口程序和網絡程序,直至執行/bin/login程序,跳出登錄界面,等待用戶輸入用戶名和密碼。
至此,全部啟動過程完成。
1.5 相關概念
1.5.1 計算機工作模式
所謂工作模式,是指CPU的尋址方式、寄存器大小、指令用法和內存布局等;
(1)實模式:實地址模式,計算機剛剛加電啟動時進入的模式。PC 機加電后,CPU 進入實模式,分段管理內存,最多訪問 1M 地址空間(沒 ; 有打開 A20 的情況下)。
-
程序按照8086尋址方式訪問0h-FFFFh空間(1MB)
-
尋址方式:物理地址(20位)=段地址:偏移地址
-
CPU單任務運行
(2)實模式存取的1MB空間:
-
00000-9FFFF(640k):基本內存
-
A0000-BFFFF(128K):顯卡顯存(存儲顯卡將要處理的數據)
-
C0000-FFFFF(256K):BIOS
C0000-C7FFF:顯卡BIOS
C8000-CBFFF:IDE控制器BIOS
F0000-FFFFF:系統BIOS:完成系統啟動配置;基本的設備I/O服務;系統的加電自檢和自舉。
(3)保護模式:內存保護模式,操作系統啟動以后進入的模式
-
尋址方式:段(32位)和偏移量(32位),尋址4GB空間
-
使用段頁式尋址機制
-
使用了虛擬地址的概念
-
應用程序和操作系統都被保護起來了
-
CPU此時支持多任務
reference
【操作系統原理概述】第三章 操作系統用戶界面https://blog.csdn.net/yzt629/article/details/91894818
實模式和保護模式https://blog.csdn.net/qq_37653144/article/details/82818191
淺談操作系統-啟動過程https://blog.csdn.net/wchstrife/article/details/78879554
計算機是如何啟動的?http://www.ruanyifeng.com/blog/2013/02/booting.html
電腦到底是怎么啟動的,可能遠不像你想的那么簡單https://www.bilibili.com/video/BV1CJ411C72i/?spm_id_from=trigger_reload
操作系統啟動https://blog.csdn.net/weixin_30739595/article/details/95632407
2. 操作系統生成
滿足特定硬件環境和用戶的需要,組裝和構建操作系統的過程
2.1 主要步驟
- 根據硬件環境/用戶要求配置功能模塊和構造參數
- 構建OS的映像
2.2 生成前提
- 操作系統由可拆裝模塊構成
- 有交互式配置工具
- 有映像構建工具
例:Liunx操作系統的生成
1、獲取Liunx內核的源代碼
2、選擇和啟動內核配置程序
3、根據需要配置內核模塊和參數
- 設置對可加載模塊支持
- 設置CPU的類型
- 對普通的一些屬性進行設置
- 並口支持
- 即插即用配置
- 塊設備支持的選項
- 選取TCP/IP networking選項
- 網絡設備支持的選項
- 鼠標設置選項
- 文件系統類型
- 聲卡驅動
- USB接口支持
4、重新編譯新的內核
5、編譯和安裝模塊
6、啟動新內核
- cp bzImage /boot/bzImage (拷貝到目錄下)
- GRUB(配置)
reference
操作系統用戶界面——操作系統生成https://blog.csdn.net/GM_AMRC/article/details/100073558
3. 用戶界面
3.1 用戶界面概念
3.1.1 用戶界面定義
OS提供給用戶控制計算機的機制,又稱用戶接口。
3.1.2 用戶界面分類
(1)操作界面
(2)系統調用(system call,系統功能調用,程序界面)
3.1.3 典型的操作界面
- 圖形界面
- 命令界面
- 批處理命令/程序
操作界面
- 圖形用戶界面(GUI)
窗口,圖標,菜單,按鈕,鼠標(消息,事件)
- 鍵盤命令(COMMAND)
在控制台環境下接收鍵盤輸入的命令
類型:普通命令、批處理程序、shell
3.1.4 批處理
-
普通命令的集合,批執行,由command解釋執行
-
支持變量替換、條件、轉移、循環、注釋等簡單語法
-
*.BAT(windows后綴)
3.1.5 shell
Shell 是一個用 C 語言編寫的程序,它是用戶使用 Linux 的橋梁。Shell 既是一種命令語言,又是一種程序設計語言。
Shell 是指一種應用程序,這個應用程序提供了一個界面,用戶通過這個界面訪問操作系統內核的服務。
-
shell是操作系統與用戶交互的界面
-
表現為通過控制台執行用戶命令的方式
-
shell本身不執行命令,僅僅是組織和管理命令
3.1.6 Bash為現在主流的shell
Bash功能:
- 命令行編輯功能
- 命令和文件名補全功能
- 命令歷史功能
- 命令別名功能
- 提供作業控制功能
- 管道與重定向
- 具有將命令序列定義為功能鍵的功能
- shell腳本編程
3.2 shell腳本編程
腳本(Script)通過類似程序的方式執行具有一定邏輯順序的命令序列完成較復雜的功能和人機交互。
- 腳本程序保護在文本文件中
- 腳本程序是shell命令語句的集合
- shell腳本程序由shell環境解釋執行
- 執行shell腳本文件需要具有可執行屬性:Chmod+x MyScript.sh
運行方法
1、直接運行(用缺省版本的shell運行腳本程序)
2、使用特定版本的shell執行腳本
$bash first_script
- 指定一個特定shell版本(此例是bash)來執行該腳本
- first_script逐行執行腳本中的命令並依次輸出結果。
- 當腳本文件中的命令依次執行完畢,該臨時子shell也自動結束運行,
- 返回到用戶原來使用的shell狀態。
3、在腳本文件首行指定shell
-
在腳本開頭增加一行:
#!/bin/bash ——#!必須頂格,后接shell全路徑
-
可從/etc/shell獲知所有可用shell及其絕對路徑。
reference
操作系統用戶界面——用戶界面https://blog.csdn.net/GM_AMRC/article/details/100075256
Shell 教程https://www.runoob.com/linux/linux-shell.html
4. 系統調用
4.1 系統調用定義
操作系統內核為應用程序提供的服務/函數(使用代碼調用固定函數)
4.2 特點
- 運行於核態,每個系統都有獨一的調用和函數編號,調用過程中有“自願中斷”
4.3 linux系統調用
- 應用程序隱式調用→編譯有INT 80h的代碼→將用戶定義的函數轉義為內核實現→內核實現
1)作用
① 提高了系統的可擴展性
② 增強了系統的可靠性
③ 可移植性強
④ 提供了對分布式系統的支持
⑤ 融入了面向對象技術
2)如何使用
① 客戶只能通過以公有的方式定義的接口使用服務器,這意味着客戶(客戶程序員)唯一的責任是了解接口。
② 服務器(服務器程序設計人員)的責任是確保服務器根據該接口可靠並准確的執行。
③ 服務器設計任務只修改設計的實現細節,而不能修改接口。
這樣程序員就能夠獨立的對客戶和服務器進行改進,對服務器的修改不會對客戶的行為造成意外的影響。
問題
1. 系統BIOS的功能有哪些?
① 系統啟動配置 ② 基本的設備1/0服務 ③ 系統的加電自檢和啟動
2. 計算機加電后執行的第一條指令存放在哪里,有什么特點?
位置:第一條指令的位置在FFFF:0000,也就是物理地址FFFF0
特點:???????
reference
開機后的第一條指令https://blog.csdn.net/u010383242/article/details/50586782
3. 初始引導的目的和主要過程是什么?
目的:把OS核心裝入內存,並使之開始工作接管計算機系統
主要過程:
- 加電,JUMP POST
- BIOS中的啟動程序運行
- 啟動程序
- 讀取0面0道第一扇區內容(1MB)
- 加載MBR中的引導程序
- 引導程序
- 根據相關參數,讀取硬盤指定位置的文件到內存
- 加載硬盤上OS內核,並初始化基本參數
- OS內核:逐步加載OS剩余部分,直至最后完全控制計算機
4. 何為操作系統的生成?簡述Linux內核的生成過程。
操作系統生成的定義:滿足特定硬件環境和用戶的需要,組裝和構建操作系統的過程
Linux內核的生成過程:
1、獲取Linux內核的源代碼
2、選擇和啟動內核配置程序
3、根據需要配置內核模塊和參數
4、重新編譯新的內核
5、編譯和安裝模塊
6、啟動新內核
5. 何為用戶界面?有哪些類別?各有什么特點?
用戶界面:OS提供給用戶控制計算機的機制,又稱用戶接口。
類別:
(1)操作界面
(2)系統調用(system call,系統功能調用,程序界面)
6. 何為shell?有哪4類典型的shell?
何為shell:shell是操作系統與用戶交互的界面,表現為通過控制台執行用戶命令的方式,shell本身不執行命令,僅僅是組織和管理命令;
4類典型的shell:
-
Bourne Again Shell (簡稱bash)
-
Bourne Shell(簡稱sh)
-
C-Shelll(簡稱csh)
-
Korn Shell(簡稱ksh)
7. 何為輸出重定向?舉一個Linux或Windows中的重定向的應用命令或例子。
輸出重定向:指不使用操作系統默認的標准輸出設備顯示信息,而是指定某個文件做為標准輸出設備來存儲文件信息。簡單來說,重定向輸出就是把要輸出的文件信息寫入到一個文件中去,而不是將要輸出的文件信息輸出到控制台(顯示屏)。
linux輸出重定向例子:
- 將標准輸出重定向到文件
$ ls /etc/ >etcdir.log
8. 試述運行shell腳本程序的三種方式?
1、直接運行(用缺省版本的shell運行腳本程序)
2、使用特定版本的shell執行腳本
3、在腳本文件首行指定shell
9. 系統調用與普通用戶態函數比較,有何異同點?
系統調用:
- 使用INT和IRET指令,內核和應用程序使用的是不同的堆棧,因此存在堆棧的切換,從用戶態切換到內核態,從而可以使用特權指令操控設備;
- 依賴於內核,不保證移植性;
- 在用戶空間和內核上下文環境間切換,開銷較大;
- 是操作系統的一個入口點;
- 系統調用由操作系統核心提供,運行於核心態;
函數調用:
- 使用CALL和RET指令,調用時沒有堆棧切換;
- 平台移植性好;
- 屬於過程調用,調用開銷較小;
- 普通的函數調用由函數庫或用戶自己提供,運行於用戶態;
reference
系統調用和函數調用的區別https://blog.csdn.net/qq_31759205/article/details/80602357
給linux系統增加一個系統調用https://blog.csdn.net/qq_41175905/article/details/80529245
10. 何為隱式系統調用?
?????????????????????
11. 試述Linux系統調用(INT 80H)的工作原理?
12. 試述為Linux增加新的系統調用的過程?
-
添加源代碼
第一個任務是編寫加到內核中的源程序,即將要加到一個內核文件中去的一個函數,該函數的名稱應該是新的系統調用名稱前面加上sys_標志;
-
連接新的系統調用
添加新的系統調用后,下一個任務是使Linux內核的其余部分知道該程序的存 在。為了從已有的內核程序中增加到新的函數的連接,需要編輯兩個文件;
-
重建新的Linux內核
為使新的系統調用生效,需要重建Linux的內核。這需要以超級用戶身份登錄;
-
用新的內核啟動系統
要使用新的系統調用,需要用重建的新內核重新引導系統。為此,需要修 改/etc/lilo.conf文件;
-
使用新的系統調用
在應用程序中使用新添加的系統調用。
reference
13. 記錄你電腦啟動過程中輸出的所有信息,理解其表示什么含義?有沒有哪些信息是可以根據用戶配置的不同可以改變或定制的?
win7系統自啟動過程https://wenku.baidu.com/view/591cd58076a20029bd642dea.html
14. 回顧匯編語言中關於寄存器結構和定義部分的知識,理解各個寄存器的基本作用和用法。
匯編語言中寄存器的作用https://blog.csdn.net/cdsdtt123/article/details/41411219