Linu操作系統(tǒng)分析與實(shí)踐第二講:計(jì)算機(jī)系統(tǒng)硬件基礎(chǔ)_第1頁
Linu操作系統(tǒng)分析與實(shí)踐第二講:計(jì)算機(jī)系統(tǒng)硬件基礎(chǔ)_第2頁
Linu操作系統(tǒng)分析與實(shí)踐第二講:計(jì)算機(jī)系統(tǒng)硬件基礎(chǔ)_第3頁
Linu操作系統(tǒng)分析與實(shí)踐第二講:計(jì)算機(jī)系統(tǒng)硬件基礎(chǔ)_第4頁
Linu操作系統(tǒng)分析與實(shí)踐第二講:計(jì)算機(jī)系統(tǒng)硬件基礎(chǔ)_第5頁
已閱讀5頁,還剩159頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

Linux操作系統(tǒng)分析與實(shí)踐

第二講:計(jì)算機(jī)系統(tǒng)硬件基礎(chǔ)

《Linux標(biāo)作系就合新寫實(shí)踐》錦程毫世小姐

讓京大考

二零零,?耳未等

*致謝:感謝Intel對本課程項(xiàng)目的賽助

S"Q孝

本講主要內(nèi)袞

中央處理器(CPU)

存儲系統(tǒng)

中斷機(jī)制

I/O系統(tǒng)

時鐘以及時鐘隊(duì)列

Linux啟動過程

SMP及多核技術(shù)

繆北Q、芽

操作系統(tǒng)的硬件環(huán)境

討論操作系統(tǒng)對運(yùn)行硬件環(huán)境的要求

討論操作系統(tǒng)設(shè)計(jì)者考慮的硬件問題

?中央處理器(CPU)

?存儲系統(tǒng)

?中斷機(jī)制

?I/O系統(tǒng)

?時鐘以及時鐘隊(duì)列

圖此Q孚

一、概述

任何系統(tǒng)軟件都是硬件功能的延伸

操作系統(tǒng)直接依賴于硬件條件

OS的硬件環(huán)境以較分散的形式同各種管理

相結(jié)合

實(shí)現(xiàn)操作系統(tǒng)時必須理解的

計(jì)算機(jī)基本結(jié)構(gòu)

操作系統(tǒng)管理的重要資源

計(jì)算機(jī)系統(tǒng)的組成

..計(jì)..篝機(jī)系統(tǒng)JI

硬件系統(tǒng)I軟件系統(tǒng)I

、

t系

中央處理器(CPU)

專門設(shè)計(jì)了一系列基本機(jī)制:

-具有特權(quán)級別的處理器狀態(tài),能在不同

特權(quán)級運(yùn)行的各種特權(quán)指令

-硬件機(jī)制使得OS可以和普通程序隔離

實(shí)現(xiàn)保護(hù)和控制

圖此Q孚

處理器由運(yùn)算器、控制器、一系列的寄

存器以及高速緩存構(gòu)成

?運(yùn)算器實(shí)現(xiàn)指令中的算術(shù)和邏輯運(yùn)算,是

計(jì)算機(jī)計(jì)算的核心

?控制器負(fù)責(zé)控制程序運(yùn)行的流程,包括取

指令、維護(hù)CPU狀態(tài)、CPU與內(nèi)存的交互等

等圖此Q孚

?寄存器是指令在CPU內(nèi)部作處理的過程中暫存數(shù)據(jù)、

地址以及指令信息的存儲設(shè)備

在計(jì)算機(jī)的存儲系統(tǒng)中它具有最快的訪問速度

-高速緩存處于CPU和物理內(nèi)存之間

一般由控制器中的內(nèi)存管理單元(MMU:Memory

ManagementUnit)管理

訪問速度快于內(nèi)存,低于寄存器

利用程序局部性原理使得高速指令處理和低速內(nèi)存

訪問得以匹配,從而提高CPU的效率榛比/j,改

處理器中的寄存器

?寄存器提供了一定的存儲能力

?速度比主存快得多

?造價高,容量一般都很小

兩類寄存器:

?用戶可見寄存器,高級語言編譯器通過算法分

配并使用之,以減少程序訪問主存次數(shù)

?控制和狀態(tài)寄存器,用于控制處理器的操作

由OS的特權(quán)代碼使用,以控制其他程序的執(zhí)行

用戶可見寄存器

?機(jī)器語言直接引用

?包括數(shù)據(jù)寄存器、地址寄存器以及條件碼寄存器

?數(shù)據(jù)寄存器(dataregister)又稱通用寄存器

主要用于各種算術(shù)邏輯指令和訪存指令

?地址寄存器(addressregister)用于存儲數(shù)據(jù)及

指令的物理地址、線性地址或者有效地址,用于

某種特定方式的尋址。如indexregister

segmentpointer、stackpointer

?條件碼寄存器保存CPU操作結(jié)果的各種標(biāo)記位

如算松算產(chǎn)生的溢出、符號等為

JbQ、孽

控制和狀杰寄存器

?用于控制處理器的操作

?大部分對于用戶是不可見的

?一部分可以在某種特權(quán)模式(由OS使用)下訪問

常見的控制和狀態(tài)寄存器:

?程序計(jì)數(shù)器(PC:ProgramCounter),記錄將要取出的

指令的地址

?指令寄存器(IR:InstructionRegister),包含最近取出的

指令

?程序狀態(tài)字(PSW:ProgramStatusWord),記錄處理器

的運(yùn)行模式信息等等

1.2.特權(quán)指令和非特權(quán)指令

特權(quán)指令:只能由操作系統(tǒng)使用的指令

?使用多道程序設(shè)計(jì)技術(shù)的計(jì)算機(jī)指令系統(tǒng)必須要區(qū)

分為特權(quán)指令和非特權(quán)指令

?處理器通過特殊的機(jī)制將處理器狀態(tài)切換到操作系

統(tǒng)運(yùn)行的特權(quán)狀態(tài)(管態(tài))

?CPU如何知道當(dāng)前運(yùn)行的是操作系統(tǒng)還是一般應(yīng)用

軟件?有賴于處理器狀態(tài)的標(biāo)識

V爹北林學(xué)

1.3.處理器的狀態(tài)

根據(jù)運(yùn)行程序?qū)Y源和機(jī)器指令的使用權(quán)限將處理器設(shè)

置為不同狀態(tài)

多數(shù)系統(tǒng)將處理器工作狀態(tài)劃分為管態(tài)和目態(tài)

管態(tài):操作系統(tǒng)管理程序運(yùn)行的狀態(tài),較高的特權(quán)級別,

又稱為鼻權(quán)態(tài)(特態(tài))、核心態(tài)、系統(tǒng)態(tài)

目態(tài):用戶程序運(yùn)行時的狀態(tài),較低的特權(quán)級別,又稱

為普通態(tài)(普態(tài))、用戶態(tài)

有些系統(tǒng)將處理器狀態(tài)劃分核心狀態(tài)、管理狀態(tài)和用

戶程序狀態(tài)(目標(biāo)狀態(tài))三種

圖此Q培

實(shí)例:x86系列處理器(1)

?386、486、Pentium系列都支持4個處理器特權(quán)

級別(特權(quán)環(huán):RO、RI、R2*R3)

?從R0到R3特權(quán)能力依次降低

?R0相當(dāng)于雙狀態(tài)系統(tǒng)的管態(tài)

?R3相當(dāng)于目態(tài)

?R1和R2則介于兩者之間,它們能夠運(yùn)行的指

令集合具有包含關(guān)系:

【R03/RI2IR22IR3

圖此Q孚

實(shí)例:x86系列處理器(2)

各個級別有保護(hù)性檢查(地址校驗(yàn)、I/O限制)

特權(quán)級別之間的轉(zhuǎn)換方式不盡相同

四個級別運(yùn)行不同類別的程序:

?R0-運(yùn)行操作系統(tǒng)核心代碼

■R1-運(yùn)行關(guān)鍵設(shè)備驅(qū)動程序和I/O處理例程

■R2-運(yùn)行其他受保護(hù)共享代碼,如語言系統(tǒng)運(yùn)行環(huán)境

?R3-運(yùn)行各種用戶程序

現(xiàn)有基于x86處理器的操作系統(tǒng),多數(shù)UNIX、Linux以及

Windows系歹4大都只用了R0和R3兩個特權(quán)級別

14程序狀態(tài)字PSW

(ProgramStatusWord)

在PSW中專門設(shè)置一位,根據(jù)運(yùn)行程序使用指令

的權(quán)限而設(shè)置CPU狀態(tài)

?CPU的工作狀態(tài)碼——指明管態(tài)還是目態(tài),用來

說明當(dāng)前在CPU上執(zhí)行的是操作系統(tǒng)還是一般用

戶,從而決定其是否可以使用特權(quán)指令或擁有其

他的特殊權(quán)力

?條件碼一反映指令執(zhí)行后的結(jié)果特征

?中斷屏蔽碼——指出是否允許中斷

圖此Q孚

例:微處理器M68000的程序狀態(tài)享

1111119876543210

543210

IT聊I岫S唧唧唧唧口I"I。唧唧唧螂X|N|Z1

條件位:

C:進(jìn)位標(biāo)志位V:溢出標(biāo)志位

Z:結(jié)果為零標(biāo)志位N:結(jié)果為負(fù)標(biāo)志位

10-12:三位中斷屏蔽位

S:CPU狀態(tài)標(biāo)志位,為1處于管態(tài),為0處于目態(tài)

T:陷阱(Trap)中斷指示位為1,

在下一條指令執(zhí)行后引起自陷中斷

械處理器Pentium的程序狀忠孝

31222120191817161514131211109876543210

VV

IAVRN100D1TSZApc

11A0U041

DCMFTPLFFFFFFFFF

PF

CF:進(jìn)位標(biāo)志位標(biāo)準(zhǔn)條件位:

ZF:結(jié)果為零標(biāo)志位TF:陷阱標(biāo)志位

SF:符號標(biāo)志位IF:中斷允許(中斷屏蔽)標(biāo)志位

OF:溢出標(biāo)志位VIF:虛擬中斷標(biāo)志位

VIP:虛擬中斷待決標(biāo)志位

IOPL:IO特權(quán)級別

圖此Q孚

CPU狀忠的轉(zhuǎn)換

目態(tài)f管態(tài)

唯一途徑是中斷

管態(tài)f目態(tài)

設(shè)置PSW(修改程序狀態(tài)字)可實(shí)現(xiàn)

二,存儲系統(tǒng)

支持OS運(yùn)行硬件環(huán)境的一個重要方面:

?作業(yè)必須把它的程序和數(shù)據(jù)存放在內(nèi)存中才能運(yùn)行

?多道程系統(tǒng)中,若干個程序和相關(guān)的數(shù)據(jù)要放入內(nèi)存

操作系統(tǒng)要管理、保護(hù)程序和數(shù)據(jù),使它們不至于受

到破壞

?操作系統(tǒng)本身也要存放在內(nèi)存中并運(yùn)行

圖此Q孚

2.L存儲器的類型

半導(dǎo)體存儲器實(shí)現(xiàn)內(nèi)存

?存儲器芯片的內(nèi)部組織結(jié)構(gòu)

?靜態(tài)存儲器(SRAM)

?異步動態(tài)隨機(jī)存儲器(DRAM)

?同步動態(tài)隨機(jī)存儲器(SDRAM)

>雙倍數(shù)據(jù)速率SDRAM(DDRSDRAM)(開放標(biāo)準(zhǔn))

ARambus公司的SDRAM

存儲器的類型

只讀型存儲器

?ROM(Read-OnlyMemory):只能從其中讀取數(shù)據(jù),但不

能隨意用普通方法寫入數(shù)據(jù)(寫入數(shù)據(jù)只能用特殊方法)

-在微機(jī)中,一些常駐內(nèi)存的模塊以微程序形式固化在

ROM中,如:PCBIOS和CBASIC解釋程序被固化于ROM

?PROM:可編程只讀存儲器,使用特殊PROM寫入器寫入數(shù)

據(jù)

?EPROM:電可擦寫可編程只讀存儲器,用特殊的紫外線光

照射此芯片,以“擦去”信息,恢復(fù)原來狀態(tài),再使用特殊

EPROM寫入器寫入數(shù)據(jù)

?閃存(flashmemory)片

2.2.存儲器的層次結(jié)構(gòu)

存儲系統(tǒng)設(shè)計(jì)三個問題:

容量、速度和成本

?容量:需求無止境

?速度:能匹配處理器的速度

?成本問題:成本和其他部件相比應(yīng)在合適范圍之內(nèi)

容量、速度和成本

?三個目標(biāo)不可能同時達(dá)到最優(yōu),要作權(quán)衡

?存取速度快,每比特價格高

?容量大,每比特價格越低,同時存取速度也越慢

解決方案:采用層次化的存儲體系結(jié)構(gòu)

?當(dāng)沿著層次下降時

?每比特的價格將下降,容量將增大

?速度將變慢,處理器的訪問頻率也將下降

卷此Q厚

層次彳七的存儲體系結(jié)構(gòu)

TypicalaccesstimeTypicalcapacity

1nsecRegisters<1KB

2nsecCache1MB

10nsecMainmemory64-512MB

10msecMagneticdisk5-50GB

100secMagnetictape20-100GB

存儲訪問局部性原理

提高存儲系統(tǒng)效能關(guān)鍵點(diǎn):程序存儲訪問局部性原理

?程序執(zhí)行時,有很多的循環(huán)和子程序調(diào)用,一旦進(jìn)入

這樣的程序段,就會重復(fù)存取相同的指令集合

?對數(shù)據(jù)存取也有局部性,在較短的時間內(nèi),穩(wěn)定地保

持在一個存儲器的局部區(qū)域

處理器主要和存儲器的局部打交道

在經(jīng)過一段時間以后,使用的代碼和數(shù)據(jù)集合會改變

23、存儲分塊

?存儲最小單位:,,二進(jìn)位”,包含信息為o或1

?最小編址單位:字節(jié),一個字節(jié)包含八個二進(jìn)位

主流個人電腦

-主存:128MB?512MB之間

-輔助存儲器:在20GB?70GB

工作站、服務(wù)器

-主存:512MB?4GB之間

-硬盤容量:數(shù)百GB

為簡化分配和管理,存儲器分成塊,稱一個物理頁(Page)

?塊的大?。?12B、IK.4K、8K

2.4.存儲保護(hù)設(shè)施

對主存中的信息加以嚴(yán)格的保護(hù),使操作系統(tǒng)及其

他程序不被破壞,是其正確運(yùn)行的基本條件之一

多用戶,多任務(wù)操作系統(tǒng):

os給每個運(yùn)行進(jìn)程分配一個存儲區(qū)域

問題:

?多個程序同時在同一臺機(jī)器上運(yùn)行,怎樣才能互不

侵犯?

?如何處理重定位?

保護(hù)的硬件支持

解決方案依賴于配有特殊硬件的CPU

硬件可提供如下功能:

?界地址寄存器(界限寄存器)

?存儲鍵

?地址轉(zhuǎn)換機(jī)制

圖此Q孚

界地址寄存器(界喔寄存器)

?界地址寄存器被廣泛使用的一種存儲保護(hù)技術(shù)

?機(jī)制比較簡單,易于實(shí)現(xiàn)

實(shí)現(xiàn)方法:

?在CPU中設(shè)置一對下限寄存器和上限寄存器

存放用戶作業(yè)在主存中的下限和上限地址

?也可將一個寄存器作為基址寄存器,另一寄存器作為

限長寄存器(指示存儲區(qū)長度)

?每當(dāng)CPU要訪問主存,硬件自動將被訪問的主存地址與

界限寄存器的內(nèi)容進(jìn)行比較,以判斷是否越界

?如果未越界,則按此地址訪問主存,否則將產(chǎn)生程序

中斷——越界中斷(存儲保護(hù)中斷)

Registers

when

program2

isrunning

Registers

y-Limit-2

when

program1User-2data

isrunningy—Base-2

Limit-?^

Base-2、User-1data

?一‘Lirnii-1

Limit-1Userprogram

Odoc-1.y—Base-1

Operating

System

界地址寄存器(b)

存儲保護(hù)技術(shù)鎏業(yè)Q、芽

存儲鍵

?每個存儲塊有一個由二進(jìn)位組成的存儲保護(hù)鍵

?一用戶作業(yè)被允許進(jìn)入主存,OS分給它一個唯

一的存儲鍵號

?并將分配給該作業(yè)各存儲塊存儲鍵也置成同樣

鍵號

?當(dāng)OS挑選該作業(yè)運(yùn)行時,OS將它的存儲鍵號放

入程序狀態(tài)字PSW存儲鍵(“鑰匙”)域中

?每當(dāng)CPU訪問主存時,都將該主存塊的存儲鍵

與PSW中的“鑰匙”進(jìn)行比較

?如果相匹配,則允許訪問,否則,拒絕并報警

地址轉(zhuǎn)換機(jī)制

同時有多個程序在內(nèi)存

程序在內(nèi)存的位置不是固定的而是隨機(jī)

用戶程序A用戶程序B

總線

物理地址

MMU:內(nèi)存管理單元

舞北Q、步

地址轉(zhuǎn)換機(jī)制

?虛擬地址(邏輯地址)

處理器生成的指令或數(shù)據(jù)的二進(jìn)制地

?這些地址用硬件和軟件結(jié)合的方法轉(zhuǎn)換

成物理地址

?MMU:內(nèi)存管理單元,一種特殊硬件,

完成轉(zhuǎn)換工作

圖此Q孚

三、中新技術(shù)

中斷對于操作系統(tǒng)的重要性

就像機(jī)器中的驅(qū)動齒輪一樣

所以有人把操作系統(tǒng)稱為是由

“中斷驅(qū)動”或者“(中斷)事件驅(qū)動”

?它使得OS可以捕獲用戶程序發(fā)出的系統(tǒng)功能調(diào)用

-及時處理設(shè)備的中斷請求

?防止用戶程序中破壞性的活動等等

卷此2手

3.L中新的概念

?CPU對系統(tǒng)發(fā)生的某個事件作出的一種反應(yīng)

?CPU暫停正在執(zhí)行的程序,保留現(xiàn)場后轉(zhuǎn)

去執(zhí)行相應(yīng)事件的處理程序,處理完成后返回

斷點(diǎn),繼續(xù)執(zhí)行被打斷的程序

特點(diǎn):

引入中斷的目的

?解決主機(jī)與外設(shè)的并1)中斷隨機(jī)的

行工作問題2)中斷是可恢復(fù)的

?實(shí)現(xiàn)實(shí)時控制3)中斷是自動處理的

中斷的概念

指系統(tǒng)發(fā)生某個異步/同步事件后,處

理機(jī)暫停正在執(zhí)行的程序,轉(zhuǎn)去執(zhí)行處理該事件程

序的過程

為了開發(fā)CPU和通道(或設(shè)備)之間的

并行操作,當(dāng)CPU啟動通道(或設(shè)備)進(jìn)行輸入/輸

出后,通道便(或設(shè)備)可以獨(dú)立工作了,CPU也可

以轉(zhuǎn)去做與此次輸入/輸出不相關(guān)的事情,那么通

道(或設(shè)備)輸入/輸出完成后,還必須告訴CPU繼

續(xù)輸入/輸出以后的事情,通道(或設(shè)備)通過向

CPU發(fā)中斷告訴CPU此次輸入/輸出結(jié)%Ja

中斷的概念

用于表示CPU執(zhí)行指令時本身出現(xiàn)算術(shù)

溢Mill出、零做除數(shù)、取數(shù)時的奇偶錯,訪存指令越

界或就是執(zhí)行了一條所謂“異常指令”(用于實(shí)

現(xiàn)系統(tǒng)調(diào)用)等情況,這時中斷當(dāng)前的執(zhí)行流程,

轉(zhuǎn)到相應(yīng)的錯誤處理程序或異常處理程序

最早中斷和異常并沒有區(qū)分,都把它們叫

做中斷。隨著它們的發(fā)生原因和處理方式的差別

愈發(fā)明顯,才有了以后的中斷和異常

中斷的概念

“I/O中斷

「中斷(外中斷)乂

時鐘中斷

廣義中斷「系統(tǒng)調(diào)用

缺頁異常

異常(內(nèi)中斷)《斷點(diǎn)指令

例外其他程序性異常

〔(如算術(shù)溢出等)

中斷(狹義)與異常的區(qū)別:

中斷:與正執(zhí)行指令無關(guān),可以屏蔽

異常:與正執(zhí)行指令有關(guān),不可屏蔽

圖此Q孚

3.2,中斷?統(tǒng)

中斷系統(tǒng)是現(xiàn)代計(jì)算機(jī)系統(tǒng)的核心機(jī)制之一

硬件和軟件相互配合、相互滲透而使得計(jì)算機(jī)系統(tǒng)得以

充分發(fā)揮能力的計(jì)算模式

中斷系統(tǒng)的兩大組成部分:硬件中斷裝置和軟件中斷處

理程序

■中斷系統(tǒng)的硬件中斷裝置-中斷系統(tǒng)的機(jī)制部分

負(fù)責(zé)捕獲中斷源發(fā)出的中斷請求,以一定方式響應(yīng)

中斷源,然后將處理器控制權(quán)交給特定的中斷處理程

?軟件中斷處理程序-中斷系統(tǒng)的策略部分

負(fù)責(zé)辨別中斷類型并做出相應(yīng)的操作

參2孝

集畛、中新優(yōu)先級和中斷屏蔽

中斷優(yōu)先級設(shè)計(jì)原則:一般來說,高速設(shè)備的中

斷優(yōu)先級高,慢速設(shè)備的中斷優(yōu)先級低。因?yàn)楦?/p>

速設(shè)備的中斷被處理機(jī)優(yōu)先響應(yīng)時,可以讓處理

機(jī)盡快地向它發(fā)出下一個I/O請求,提高高速設(shè)備

的利用率

圖此Q孚

沖新優(yōu)先級和中新屏蔽

處理機(jī)優(yōu)先級:指出處理機(jī)正運(yùn)行程序的中斷響

應(yīng)級別。即當(dāng)處理機(jī)處于某一優(yōu)先級時,只允許

處理機(jī)去響應(yīng)比該優(yōu)先級高的中斷,而屏蔽低于或

等于該優(yōu)先級的中斷。可以通過置處理機(jī)優(yōu)先級

來通知硬件:屏蔽優(yōu)先級小于等于處理機(jī)優(yōu)先級

的中斷

中斷屏蔽:指禁止處理機(jī)響應(yīng)中斷或禁止中斷出

現(xiàn)

參北2步

中新優(yōu)先級和中斷“蔽

中斷屏蔽有兩種方法:

硬件實(shí)現(xiàn)——由軟件置處理機(jī)優(yōu)先級,硬件按系

統(tǒng)設(shè)計(jì)時的約定,屏蔽那些低優(yōu)先級中斷

軟件實(shí)現(xiàn)一一由軟件按操作系統(tǒng)優(yōu)先級約定,設(shè)置

屏蔽寄存器

3.4.中新類型

強(qiáng)迫性中斷

正在運(yùn)行的程序所不期望的,由于某種硬件故

障或外部請求引起的

自愿性中斷

用戶在程序中有意識安排的中斷,是由于用戶

在編制程序時因?yàn)橐蟛僮飨到y(tǒng)提供服務(wù),有

意使用“訪管”指令或系統(tǒng)調(diào)用,使中斷發(fā)生

中新類型

強(qiáng)迫性中斷

■輸入/輸出(I/O)中斷:主要來自外部設(shè)備通

?程序性中斷:運(yùn)行程序中本身的中斷

(如溢出,缺頁中斷,缺段中斷,地址越界)

?時鐘中斷

?控制臺中斷

?硬件故障

中新類型

自愿性中斷

?執(zhí)行I/O,創(chuàng)建進(jìn)程,分配內(nèi)存

?信號量操作,發(fā)送/接收消息

微機(jī)中的中新

1.可屏蔽中斷(10中斷)

2.不可屏蔽中斷(機(jī)器內(nèi)部故障、掉電中斷)

3.程序錯誤中斷(溢出、除法錯等中斷)

4.軟件中斷(Trap指令或中斷指令I(lǐng)NT)

圖此Q孚

IBM370中的中新

i.機(jī)器故障中斷:如電源故障,機(jī)器電路檢驗(yàn)錯等

2.輸入輸出中斷:輸入輸出設(shè)備和通道數(shù)據(jù)傳輸狀態(tài))

3.外部中斷:時鐘中斷,操作員控制臺中斷,多機(jī)系統(tǒng)

中其他機(jī)器的通信要求中斷,各種外設(shè)或傳感器發(fā)來

的實(shí)時中斷等

4.程序中斷:程序中的問題引起的中斷,如錯誤地使用

指令或數(shù)據(jù)、溢出等問題,存儲保護(hù)等

5.訪管中斷:訪管指令或陷阱指令(Trap指令)中的操

作數(shù)規(guī)定了要求服務(wù)的類型。每當(dāng)CPU執(zhí)行訪管指令或

陷阱指令時,即引起中斷并調(diào)用操作系統(tǒng)相應(yīng)的功能

模塊為其服務(wù)

二繆共林手

3.5.中斷響應(yīng)

CPU如何響應(yīng)中斷,兩個問題:

?CPU何時響應(yīng)中斷?

通常在CPU執(zhí)行了一條指令以后,更確切

地,在指令周期最后時刻接受中斷請求,

或此時掃描中斷寄存器

?如何知道提出中斷請求的設(shè)備或中斷源?

因?yàn)橹挥兄乐袛嘣椿蛑袛嘣O(shè)備,才能

調(diào)用相應(yīng)的中斷處理程序

圖此Q孚

FThR中新響應(yīng)

處理器如何發(fā)現(xiàn)中斷信號?

處理器的控制部件中設(shè)一個能檢測中斷的機(jī)構(gòu)

稱為中斷掃描機(jī)構(gòu)

?在每條指令執(zhí)行周期的最后時刻掃描中斷寄存器,

詢問是否有中斷信號

?若無中斷信號,繼續(xù)執(zhí)行下一條指令

?若有中斷,中斷硬件將該中斷觸發(fā)器內(nèi)容按規(guī)定編

碼送入PSW的相應(yīng)位,稱為中斷碼

?通過交換中斷向量引出中斷處理程序

中斷向量:一個存放中斷處理程序入口地址和程

序運(yùn)行所需處理機(jī)狀態(tài)字的內(nèi)存單元

硬件按中斷號、異常類型的不同通過中斷向量表

轉(zhuǎn)移

中新向量表

在有的機(jī)器中:

將主存最低位128個字保留作為中斷向量表,每

個中斷向量占兩個字

中斷請求的設(shè)備接口為了標(biāo)識自己,向處理器發(fā)

送一個該設(shè)備在中斷向量表中表目的地址指針

圖此Q孚

中斷響應(yīng)

典型的中新處理CU:I/O中新

由I/o設(shè)備的控制器或者通道發(fā)出

兩類I/O中斷:

?I/O操作正常結(jié)束

如果要繼續(xù)I/O操作,需要在準(zhǔn)備好以后重新啟動I/O,

若請求I/O程序正處于等待I/O狀態(tài),則應(yīng)將其喚醒

?I/O異常

需要重新執(zhí)行失敗的I/0操作

重試次數(shù)有上限,次數(shù)過大,系統(tǒng)將判定硬件故障

典型的中斷處理(2):時鐘中新

系統(tǒng)多道能力的重要推動力量,時鐘中斷處理程序通常

做與系統(tǒng)運(yùn)轉(zhuǎn)、管理和維護(hù)相關(guān)的工作,包括:

?維護(hù)軟件時鐘:系統(tǒng)有若干個軟件時鐘,控制定時任

務(wù)以及進(jìn)程的處理器時間配額,時鐘中斷需要維護(hù)、

定時更新這些軟件時鐘

?處理器時間調(diào)度:維護(hù)當(dāng)前進(jìn)程時間片軟件時鐘,并

在當(dāng)前進(jìn)程時間片到時以后運(yùn)行調(diào)度程序選擇下一個

被調(diào)度的進(jìn)程

?控制系統(tǒng)定時任務(wù):通過軟件時鐘和調(diào)度程序定時激

活一些系統(tǒng)任務(wù),如監(jiān)測死鎖、系統(tǒng)記帳、系統(tǒng)審計(jì)

?實(shí)時處理”,與

嚷蟹的中斷處理C3J:硬件故障中新

硬件故障中斷處理程序一般需要做的工作:

■保存現(xiàn)場,使用一定警告手段,提供些輔助診斷信息

?在高可靠系統(tǒng)中,中斷處理程序還要評估系統(tǒng)可用性,盡可能

恢復(fù)系統(tǒng)

如Windows2000/XP,關(guān)鍵硬件發(fā)生故障時,如顯示卡損壞,出

現(xiàn)系統(tǒng)藍(lán)屏,系統(tǒng)實(shí)際上進(jìn)入相應(yīng)故障處理程序,發(fā)現(xiàn)故障不

可恢復(fù),則在屏幕上打印出發(fā)生故障時程序位置,并開始進(jìn)行

內(nèi)存轉(zhuǎn)儲(將一定范圍的內(nèi)存內(nèi)容寫上磁盤,是系統(tǒng)故障時的

全系統(tǒng)“快照”),備日后故障診斷

參2孝

其建的中新處理(4):程序性中斷

程序指令出錯、指令越權(quán)或者指令尋址越界而引發(fā)

兩類處理方法:

?只能由操作系統(tǒng)的相關(guān)擴(kuò)展功能模塊完成

多為程序試圖作不能做的操作引起的系統(tǒng)保護(hù)

如訪問合法的、但不在內(nèi)存虛地址內(nèi),引發(fā)頁故障頁故障一

般會引發(fā)os虛存模塊作一個頁面換入

?可由程序自己完成,如一些算術(shù)運(yùn)算錯誤

不同程序可有不同處理方法,所以很多OS提供由用戶自己

處理這類中斷的“綠色通道”

系統(tǒng)調(diào)試中斷(斷點(diǎn)中斷、單步跟蹤)也可被用戶程序處理,

用以支持各種程序調(diào)試的

典型的中新處理(5):余統(tǒng)服務(wù)請求(自愿性中斷)

系統(tǒng)服務(wù)請求由處理器專用指令(訪管指令)激發(fā)

?如x86處理器提供int指令,用來激發(fā)軟件中斷

?其他不少處理器則提供系統(tǒng)調(diào)用指令syscall

執(zhí)行專用指令的結(jié)果是系統(tǒng)被切換到管態(tài),并且轉(zhuǎn)

移到一段專門OS程序處開始執(zhí)行

■指令格式通常是指令名加請求服務(wù)識別號(中斷號)

?OS利用處理器提供的這種接口建立系統(tǒng)服務(wù)體系

?處理器一般不負(fù)責(zé)定義系統(tǒng)調(diào)用所傳遞的參數(shù)格式

參此林早

>r室的中斷處理(6):系統(tǒng)服務(wù)請求實(shí)例

?DOS:21h號中斷的系統(tǒng)服務(wù)功能以及參數(shù)列表

現(xiàn)代操作系統(tǒng)一般不提供直接使用系統(tǒng)調(diào)用指令的接口,通

常做法:提供一套方便、實(shí)用的應(yīng)用程序函數(shù)庫(應(yīng)用程序

設(shè)計(jì)接口API)

-從應(yīng)用層面重新封裝系統(tǒng)調(diào)用

-屏蔽復(fù)雜的系統(tǒng)調(diào)用傳參問題

-高級語言接口,有助于快速開發(fā)

有的系統(tǒng)在更高層面提供系統(tǒng)程序設(shè)計(jì)模板庫和類庫

如Windows2000/XP提供封裝系統(tǒng)用Win32API和高層編程機(jī)

制MFC以及ATL

Linux提供封裝系統(tǒng)調(diào)用、符合POSIX標(biāo)準(zhǔn)A9和C運(yùn)行庫

保存進(jìn)程狀態(tài)的其

余信息

進(jìn)程中斷

中斷系統(tǒng)軟件完成的工作

恢復(fù)進(jìn)程狀態(tài)信息

從系統(tǒng)堆?;謴?fù)原

PSW和PC圖此Q孚

四,I/O技術(shù)

I/O控制使用下面幾種技術(shù):

?程序控制

?中斷驅(qū)動

?直接存儲器存?。―MA)

?通道

鎏共2芽

4.E程序控制I/O技術(shù)

由處理器提供I/O相關(guān)指令來實(shí)現(xiàn)

?I/O處理單元處理請求并設(shè)置I/O狀態(tài)寄存器相關(guān)位

?不中斷處理器,也不給處理器警告信息

?處理器定期輪詢I/O單元的狀態(tài),直到處理完畢

I/O軟件包含直接操縱I/O的指令

?控制指令:用于激活外設(shè),并告訴它做什么

?狀態(tài)指令:用于測試I/O控制中的各種狀態(tài)和條件

?數(shù)據(jù)傳送指令:用于在設(shè)備和主存之間來回傳送數(shù)據(jù)

主要缺陷:處理器必須關(guān)注I/O處理單元的狀態(tài),因而耗費(fèi)大

量時間輪詢信息,嚴(yán)重地降低了系統(tǒng)性能

參2孝

42中斷驅(qū)動I/O技術(shù)

為了解決程序控制I/O方法的主要問題

應(yīng)該讓處理器從輪詢?nèi)蝿?wù)中解放出來

使I/O操作和指令執(zhí)行并行起來

具體作法:

當(dāng)I/O處理單元準(zhǔn)備好與設(shè)備交互的時候

通過物理信號通知處理器,即中斷處理器

4.3.DMA技術(shù)(1)

中斷的引入大大地提高了處理器處理I/O的效率

當(dāng)處理器和I/O間傳送數(shù)據(jù)時,效率仍舊不高

解決方法:

直接存儲器訪問(DMA:DirectMemoryAccess)

?通過系統(tǒng)總線中一獨(dú)立控制單元DMA控

制器

?自動控制成塊數(shù)據(jù)在內(nèi)存和I/O單元間的傳送

?大大提高處理I/O的效能

DMA技術(shù)(2)

當(dāng)處理器需要讀寫一整塊數(shù)據(jù)時

給DMA控制單元發(fā)送一條命令

包含:是否請求一次讀或?qū)?,I/O設(shè)備的編址,開始

讀或?qū)懙闹鞔婢幹?,需要傳送的?shù)據(jù)長度等信息

?處理器發(fā)送完命令后就可處理其他事情

?DMA控制器將自動管理數(shù)據(jù)的傳送

?當(dāng)這個過程完成后,它會給處理器發(fā)一個中斷

處理器只在開始傳送和傳送結(jié)束時關(guān)注一下就可

DMA技術(shù)(3)

?處理器和DMA傳送不完全并行

?有時會有總線競爭的情況發(fā)生

處理器用總線時可能稍作等待

不會引起中斷

不引起程序上下文的保存

?通常過程只有一個總線周期

?在DMA傳送時,處理器訪問總線速度會變慢

?對于大量數(shù)據(jù)I/O傳送,DMA技術(shù)是很有價值

■鎏此Q手

4.4.通道

獨(dú)立于中央處理器,專門負(fù)責(zé)數(shù)據(jù)I/O傳輸?shù)?/p>

-它對外設(shè)實(shí)現(xiàn)統(tǒng)一管理

-代替CPU對I/O操作進(jìn)行控制

-使CPU和外設(shè)可以并行工作

通道又稱為I/O處理機(jī)

引入通道的目的:

?為了使CPU從I/O事務(wù)中解脫出來

?同時為了提高CPU與設(shè)備、設(shè)備與設(shè)備之間的并行

度參什林厚

五、時鐘

時鐘為計(jì)算機(jī)完成以下必不可少的工作:

?在多道程序運(yùn)行環(huán)境中,為系統(tǒng)發(fā)現(xiàn)陷入死循環(huán)(編程錯誤)

的作業(yè),防止機(jī)時的浪費(fèi)

?在分時系統(tǒng)中,間隔時鐘實(shí)現(xiàn)作業(yè)間按時間片輪轉(zhuǎn)

?在實(shí)時系統(tǒng)中,按要求的間隔輸出正確時間信號給實(shí)時的控

制設(shè)備(如A/D、D/A轉(zhuǎn)換設(shè)備)

?定時喚醒要求延遲執(zhí)行的各外部事件(如定時為各進(jìn)程計(jì)算

優(yōu)先數(shù),銀行中定時運(yùn)行某類結(jié)賬程序等)

?記錄用戶使用設(shè)備時間和記錄某外部事件發(fā)生時間

?記錄用戶和系統(tǒng)所需要的絕對時間,即年、月、日

?時鐘是操作系統(tǒng)運(yùn)行的必不可少的硬件設(shè)施

?時鐘,實(shí)際上都是硬件時鐘寄存器,按時鐘電路所產(chǎn)生的脈

沖數(shù)對時鐘寄存器進(jìn)行加1或減1的工作

?絕對時鐘:記錄當(dāng)時時間(年、月、日、時、分、秒)

一般來說,絕對時鐘準(zhǔn)確,當(dāng)停機(jī)時,絕對時鐘值仍然自動

修改

?間隔時鐘(相對時鐘):通過時鐘寄存器實(shí)現(xiàn)

置上時間間隔初值,每經(jīng)過一個單位時間,時鐘值減1,直

到該值為負(fù)時,則觸發(fā)時鐘中斷,并進(jìn)行相應(yīng)中斷處理

爹共2手

晶體^震^蕩

-陰

每個脈沖使計(jì)數(shù)器減1

用來裝入計(jì)

TEEEEEEEEED數(shù)器初值

等北Q、浮

破件時鐘:

某個寄存器來模擬

(根據(jù)脈沖頻率定時加1,減1)

用作相對時鐘,用內(nèi)存單元來模擬時鐘

?CPU保護(hù):防止進(jìn)程得到CPU后不放棄控制權(quán)

?解決:分配給每個進(jìn)程一段時間(時間片)

時間片到,發(fā)時鐘中斷,控制權(quán)交給操作系統(tǒng)

圖此Q孚

六、系統(tǒng)調(diào)用

系統(tǒng)調(diào)用:用戶在程序中調(diào)用操作系統(tǒng)所提供的一些子功能

?這是特殊的過程調(diào)用,由特殊的機(jī)器指令實(shí)現(xiàn)(每種機(jī)器

的機(jī)器指令集中都有一條系統(tǒng)調(diào)用指令一訪管指令)

■這條指令將系統(tǒng)轉(zhuǎn)入管態(tài)

?系統(tǒng)調(diào)用是一個低級過程,只能由匯編語言直接訪問

?系統(tǒng)調(diào)用是操作系統(tǒng)提供給編程人員的唯一接口

■利用系統(tǒng)調(diào)用,動態(tài)請求和釋放系統(tǒng)資源

完成與硬件相關(guān)的工作以及控制程序的執(zhí)行等

每個操作系統(tǒng)都提供幾百種系統(tǒng)調(diào)用

A=A+l

printf(...)

B=B+A

(1)源程序段

繆北Q、芽

a素嶷詞用簡介(續(xù)1)

A=A+1

?、c?

/:、

?嵌入后?/

INT>>〈INT/

該系統(tǒng)調(diào)

?1用的操作

?系統(tǒng)內(nèi)部

OUT實(shí)現(xiàn)代碼

(2)printf目標(biāo)代碼⑶程序段編譯產(chǎn)生的(4)操作系統(tǒng)

可執(zhí)行代碼

謫用簡介(續(xù)2)

?凡是與硬件相關(guān)、與應(yīng)用無關(guān)的工作,都通過

操作系統(tǒng)程序來完成

用戶程序

函數(shù)

操作系統(tǒng)

圖此Q孚

以I/O設(shè)備的硬件接口為例:

一般由四種寄存器(地址,數(shù)據(jù),狀態(tài),控制)或其

子集組成

任一程序中若要使用I/O設(shè)備來輸出數(shù)據(jù)或接受輸入

必須通過對這四種寄存器讀寫的I/O機(jī)器指令進(jìn)行

V爹北林學(xué)

6.2.系統(tǒng)調(diào)用的處理過程

?需要有一個類似于硬件中斷處理的處理機(jī)構(gòu)

當(dāng)用戶使用系統(tǒng)調(diào)用時,產(chǎn)生一條相應(yīng)的指令

處理機(jī)在執(zhí)行到該指令時發(fā)生相應(yīng)的中斷,并

發(fā)出有關(guān)的信號給該處理機(jī)構(gòu)

該處理機(jī)構(gòu)在收到了處理機(jī)發(fā)來的信號后,啟

動相關(guān)的處理程序去完成該系統(tǒng)調(diào)用所要求的

功能

圖此Q孚

系統(tǒng)調(diào)用的處理過程(續(xù)1)

?在系統(tǒng)中為控制系統(tǒng)調(diào)用服務(wù)的機(jī)構(gòu)稱為陷入

(TRAP)或異常處理機(jī)構(gòu)

?相對應(yīng),把由于系統(tǒng)調(diào)用引起處理機(jī)中斷的指令

稱為陷入或異常指令(或稱訪管指令)

?在操作系統(tǒng)中,每個系統(tǒng)調(diào)用都對應(yīng)一個事先給

定的功能號,例如0、1、2、3等,稱為系統(tǒng)調(diào)用

功能號

(在陷入指令中必須包括對應(yīng)系統(tǒng)調(diào)用的功能號

有些陷入指令中,還帶有傳給陷入處理機(jī)構(gòu)和內(nèi)

部處理程序的有關(guān)參數(shù))圖此Q孚

系統(tǒng)調(diào)用的處理過程r續(xù)2)

?必須為實(shí)現(xiàn)系統(tǒng)調(diào)用功能的子程序編造人口地址表

?每個入口地址與相應(yīng)的系統(tǒng)調(diào)用執(zhí)行程序名對應(yīng)

?陷入處理程序把陷入指令包含功能號與人口地址表有關(guān)項(xiàng)

對應(yīng),驅(qū)動有關(guān)子程序執(zhí)行

?在系統(tǒng)調(diào)用處理結(jié)束之后,用戶程序需利用系統(tǒng)調(diào)用返回

結(jié)果繼續(xù)執(zhí)行

保護(hù)現(xiàn)場:

?進(jìn)入系統(tǒng)調(diào)用處理前,陷入處理機(jī)構(gòu)還需保存處理機(jī)現(xiàn)場

?在系統(tǒng)調(diào)用處理結(jié)束之后,要恢復(fù)處理機(jī)現(xiàn)場,現(xiàn)場被保

護(hù)在特定的內(nèi)存區(qū)或寄存器中鏟安、、,

/拄林孝

用戶程序陷入處理機(jī)構(gòu)系統(tǒng)子程序

系統(tǒng)調(diào)用的處理過程

參數(shù)傳遹過程問題

怎樣實(shí)現(xiàn)用戶程序和系統(tǒng)程序間的參數(shù)傳遞?

常用的3種實(shí)現(xiàn)方法:

?由陷入指令自帶參數(shù):陷入指令的長度有限的,且還

要攜帶系統(tǒng)調(diào)用功能號,只能自帶有限的參數(shù)

?通過有關(guān)通用寄存器來傳遞參數(shù):這些寄存器應(yīng)是系

統(tǒng)程序和用戶程序都能訪問,由于寄存器長度較短,

從法傳遞較多的參數(shù)

?大多在內(nèi)存中開辟專用堆棧區(qū)來傳遞參數(shù)

―小學(xué)

6.4.系統(tǒng)調(diào)用的分類

系統(tǒng)功能可分為兩部分

?系統(tǒng)自身所需要的

?作為服務(wù)提供給用戶的

os的系統(tǒng)調(diào)用:

?進(jìn)程控制類系統(tǒng)調(diào)用

?文件操作類系統(tǒng)調(diào)用

?進(jìn)程通信類系統(tǒng)調(diào)用

?設(shè)備管理類系統(tǒng)調(diào)用

?信息維護(hù)類系統(tǒng)調(diào)用

圖此Q孚

進(jìn)程管理

調(diào)用說明

pid=fork))創(chuàng)建與父進(jìn)程相同的子進(jìn)程

等待一子進(jìn)程終止

pid=wairpidfpid,&statioc9options)

s=execvefname,argv,environp)復(fù)制一進(jìn)程的核心映像

Exit(status)中止進(jìn)程執(zhí)行并返回status

繆北Q、芽

文件管理

調(diào)用說明

fd=open(file,how,...)打開一個文件供讀、寫或兩者

s=close(fd)關(guān)閉一個文件

n=read(fd,buffer,nbytes)把數(shù)據(jù)從一個文件讀到緩沖區(qū)中

n=write(fd,buffer,nbytes)把數(shù)據(jù)從緩沖區(qū)寫到一個文件中

position=iseek(fd,offset,where)移動文件指針

s=stat(name,&buf)取得文件的狀態(tài)信息

1錄管理

調(diào)用說明

s=mkdir(name,mode)創(chuàng)建一個新目錄

s=rmdir(name)刪去一個空目錄

s=Iink(name1,name2)創(chuàng)建一個新表項(xiàng),name2,指向

namel

s=unlink(name)刪去一個目錄項(xiàng)

s=mount(special,name,flag)安X個文件系統(tǒng)

s=unmount(special)卸載一個文件系統(tǒng)

裔共Q、步

其他

調(diào)用說明

s=chdir(dirname)改變工作目錄

s=chmod(name,mode)修改一個文件的保護(hù)位

s=kill(pid,signal)發(fā)送一信號給一個進(jìn)程

seconds=time(&seconds)自1970年1月1日起的時間

系統(tǒng)調(diào)用方式(INT)與程序中一般的調(diào)

用方式的相同點(diǎn):

?改變指令流程

?重復(fù)執(zhí)行和公用

?改變指令流程后需要返回原處

系統(tǒng)調(diào)用方式(INT)與程序中一般的調(diào)用方式

的不同點(diǎn):

系統(tǒng)調(diào)用與一般過程調(diào)用比校(續(xù)1)

?運(yùn)行在不同的系統(tǒng)狀態(tài)

-一般過程調(diào)用,其調(diào)用程序和被調(diào)用程序都運(yùn)行在相同狀

態(tài):核心態(tài)或用戶態(tài)

-系統(tǒng)調(diào)用:調(diào)用程序在用戶態(tài),被調(diào)用程序在系統(tǒng)態(tài)

狀態(tài)的轉(zhuǎn)換

?一般的過程調(diào)用不涉及系統(tǒng)狀態(tài)的轉(zhuǎn)換,可直接由調(diào)用過程

轉(zhuǎn)向被調(diào)用過程

?運(yùn)行系統(tǒng)調(diào)用時,調(diào)用和被調(diào)用過程在不同系統(tǒng)狀態(tài),不允

許由調(diào)用過程直接轉(zhuǎn)向被調(diào)用過程

通過軟中斷機(jī)制先由用戶態(tài)轉(zhuǎn)換為核心態(tài)

在OS核心分析后,轉(zhuǎn)向相應(yīng)的系統(tǒng)調(diào)用處理子程序

系統(tǒng)調(diào)用與一般過程調(diào)用比較(續(xù)2)

?返回問題

-一般過程調(diào)用在被調(diào)用過程執(zhí)行完后,返回

調(diào)用過程

-搶占式調(diào)度的系統(tǒng)中,被調(diào)用過程執(zhí)行完后,

系統(tǒng)將對所有要求運(yùn)行的進(jìn)程進(jìn)行優(yōu)先級分析。

如果調(diào)用進(jìn)程仍有最高優(yōu)先級,則返回到調(diào)用

進(jìn)程執(zhí)行

否則,引起重新調(diào)度,讓優(yōu)先級最高的進(jìn)程

優(yōu)先執(zhí)行。此時,系統(tǒng)把調(diào)用進(jìn)程放入就緒隊(duì)

系統(tǒng)調(diào)用與一般過程調(diào)用比較(續(xù)3)

■進(jìn)入方式不同

利用int或trap指令進(jìn)行系統(tǒng)調(diào)用;利用call

或jmp指令進(jìn)入普通的過程調(diào)用

?CALL指令的內(nèi)部實(shí)現(xiàn)過程

-返回地址壓棧(即該CALL指令所在的地址)

-將該CALL指令中所含的地址(即被調(diào)用代碼所

足地址)送入PC

?RET指令的內(nèi)部實(shí)現(xiàn)過程

-從棧頂彈出返回地址送入程序計(jì)數(shù)器PC

養(yǎng)笳謫用與一般過程調(diào)用比校(續(xù)4)

?系統(tǒng)調(diào)用是動態(tài)調(diào)用,而CALL調(diào)用

方式是靜態(tài)調(diào)用

a.同一程序中不包含被調(diào)用代碼

系統(tǒng)調(diào)用是動態(tài)調(diào)用,程序中不包含被調(diào)

用代碼,好處:

(1)用戶程序長度縮短

(2)當(dāng)OS升級時,調(diào)用方不必改變

圖此Q孚

系統(tǒng)調(diào)用與一般過程調(diào)用比校(續(xù)5)

b.系統(tǒng)調(diào)用方式的調(diào)用地址和返回地址都是不固定

系統(tǒng)調(diào)用指令中不包含調(diào)用地址,只包含功能號

是按功能號(在可執(zhí)行目標(biāo)程序中)調(diào)用的

在操作系統(tǒng)內(nèi)部

由系統(tǒng)調(diào)用處理程序通過系統(tǒng)調(diào)用分支表

(OS的一個數(shù)據(jù)結(jié)構(gòu))

將功能號轉(zhuǎn)換為相應(yīng)的指令地址

系統(tǒng)調(diào)用與一般過程調(diào)用比較(續(xù)6)

顯示

打印

讀文件

用戶程序os

系統(tǒng)調(diào)用與一般過程調(diào)用比校(續(xù)7)

系統(tǒng)調(diào)用返回指令中不包括返回地址,通過棧保

存而彈出返回危癥

系統(tǒng)調(diào)用返回地址不固定,因?yàn)橛脩舫绦蛟诓煌?/p>

的地方調(diào)用os

CALL調(diào)用方式是靜態(tài)調(diào)用,被調(diào)用代碼與調(diào)用

代碼在同一程序之內(nèi)。CALL調(diào)用方式,其調(diào)用

地址是固定的,包含在調(diào)用語句中;返回地址

是不固定的(同一子程序可能被不同處多次調(diào)

用),在程序執(zhí)行過程中通過棧的實(shí)現(xiàn)來保存

和彈出返回地址

澇此Q冬

系統(tǒng)調(diào)用與一般過程調(diào)用比校(續(xù)8)

c.安全接口

INT指令和IRET指令的執(zhí)行過程中

要處理程序狀態(tài)字PSW

INT指令中要保存用戶程序的老PSW

并根據(jù)中斷向量表設(shè)置新PSW

IRET指令中要在返回用戶程序前恢復(fù)用戶程序

的老PSW

圖此Q孚

系統(tǒng)覆用與一般過程調(diào)用比較(續(xù)9)

安全接口(續(xù)1)

目的:目態(tài)、管態(tài)的管理

系統(tǒng)態(tài)與用戶態(tài)的轉(zhuǎn)換

由系統(tǒng)在INT指令與IRET指令內(nèi)部自動完

沒有用一條單獨(dú)的專門指令

七、Linux系統(tǒng)啟動過程

針對linux系統(tǒng)的單x86cpu的版本

鎏北Q、步

說在If面的話…

?引導(dǎo)涉及到系統(tǒng)各個部分的數(shù)據(jù)結(jié)構(gòu),

因此,只有隨著課程的深入,才會徹底

弄清楚引導(dǎo)程序中的初始化工作

?不同OS的引導(dǎo)程序可能會不同,但是仍

有一些普遍的原理可以遵循

前面的部分側(cè)重代碼,目的是為了說清

楚一些基本概念,啟動核心部分側(cè)重原

理,增強(qiáng)大家的感性認(rèn)識

圖此Q孚

余統(tǒng)初始化所包括的內(nèi)袞

?基礎(chǔ)知識

-系統(tǒng)引導(dǎo)

?通過lilo進(jìn)行引導(dǎo)

?實(shí)模式下的系統(tǒng)初始化

?保護(hù)模式下的系統(tǒng)初始化

?啟動核心

,Init進(jìn)程

7.1基礎(chǔ)知識

?Linux源代碼中的C語言代碼

?Linux源代碼中的匯編語言代碼:兩種

?完全的匯編代碼,以.S作為文件名后綴

?嵌入在C程序中的匯編代碼。

C語言代瑪

?Linux主體是用GNU的c語言編寫

?從C++中吸收了“inline”和“const”

?支持"屬性描述符”(attribute)

?增加了新的基本數(shù)據(jù)類型“l(fā)onglongint”

用于支蔣64位cpu

圖此Q孚

匯編語音代瑪

?與一般的386匯編語言采用intel定義不同,

它采用的是AT&T定義的格式。主要差

別如下:

?Intel中多使用大寫字母,而這里大多使用小寫字

?寄存器名前面要加“%”作為前綴,

?指令的源操作數(shù)與目標(biāo)操作數(shù)的順序與intel的正

好相反。AT&T格式中,源在前,目標(biāo)在后

.

匯編語言代瑪

?訪問內(nèi)存的指令的操作數(shù)大?。磳挾龋┯刹僮?/p>

碼名稱的最后一個字母決定,用作操作碼后綴的

字母有b(8位),w(16位),1(32位),e.g

movb

?直接操作數(shù)要加“$”作為前綴,intel中不用

?基本格式

-asm(“匯編語句”

:輸出寄存器

:輸入寄存器

:會被修改的寄存器);

?輸出和輸入寄存器統(tǒng)一按順序編號,起始是%0

卷共Q、早

基礎(chǔ)知識

?Linux的啟動是指從系統(tǒng)加電到控制臺顯

示登錄提示為止的運(yùn)行階段:

-主要相關(guān)的代碼是在arch/i386/boot中:

?bootsect.S,這是linux引導(dǎo)扇區(qū)的源代碼

?setup.S這是輔助程序的一部分

?video.S這是輔助程序的另夕|?部分,用于引導(dǎo)

過程中的屏幕顯示

基礎(chǔ)知識

-另外,子目錄compressed中還有兩個源代碼

文祥head.S,misc.co用于內(nèi)核映象的解壓

縮。也屬于輔助程序一部分。

-經(jīng)過■譯,匯編和連接后就形成三個部分:

引導(dǎo)扇區(qū)的映象bootsetc,輔助程序setup和

內(nèi)核映象本身。

-大小不超過508KB的內(nèi)核引導(dǎo)映象稱為小映

象zlmage;否則稱為大內(nèi)核bzlmage

圖此Q孚

7.2系統(tǒng)引導(dǎo)

?加電開機(jī)后,intelcpu在實(shí)模式下工作,

只能使用低端的640kb(即0XA0000以下)

的內(nèi)存空間(why?)

?由ROMBIOS或由ilo將啟動盤的第一扇

區(qū)(引導(dǎo)扇區(qū))的內(nèi)容裝入起始地址為

0x7c00的內(nèi)存空間,然后跳轉(zhuǎn)到0x7c00

開始執(zhí)行引導(dǎo)扇區(qū)的代碼

?該引導(dǎo)扇區(qū)內(nèi)的代碼就是bootsetS匯編

后生成的二進(jìn)制代碼

圖此Q孚

系統(tǒng)引導(dǎo)

該段代碼(bootsetS)將自身轉(zhuǎn)移到

0x90000處,然后跳轉(zhuǎn)到那里繼續(xù)執(zhí)行,

并通過bios提供的“int0x13”調(diào)用從磁盤

上讀入setup和內(nèi)核的映象,然后跳轉(zhuǎn)到

setup的代向中,為執(zhí)行而核映象做準(zhǔn)備

?對部分代碼的解釋如下所示:

圖此Q孚

蠡電M引導(dǎo)-bootsect.S中的部分代

movw$BOOTSEG,%ax

movw%ax,%ds#%ds=BOOTSEG,將ds段寄存器設(shè)為0x7c00

movw$INITSEG,%ax

movw%ax,%es#%ax=%es=INITSEG,將es段寄存器設(shè)為0x9000

movw$256,%cx#移動計(jì)數(shù)值=256

subw%si,%si#源地址ds:si=0x07c0:0x0000

subw%di,%di#目標(biāo)地es:di=0x9000:0x0000

eld#清方向標(biāo)志位

rep#重復(fù)執(zhí)行直到cx=0

movsw#移動1個字

Ijmp$INITSEG,$go#間接跳轉(zhuǎn),INITSEG指出跳轉(zhuǎn)到的段地址

go:movw$0x4000-12,%di#0x4000isanarbitraryvalue>=

#lengthofbootsect+lengthof

#setup+roomforstack;

#12isdiskparmsize.

movw%ax,%ds#將ds,ss都置成移動后代碼所在的段處0x9000

movw%ax,%ss

movw%di,%sp#設(shè)置堆棧putstackatINITSEG:0x4000-12.

與限號I導(dǎo)-bootsect.S中部分代瑪?shù)慕?/p>

這段代碼將啟動扇區(qū)代碼由0x7C00移至

0x90000處。Linux將地址為0x90000的代

碼段稱為INITSEG。然后跳轉(zhuǎn)到go標(biāo)志,

準(zhǔn)備一塊堆棧,棧底位于

$INITSEG:0x4000-12

系統(tǒng)引導(dǎo)一bootsect.S中部分代瑪

loadsetup:

xorb%ah,%ah#ah=0x02讀磁盤扇區(qū)到內(nèi)存;21=需讀出的扇區(qū)數(shù),…

xorb%dl,%dl

int$0x13

xorw%dx,%dx

movb$0x02,%cl

movw$0x0200,%bx

movb$0x02,%ah

movbsetup_sects,%al

int$0x13

jncokloadsetup

pushw%ax

callprintnl

movw%sp,%bp

callprinthex

popw%ax

jmploadsetup

okloadsetup:

與限號[導(dǎo)-bootsect.S中部分代瑪?shù)慕?/p>

■該段代碼利用BIOS中提供的讀磁盤調(diào)用

“int0x13”從磁盤將setup.S裝入到9000:

0200(linux中稱之為SETUPPSEG段),

即緊跟在bootsect.S之后,共四個扇區(qū)

?如果載入失敗,則不斷嘗試循環(huán)。除非

某次嘗試成功,否則只有等待系統(tǒng)重啟

7.3通過lilo來進(jìn)行引導(dǎo)

?Lilo(linuxloader)也存儲在啟動扇區(qū)

中,用以讓用戶選擇上電后使用何種操

作系統(tǒng)

?Lilo在系統(tǒng)安裝階段建立關(guān)于核心代碼占

用硬盤數(shù)據(jù)塊的位置的對照表。啟動時

lilo將利用這張表引導(dǎo)BIOS裝入指定的操

作系統(tǒng)

通過lilo來進(jìn)行引導(dǎo)

?Lilo將用戶在啟動時輸入的命令和參數(shù)存

儲在empty_zero_page(0x5000)的后半頁,

供arch/i386/kernel/setup.c文柞的

setup_arch()函數(shù)使用

?Lilo完成任務(wù)后,跳轉(zhuǎn)至setup.S程序,

轉(zhuǎn)入實(shí)模式下的系統(tǒng)初始化

圖此Q孚

7.4賣模式下的系統(tǒng)初始化

?setup.S連同內(nèi)核映象由bootsect.S裝入。

setup.S從BIOS獲取計(jì)算機(jī)系統(tǒng)的參數(shù),

放到內(nèi)存參數(shù)區(qū),仍在實(shí)模式下運(yùn)行

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論