計算機操作系統(四) 操作系統的結構與系統調用

計算機操作系統(四) 操作系統的結構與系統調用

  • 前言
  • 一、操作系統的結構
    • 1.1 簡單結構
    • 1.2 模塊化結構
    • 1.3 分層化結構
    • 1.4 微內核結構
    • 1.5 外核結構
  • 二、系統調用
    • 1.1 系統調用的基本概念
    • 1.2 系統調用的類型
  • 總結(核心概念速記):
    • **知識圖譜**
    • **重點提煉**


前言

  • 在上一篇博客中,我們詳細探討了操作系統的特性、運行環境與核心功能
  • 了解這些知識后,我們對操作系統如何協調硬件資源與軟件程序的交互有了更深入的認識。
  • 本篇博客將繼續深入操作系統的世界,聚焦于操作系統的結構與系統調用這兩個重要方面
  • 通過學習這些內容,你會對操作系統的內部運作有更清晰的理解,為后續深入學習操作系統的其他知識打下堅實基礎

我的個人主頁,歡迎來閱讀我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的操作系統博客專欄
https://blog.csdn.net/2402_83322742/category_12916780.html?spm=1001.2014.3001.5482


在這里插入圖片描述

一、操作系統的結構

1.1 簡單結構

  • 簡單結構的操作系統就像是一個“大雜燴”,它沒有清晰的結構劃分,所有功能都混合在一起
  • 早期的操作系統常采用這種結構,開發起來比較簡單直接,代碼也相對較少。
  • 但是,隨著系統功能不斷增加,這種結構的缺點就暴露出來了。

由于代碼之間的關系不清晰,修改和維護非常困難,一個小的改動可能會影響到系統的其他部分,就像在一團亂麻里找線頭,牽一發而動全身。

  • 比如,早期的一些小型操作系統,為了實現基本的文件管理和進程調度功能,代碼可能寫得很隨意,后期想要優化或者添加新功能,難度極大
    在這里插入圖片描述

1.2 模塊化結構

在這里插入圖片描述

  • 為了解決簡單結構的問題,模塊化結構應運而生
  • 它把操作系統劃分為一個個獨立的模塊,每個模塊負責特定的功能,就好比把一個大工廠分成了不同的車間,每個車間各司其職。
  • 這樣做的好處是,模塊之間的獨立性很強,方便開發和維護。如果某個模塊出現問題,只需要修改這個模塊就行,不會影響其他模塊
  • 例如,在一個模塊化結構的操作系統中,文件管理模塊和進程管理模塊是分開的,當需要優化文件管理功能時,只需要專注于文件管理模塊的代碼,不用擔心對進程管理模塊造成影響。
  • 不同模塊之間通過接口進行通信,這種方式使得操作系統的結構更加清晰
模塊名稱主要功能與其他模塊接口舉例
文件管理模塊負責文件的存儲、讀取、刪除等操作提供文件打開、關閉、讀寫等函數接口給其他模塊調用
進程管理模塊管理進程的創建、銷毀、調度等使用文件管理模塊的接口來讀取進程相關的配置文件

1.3 分層化結構

在這里插入圖片描述

  • 分層化結構則是將操作系統按照功能的層次關系進行劃分,形成一個層次分明的結構,有點像蓋房子,一層一層往上蓋,每一層都依賴于下面的層,同時為上面的層提供服務。

最底層通常是硬件相關的功能,越往上功能越高級。這種結構的優點是層次清晰,易于理解和擴展

  • 當需要添加新功能時,可以在合適的層次添加,不會影響到其他層次
  • 比如,在一個具有分層結構的操作系統中,最底層是硬件驅動層,負責與硬件設備進行交互;中間層是內存管理和進程調度層;

最上層是用戶接口層。當需要優化內存管理功能時,只需要在內存管理這一層進行修改,不會影響到硬件驅動層和用戶接口層

層次名稱功能描述對上一層提供的服務依賴的下層服務
硬件驅動層與硬件設備交互,控制硬件工作提供硬件訪問接口,如磁盤讀寫接口直接操作硬件
內存管理層管理內存的分配、回收等提供內存分配和釋放函數調用硬件驅動層的內存訪問接口
進程調度層調度進程執行根據進程狀態進行調度依賴內存管理層分配內存給進程
用戶接口層提供用戶與操作系統交互的界面接收用戶輸入并返回處理結果調用進程調度層執行用戶請求

1.4 微內核結構

  • 微內核結構是一種比較先進的操作系統結構。
  • 它把操作系統的核心功能盡量簡化,只保留一些最基本、最關鍵的功能在微內核中
    • 比如進程管理、內存管理的基本部分和通信機制等。而其他功能則以服務器的形式運行在用戶空間,通過微內核提供的接口進行交互。

這就好比一個公司,核心管理層只負責最重要的決策,其他具體業務交給各個部門去做。微內核結構的優點是系統的擴展性和靈活性非常強,當需要添加新功能或者修改某個功能時,只需要在相應的服務器中進行調整,不需要修改微內核本身。

同時,由于微內核很小,安全性也相對較高。例如,在一些嵌入式操作系統中,微內核結構能夠很好地適應不同的硬件環境,方便開發者根據需求定制系統功能

1.5 外核結構

在這里插入圖片描述

  • 外核結構與前面幾種結構有所不同,它的設計理念是將硬件資源以一種更靈活的方式呈現給上層軟件。
  • 外核并不像傳統操作系統那樣對硬件資源進行過多的管理和抽象,而是讓上層軟件根據自己的需求去直接管理硬件資源。
  • 這就好比把一間毛坯房交給住戶,住戶可以按照自己的想法去裝修和布置。外核結構適用于一些對性能要求極高、對資源管理有特殊需求的場景,比如高性能計算領域
  • 在這種結構下,上層軟件可以根據具體的應用場景,優化對硬件資源的利用,提高系統的整體性能。

二、系統調用

1.1 系統調用的基本概念

  • 系統調用是操作系統提供給應用程序的接口,它就像是一扇通往操作系統內部功能的大門
  • 應用程序通過系統調用請求操作系統提供服務,比如讀取文件、創建進程等。為什么應用程序不能直接訪問硬件資源呢?
  • 這是因為操作系統需要對硬件資源進行統一管理,保證系統的穩定性和安全性。如果每個應用程序都可以隨意訪問硬件,那么系統很容易出現混亂。

當應用程序發起系統調用時,CPU會從用戶態切換到內核態,然后操作系統根據系統調用的類型執行相應的操作

  • 操作完成后,再把結果返回給應用程序,CPU又從內核態切換回用戶態。
  • 例如,當你在一個文本編輯軟件中保存文件時,軟件會調用操作系統的文件保存系統調用,操作系統接收到這個請求后,會在磁盤上找到合適的位置存儲文件內容,最后把保存成功或者失敗的信息返回給文本編輯軟件

1.2 系統調用的類型

系統調用的類型有很多,常見的包括以下幾類:

系統調用類型功能描述舉例
進程管理創建、銷毀進程,進程調度等fork()函數用于創建一個新進程
文件管理文件的打開、關閉、讀寫、刪除等open()函數用于打開一個文件,read()函數用于讀取文件內容
內存管理內存的分配、回收等malloc()函數用于在堆內存中分配指定大小的內存空間
設備管理對硬件設備的控制和操作write()函數用于向設備(如打印機)輸出數據
信息維護獲取和設置系統信息,如時間、日期等time()函數用于獲取當前系統時間

這些系統調用為應用程序提供了豐富的功能支持,使得開發者可以專注于應用程序的業務邏輯,而不用過多地關注底層硬件的細節

總結(核心概念速記):

核心概念速記
操作系統結構與系統調用 = 多樣結構演進 + 豐富調用體系 + 性能與應用關聯

  • 操作系統結構演進
    • 簡單結構(早期“大雜燴”)→ 模塊化結構(功能分模塊)→ 分層化結構(功能分層)→ 微內核結構(核心精簡)→ 外核結構(靈活資源管理)。
    • 簡單結構易開發難維護微內核結構擴展性與安全性高外核結構適合高性能場景
  • 系統調用體系
    • 系統調用是應用與系統交互接口CPU在用戶態與內核態切換完成調用
    • 常見調用類型:進程管理(fork())、文件管理(open()read())、內存管理(malloc())、設備管理(write())、信息維護(time())。
  • 性能與應用關聯
    • 不同結構影響系統性能與擴展性,如分層化結構便于功能擴展微內核結構可定制性強
    • 系統調用支撐應用功能實現,開發者通過調用專注業務邏輯,提升開發效率。

操作系統結構對比

結構類型特點優點缺點適用場景
簡單結構功能混合,無清晰劃分開發簡單,代碼量少維護困難,牽一發而動全身早期小型系統、簡單功能場景
模塊化結構功能分模塊,模塊獨立方便開發維護,模塊問題不影響其他模塊接口設計復雜中等規模系統,功能相對獨立場景
分層化結構功能分層,上層依賴下層層次清晰,易于理解擴展,修改一層不影響其他層層間交互可能有性能損耗大型系統,功能層次分明場景
微內核結構核心功能精簡,其他功能以服務器形式在用戶空間運行擴展性靈活性強,安全性高微內核與服務器通信開銷嵌入式系統、對安全性擴展性要求高場景
外核結構硬件資源靈活呈現給上層軟件,上層直接管理資源適應特殊資源管理需求,性能高上層軟件開發難度大高性能計算等對資源管理有特殊需求場景

系統調用分類與功能關系

調用分類 → 功能領域 → 典型調用函數 → 應用場景  ↓          ↓           ↓            ↓  進程管理 → 進程操作 → `fork()` → 創建新進程  文件管理 → 文件操作 → `open()`、`read()` → 讀寫文件  

知識圖譜

計算機操作系統(四) 操作系統的結構與系統調用  
├─ 操作系統結構  
│  ├─ 簡單結構(早期“大雜燴”)  
│  ├─ 模塊化結構(功能分模塊)  
│  ├─ 分層化結構(功能分層)  
│  ├─ 微內核結構(核心精簡)  
│  └─ 外核結構(靈活資源管理)  
├─ 系統調用體系  
│  ├─ 基本概念(應用與系統交互接口)  
│  ├─ 調用類型(進程/文件/內存/設備/信息維護)  
│  ├─ 調用流程(用戶態到內核態切換)  
│  └─ 應用場景(支撐應用功能實現)  
├─ 關鍵術語  
│  ├─ 進程管理、文件管理、內存管理  
│  ├─ 用戶態、內核態、系統調用接口  
│  └─ 模塊化、分層化、微內核、外核  
└─ 性能與應用  ├─ 結構對性能擴展性影響  ├─ 系統調用對應用開發作用  └─ 不同場景下結構與調用選擇  

重點提煉

  1. 操作系統結構特色

    • 簡單結構向復雜結構演進,滿足不同規模與功能需求。
    • 微內核結構和外核結構代表先進設計理念,適應特殊場景需求。
  2. 系統調用核心邏輯

    • 系統調用是應用獲取系統服務關鍵途徑,保證系統安全穩定。
    • 熟悉常見系統調用類型,有助于高效開發應用程序。
  3. 結構與調用實踐意義

    • 根據應用場景選擇合適操作系統結構,優化系統性能。
    • 合理使用系統調用,避免過度或不當調用影響系統效率。
  4. 技術演進趨勢

    • 單一結構設計混合結構融合,提升系統綜合性能。
    • 系統調用接口標準化與簡化,降低開發門檻。

操作系統結構性能對比表

指標簡單結構模塊化結構分層化結構微內核結構外核結構
開發難度中等較高較高
維護難度中等
擴展性很好好(特定場景)
安全性中等中等中等(依賴上層軟件)
性能開銷低(無額外開銷)中等(接口調用開銷)中等(層間交互開銷)較高(通信開銷)低(直接管理資源)

操作系統技術演進脈絡

技術演進 —— 簡單結構(早期) → 模塊化結構(功能分治) → 分層化結構(層次管理) → 微內核/外核結構(先進設計)  ↓         ↓               ↓               ↓  
應用升級 —— 簡單功能實現 → 中等規模應用 → 大型復雜系統 → 特殊場景定制系統  

以上就是對本次關于操作系統博客內容的總結,后續我們將深入探討操作系統更多知識。

我的個人主頁,歡迎來閱讀我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的操作系統博客專欄
https://blog.csdn.net/2402_83322742/category_12916780.html?spm=1001.2014.3001.5482

非常感謝您的閱讀,喜歡的話記得三連哦

在這里插入圖片描述

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

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

相關文章

深入解析 Spring IOC AOP:原理、源碼與實戰

深入解析 Spring IOC & AOP:原理、源碼與實戰 Spring 框架的核心在于 IOC(控制反轉) 和 AOP(面向切面編程)。今天,我們將深入剖析它們的原理,結合源碼解析,并通過 Java 代碼實戰…

LLM之RAG理論(十四)| RAG 最佳實踐

RAG 的過程很復雜,包含許多組成部分。我們如何確定現有的 RAG 方法及其最佳組合,以確定最佳 RAG 實踐? 論文 《Searching for Best Practices in Retrieval-Augmented Generation》給出了回答。 本文將從以下三方面進行介紹: 首先…

利用knn算法實現手寫數字分類

利用knn算法實現手寫數字分類 1.作者介紹2.KNN算法2.1KNN(K-Nearest Neighbors)算法核心思想2.2KNN算法的工作流程2.3優缺點2.4 KNN算法圖示介紹 3.實驗過程3.1安裝所需庫3.2 MNIST數據集3.3 導入手寫數字圖像進行分類3.4 完整代碼3.5 實驗結果 1.作者介…

C語言-適配器模式詳解與實踐

文章目錄 C語言適配器模式詳解與實踐1. 什么是適配器模式?2. 為什么需要適配器模式?3. 實際應用場景4. 代碼實現4.1 UML 關系圖4.2 頭文件 (sensor_adapter.h)4.3 實現文件 (sensor_adapter.c)4.4 使用示例 (main.c) 5. 代碼分析5.1 關鍵設計點5.2 實現特…

Rust函數、條件語句、循環

文章目錄 函數**語句與表達式**條件語句循環 函數 Rust的函數基本形式是這樣的 fn a_func(a: i32) -> i32 {}函數名是蛇形風格,rust不在意函數的聲明順序,只需要有聲明即可 函數參數必須聲明參數名稱和類型 語句與表達式 這是rust非常重要的基礎…

maptalks圖層交互 - 模擬 Tooltip

maptalks圖層交互 - 模擬 Tooltip 圖層交互-模擬tooltip官方文檔 <!DOCTYPE html> <html><meta charsetUTF-8 /><meta nameviewport contentwidthdevice-width, initial-scale1 /><title>圖層交互 - 模擬 Tooltip</title><style typet…

好吧好吧,看一下達夢的模式與用戶的關系

單憑個人感覺&#xff0c;模式在達夢中屬于邏輯對象合集&#xff0c;回頭再看資料 應該是一個用戶可以對應多個模式 問題來了&#xff0c;模式的ID和用戶的ID一樣嗎&#xff1f; 不一樣 SELECT USER_ID,USERNAME FROM DBA_USERS WHERE USERNAMETEST1; SELECT ID AS SCHID, NA…

python socket模塊學習記錄

python黑馬程序員 通過python內置socket模塊&#xff0c;在電腦本地開發一個服務器&#xff0c;一個客戶端&#xff0c;連接后進行連續的聊天。服務器和客戶端均可輸入exit&#xff0c;主動退出連接。 服務器開發.py import socket# 創建Socket對象 socket_server socket.s…

7-2 sdut-C語言實驗-逆序建立鏈表

7-2 sdut-C語言實驗-逆序建立鏈表 分數 20 全屏瀏覽 切換布局 作者 馬新娟 單位 山東理工大學 輸入整數個數N&#xff0c;再輸入N個整數&#xff0c;按照這些整數輸入的相反順序建立單鏈表&#xff0c;并依次遍歷輸出單鏈表的數據。 輸入格式: 第一行輸入整數N;&#xff…

針對永磁電機(PMM)的d軸和q軸電流,考慮交叉耦合補償,設計P1控制器并推導出相應的傳遞函數

電流控制回路:針對永磁電機(PMM)的d軸和q軸電流&#xff0c;考慮交叉耦合補償&#xff0c;設計P1控制器并推導出相應的傳遞函數。 1. 永磁電機&#xff08;PMM&#xff09;的數學模型 在同步旋轉坐標系&#xff08; d ? q d - q d?q 坐標系&#xff09;下&#xff0c;永磁同…

ROS多機通信(四)——Ubuntu 網卡 Mesh 模式配置指南

引言 使用Ad-hoc加路由協議和直接Mesh模式配置網卡實現的網絡結構是一樣的&#xff0c;主要是看應用選擇&#xff0c; Ad-Hoc模式 B.A.T.M.A.N. / OLSR 優點&#xff1a;靈活性高&#xff0c;適合移動性強或需要優化的復雜網絡。 缺點&#xff1a;配置復雜&#xff0c;需手動…

chap1:統計學習方法概論

第1章 統計學習方法概論 文章目錄 第1章 統計學習方法概論前言章節目錄導讀 實現統計學習方法的步驟統計學習分類基本分類監督學習無監督學習強化學習 按模型分類概率模型與非概率模型 按算法分類按技巧分類貝葉斯學習核方法 統計學習方法三要素模型模型是什么? 策略損失函數與…

爬蟲案例-爬取某站視頻

文章目錄 1、下載FFmpeg2、爬取代碼3、效果圖 1、下載FFmpeg FFmpeg是一套可以用來記錄、轉換數字音頻、視頻&#xff0c;并能將其轉化為流的開源計算機程序。 點擊下載: ffmpeg 安裝并配置 FFmpeg 步驟&#xff1a; 1.下載 FFmpeg&#xff1a; 2.訪問 FFmpeg 官網。 3.選擇 Wi…

車載以太網網絡測試-22【傳輸層-DOIP協議-5】

目錄 1 摘要2 DoIP時間參數2.1 ISO 13400定義的時間參數2.2 參數示例 3 DoIP節點內部狀態機4 UDSonIP概述5 總結 1 摘要 本文繼續對DOIP協議進行介紹&#xff0c;主要是DOIP相關的時間參數、時間參數定義以及流程示例。推薦大家對上文專題進行回顧&#xff0c;有利于系統性學習…

(論文總結)思維鏈激發LLM推理能力

研究背景&動機 背景:擴大模型規模已被證實具有提升模型性能和模型效率的功效&#xff0c;但是LLM對于完成推理、算術任務仍有較大不足。 動機:從之前的應用和研究中得知&#xff0c;可以用生成自然語言解釋、使用神經符號等形式語言的方法來提高大模型的算術推理能力&…

前后端開發概述:架構、技術棧與未來趨勢

一、前后端開發的基本概念 1.1 什么是前后端開發&#xff1f; 前后端開發是 Web 開發的兩個核心部分&#xff0c;各自承擔不同的職責&#xff1a; 前端&#xff08;Frontend&#xff09; 負責網頁的用戶界面&#xff08;UI&#xff09;和用戶體驗&#xff08;UX&#xff09;…

anythingLLM結合searXNG實現聯網搜索

1、docker-compose 部署searXNG GitHub - searxng/searxng-docker: The docker-compose files for setting up a SearXNG instance with docker. cd /usr/local git clone https://github.com/searxng/searxng-docker.git cd searxng-docker 2、修改 .env文件 # By default…

人形機器人科普

人形機器人&#xff08;Humanoid Robot&#xff09;是一種模仿人類外形和行為的機器人&#xff0c;通常具有頭部、軀干、雙臂和雙腿等結構。它們的設計目標是與人類環境無縫交互&#xff0c;執行復雜的任務&#xff0c;甚至在某些領域替代人類工作。 1. 人形機器人的定義與特點…

【CICD】Ansible知識庫

一、主機清單配置 1. 配置文件路徑 默認路徑 /etc/ansible/hosts 這是 Ansible 的全局默認庫存文件路徑&#xff0c;但許多用戶可能不會直接使用它。項目目錄或自定義路徑 用戶通常會為不同項目創建獨立的庫存文件&#xff0c;例如&#xff1a; 當前目錄下的 hosts、inventor…

ArkUI-List組件

列表是一個復雜的容器&#xff0c;當列表項達到一定數量&#xff0c;使得列表內容超出其范圍的時候&#xff0c;就會自動變為可以滾動。列表適合用來展現同類數據類型。 List的基本使用方法 List組件的構建聲明是這個樣子的 List(value?: {space?:number | string, initial…