1、操作系統引論

一、操作系統

會使用linux系統
建議大家先學會linux的基礎指令,可以看菜鳥教程網站進行學習。

1、各種定義

  • 操作系統定義
    • 管理計算機的 硬件軟件資源, 能對各類作業進行調度,方便用戶使用計算機的程序集合
    • 操作系統運行在內核態(也叫管態,核心態)。在這個狀態,操作系統可以對所有的硬件訪問。

注意:操作系統是最基礎的軟件

  • 用戶接口程序定義
    • 用戶接口程序有shell和GUI
      • shell:用戶與操作系統交互的程序,基于文本的是shell。
      • GUI:用戶與操作系統交互的程序,基于圖標的是GUI。

注意:用戶接口程序并不屬于操作系統。

  • 信息
    • 位(bit)+ 上下文(context)= 信息
      • 位(Bit) 是計算機中最小的數據單位,表示一個二進制的 0 或 1
      • 上下文 是數據所處的環境或規則,決定了如何解釋這些位
    • ASCII碼構成的文件就是文本文件
    • 其余是二進制文件
  • 內核態和用戶態
    • 內核態:
      • 操作系統的“核心大腦”,權限高但需謹慎操作。
    • 用戶態:
      • 普通程序的“沙箱”,權限受限但安全
        • 所以操作系統會把一部分代碼放在內核態另一部分放在用戶態保證安全
  • 程序接口
    • 普通用戶無法直接使用程序接口,而是使用系統調用來用程序接口。

在這里插入圖片描述

2、程序被其他程序翻譯成不同格式

在linux的gcc編譯器下。我們有一些對文件的操作。操作系統和編譯器是輔助關系

這些操作是【巧妙記憶:ESc iso】
①預處理階段:

  • 使用gcc -E xxx.c -o xxx.i命令
  • 作用:處理 #include、#define、#ifdef 等預處理指令。

②編譯階段:

  • 使用gcc -S xxx.i -o xxx.s命令
  • 作用:將預處理后的代碼轉換為匯編代碼。

③匯編階段:

  • 使用gcc -c xxx.s -o xxx.o命令
  • 作用:將匯編代碼轉換為機器碼(二進制目標文件)。

④鏈接階段:

  • 使用gcc xxx.o -o xxxx命令
  • 作用:將目標文件與庫文件(如 libc.so)鏈接,生成可執行文件。

如果我們使用world.c文件進行以上操作。那這4個階段將構成編譯系統(compilation system)。那么命令的執行過程如下圖:
在這里插入圖片描述

3、面臨的問題

當一個代碼輸入到操作系統上,我們的硬盤【不同的用戶,硬盤的來源是不同的,材質會不同等等】該如何讀取呢?等等。
所以我們就需要用到操作系統的4個重大部分,也是未來學習的過程中重點知識。

  • 運行任務的管理:進程和線程、調度和同步機制
  • 運行任務的存儲管理:內存管理
  • 運行任務的外設管理:I/O設備
  • 存儲數據設備的管理:文件管理

二、硬件

在這里插入圖片描述
上面這張就是一個硬件分布圖【看看就行了,不要死記硬背】。

1、CPU

中央處理單元(CPU),簡稱處理器

  • CPU作用:處理和執行指令。
  • CPU的寄存器:存儲下一條要執行的指令。
    • 通用寄存器
    • 程序計數器PC
      • 作用:存儲下一條要執行的指令的內存地址
    • 堆棧指針SP
      • 作用:指向當前堆棧的頂部地址,管理函數調用時的棧操作。能保護信息和恢復信息
    • 指令寄存器(IR)
      • 作用:存放當前執行指令
    • 狀態寄存器(FLAGS)
      • 作用:記錄運算結果狀態(如零標志ZF、進位標志CF)。
      • PSW:并不是一直需要保存,而是運行狀態才需要。在記錄狀態【已經沒有運行了】不用。
  • CPU的算術邏輯單元ALU
    • 作用:執行算術和邏輯運算。
  • 指令集架構
    • 處理器想要處理一條指令,也需要通過一定的規則,這個規則就是指令集架構。
    • 指令類型如下:
      • 加載指令:用于將數據從內存加載到寄存器中。
      • 存儲指令:用于將數據從寄存器存回到內存中。
      • 運算指令:用于對來自寄存器和內存的操作數進行運算,例如 add 指令將兩個操作數相加并將結果保存在寄存器或內存中。
  • CPU的流水線
    • 當CPU正在執行第N條指令時,它可以同時解碼第N+1條指令,并讀取第N+2條指令,這種形式就叫流水線
    • 在這里插入圖片描述
  • CPU的超標量
    • CPU中可以有多個執行單元,例如一個做加法運算,一個做乘法運算。在它們做運算的時候,把許多取指單元和解碼單元放入緩存區(cache)中,等到某一個執行單元有空了,就把緩存區中的它們拿一個出來執行。雖然看起來指令亂序了,實際上工作人員肯定設計方法來有序進行。
    • 在這里插入圖片描述

2、內存

理想情況下,內存應該是非常快速的(比執行一條指令還要快,以避免拖慢CPU的執行效率),同時容量足夠大且成本低廉。然而,當前的技術手段無法同時滿足這三個要求。因此,存儲系統采用了一種分層次的結構來解決這個問題
在這里插入圖片描述

2.1、 寄存器

  • 寄存器與CPU同樣的材質,跟CPU一樣快

2.2、 高速緩存(Cache)

  • 位于CPU與主存(內存)之間的超高速臨時存儲器,由SRAM構成,用于減少CPU訪問數據的延遲
  • 局部性原理
    • 是指:CPU訪問存儲器的時候,無論是讀指令還是存取數據,所訪問的存儲單元都被區域聚集到一個連續區域中了。也就是說程序具有訪問局部區域里的數據和代碼的趨勢

2.3、主存

  • 主存是指計算機中用于臨時存儲正在運行的程序和數據的硬件部件,屬于RAM(隨機存取存儲器)。斷電后數據丟失(易失性)。
  • ROM只讀存儲器) 斷電后不數據丟失,一旦ROM存儲了數據,那么數據就不能被修改了。
  • EEPROM(電可擦可編程只讀存儲器)和 閃存(Flash Memory)與ROM不同,支持數據的擦除和重新寫入重寫數據來修正程序錯誤】。
  • CMOS(Complementary Metal-Oxide Semiconductor,互補金屬氧化物半導體) 存儲器
    • 作用:存儲BIOS/UEFI設置(如啟動順序、日期時間、硬件參數)。確保即使在電源關閉后也能持續追蹤這些關鍵數據
    • 特性:易失性存儲器,依賴**紐扣電池(CR2032)**維持數據(斷電后不丟失)。

2.4、磁盤

市面上的磁盤有2類,我們先看機械磁盤,然后看固態磁盤
推薦觀看這個視頻,用的《CSAPP》書講解

2.4.1、機械磁盤(HDD)
主體結構介紹

在這里插入圖片描述

  • 盤片(platter):上圖中的圓盤就是盤片。上面有磁性的記錄材料,可以記錄數據
    • 盤面(surface):每個盤片有2個面 ,這個面就是盤面。
  • 主軸(spindle):可以旋轉。主軸帶動盤片以固定的速率高速旋轉。
  • 讀/寫頭:來讀寫盤面表面存儲的數據。上下盤面都有一個讀/寫頭.
    • 所有的讀寫頭都是一起運動的,垂直并列
  • 磁盤臂:通過磁盤臂的運動就可以運行讀寫數據的行為了。如果需要讀取目標文件,盤面就會旋轉起來。
    • 尋找位置的這個過程【不包括旋轉】叫尋道
    • 在這里插入圖片描述
細節分析

先是磁道

  • 磁道:盤面的表面劃分了一圈圈的磁道
    • 扇區:磁道里面有許多扇區。
      • 扇區與扇區之間有一些小間隙存儲的不是 數據 而是 標識信息
        在這里插入圖片描述

然后單位

  • byte是字節單位,不要理解成比特bit了。
  • 在I/O設備里的單位是不同的。如下圖
    在這里插入圖片描述
    在這里插入圖片描述

然后對扇區的訪問時間主要分布為3個部分

扇區訪問時間 = 尋道時間+旋轉時間+傳送時間

  • 尋道時間:磁盤臂尋道過程的時間。
  • 旋轉時間:盤片旋轉將請求數據所在扇區移至讀寫磁頭下方所需要的時間
  • 傳送時間:完成傳輸所請求的數據所需要的時間。

單位

  • 扇區: 硬盤的最小讀寫單元
  • 塊/簇: 是操作系統針對硬盤讀寫的最小單元
  • page: 是內存與操作系統之間操作的最小單元。
2.4.2、固態硬盤(SSD)

在現在的電腦幾乎都是固態硬盤了。固態硬盤的缺陷就是容易磨損。推薦看這個視頻了解
在這里插入圖片描述

  • 固態硬盤由一個或多個閃存芯片構成的。
    • 使用閃存芯片 取代了 傳統的機械臂轉動和盤片旋轉方式。
  • 閃存轉換站(FTL)
    • 功能與磁盤控制器類似:都是將操作系統對邏輯塊的請求 翻譯成 對底層物理設備的訪問
  • 固態硬盤的擦除操作
    • 固態硬盤除了讀/寫操作,還多了擦除操作。
    • 但是擦除只能把1 變成 0 ,而不能把0 變成1 。 所以每一個page在放入數據前都是 1 。
    • 在這里插入圖片描述

3、I/O設備

3.1、定義

I/O設備就是可以將數據輸入到計算機 或者 可以接收計算機輸出數據的外部設備 , 屬于計算機的硬件部分。

3.2、分類

3.2.1、按使用特性分類
  • 人機交互類 外部設備:數據傳輸慢---->用于人機交互
  • 存儲設備:數據傳輸快---->用于數據存儲
  • 網絡通信設備:數據傳輸介于2者之間---->用于網絡通信
3.2.2、按傳輸速率分類
  • 低速設備:每秒幾個到幾百字節
  • 中速設備:每秒千到萬字節
  • 高速設備:每秒可以到千兆字節
3.2.3、按信息交換的單位
  • 塊設備:傳輸速率較高,可尋址,即對它可隨機地讀/寫任一塊。
  • 字符設備:傳輸速率較慢,不可尋址。在輸入/輸出時,常采用中斷驅動方式。

4、設備控制器和設備驅動器

設備控制器【硬件】:負責直接控制物理設備能夠接收并執行來自操作系統的指令
設備驅動器【軟件】:設備控制器通過設備驅動器利用中斷與操作系統通信

5、實現輸入和輸出的方式有三種

  • 忙等待:一直循環直到需要的條件滿足。會一直占據CPU,CPU一直輪詢I/O設備直到I/O操作完成。
  • 設備驅動程序啟動設備并且讓該設備在操作完成時發生中斷,設備驅動程序在這個時刻返回。操作系統接著在需要時阻塞調用者并安排其他工作進行。當設備驅動程序檢測到該設備操作完成時,它發出一個 中斷 通知操作完成。
    • 在這里插入圖片描述
  • 引入DMA控制器,代替CPU直接管理I/O設備與內存之間的數據傳輸。【直接存儲器訪問(Direct Memory Access, DMA) 芯片】

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

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

相關文章

KVM安全模塊生產環境配置與優化指南

KVM安全模塊生產環境配置與優化指南 一、引言 在當今復雜多變的網絡安全環境下,生產環境中KVM(Kernel-based Virtual Machine)的安全配置顯得尤為重要。本指南旨在詳細闡述KVM安全模塊的配置方法,結合強制訪問控制(M…

深入解析工廠模式及其C#實現

工廠模式(Factory Pattern)是設計模式中的一種創建型模式,它通過工廠方法來創建對象,而不是讓客戶端代碼直接實例化對象。這樣可以避免客戶端與具體類的緊密耦合,從而提高代碼的靈活性、可維護性和擴展性。工廠模式能夠…

【愚公系列】《高效使用DeepSeek》009-PPT大綱自動生成

標題詳情作者簡介愚公搬代碼頭銜華為云特約編輯,華為云云享專家,華為開發者專家,華為產品云測專家,CSDN博客專家,CSDN商業化專家,阿里云專家博主,阿里云簽約作者,騰訊云優秀博主,騰訊云內容共創官,掘金優秀博主,亞馬遜技領云博主,51CTO博客專家等。近期榮譽2022年度…

SpringCloud系列教程(十四):Sentinel持久化

Sentinel之前已經搭建和應用成功了,但是它有一個很大的缺點就是官方沒有提供持久化的方案,從項目源碼上看感覺這款工具也沒有完成的太好,所以需要我們去對它進行二次開發。要補充的功能大概如下: 1、將Sentinel接入nacos中&#…

AGI大模型(3):大模型生成內容

1 大模型是怎么生成內容的 簡單來說就是靠"猜"! 雖然?常不可思議,但事實就是這樣,現階段所有的 NLP 任務,都不意味著機器真正理解這個世界,它只是在玩?字游戲,進??次??次的概率解謎,本質上和我們玩報紙上的填字游戲是?個邏輯。只是我們靠知識和智慧,…

Go語言環境搭建并執行第一個Go程序

目錄 一、Windows環境搭建 二、vscode安裝插件 三、運行第一個go程序 一、Windows環境搭建 下載Go:All releases - The Go Programming Language 這里是Windows搭建,選擇的是windows-amd64.msi,也可以選擇zip直接解壓縮到指定目錄 選擇msi…

Java數據結構第二十三期:Map與Set的高效應用之道(二)

專欄:Java數據結構秘籍 個人主頁:手握風云 目錄 一、哈希表 1.1. 概念 1.2. 沖突 1.3. 避免沖突 1.4. 解決沖突 1.5. 實現 二、OJ練習 2.1. 只出現一次的數字 2.2. 隨機鏈表的復制 2.3. 寶石與石頭 一、哈希表 1.1. 概念 順序結構以及平衡樹中…

OpenHarmony子系統開發 - Rust編譯構建指導

OpenHarmony子系統開發 - Rust編譯構建指導 一、Rust模塊配置規則和指導 概述 Rust是一門靜態強類型語言,具有更安全的內存管理、更好的運行性能、原生支持多線程開發等優勢。Rust官方也使用Cargo工具來專門為Rust代碼創建工程和構建編譯。 OpenHarmony為了集成C…

【SpringMVC】常用注解:@ModelAttribute

1.作用 該注解是在SpringMVC4.3版本后新加入的。它可以修飾方法和參數。出現在方法上,表示當前方法會在控制器的方法之前執行。它可以修飾 沒有返回值的方法,也可以修飾沒有返回值的方法。它修飾參數,獲取指定 的數據給參數賦值。 當表單提…

人工智能之數學基礎:如何將線性變換轉換為矩陣?

本文重點 在機器學習中,常用的理論就是線性變換,線性變化一定有對應的矩陣表示,非線性變換是不具備這個性質的,那么現在如果有一個線性變換T那么如何知道它對應的矩陣呢? 線性變換的本質 我們知道線性變換相當于一個函數,而矩陣也是一個函數,所以線性變換一定存在一個…

STM32驅動代碼規范化編寫指南(嵌入式C語言方向)

點擊下面圖片,為您提供全新的嵌入式學習路線 文章目錄 一、命名規范體系1.1 變量/函數命名1.2 宏定義規范1.3 類型定義 二、代碼結構組織2.1 文件組織結構2.2 頭文件規范模板 三、注釋體系構建3.1 Doxygen風格示例3.2 復雜邏輯注釋 四、硬件抽象層設計4.1 寄存器封…

C++Primer學習(7.1 定義抽象數據類型)

類的基本思想是數據抽象(data abstraction)和封裝(encapsulation)。數據抽象是種依賴于接口(interface)和實現(implementation)分離的編程(以及設計)技術。類的接口包括用戶所能執行的操作:類的實現則包括類的數據成員、負責接口實現的函數體以及定義類所需的各種私有函數。 封…

【人工智能】大語言模型學習大綱

大語言模型學習大綱 大語言模型學習知識點大綱一、基礎知識準備二、機器學習入門三、自然語言處理(NLP)基礎四、Transformer架構與實踐五、高級主題六、前沿研究與實戰項目 學習步驟第一步:打牢基礎第二步:掌握機器學習與深度學習基礎第三步:…

Trae與Builder模式初體驗

說明 下載的國際版:https://www.trae.ai/ 建議 要選新模型 效果 還是挺不錯的,遇到問題反饋一下,AI就幫忙解決了,真是動動嘴(打打字就行了),做些小的原型效果或演示Demo很方便呀&#xff…

基于VM的CentOS 7.4系統安裝與配置說明系統環境主機系統

系統環境 主機系統:Windows 11虛擬機版本:VMware Workstation 17 ProDVD鏡像版本:CentOS-7-x86_64-DVD-1908 虛擬機配置 內存:1G處理器:1核硬盤:80G 安裝步驟 1. 準備鏡像文件 下載并獲取CentOS 7.4的…

【設計模式】《設計模式:可復用面向對象軟件的基礎》:設計模式怎樣解決設計問題?

文章目錄 ?前言?一、設計模式怎樣解決設計問題?🌟1、尋找合適的對象🌟2、決定對象的粒度🌟3、指定對象接口🌟4、描述對象的實現🌟5、運用復用機制?(1)針對接口編程,而不是針對實現編程。?(2…

【SpringMVC】常用注解:@MatrixVariable

1.作用 接收矩陣變量傳送的值 或許有人聽都沒聽過矩陣變量是什么,下面來介紹一下 矩陣變量是一種在URL路徑中傳遞多個鍵值對參數的方式,它是在 Servlet 規范之外的一種擴展機制,可用于更靈活地傳遞參數。 例如:/cars;colorred…

【項目管理git】git學習

ps:所有東西都是個人理解 文章目錄 一、git是什么,它用來做什么?二、相關知識庫2.1 簡單的linux指令2.2 git配置指令2.3 git常見的指令2.3.1 Git的上傳原理2.3.2 版本回退相關內容 2.4 設置遠程地址,本地上傳到github2.4.1 ssh相…

【性能優化】MySQL 生產環境 SQL 性能優化實戰案例

🚀 MySQL 生產環境 SQL 性能優化實戰案例 🏗? 背景介紹 最近在處理一個項目時,發現在生產環境的工作流相關接口中,某些查詢的執行時間異常緩慢,盡管數據量僅為 2 萬條。經過分析,發現以下 SQL 語句執行非…

python速通小筆記-------1.容器

1.字符串的標識 字符串需要用“”標識。 與c不同,python 寫變量時 不需要標明數據類型每一行最后不需要加; 2.print函數的使用 與c中的printf函數一致 3.運算符 4.字符串str操作 1. 實現字符串拼接 2.% 實現字符串初始化 %s占位會把變量強制轉變為…