一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

DOS中斷/ BIOS中斷

 芥子c1yw3tb42g 2023-08-21 發(fā)布于陜西

3.2 操作系統(tǒng)如何進(jìn)行權(quán)限限制


前言

中斷是指計(jì)算機(jī)運(yùn)行過(guò)程中,出現(xiàn)某些意外情況需主機(jī)干預(yù)時(shí),機(jī)器能自動(dòng)停止正在運(yùn)行的程序并轉(zhuǎn)入處理新情況的程序,處理完畢后又返回原被暫停的程序繼續(xù)運(yùn)行。


提示:以下是本篇文章正文內(nèi)容,下面案例可供參考

一、中斷簡(jiǎn)介

        執(zhí)行完當(dāng)前指令后,檢測(cè)到從CPU內(nèi)部或者外部發(fā)送過(guò)來(lái)的中斷信息,并且可以立即對(duì)所接受到的信息進(jìn)行處理;

1.1 中斷信息

        中斷信息根據(jù)來(lái)自CPU內(nèi)部和外部分為:內(nèi)中斷和外中斷

1.2 異常(內(nèi)中斷)

        (1)終止:斷電等

        (2)故障:缺頁(yè)、除法錯(cuò)誤、溢出等

        (3)自陷:調(diào)用int指令引發(fā)中斷

          例:BIOS中中斷處理程序的形式提供了微機(jī)中基本I/O設(shè)備的控制程序,稱(chēng)為'BIOS中斷',應(yīng)用程序可以用'INT n'指令調(diào)用這些程序。 

1.3 外中斷

        外部中斷是實(shí)時(shí)地處理外部事件的一種內(nèi)部機(jī)制。當(dāng)某種外部事件發(fā)生時(shí),中斷系統(tǒng)將迫使CPU暫停正在執(zhí)行的程序,轉(zhuǎn)而去進(jìn)行中斷事件的處理;中斷處理完畢后.又返回被中斷的程序處,繼續(xù)執(zhí)行下去。

        例:鼠標(biāo)、鍵盤(pán)引起的中斷;

二、中斷服務(wù)程序

        通過(guò)執(zhí)行事先編好的某個(gè)特定程序,用來(lái)處理中斷信息的程序。

2.1 BIOS中斷

        BIOS中,以中斷處理程序的形式提供了計(jì)算機(jī)中基本I/O設(shè)備的控制程序,稱(chēng)為'BIOS中斷',應(yīng)用程序可以用'INT n'指令調(diào)用這些程序。

例:'int 0x13h' BIOS提供給程序控制磁盤(pán)IO資源; 

2.2 DOS中斷

        程序運(yùn)行的主要軟件環(huán)境是操作系統(tǒng)。

        操作系統(tǒng)為程序運(yùn)行提供基本的服務(wù),如,程序的裝入、結(jié)束,內(nèi)存的分配,文件管理等。以DOS操作系統(tǒng)為例,它也以中斷處理程序的形式提供這些服務(wù),稱(chēng)為'DOS中斷', 應(yīng)用程序也用'INT n'指令調(diào)用這些服務(wù)。

        也可稱(chēng)為:操作系統(tǒng)提供系統(tǒng)調(diào)用(接口)來(lái)供上層應(yīng)用來(lái)和操作系統(tǒng)交互,進(jìn)而控制系統(tǒng)資源。

例:如計(jì)算機(jī)應(yīng)用程序用 “ int 0x80h” 或者 “ int 0x21h”,通過(guò)操作系統(tǒng)提供的系統(tǒng)調(diào)用來(lái)操作計(jì)算機(jī)資源;

類(lèi)型號(hào)中斷處理程序功能類(lèi)型號(hào)中斷處理程序功能

0

除數(shù)為0中斷

1

單步中斷

2

NMI中斷

3

斷點(diǎn)中斷

4

溢出中斷

5

打印屏幕

6

保留

7

保留

8

定時(shí)中斷( 中斷)

9

鍵盤(pán)中斷( 中斷)

A

保留( 中斷)

B

串行口COM2( 中斷)

C

串行口COM1( 中斷)

D

硬盤(pán)中斷( 中斷)

E

軟盤(pán)中斷( 中斷)

F

打印機(jī)中斷( 中斷)

10

CRT顯示驅(qū)動(dòng)程序

11

設(shè)備檢測(cè)

12

存儲(chǔ)器容量檢測(cè)

13

磁盤(pán)I/O驅(qū)動(dòng)程序

14

RS-232 I/O驅(qū)動(dòng)程序

15

磁帶機(jī)I/O處理

16

鍵盤(pán)I/O驅(qū)動(dòng)程序

17

打印機(jī)驅(qū)動(dòng)程序

18

ROM BASIC

19

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

1A

BIOS日期、時(shí)鐘中斷

1B

BIOS提供的Ctrl_Break處理

1C

定時(shí)器時(shí)標(biāo)(54.9ms)

1D

CRT初始化參數(shù)表

1E

磁盤(pán)參數(shù)

1F

圖形字符集

20

程序結(jié)束

21

DOS系統(tǒng)功能調(diào)用

22

結(jié)束地址

23

DOS的Ctrl_Break處理

24

嚴(yán)重錯(cuò)誤處理

25

磁盤(pán)順序讀

26

磁盤(pán)順序?qū)?/td>

27

程序結(jié)束且駐留(TSR)

28~2E

為DOS保留

2F

DOS內(nèi)部使用

30~3F

DOS保留

40~7F

未用

80~85

BASIC保留

86~F0

BASIC使用

F0~FF

未用

/

/

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

        通過(guò)執(zhí)行事先編好的某個(gè)特定程序,用來(lái)處理中斷信息的程序。

3.1 操作系統(tǒng)為什么要提供系統(tǒng)調(diào)用?

        為防止用戶(hù)程序隨意對(duì)操作系統(tǒng)內(nèi)核區(qū)域的訪問(wèn)與操作,操作系統(tǒng)進(jìn)行權(quán)限控制;

3.2 操作系統(tǒng)如何進(jìn)行權(quán)限限制

        操作系統(tǒng)將內(nèi)存區(qū)域分為了用戶(hù)態(tài)和內(nèi)核態(tài),由于CS:IP是當(dāng)前的指令,所以使用CS的最低兩位來(lái)表示: 0是內(nèi)核態(tài),3是用戶(hù)態(tài)。
        每次訪問(wèn)時(shí),目的指令的DPL >= 當(dāng)前指令的CPL時(shí)才能訪問(wèn),內(nèi)核段的DPL都是為0(在初始化階段DPL就都置成了0) 這樣內(nèi)核態(tài)可以訪問(wèn)任何數(shù)據(jù),用戶(hù)態(tài)不能訪問(wèn)內(nèi)核數(shù)據(jù)。通過(guò)DPL和CPL就實(shí)現(xiàn)了用戶(hù)態(tài)無(wú)法直接訪問(wèn)內(nèi)核態(tài)的內(nèi)容

DPL是目標(biāo)內(nèi)存段的特權(quán)級(jí); CPL是當(dāng)前內(nèi)存段的特權(quán)級(jí)

 3.3 如何訪問(wèn)內(nèi)核函數(shù)

        操作系統(tǒng)提供了中斷指令int 0x80(DOS系統(tǒng)調(diào)用)來(lái)主動(dòng)進(jìn)入內(nèi)核,這是用戶(hù)程序發(fā)起的調(diào)用訪問(wèn)內(nèi)核代碼的唯一方式;

  • 用戶(hù)程序中包含一段包含int指令的代碼,通常是由庫(kù)函數(shù)通過(guò)內(nèi)聯(lián)匯編插入
  • 操作系統(tǒng)根據(jù)編號(hào)(選擇對(duì)應(yīng)的系統(tǒng)調(diào)用函數(shù))執(zhí)行相應(yīng)的代碼

調(diào)用系統(tǒng)函數(shù)時(shí)會(huì)通過(guò)內(nèi)聯(lián)匯編代碼插入int 0x80的中斷指令,(不僅會(huì)插入中斷指令,還會(huì)將系統(tǒng)調(diào)用編號(hào)設(shè)置給 %eax 寄存器)

核心:內(nèi)核接收到int 0x80中斷后,需要查詢(xún)IDT表來(lái)取出中斷處理函數(shù)地址,此處不同與其他操作系統(tǒng)區(qū)域的代碼,int 0x80的idt表中的DPL被設(shè)置成了3,所以能從用戶(hù)態(tài)能直接訪問(wèn)int 0x80的中斷指令的(唯一入口),然后將CPL修改為0(訪管指令),后續(xù)就可以正常訪問(wèn)內(nèi)核代碼。
 

 圖為 IDT表結(jié)構(gòu)

  1. void sched_init(void)
  2. {set_system_gate(0x80, &system_call)}
  3. 在linux/include/asm/system.h中
  4. #define set_system_gate(n, addr) \
  5. _set_gate(&idt[n],15,3,addr); //idt是中斷向量表基址
  6. #define _set_gate(gate_addr, type, dpl, addr)\
  7. __asm__(“movw %%dx,%%ax\n\t” “movw %0,%%dx\n\t”\
  8. “movl %%eax,%1\n\t” “movl %%edx,%2”:\
  9. :”i”((short)(0x8000+(dpl<<13)+type<<8))),“o”(*(( \
  10. char*)(gate_addr))),”o”(*(4+(char*)(gate_addr))),\
  11. “d”((char*)(addr),”a”(0x00080000))

注:這是一段在系統(tǒng)初始化階段執(zhí)行的代碼,主要工作是用來(lái)設(shè)置0x80的中斷處理IDT表項(xiàng),設(shè)置相應(yīng)的&system_call入口函數(shù)的地址。并且注意到這里面會(huì)將0x80的IDT表項(xiàng)的DPL設(shè)置為3,這樣CPL=3用戶(hù)態(tài)的程序就能進(jìn)入,跳入IDT表之后,段選擇符是8,將段和偏移設(shè)置為新的pc,cs=8,ip=&system_call,這個(gè)cs=8 還要再找gdt表,就是從內(nèi)核0位開(kāi)始,此時(shí)CPl已經(jīng)變成了0。也就完成了特權(quán)級(jí)的轉(zhuǎn)化。再下一步,在system_call中會(huì)根據(jù)%eax中跳轉(zhuǎn)到相應(yīng)的處理函數(shù)執(zhí)行,這樣就完成了一個(gè)系統(tǒng)函數(shù)的調(diào)用過(guò)程

四、系統(tǒng)調(diào)用流程

        Linux的系統(tǒng)調(diào)用通過(guò)int 80h實(shí)現(xiàn),用系統(tǒng)調(diào)用號(hào)來(lái)區(qū)分入口函數(shù)。 操作系統(tǒng)實(shí)現(xiàn)系統(tǒng)調(diào)用的基本過(guò)程是:

 4.1 應(yīng)用程序調(diào)用庫(kù)函數(shù)(API)

        (1)應(yīng)用程序如何執(zhí)行?

        通過(guò)執(zhí)行代碼序列,配合用戶(hù)棧完成函數(shù)調(diào)用和返回(調(diào)用函數(shù)時(shí)將PC地址壓棧,當(dāng)調(diào)用結(jié)束時(shí),通過(guò)彈棧實(shí)現(xiàn)返回),實(shí)現(xiàn)順序執(zhí)行和跳轉(zhuǎn)

        注:代碼數(shù)據(jù)段、用戶(hù)棧

        (2)系統(tǒng)函數(shù)在哪里?如何執(zhí)行?

        由于保護(hù)系統(tǒng)函數(shù),通過(guò)權(quán)限集完成;導(dǎo)致用戶(hù)程序無(wú)法執(zhí)行系統(tǒng)函數(shù);

        但是為了用戶(hù)程序能夠執(zhí)行操作系統(tǒng)提供的功能,OS將部分功能程序通過(guò)系統(tǒng)調(diào)用的形式交由用戶(hù)程序執(zhí)行;(syscall)

        通過(guò)調(diào)用int指令,來(lái)執(zhí)行操作系統(tǒng)或者BIOS提供的函數(shù)處理;(中斷、異常、函數(shù)調(diào)用)

        但是為了用戶(hù)程序方便使用,C語(yǔ)言等通過(guò)提供庫(kù)函數(shù),將系統(tǒng)調(diào)用函數(shù)所需要的的參數(shù)等封裝,提供給用戶(hù)程序更簡(jiǎn)單的函數(shù);

     (2) API將系統(tǒng)調(diào)用號(hào)存入EAX,然后通過(guò)中斷調(diào)用使系統(tǒng)進(jìn)入內(nèi)核態(tài);

 4.2 庫(kù)函數(shù)(API);

        (1)通過(guò)封裝思想,提供給用戶(hù)程序更簡(jiǎn)單的函數(shù)調(diào)用

        (2)內(nèi)部將使用函數(shù)調(diào)用,將系統(tǒng)調(diào)用需要的參數(shù)傳入;

        比如:系統(tǒng)調(diào)用號(hào);

 4.3 系統(tǒng)調(diào)用;

        首先,需要明白操作系統(tǒng)也是一個(gè)軟件,只是操作系統(tǒng)直接操作硬件資源,是一個(gè)系統(tǒng)軟件;

       操作系統(tǒng)通過(guò)int指令,主動(dòng)進(jìn)行中斷處理;但是用戶(hù)態(tài)無(wú)法進(jìn)入操作系統(tǒng),所以操作系統(tǒng)提供

     (3) 內(nèi)核中的中斷處理函數(shù)根據(jù)系統(tǒng)調(diào)用號(hào),調(diào)用對(duì)應(yīng)的內(nèi)核函數(shù)(系統(tǒng)調(diào)用);

     (4) 系統(tǒng)調(diào)用完成相應(yīng)功能,將返回值存入EAX,返回到中斷處理函數(shù);

     (5) 中斷處理函數(shù)返回到API中;

     (6) API將EAX返回給應(yīng)用程序。

五、中斷和異常的區(qū)別 系統(tǒng)調(diào)用

 5.1 中斷步驟

        1. 關(guān)中斷(關(guān)中斷在內(nèi)核態(tài))

        2. 保存斷點(diǎn)(將PC指針壓棧)

        3. 中斷服務(wù)程序?qū)ぶ罚ǜ鶕?jù)中斷類(lèi)型號(hào))

        4. 保存現(xiàn)場(chǎng)環(huán)境(PSW和通用寄存器等)

        置屏蔽字

        5. 開(kāi)中斷

        6. 中斷服務(wù)

        7. 關(guān)中斷

        8. 恢復(fù)現(xiàn)場(chǎng)環(huán)境(PSW和通用寄存器等)

        恢復(fù)屏蔽字

        9. 開(kāi)中斷

        10. 中斷返回(將PC指針彈棧)

        (1-10 都在內(nèi)核態(tài)執(zhí)行)

 5.2 異常步驟

        例1:系統(tǒng)調(diào)用

        1. 調(diào)用庫(kù)函數(shù)(將PC指針壓棧(函數(shù)調(diào)用,不同于保存斷點(diǎn)),間接調(diào)用系統(tǒng)函數(shù),傳遞系統(tǒng)調(diào)用號(hào))

        (1 為用戶(hù)態(tài))

       ---------------------------------------------------------------------------------------

        2. 通過(guò)Trap指令,用戶(hù)態(tài)進(jìn)入內(nèi)核

        3. 保存斷點(diǎn)(將用戶(hù)棧指針、段基址寄存器和偏移地址 壓入內(nèi)核棧)

        4. 系統(tǒng)調(diào)用程序?qū)ぶ罚ǜ鶕?jù)系統(tǒng)調(diào)用號(hào))

        5. 保存現(xiàn)場(chǎng)環(huán)境 (將PSW、通用寄存器等依次壓棧 ---- 用什么壓什么)

         6. 系統(tǒng)服務(wù)

         7. 恢復(fù)現(xiàn)場(chǎng)環(huán)境(通用寄存器、PSW等依次退棧)

         8. 中斷返回(將段基址寄存器和偏移地址、用戶(hù)棧指針依次退棧)

        (2-8 為核心態(tài))

5.3 中斷和異常的區(qū)別

    5.3.1 運(yùn)行時(shí)態(tài)不一樣

        中斷是被動(dòng)運(yùn)行,而異常是主動(dòng)運(yùn)行;

        中斷:需要在執(zhí)行周期結(jié)束后檢測(cè),可能被屏蔽或者被關(guān)中斷(這里被關(guān)中斷其實(shí)是在中斷處理過(guò)程中的關(guān)中斷,正常指令執(zhí)行是在用戶(hù)態(tài),無(wú)法關(guān)中斷);

        異常:用戶(hù)程序運(yùn)行在用戶(hù)態(tài),此時(shí)應(yīng)當(dāng)處于開(kāi)中斷模式,當(dāng)CPU檢測(cè)到后立即處理,不存在中斷無(wú)法響應(yīng)的情況;

    5.3.2 運(yùn)行步驟基本一致

          異常和中斷運(yùn)行步驟應(yīng)當(dāng)是完全一直,但由于異常是主動(dòng)執(zhí)行,所以有些差別;

          課本上(尤其計(jì)算機(jī)組成原理)關(guān)于中斷處理過(guò)程的描述并不全;因?yàn)樵敿?xì)過(guò)程會(huì)牽扯到軟件層面(操作系統(tǒng));所以自從中斷響應(yīng)(中斷隱指令)開(kāi)始,都是從內(nèi)核態(tài)的角度出發(fā),未涉及用戶(hù)態(tài),以及用戶(hù)態(tài)到核心態(tài)的轉(zhuǎn)換;

  5.3.3 系統(tǒng)調(diào)用過(guò)程中是否可以被中斷?

        目前推測(cè)出:不可以被中斷,但是可以阻塞,主動(dòng)讓出CPU;

  例:當(dāng)執(zhí)行讀文件操作時(shí),當(dāng)系統(tǒng)函數(shù)執(zhí)行完部分操作后,設(shè)置相應(yīng)操作參數(shù)后,主動(dòng)阻塞讓出CPU,系統(tǒng)調(diào)用和中斷處理程序一樣,都會(huì)關(guān)中斷,但是系統(tǒng)調(diào)用很多會(huì)設(shè)計(jì)IO指令,自動(dòng)阻塞,讓出CPU;

完成系統(tǒng)調(diào)用或中斷處理,返回到用戶(hù)態(tài)前為什么會(huì)產(chǎn)生一次調(diào)度時(shí)機(jī)?

首先,完成系統(tǒng)調(diào)用和中斷處理時(shí),此時(shí)還未恢復(fù)用戶(hù)程序現(xiàn)場(chǎng)環(huán)境;

其次,此時(shí)處于指令周期的執(zhí)行周期末期,如果發(fā)生切換中斷,是允許發(fā)生中斷;

最后,而且這樣的設(shè)計(jì)也利于節(jié)約資源,此時(shí)節(jié)省了用戶(hù)態(tài)進(jìn)入內(nèi)核態(tài)的花銷(xiāo)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多

    在线免费观看一二区视频| 国产又长又粗又爽免费视频| 99久久国产精品亚洲| 视频在线观看色一区二区| 国产精品亚洲二区三区| 成人亚洲国产精品一区不卡| 日韩一级免费中文字幕视频| 国产爆操白丝美女在线观看| 亚洲欧美日韩另类第一页| 在线免费国产一区二区三区| 日本在线高清精品人妻| 欧美小黄片在线一级观看| 欧美午夜色视频国产精品| 色一情一乱一区二区三区码| 91免费精品国自产拍偷拍| 好吊日视频这里都是精品| 欧美国产日产综合精品| 亚洲中文字幕乱码亚洲| 欧美一二三区高清不卡| 老司机激情五月天在线不卡| 欧美日韩中国性生活视频| 国产福利一区二区三区四区| 美国黑人一级黄色大片| 亚洲成人久久精品国产| 色婷婷视频免费在线观看| 亚洲视频一级二级三级| 日韩成人高清免费在线| 日韩精品免费一区三区| 国产日韩熟女中文字幕| 成人免费观看视频免费| 日韩人妻中文字幕精品| 青青操日老女人的穴穴| 日韩人妻中文字幕精品| 麻豆精品在线一区二区三区| 精品一区二区三区乱码中文| 欧美成人欧美一级乱黄| 日韩欧美国产亚洲一区| 国产一级二级三级观看| 日本免费一区二区三女| 老熟女露脸一二三四区| 中文字幕免费观看亚洲视频|