理解作業系統和記憶體在 Unix 系統中如何工作的問題
我是一名數學本科生,目前正在學習作業系統課程,但電腦科學背景很少。
以下是我所知道的基礎知識 - 作業系統恰好有 2 個部分 -
- 文件管理系統,因為 Linux 中的一切都可以被視為一個文件
- 控制硬碟和其他設備的設備驅動程序
現在,假設我們要執行一個應用程序 A,所以要執行應用程序 A,我們需要將應用程序 A 的執行檔從硬碟載入到記憶體中。
現在這是我對如何完成的想法。我不確定它是否正確,我真的很感激一些幫助。
- 作業系統的文件管理系統知道,要執行應用程序 A,我們需要來自硬碟的應用程序 A 的執行檔,其地址由文件描述符表提供(我不確定,但我想如果我想定址文件A.out 的地址是 2475,然後在文件描述符表中我有一個變數,比如 i,它儲存文件 A.out 的地址和程序將從文件中讀取的指針(這就是為什麼不同程序的文件描述符表不一樣?這個文件描述符表儲存在哪裡?在RAM中嗎?)。
- 現在獲得了關於我們應該處理什麼的足夠資訊,我們從一個空白空間開始說“buff”(我假設記憶體中的空間),現在處理硬碟的設備驅動程序可能會從給定的硬碟上傳資訊位置並將其上傳到“buff”。
這是我所理解的。如果我的理解與事實有太多的矛盾,請原諒我。需要一些幫助,也需要一些關於如何清除我的概念的建議。
編輯1:假設我將應用程序的執行檔載入到記憶體中,然後我有一個文件描述符,它實際上是我們打開應用程序的執行檔時打開的文件數的索引,現在這個文件描述符指向一個文件表(核心中只有一個文件表,它儲存文件的詳細資訊,說明有多少文件描述符指向它,它在那個點處於什麼模式以及它的 ID(它是地址關於記憶體?)。不同文件描述符表中的不同文件描述符有可能指向同一個資源
如果這是您從課程中學到的,那麼您對該課程的質量有一些嚴重的懷疑。對作業系統和磁碟訪問功能的完整解釋遠遠超出了問答網站的範圍。所以我會給你一個簡短的全球解釋,其中缺少很多細節和細微差別。這些也是粗略的簡化。
一個作業系統做的比你的兩個基本功能要多得多。這在一定程度上取決於您使用的術語的確切定義以及您查看的作業系統(例如 Windows,在作業系統中包含 GUI),但功能至少包括:
- 作業調度
- 記憶體管理
- 文件/文件系統訪問
- 流程管理和流程溝通
- 聯網
所以,通過你的解釋:
作業系統的文件管理系統明白,要執行應用程序 A,我們需要從硬碟中獲取應用程序 A 的執行檔,其地址由文件描述符表提供
呃沒有。它不是作業系統的文件管理系統。除了第一個程序(不同形式的init)之外,程序是由另一個程序創建的。例如,如果您
ls
從終端執行操作,您使用的 shell 會要求作業系統載入程序。在 Linux 和 Unix 中,術語“文件描述符”可能與您課程中的含義有所不同;您應該(至少現在)將“文件描述符表”替換為“i-node 表”。
作業系統的文件(系統)功能然後在 i-node 表中搜尋文件在磁碟上的位置。i-node 表是文件系統的一部分,儲存在磁碟上。但是,作業系統會在記憶體中保留一份副本(記憶體)以防止不必要的磁碟訪問。
那麼,打開文件時會發生什麼?使用者程序使用文件名對作業系統進行文件打開呼叫。作業系統將名稱轉換為磁碟上的位置(使用 I 節點表)並分配一個文件描述符以供將來對該文件的引用,直到它再次關閉。
下面,作業系統的設備函式告訴磁碟控制器將磁碟的某些扇區載入到記憶體中,因此文件系統函式可以將其轉換為字節流或塊流。