簡體   English   中英

MIPS CPU 如何斷電?

[英]How does a MIPS CPU power down?

MIPS I 兼容 CPU 上的假設 OS 內核如何實際實現系統調用 10,從而停止所有執行並關閉電源?

長長的故事:

我目前正在構建一個 MIPS 仿真器,專門基於 MIPS I 架構規范; 我已經(幾乎)處理了它附帶的整個 ISA,並在此過程中做出了一些深刻而有趣的發現。 我也在涉足特權資源,以及任何涉及系統協處理器 (COP0) 的事情。

我打算編寫一個在特權上下文中處理異常/系統調用/陷阱的基本內核,主要是為了從內核模式的角度模擬系統調用是如何執行的; 目前困擾我的是終止系統調用,代碼 10。我希望能找到一些(特權)指令,像HLT對 x86 那樣停止執行; 然而,我能找到的最接近它的是WAIT指令。

WAIT實際上是為了將 CPU 切換到低功耗模式並等待中斷而設計的,它存在於 ISA 中,因此也可以在用戶模式下使用; 沒有終止執行的跡象,盡管我可以從中找出某種方法來制造它。

然而; 我覺得我走錯了路,MIPS 規范的 IA、II-A 和 III 卷對我沒有多大幫助。 換句話說:有人知道在執行 syscall 10 后在真正的 MIPS CPU 中實際發生了什么嗎?

系統調用 10

Syscall號總是特定於操作系統:Linux下的MIPS版本使用比SPIM模擬器完全不同的系統調用號。

出於這個原因,您最好不要談論“ syscall 10 ”,而是談論“ SPIM 中的 syscall 10 ”(或您正在談論的任何操作系統或模擬器)以避免誤解。

MIPS I 兼容 CPU 上的假設操作系統內核如何實際實現系統調用 10 ...

首先:在“SPIM”模擬器上,“syscall 10”是exit ,而不是shutdown

exit不會關閉計算機,但會停止多任務操作系統中當前正在運行的任務。 操作系統簡單地釋放當前任務的所有資源(例如,它將任務使用的內存標記為“空閑”)並且不再調度該任務。

所有其他任務(以及操作系統和 CPU)繼續運行。

... 確實像HLT那樣停止執行...

我不確定HLT在現代 x86 CPU 上的真正作用。 在早期的 Intel CPU 上, HLT指令只是執行跳轉回自身,直到發生中斷。

這意味着 CPU 沒有執行一次HLT指令,而是一次又一次地執行該指令(就像一個無限循環中的JMP指令)。

如果發生中斷,則無限循環中斷(在HLT之后的下一條指令后繼續執行); 如果沒有中斷發生(可以使用CLI + HLT組合強制執行),CPU 將進入無限循環,但不會斷電。

...停止所有執行,然后關閉電源?

這是shutdown

CPU 內核通常沒有此功能; CPU 之外的一些硬件正在執行此操作。

就像所有其他硬件(鍵盤、屏幕、磁盤……)一樣,使用 I/O 地址訪問負責的硬件單元:

當連接到不支持特殊 I/O 地址空間(例如 x86 上的INOUT指令)的 CPU 時,將使用“常規”(內存)地址。

假設電源單元在地址 0xF1234560 處連接到您的系統(僅作為示例),並且在向該地址寫入值 0x789 時電源關閉。 在這種情況下,以下順序將關閉您的系統:

LUI a0, 0xF123
ORI a1, zero, 0x789
SW a1, 0x4560(a0)

而且因為這個硬件單元位於CPU之外,所以你不會在 CPU 手冊中找到任何關於它的信息。

當然,在使用相同 CPU 類型的不同類型計算機中使用完全不同的不同硬件單元! (所以沒有“典型的 MIPS 電源單元”。)

在 1990 年代(當大多數 MIPS 台式計算機建成時),系統根本無法通過軟件關閉電源,但屏幕上會打印一些消息(“請關閉計算機”)並且 CPU只是進入一個無限循環......

暫無
暫無

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

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