[操作系統] 深入理解操作系統的概念及定位


概念
任何計算機系統都包含?個基本的程序集合,稱為操作系統(OS)。
其核心功能如圖片所示,包括:

- 內核 (Kernel):
內核是操作系統的核心部分,被認為是狹義上的操作系統,直接與硬件打交道。負責進程管理、內存管理、文件管理和設備管理。
在圖片中,內核被描述為包含關鍵功能,例如:- 進程管理:如何調度任務、切換任務、分配 CPU 時間片。
- 內存管理:分配和釋放內存、提供虛擬內存功能。
- 文件管理:存儲和訪問磁盤上的文件。
- 驅動管理:硬件與系統的接口。
- 其他程序:
除了內核外,操作系統還包括輔助用戶交互和程序開發的組件,例如函數庫、Shell 程序等。
操作系統的設計目的

對下管理硬件資源(不是目的,是手段)
如圖所示,操作系統與硬件直接交互,管理所有軟硬件資源。它可以屏蔽底層硬件的復雜性,為應用程序提供統一的接口。例如:
- CPU 時間的分配;
- 內存的分配與回收;
- 文件的讀取與寫入。
對上為用戶和應用程序提供環境(目的,服務用戶)
操作系統為用戶程序提供執行環境,包括:
- 抽象硬件: 屏蔽底層復雜的硬件接口;
- 系統調用: 提供基礎功能調用接口,例如文件操作、內存分配等。
圖片中通過銀行窗口的比喻形象地說明了這一點:
- 用戶(用戶程序)與銀行柜員(操作系統)交互,柜員接收用戶指令,完成后臺操作;
- 銀行后臺資源(硬件)被柜員高效管理,用戶無需直接接觸。
操作系統如何通過分層結構和接口設計實現資源管理和安全性?
軟件硬件系統結構層狀結構
理解:
- 軟件和硬件系統是層次化的,系統的不同層次之間通過接口進行交互。
- 硬件位于底層,它是最基礎的物理資源,直接負責執行指令和存儲數據。
- 操作系統位于硬件之上,充當中間層,負責管理硬件資源并為上層應用程序提供接口。
- 應用程序在最上層運行,用戶通過應用程序與硬件進行間接交互。
例子:
- 用戶通過一個文本編輯器(應用程序)保存文件,實際調用了操作系統的文件系統接口,最終將數據寫入硬件(磁盤)。
- 這種分層結構讓硬件的復雜性被操作系統屏蔽,開發者只需關注高層的接口,而不需要了解硬件的底層操作。
訪問操作系統,必須使用系統調用
理解:
- 系統調用是應用程序與操作系統交互的橋梁。通過系統調用,應用程序可以訪問操作系統管理的資源(如文件、網絡、內存等)。
- 系統調用本質上就是操作系統提供的一組函數,通過這些函數,應用程序可以向操作系統發出請求,完成特定的任務。
例子:
- 程序需要讀取文件時,會通過調用系統調用
read()請求操作系統打開文件、讀取內容。 - 這些調用本質上是程序員使用的函數,但這些函數是操作系統實現的,而不是直接操作硬件。
關鍵點:
- 系統調用是操作系統對外暴露的功能接口,它們是固定的,程序必須通過這些接口訪問硬件資源。
訪問硬件時,必須穿越整個軟件硬件體系結構
理解:
- 如果程序需要訪問硬件(如讀取硬盤、打印文件等),操作必須逐層向下傳遞:
- 程序向操作系統發出系統調用請求。
- 操作系統內部將請求映射到具體的硬件驅動程序。
- 硬件驅動直接控制硬件完成任務。
- 這種機制確保了硬件操作的安全性和一致性,因為操作系統充當了硬件和程序之間的“守門人”。
例子:
- 一個瀏覽器需要加載網頁,最終會訪問網絡適配器(硬件)發送請求。這個過程包括:
- 瀏覽器調用系統的網絡 API;
- 操作系統將請求傳遞給網絡驅動程序;
- 驅動程序控制網絡硬件發送數據包。
關鍵點:
- 程序無法直接訪問硬件,必須經過操作系統。操作系統確保硬件資源的安全和公平使用。
庫函數可能底層封裝了系統調用
理解:
- 庫函數是對系統調用的進一步封裝,提供了更高級、更易用的功能。底層的系統調用是基礎功能,而庫函數對其進行了擴展和優化。
- 通過調用庫函數,開發者無需直接與復雜的系統調用打交道,而是通過更簡單的接口完成同樣的任務。
例子:
- C 語言的
printf()函數用于輸出內容到終端,它底層調用了操作系統的write()系統調用來完成實際的輸出。 - 類似地,標準庫函數
fopen()封裝了文件操作的系統調用,使開發者可以更簡單地處理文件。
關鍵點:
- 庫函數是對系統調用的進一步抽象,提供了更方便的功能,同時隱藏了底層實現細節。
小結
這四個要點說明了操作系統作為用戶程序與硬件之間的橋梁,如何通過分層結構和接口設計實現資源管理和安全性:
- 軟件硬件的層狀結構讓復雜的硬件操作被逐層抽象。
- 系統調用是訪問操作系統的唯一合法方式,程序必須通過它請求資源。
- 程序訪問硬件時,必須經過操作系統的管理,確保硬件安全和公平。
- 庫函數對系統調用進行了封裝,使開發更加方便。
這種機制體現了操作系統設計的核心思想——通過抽象和封裝,隱藏復雜性,提供易用性,同時確保安全性和穩定性。
操作系統的核心功能
管理。
在整個計算機軟硬件架構中,操作系統的定位是:一款純正的“搞管理”的軟件。 (決策,執行)
管理時,管理與被管理者可以不需要見面:

一個學校的校長(管理者)不需要直接與每個學生(被管理者)接觸,就可以管理整個學校。這是因為校長可以通過輔導員或者班主任提供的學生數據(如成績、出勤率等)來完成管理。
管理者(如操作系統)和被管理者(如進程、內存、文件等)之間的交互并不需要直接接觸。它們通過數據(描述信息)來完成管理,而不是通過面對面或者直接交互。換句話說,操作系統不需要直接干預具體的硬件或程序,只需要維護這些被管理對象的狀態和描述信息,然后根據需要進行操作。
管理者和被管理者,根據“數據”進行管理:
數據是管理的核心。操作系統不直接操作資源本身,而是通過對資源數據的讀取和操作來實現管理。
管理的核心是數據,管理者通過記錄和操作被管理者的相關數據實現對其的控制。在操作系統中,這些數據通常存儲在內核中,描述了被管理資源的狀態和屬性。
不需要見面,由中間層獲取得到數據:
在學校中,校長通過輔導員獲取學生的信息,而不需要直接接觸每個學生。輔導員就像操作系統中的“中間層”,負責收集數據并提供給校長。
操作系統作為“中間層”負責采集和維護資源數據,通過這些數據為用戶程序提供服務。被管理者(如硬件設備、程序)本身并不會直接暴露其內部信息,而是通過操作系統的中間層將這些數據呈現給管理者。
將上文所述例子進行延伸,如果學生的數量過多則會造成管理的不便,所以就會使用數據結構將學生的信息進行存儲,用結構體將一個學生的信息進行存儲,然后將所有結構體進行聯系。
同樣,操作系統對管理的進程、內存、文件等就可以將他們的狀態和描述信息進行存儲在結構體中,然后使用合適的數據結構進行管理,進行增刪查改。
系統調用與庫函數
系統調用
操作系統要向上提供服務。
但是操作系統不信任任何用戶,所以會有系統調用的概念。
操作系統對外暴露的接口稱為系統調用,是用戶程序與操作系統交互的橋梁。
通過接口可以降低操作系統和用戶之間的耦合度,不同的服務對應不同的接口,提高安全性。
例如:
- 文件操作:創建、刪除、讀寫文件;
- 進程操作:創建進程、終止進程;
- 內存操作:分配和釋放內存。
庫函數
只要庫函數最終使用了硬件,則該庫函數一定使用了系統調用。
系統調用直接提供基礎功能,但對于用戶來說,使用這些功能可能過于復雜。因此,開發者會基于系統調用開發封裝好的庫函數。
比如軟件的使用中我們只需要點擊對應的按鍵,即可執行程序員已經封裝好的系統調用。程序員用已經把系統調用封裝好的庫函數再次進行封裝成接口,提供給用戶使用,這就是對上進行服務。
例如:
printf()是基于 I/O 系統調用封裝的函數;- 標準 C 庫(如
libc)對操作系統的功能進行了更高層次的抽象。
管理的本質
描述和組織。
比如,大部分高級語言都可以面向對象編程,以及有類似于STL庫的使用。面向對象,將事物用結構體進行封裝的過程實際上就是描述,用STL庫使用數據結構將結構體進行管理就是將描述后的內容進行組織。
- 描述被管理對象:
使用數據結構(如結構體)對資源進行描述。例如:- 文件描述符;
- 進程控制塊(PCB)。
- 組織被管理對象:
使用數據結構(如鏈表、隊列)將資源高效組織起來。例如:- 進程調度使用的就緒隊列;
- 內存管理中的空閑鏈表。
這種管理方式貫穿于操作系統的各個模塊,是操作系統高效運行的核心思想。
承上啟下:操作系統的核心價值
操作系統的核心價值體現在:
- 對資源的統一管理和抽象: 提供統一的接口,屏蔽硬件復雜性;
- 保障用戶程序的安全與高效: 防止資源沖突,提高系統性能。
操作系統的管理方法(描述 + 組織)也貫穿其設計理念:
- 描述資源(結構體);
- 組織資源(鏈表等高效數據結構)。
通過以上詳細的講解,我們可以更好地理解操作系統在計算機系統中的定位:它既是硬件資源的管理者,又是用戶與硬件交互的橋梁。無論是進程管理、內存管理還是文件管理,操作系統的設計哲學始終圍繞“管理”展開。
本文來自博客園,作者:DevKevin,轉載請注明原文鏈接:http://www.rzrgm.cn/kevinbee/p/18678187

浙公網安備 33010602011771號