Process

程序的記憶體部分

  • February 24, 2022

根據教科書《作業系統概念第9》。程序的記憶體分為不同的部分。其中一個部分是數據部分。該書指出:

非正式地,如前所述,程序是正在執行的程序。程序不僅僅是程式碼,有時也稱為文本部分。它還包括目前活動,由程序計數器的值和處理器寄存器的內容表示。

“目前活動”的確切含義是什麼?這是否意味著程序的程序計數器和處理器寄存器的內容都儲存在文本部分中?

可執行程式碼(文本部分)是只讀的,因此它不能儲存“目前活動”(程序)的任何變數值。

該語句表示程序狀態包括程序計數器和寄存器;當程序處於活動狀態時,它們不在記憶體中,它們在 CPU 中。當程序不活動時,它們會保存到記憶體中。

在 Linux 上編譯的程序以稱為ELF的二進制格式儲存。有報告內容的實用程序;執行nm -n -greadelf -l在二進製文件上執行以了解這一點。

程序內容根據它們的保護和初始化要求進行分組,因此核心可以在載入它們時強制執行只讀頁面並阻止初始化。您可以在Wikipedia 的“數據段”文章中找到對記憶體佈局的描述;它省略了歷史上與 Unix 中的程式碼一起保存在文本中的 rodata(只讀數據)。

儲存“目前活動”取決於 CPU 架構。Linux具有搶先調度。CPU 可以執行一個程序,接收一個中斷,然後在下一個週期執行其他東西。CPU 本身在中斷期間將最少量的上下文壓入堆棧:程序計數器、處理器標誌和錯誤程式碼。然後它跳轉到核心中已在中斷描述符表中預先配置的地址。

然後核心必須儲存任何剩餘的 CPU 寄存器和其他上下文,因為當它最終使用從中斷返回指令重新啟動時,它需要重建被中斷程序的確切狀態。您可以在此處閱讀有關 Linux 中的中斷處理的更多資訊。

引用自:https://unix.stackexchange.com/questions/691774