簡體   English   中英

內核-Linux-內核在哪里與cpu通信?

[英]Kernel - Linux - Where does the kernel talks to the cpu?

內容:

Linux64。英特爾酷睿2雙核處理器。

題:

Linux內核在哪里與cpu“通信”? 我閱讀了調度程序的源代碼,但無法理解它們如何通信以及內核如何告知CPU需要處理某些內容。

我知道有運行隊列,但是難道不存在使內核能夠通過總線中斷cpu的東西嗎?

更新資料

它擴展了我最初的問題了一下:我們如何判斷CPU,可在任務隊列?

因為cpu必須輪詢某些內容,所以我想我們會在某個時候告訴它。 在內核代碼中錯過了這一點。

我將嘗試對它的工作方式進行簡化的解釋,並告訴我是否不清楚。

CPU只做一件事:執行指令。 它將從預定義的地址開始並執行。 就這樣。 有時您會遇到一個中斷,這將使CPU暫時跳轉到另一條指令。

內核是一個程序(=一系列指令),可以很容易地執行其他程序。 內核將根據自己的需要進行設置。 這通常包括構建要運行的進程的列表。 “進程”的定義完全取決於內核,因為如您所知,CPU只做一件事。

現在,當內核運行時(由CPU執行),它可能會決定需要執行一個進程。 為此,內核將簡單地跳轉到處理程序。 它的完成方式無關緊要,但是在大多數操作系統中,內核會將一個定期中斷(CPU會定期跳轉)映射到一個函數,該函數決定執行哪個進程並跳轉到該進程。 它不是必需的,但它很方便,因為程序會定期強制性地“中斷”程序,因此也可以執行其他程序。

綜上所述,CPU並不“知道”任何東西。 內核運行,並將跳轉到其他進程代碼以使其運行。 只有內核“知道”。

Linux內核是一個程序。 它不會像這樣“與” CPU“對話”。 CPU有一個特殊的寄存器,即程序計數器 (PC),它指向CPU正在處理的內核的當前執行。

內核本身包含許多服務。 其中之一管理任務隊列。 任務隊列中的每個條目都包含有關任務的信息。 這樣的信息之一就是在其上運行任務的CPU內核。 當內核決定服務應執行某些工作時,它將調用其功能。 這些功能由CPU解釋的指令組成。 它們中的大多數都會更改CPU的狀態(例如,使PC前進,更改寄存器值,設置標志,啟用/禁用CPU內核等)。

這意味着CPU沒有輪詢任何東西。 根據調度程序,使用不同的策略來處理任務隊列。 最簡單的方法是基於計時器的:內核安裝一個計時器中斷(即,它將中斷處理程序的地址寫在某個地方,再加上將計時器配置為每隔幾毫秒引起一次中斷)。

然后,處理程序將查看任務隊列,並根據其策略決定要執行的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM