成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

操作系統(tǒng)是如何一步步發(fā)明中斷機制的?

系統(tǒng) 其他OS
現(xiàn)在CPU不再需要一遍遍檢查設備狀態(tài)而是可以專注于執(zhí)行正常任務的機器指令,當外部設備需要CPU關注時發(fā)起中斷信號,然后CPU將跳轉到提前定義好的中斷處理函數(shù)去執(zhí)行。
1960年代初期,你正在開發(fā)一個批處理系統(tǒng),用于自動化處理大量的數(shù)據(jù)任務。

系統(tǒng)需要頻繁地與磁帶機和打印機等外部設備交互。然而,這些設備的響應速度遠遠低于CPU的處理速度。例如,磁帶機讀取一個數(shù)據(jù)塊需要約100毫秒,而打印機打印一行數(shù)據(jù)更是需要超過600毫秒。

在等待設備響應的過程中,CPU只能不斷地查詢設備狀態(tài),就像這樣:

int poll_count = 0;

// 輪詢等待打印機就緒
while (1) {
    poll_count++;
    if (check_printer_status() == PRINTER_READY) {
        send_to_printer(print_data);
        break;
    }
}

這就是所謂輪詢,這個示例程序通過不斷輪詢打印機狀態(tài)來等待設備就緒,只要打印機不READY你就沒有辦法跳出這個while循環(huán),這導致大量的計算資源被浪費。

靈感時刻

1954年IBM 704的出現(xiàn)給了你靈感,因為這臺機器上出現(xiàn)了一種有趣的特性。

圖片

IBM 704 具有一個溢出標志位(Overflow Flag, OV),它會在某些算術運算(如加法、乘法等)導致溢出時被設置,程序員可以手動檢查這個標志位,并根據(jù)需要進行錯誤處理:

ADD MQ        // AC = AC + MQ,可能導致溢出
   TOV ERROR     // 如果 OV 標志為 1,則跳轉到 ERROR 處理異常
   TRA CONTINUE  // 否則繼續(xù)執(zhí)行程序

ERROR 
   // 錯誤處理指令
CONTINUE
   // 繼續(xù)執(zhí)行其他指令

圖片 圖片 你看到后想了一下,為什么要程序員自己手寫匯編來檢查異常呢,實現(xiàn)在CPU硬件層面就好了,出現(xiàn)A錯誤就跳轉到X代碼,出現(xiàn)B錯誤就跳轉到Y代碼等等,這樣程序員只需要編寫正常的處理邏輯就好。

以程序除0錯誤為例:

void test_division() {
    int a = 10;
    int b = 0;  // 除數(shù)為零
    int result = a / b;  // CPU立即觸發(fā)異常處理
    // 這行代碼永遠不會執(zhí)行
    printf("結果是: %d\n", result);
}

當CPU執(zhí)行到除法操作時,它能夠立即檢測到除數(shù)為零的情況,并自動跳轉到異常處理程序(提前定義好的),而不是等待程序員自己檢查除數(shù)是否為零。

中斷的發(fā)明

這種機制給你帶了新的啟示:實際上這相當于軟件出現(xiàn)異常后可以通知CPU去執(zhí)行一段異常處理邏輯,而且整個過程非常絲滑,因為異常處理邏輯是提前定義好的,CPU能根據(jù)異常類型去執(zhí)行不同的異常處理邏輯。

到這里你靈光乍現(xiàn),既然軟件能通知CPU那么外部設備顯然也可以通知CPU。

圖片圖片

可以把上述機制應用在外部設備上,為此你進行了如下設計:

  1. 硬件層面:外部設備通過特定的信號線連接到CPU
  2. 信號觸發(fā):設備就緒時產(chǎn)生電平變化
  3. CPU響應:檢測到信號后立即切換到處理程序
  4. 任務恢復:處理完成后返回原程序繼續(xù)執(zhí)行

這種設計可以讓CPU不再需要主動查詢設備狀態(tài),而是由設備在就緒時主動通知CPU,從而大大減少了CPU資源的浪費,到這里你發(fā)明了中斷機制。

圖片圖片

中斷的實現(xiàn)

現(xiàn)在CPU不但能響應軟件異常也能響應外部設備,這些統(tǒng)統(tǒng)被稱為中斷。

只不過來自軟件的就被稱為軟中斷,比如除零錯誤、內(nèi)存訪問違規(guī)、系統(tǒng)調用等;來自硬件的就被稱之為硬中斷,比如I/O設備中斷(如打印機、磁盤完成操作)、時鐘中斷等。

你在自己實現(xiàn)的內(nèi)核中定義了這些中斷類型:

// 中斷類型定義
typedefenum {
    // 硬件中斷
    INT_PRINTER = 0,    // 打印機中斷
    INT_DISK = 1,       // 磁盤中斷
    INT_TIMER = 2,      // 時鐘中斷
    INT_KEYBOARD = 3,   // 鍵盤中斷
    
    // 軟件中斷
    INT_DIVIDE_BY_ZERO = 4,    // 除零錯誤
    INT_PAGE_FAULT = 5,        // 頁面錯誤
    INT_SYSTEM_CALL = 6,       // 系統(tǒng)調用
    
    MAX_INTERRUPT_TYPE = 7
} InterruptType;

除此之外你還需要實現(xiàn)中斷處理函數(shù),中斷處理函數(shù)應該能處理所有類型的中斷,其本質就是一個函數(shù)數(shù)組,你將其命名為中斷向量表:

// 中斷處理函數(shù)的類型定義
typedef void (*InterruptHandler)(void);

// 中斷向量表結構
typedef struct {
    InterruptHandler handlers[MAX_INTERRUPT_TYPE];
    bool enabled[MAX_INTERRUPT_TYPE];        // 中斷使能狀態(tài)
} InterruptVectorTable;

從其定義可以看到:

  • 中斷向量表是一個存儲中斷號與對應中斷處理程序入口地址映射的表格。
  • 每個中斷號對應一個特定的事件(如硬件中斷、系統(tǒng)調用、異常等),中斷向量表中的每個條目通常包含:中斷處理程序的入口地址、可能還包括其他信息(如中斷優(yōu)先級、狀態(tài)標志等)。

當發(fā)生中斷時,CPU使用中斷號作為索引,查找中斷向量表中的對應條目,從而獲取中斷處理程序的入口地址,其本質就是:

void handle_interrupt(InterruptVectorTable* ivt, InterruptType type) {
  ...
  ivt->handlers[type]();
  ...
}

現(xiàn)在CPU不再需要一遍遍檢查設備狀態(tài)而是可以專注于執(zhí)行正常任務的機器指令,當外部設備需要CPU關注時發(fā)起中斷信號,然后CPU將跳轉到提前定義好的中斷處理函數(shù)去執(zhí)行。

現(xiàn)在你應該對操作系統(tǒng)的中斷機制有所了解了吧。

責任編輯:武曉燕 來源: 碼農(nóng)的荒島求生
相關推薦

2025-04-03 01:45:00

2025-04-30 04:20:00

操作系統(tǒng)虛擬內(nèi)存

2024-09-30 09:56:59

2024-11-11 10:28:33

操作系統(tǒng)Unix系統(tǒng)

2024-09-12 10:04:06

內(nèi)存程序系統(tǒng)

2025-04-09 08:45:00

操作系統(tǒng)進程線程

2018-07-13 15:36:52

2024-08-30 08:30:29

CPU操作系統(tǒng)寄存器

2017-01-19 21:08:33

iOS路由構建

2017-12-25 11:50:57

LinuxArch Linux

2024-08-06 09:29:54

程序機器指令字符串

2019-03-05 14:09:27

Docker存儲容器

2019-07-09 15:23:22

Docker存儲驅動

2018-12-24 10:04:06

Docker存儲驅動

2019-04-01 10:15:02

2010-03-04 16:28:17

Android核心代碼

2016-11-02 18:54:01

javascript

2017-01-06 15:13:25

LinuxVim源代碼

2015-07-27 16:06:16

VMware Thin虛擬化

2024-06-27 08:30:36

內(nèi)存擴容堆區(qū)
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 福利网址 | 欧美日韩在线观看视频网站 | 伊人狠狠| 午夜免费| 午夜精品一区二区三区免费视频 | 国产精品xxxx| 国产精品免费一区二区三区 | 高清av电影 | 嫩草91在线| 亚洲精品在线免费 | 国产在线精品一区二区三区 | 天天爽综合网 | 中文字幕一区二区三区四区五区 | 操久久| 亚洲精品在线视频 | 天堂亚洲 | 日韩精品国产精品 | 精品国产一区二区三区在线观看 | 神马九九 | 亚洲一区二区久久 | 国产美女精品视频免费观看 | 九九热最新地址 | 久久99深爱久久99精品 | 亚洲精品一区二区三区丝袜 | av黄色免费在线观看 | 操操操av| 亚洲区一区二区 | 91久久久久久久久久久 | 欧美男人天堂 | 国产精品久久久久久久久污网站 | 黄色在线免费播放 | 成人av一区二区亚洲精 | 国内精品久久久久久 | 日韩欧美久久精品 | 久久综合伊人一区二区三 | 久久久国产一区二区三区 | 99国产精品久久久 | 精品欧美一区二区三区精品久久 | 色视频免费 | 韩日一区二区三区 | 日日夜夜精品视频 |