Linux 進程基礎(二):操作系統

目錄

  • 一、什么是操作系統:用戶和電腦之間的「翻譯官」
    • 🌐 OS 的層狀結構
    • 🧩 案例解析:雙擊鼠標的「跨層之旅」
  • 二、操作系統的必要性探究:缺乏操作系統的環境面臨的挑戰剖析
    • 🔑 OS 的「管理者」屬性:三大核心價值
  • 三、操作系統如何管理進程: 從「雙擊打開應用」看進程管理本質
    • 📊 管理的本質:用數據描述,用規則(組織)調度
    • 進程管理的三大核心任務
    • 🔄 系統調用 vs 庫函數
  • 四、廣義的 OS 與狹義的 OS
    • 1. 狹義的操作系統
    • 2. 廣義的操作系統


一、什么是操作系統:用戶和電腦之間的「翻譯官」

操作系統(Operating System,簡稱 OS)

想象一下:當你雙擊桌面上的 Firefox 圖標時,鼠標的物理點擊是如何讓瀏覽器「蹦」出來的?這個過程中離不開OS的作用——它是介于用戶與計算機硬件之間的「超級中間人」,既能聽懂人類的「操作語言」(如鼠標點擊),又能指揮硬件「干活」(如讓 CPU 運行程序)。

🌐 OS 的層狀結構

從底層到上層,OS 的結構可以分為六層「保護殼」,各層相互協作,共同構建起操作系統的運行體系:

層級名稱功能描述關鍵組件/示例特點/備注
硬件層構成計算機物質基礎,處理0/1電信號鼠標、鍵盤、CPU、內存比如雙擊鼠標時,微動開關產生的電信號就是硬件層的「原始語言」,這是整個交互過程的起點。
內核層操作系統核心,包含驅動程序、進程調度器、內存管理器等關鍵組件。直接與硬件對話,翻譯硬件信號驅動程序、進程調度器、內存管理器比如將鼠標的電信號轉換為「鼠標左鍵雙擊事件」。
? 大多數基礎硬件驅動(如鼠標、鍵盤驅動)作為內核組件或可加載模塊存在于內核空間,但部分外設驅動可能在用戶空間實現(如通過特定框架),具體取決于操作系統的架構設計。
系統調用層提供內核服務的官方接口open()用于打開文件、execve()用于執行程序例如,應用程序必須通過系統調用層向內核請求服務。系統調用是用戶態與內核態的唯一通道,必須通過此層請求內核服務
庫函數層封裝系統調用簡化開發。如同 「便捷工具包」C語言的fopen():封裝open()避免開發者直接處理復雜內核接口,降低開發難度。
用戶接口層提供用戶與系統交互的橋梁圖形用戶界面:GUI(Windows、Linux(GNOME/KDE)、macOS)
命令行界面:CLI(Bash/Zsh)
如:鼠標點擊、ls命令
支持圖形化操作(拖拽/點擊)與命令行操作,它將系統功能以直觀易懂的方式呈現給用戶
應用層承載用戶直接操作的軟件,用戶通過點擊圖標、輸入文字等方式與 OS 交互。瀏覽器、文檔編輯器……存在兩種狀態:
? 空閑態:系統無用戶程序運行時,但系統進程仍在運行維持基本服務
? 活動態:當用戶運行應用程序時,應用層則成為用戶實現各種功能的直接載體

🧩 案例解析:雙擊鼠標的「跨層之旅」

當你雙擊 Firefox 圖標時:

  • 硬件層:鼠標發送電信號到 USB 控制器,觸發硬件中斷(給 CPU 發「緊急通知」)。
  • 內核層:鼠標驅動解析信號為坐標(100, 200)和點擊事件,窗口管理器根據坐標找到 Firefox 圖標對應的程序路徑(/usr/lib/firefox/firefox)。
  • 系統調用層:內核調用execve()函數,將 Firefox 的可執行文件從硬盤加載到內存。
  • 用戶接口層:接收鼠標雙擊事件,根據圖標對應的程序路徑,通過系統調用層觸發程序啟動,并在界面上展示應用啟動的反饋。
  • 應用層:Firefox 進程啟動,界面顯示在屏幕上,用戶得以開始使用瀏覽器。

系統調用:用戶態與內核態的「唯一通道」,用戶接口層:「交互邏輯的起點」
在上述雙擊案例中,用戶接口層通過系統調用read()接收鼠標雙擊事件,并將 “鼠標雙擊的物理事件” 轉換為 “啟動特定程序” 的 邏輯命令,通過 系統調用 告知內核 “需要啟動程序”。

例如: Linux:調用 fork() 創建新進程,再通過 execve() 指定加載 Firefox 的可執行文件。
Windows:調用CreateProcess() API,最終觸發內核的 NtCreateUserProcess() 系統服務。

至此:用戶的 “雙擊動作” 被完整解析為操作系統可執行的 啟動命令,等待內核執行。

操作系統
馮諾依曼體系
系統調用: read
返回事件數據
解析為指令
系統調用: execve
創建進程
調度執行
應用運行
驅動程序
內核
用戶接口層
輸入設備 - 鼠標
存儲器 - 內存
運算器/控制器 - 內核調度
輸出設備 - 顯示器
用戶雙擊鼠標
應用界面顯示

馮?諾依曼體系與操作系統(OS)結合的視角來看,用戶雙擊鼠標這一操作,鼠標作為輸入設備,把物理動作轉化為電信號,此為輸入過程。操作系統的驅動程序如同數據處理的 “翻譯官”,將電信號解析為內核能處理的事件數據,內核負責存儲與管理這些數據。用戶接口層依據系統調用從內核獲取事件,把它解析為打開應用的指令,這是信息在軟件層面的邏輯處理
隨后,用戶接口層借助系統調用向內核發起啟動應用的請求,內核按照馮?諾依曼體系中控制器的角色,創建新進程,將應用程序從存儲設備(如硬盤)加載到內存(存儲器)中,如同將程序指令和數據存入存儲器,為執行做準備。
接著,內核調度進程執行,如同控制器指揮運算器進行操作,讓應用程序得以運行。
最后,應用程序將處理結果輸出到顯示器(輸出設備),完成整個信息的輸入 - 處理 - 輸出循環,體現了馮?諾依曼體系結構與操作系統協同工作的原理。


二、操作系統的必要性探究:缺乏操作系統的環境面臨的挑戰剖析

在缺乏 OS 的情境下,計算環境將遭遇一系列嚴峻挑戰,可歸納為以下典型場景:
場景 1:直接和硬件交互

  • 想打開文件:你需要自己寫代碼操作硬盤控制器,記住每個扇區的地址(比如第 1024 號扇區存了文件頭)。
  • 想移動鼠標:你得解析 USB 協議,把 X/Y 軸的位移量轉化為屏幕坐標(而且不同品牌鼠標的信號格式可能完全不同!)。

場景 2:資源混亂大戰

  • 兩個程序同時訪問內存地址 0x1000:數據沖突導致崩潰。
  • 打印機正在打印文檔,突然另一個程序強行占用:紙張亂碼、任務卡死。

🔑 OS 的「管理者」屬性:三大核心價值

  • 硬件抽象:讓鼠標、鍵盤、硬盤等設備對用戶和應用程序來說都是「統一的接口」(比如 Linux 把所有設備都視為文件,鼠標對應/dev/input/mice)。
  • 資源管理:合理分配 CPU 時間(讓多個程序輪流運行)、內存空間(避免數據互相覆蓋)、I/O 設備(比如打印機一次只處理一個任務)。
  • 安全隔離:用戶態(應用程序)不能直接訪問內核態(硬件控制),防止惡意程序破壞系統(比如病毒無法直接改寫 CPU 寄存器)。

三、操作系統如何管理進程: 從「雙擊打開應用」看進程管理本質

回到雙擊 Firefox 的案例:當你點擊圖標時,OS 其實在做一件大事——創建一個進程。進程是「正在運行的程序實例」,而 OS 對進程的管理,本質是對「數據」的管理。

📊 管理的本質:用數據描述,用規則(組織)調度

  • 管理對象:數據
    • 每個進程都有一個「進程控制塊(PCB)」,記錄進程 ID(PID)、狀態(運行 / 暫停 / 終止)、內存地址、CPU 使用時間等信息(相當于進程的「身份證 + 簡歷」)。
    • 當你打開多個程序時,OS 通過 PCB 區分不同進程,比如 Firefox 進程的 PID 是 1234,Chrome 進程的 PID 是 5678。
  • 管理方式:數據組織 + 規則執行
    • 數據組織:用鏈表(比如「就緒隊列」存放等待 CPU 的進程)、樹結構(比如進程家族樹,父進程創建子進程)管理所有 PCB。
    • 規則執行:通過調度算法(比如 Linux 的 CFS 調度器)決定哪個進程優先使用 CPU,通過同步機制(比如互斥鎖)避免多個進程同時修改共享數據。

進程管理的三大核心任務

  1. 進程調度
  • 為什么需要調度: CPU 同一時間只能執行一個進程,但用戶感覺多個程序在同時運行(比如邊聽歌邊寫文檔),這靠的是 OS 讓 CPU 在多個進程間快速切換(每秒切換上百次)。
  • 調度算法怎么做? 時間片輪轉:給每個進程分配固定時間片(比如 10ms),時間到了就切換(適合交互式程序,比如鼠標點擊響應)。
  • 優先級調度:重要進程(比如系統服務)優先運行,比如 Firefox 響應用戶點擊時,OS 會臨時提高它的優先級,讓 CPU 先處理它的事件。
  1. 進程同步
  • 案例:兩個進程同時向同一個文件寫入數據,如果沒有同步機制,可能導致數據錯亂 (比如進程 A 寫入「hello」時,進程 B 插入「world」,最終文件變成「hewlorldlo」)。
  • 解決辦法:
    • 互斥鎖:進程 A 訪問文件時加鎖,進程 B 必須等待鎖釋放(就像上廁所關門,別人只能等)。
    • 信號量:記錄可用資源數量,比如打印機同時允許 3 個進程排隊,第 4 個進程必須等待。
  1. 進程通信
  • 為什么需要通信? 比如你用瀏覽器下載文件時,下載進程需要告訴界面進程「下載進度 60%」,這就需要進程間通信(IPC)。
  • 通信方式: 管道:單向數據流,比如ls | grep txt中,ls的輸出通過管道傳給grep。
  • 共享內存:多個進程直接訪問同一塊內存區域(速度最快,但需要同步機制避免沖突)。
  • 套接字(Socket):跨網絡的進程通信(比如瀏覽器進程和 Web 服務器進程通過 Socket 傳輸數據)。

🔄 系統調用 vs 庫函數

  • 系統調用:直接調用內核提供的接口(比如open()對應內核的sys_open()函數),是用戶態進入內核態的「唯一通道」。雙擊 Firefox 時,execve()就是系統調用,告訴內核「我要運行這個程序」。
  • 庫函數:對系統調用的封裝(比如 C 語言的printf()最終會調用系統調用write()),目的是讓程序員寫代碼更方便。比如你不需要記住write()的參數順序,直接用printf(“%d”, num)即可。

庫函數通常由以下幾個主體提供:

  1. 編程語言標準庫
    概述:每種編程語言都會定義并提供一套標準庫,這些庫函數是語言的重要組成部分,為開發者提供了基礎且常用的功能。
  • 示例
    • C 語言:C 標準庫提供了大量的庫函數,像字符串處理函數 strcpy()、strlen(),數學運算函數 sin()、cos()等。這些函數由 C 語言標準委員會(如 ISO C)定義,不同的編譯器(如 GCC、Clang)會按照標準實現這些庫函數。
    • Python:Python 的標準庫十分豐富,涵蓋了文件操作、網絡編程、數據處理等多個領域。例如 os 模塊提供了與操作系統交互的函數,datetime 模塊用于處理日期和時間。Python 解釋器自帶這些標準庫,開發者可以直接使用。
  1. 操作系統相關庫
    概述:操作系統為了方便開發者進行系統級編程,會提供一些特定的庫函數。這些庫函數通常與操作系統的功能緊密相關,如文件系統操作、進程管理、網絡通信等。
  • 示例
    • Windows 操作系統:提供了 Windows API(應用程序編程接口),這是一系列的庫函數,用于開發 Windows平臺的應用程序。例如,CreateProcess() 函數用于創建新的進程,MessageBox() 函數用于顯示消息框。
    • Linux操作系統:提供了豐富的系統調用封裝庫,如 glibc(GNU C 庫)。glibc 不僅包含了 C 標準庫的實現,還對 Linux系統調用進行了封裝,方便開發者使用。例如,fopen() 函數是對 open() 系統調用的封裝,用于文件打開操作。
  1. 第三方庫
    概述:除了編程語言標準庫和操作系統相關庫,還有大量的第三方庫可供開發者使用。這些庫由不同的組織、公司或個人開發,用于滿足特定的需求,如科學計算、圖形處理、機器學習等。
  • 示例
    • NumPy:是 Python 的一個第三方庫,用于進行高效的數值計算。它提供了多維數組對象和各種數學函數,大大提高了 Python在科學計算領域的性能。
    • OpenCV:是一個開源的計算機視覺庫,提供了大量的圖像處理和計算機視覺算法,可用于圖像識別、目標檢測、視頻分析等領域。開發者可以在自己的項目中集成這些第三方庫,以快速實現特定的功能。

四、廣義的 OS 與狹義的 OS

1. 狹義的操作系統

定義
狹義的操作系統僅指操作系統的核心功能層,即 內核(Kernel) 及其相關底層機制,是操作系統中最核心、最底層的軟件模塊。

典型示例

  • Linux 內核(linux-kernel)、Windows 內核(NT Kernel)、macOS 內核(XNU)等。

2. 廣義的操作系統

定義
廣義的操作系統是指以內核為核心,包含用戶空間所有配套軟件和工具的完整軟件系統,覆蓋從底層硬件控制到上層用戶交互的全鏈條。

組成部分

  1. 內核(狹義OS)
    • 同上述狹義定義,是廣義OS的核心底層。
  2. 系統工具與實用程序
    • Shell:命令行交互界面(如Linux的Bash、Windows的PowerShell),解析用戶命令并調用系統功能。
    • 文件管理工具:資源管理器(Windows)、文件瀏覽器(Linux GUI)、磁盤分區工具(如fdisk)等。
    • 系統服務:后臺運行的守護進程(Daemon),如網絡服務(DNS、DHCP)、日志服務等。
  3. 用戶接口與圖形環境
    • 圖形用戶界面(GUI):窗口管理器(如Linux的GNOME/KDE、Windows的Explorer)、桌面環境、圖標/菜單系統等。
    • 輸入輸出支持:鼠標、鍵盤、顯示器的驅動及交互邏輯,多媒體處理(音頻/視頻解碼)等。
  4. 系統庫與開發接口
    • 運行時庫:對系統調用的封裝(如C語言的glibc、Windows的MSVCRT),簡化用戶程序開發。
    • API(應用程序接口):供開發者調用的接口(如POSIX標準、Windows API),屏蔽底層硬件差異。
  5. 預裝應用與服務
    • 基礎應用程序(如文本編輯器、計算器、瀏覽器)、安全機制(權限管理、防火墻)、網絡協議棧(TCP/IP、WiFi驅動)等。

典型示例

  • 完整的操作系統發行版,如 Ubuntu(內核+GNOME桌面+系統工具+預裝軟件)、Windows 10(NT內核+資源管理器+PowerShell+UWP應用)、Android(Linux內核+Java運行時+系統應用+圖形框架)。

兩者的關系可類比為“發動機”(狹義內核)與“整車”(廣義OS):內核提供動力,而廣義OS在此基礎上構建了完整的駕駛艙、交互界面和實用功能。


END

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/79406.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/79406.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/79406.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

第 11 屆藍橋杯 C++ 青少組中 / 高級組省賽 2020 年真題,選擇題詳細解釋

一、選擇題 第 2 題 在二維數組按行優先存儲的情況下,元素 a[i][j] 前的元素個數計算如下: 1. **前面的完整行**:共有 i 行,每行 n 個元素,總計 i * n 個元素。 2. **當前行的前面元素**:在行內&#x…

1??7??three.js_OrbitControls相機控制器

17、相機軌道控制器 3D虛擬工廠在線體驗相機軌道控制器OrbitControls 它是 Three.js 中最常用的交互控制器之一,專門用于通過鼠標/觸摸控制相機圍繞一個目標點(target)旋轉、縮放和平移。import {OrbitControls } from three/addons/controls/OrbitControls.js; const cont…

以下是在 Ubuntu 上的幾款PDF 閱讀器,涵蓋輕量級、功能豐富和特色工具:

默認工具:Evince(GNOME 文檔查看器) 特點:Ubuntu 預裝,輕量快速,支持基本標注和書簽。 安裝:已預裝,或手動安裝: sudo apt install evince功能全面:Okular&…

基于用戶場景的汽車行駛工況構建:數據驅動下的能耗優化革命

行業現狀:標準工況與用戶場景的割裂 全球汽車行業普遍采用WLTC工況進行能耗測試,但其與真實道路場景差異顯著。據研究,WLTC工況下車輛能耗數據比實際道路低10%-30%,導致用戶對續航虛標投訴激增(數據來源:東…

chili3d調試10 網頁元素css node deepwiki 生成圓柱體 生成零件圖片

.input是input的外框,.input input是input的內框 沙雕 全部input都換成textarea了 自己的方法用接口定義,把自己的方法pub出去,定義在內部拉出去只是取個值 這其實是mainwindow端pub回來的 窗口pub端把數據pub回 mainwindow端讓mainwindow端…

Redis 啟用 TLS 加密傳輸配置

Redis 啟用 TLS 加密傳輸配置 一、Redis TLS 加密概述 Redis 從 6.0 版本開始原生支持 TLS 加密傳輸,可以保護客戶端與服務器之間的通信安全,防止數據被竊聽或篡改。 二、準備工作 確認 Redis 版本?: redis-server --version確保版本 ≥…

【Linux】深入理解程序地址空間

🌟🌟作者主頁:ephemerals__ 🌟🌟所屬專欄:Linux 目錄 前言 一、什么是程序地址空間 二、深入理解程序地址空間 1. 引例 2. 理解地址轉化 3. 再談程序地址空間 4. 補充知識 總結 前言 在現代操作系…

【深度學習-Day 5】Python 快速入門:深度學習的“瑞士軍刀”實戰指南

Langchain系列文章目錄 01-玩轉LangChain:從模型調用到Prompt模板與輸出解析的完整指南 02-玩轉 LangChain Memory 模塊:四種記憶類型詳解及應用場景全覆蓋 03-全面掌握 LangChain:從核心鏈條構建到動態任務分配的實戰指南 04-玩轉 LangChai…

解決在 Linux 中 WPS 字體缺失問題

解決在 Linux 中 WPS 字體缺失問題 安裝方式 安裝方式 首先下載你所需要的字體文件 在字體文件所在的目錄下右鍵點擊在命令行中打開 或 Open in Terminal sudo mkdir /usr/share/fonts/myfontssudo cp ./* /usr/share/fonts/myfonts執行命令,更新字體緩存 sudo fc…

668SJBH報刊發行系統

1 前言 隨著我國信息產業的迅猛發展,手工管理方式已不適應社務管理的要求,報社的日常管理正面臨著信息化的挑戰,采用計算機管理以提高服務質量和管理水平勢在必行。發行管理是社務管理的一個重要組成部分,是報社和客戶聯系的紐帶…

K8S - 從零構建 Docker 鏡像與容器

一、基礎概念 1.1 鏡像(Image) “軟件的標準化安裝包” ,包含代碼、環境和配置的只讀模板。 技術解析 鏡像由多個層組成,每層對應一個Dockerfile指令: 應用代碼 → 運行時環境 → 系統工具鏈 → 啟動配置核心特性…

better_fbx 下載

目錄 v6.0.5下載: better_fbx 下載 v6.0.5下載: Blender FBX模型導入導出插件 Better FBX Importer & Exporter V6.0.5V5.4.10 For Blender 2.8 | 齲齒一號GFXCamp better_fbx 下載 How To Install Launch Blender, navigate to Edit->User P…

Spring AOP 典型應用場景

AOP 典型應用場景 1. 日志記錄(Logging)代碼實現 2. 權限校驗(Authentication)代碼實現 3. 性能監控(Performance Monitoring)代碼實現 4. 緩存處理(Caching)代碼實現 5. 重試機制&a…

開始一個vue項目-day2

這次新增的功能有: 1、使用cookie存儲token 參考網站:https://vueuse.org/ 安裝包: npm i vueuse/integrations npm i universal-cookie^7 2、cookie的設置讀取和刪除,代碼:composables/auth.js import { useCookies } from …

「Mac暢玩AIGC與多模態18」開發篇14 - 多字段輸出與結構控制工作流示例

一、概述 本篇在輸入變量基礎上,演示如何通過執行 LLM 節點輸出多個結構化字段,并傳遞至結束節點。開發人員將掌握如何配置結構化輸出格式,實現提示詞與字段的準確映射,為后續引入條件判斷、循環結構等邏輯控制建立結構輸出規范基礎。 二、環境準備 macOS 系統Dify 平臺已…

JWT解析

什么是JWT JSON Web Token (JWT) 是一種開放標準 (RFC 7519),它定義了一種緊湊且獨立的方式,用于在各方之間以 JSON 對象的形式安全地傳輸信息。此信息可以驗證和信任,因為它是經過數字簽名的。…

C語言中的自定義類型 —— 結構體.位段.聯合體和枚舉

自定義類型 1. 前言2. 結構體2.1 結構體的聲明2.2 結構體變量的定義和初始化2.3 結構體的特殊聲明2.4 結構體的自引用2.5 結構體的內存對齊2.6 修改默認對齊數2.7 結構體傳參 3. 位段4. 聯合體5. 枚舉6. 結言 1. 前言 在C語言中已經為用過戶提供了內置類型,如&…

StarRocks 查詢優化器深度解析

StarRocks 查詢優化器概覽 1. Development History of StarRocks 過去五年,StarRocks 發布了三個大版本: StarRocks 1.0:通過向量化引擎和 CBO,打造極速 OLAP 數據庫。 StarRocks 2.0:通過主鍵模型、數據湖分析和查詢…

如何提高情商?(優化版)

引言 提高情商(EQ)是一個需要長期練習和自我反思的過程,核心在于理解自己、管理情緒、共情他人并有效溝通。以下是一些具體且可操作的方法,結合理論和實際場景,幫助你逐步提升: 一、核心方法:…

Python爬蟲實戰:獲取好大夫在線各專業全國醫院排行榜數據并分析,為患者就醫做參考

一、引言 在當今醫療資源豐富但分布不均的背景下,患者在選擇合適的心血管內科醫院時面臨諸多困難。好大夫在線提供的醫院排行榜數據包含了醫院排名、線上服務得分、患者評價得分等重要信息,對患者選擇醫院具有重要的參考價值。本研究通過爬取該排行榜數據,并進行深入分析,…