嵌入式操作系統快速入門(1):快速入門操作系統常見基礎概念

快速體會操作系統常見基礎概念

1 初識基本概念

1.1 操作系統

  • 一個軟件程序;
  • 用于解決計算機多任務執行時的資源爭搶問題;
  • 管理計算機中的各種資源,確保計算機正常完成各種工作(任務),解決多任務環境中任務的調度和資源分配等問題。

1.2 系統資源

計算機中含有的可提供給計算機執行某些工作的軟硬件資源

1.3 任務

  • 計算機需要完成的某一工作
  • 空間或資源有限時,多個任務進行時可能會產生沖突

1.4 進程

計算機正在執行的某一工作

1.5 資源爭搶

多任務執行時需要共享有限的資源

1.6 順序執行

任務一個接一個執行

1.7 多任務并行

多個任務同時執行(宏觀層面,實際 CPU 可能分時切換 )

1.8 任務優先級

按照任務類型和控制需求規定的任務執行優先程度


2 高級操作系統的一般特性

2.1 任務切換

滿足一個任務的某個需求進而滿足另一個任務的過程(不一定完成整個任務的切換)

2.2 多任務并行

系統資源足夠充足時,計算機同時執行多個任務(邏輯上的并行,物理 CPU 可能分時 )的過程

2.3 任務優先級

  • 給每個任務分配的、表示任務重要性或進行頻度的優先級值的大小所決定的各個任務執行的順序。
  • 例如當某類資源有限,而需要進行使用一類資源的多個任務時,不同任務會根據其設定好的優先級值來分別進行(高優先級的任務先執行)。

2.4 操作系統的作用

此時操作系統要做的事情,就是管理好資源的合理分配,滿足每個任務的執行需求,同時能夠靈活的處理不同任務執行時產生的突發情況,根據不同任務的優先級來調整任務執行的順序。


3 時間片輪轉與上下文切換

當有多個任務需要執行時,操作系統需要保證計算機輪流執行各個任務,此時操作系統給每個任務執行分配的時間就是所謂的“時間片”。

3.1 時間片

  • 操作系統為執行各個任務所分配的一段固定時間
  • 比如計算機當前要執行任務1、任務2、任務3等多個任務,此時操作系統就會給每個任務分配一段固定的時間,如10ms,此時計算機就會先用10ms執行任務1、在使用10ms執行任務2、在使用10ms執行任務3,這樣反復去執行。這里的10ms就是所謂的“時間片”,這種按照時間片輪流執行多個任務的過程相當于"時間片輪轉"。

3.2 上下文切換

各個任務之間進行執行狀態的切換過程稱為 “上下文切換”。

簡單理解為讓 CPU 從執行任務 A 切換到執行任務 B 時,需要保存任務 A 的執行狀態(寄存器、程序計數器等信息 ),加載任務 B 的執行狀態,這個過程就是上下文切換。因為操作系統輪流讓CPU執行不同任務時,很難在一個時間片內就完成某個任務,所以在執行任務A的時間片結束切換到任務B的時間片的這個狀態時,就需要記住前一個任務執行到的位置(上下文保存),避免后面再次切換到任務A的時間片時丟失上次進度。


在計算機中,操作系統通過合理的時間片機制和上下文切換來調度管理多個任務,保障計算機資源清晰合理的分配。

當操作系統為每個任務分配的時間非常短時,操作系統會以很快的速度輪詢讓計算機執行每一個任務,比如 10ms 的時間片。此時在每個任務之間的切換就很難被察覺,所以計算機呈現給任務的用戶反應就是 “同時” 在執行,因此對于每個任務來說,就會感覺操作系統一直在給自己服務一樣。


4 操作系統與任務調度

在計算機中,多個任務并行的情況是非常常見的,此時就很容易產生資源爭搶或者說沖突問題。比如當資源僅足夠支撐一項任務執行時,存在兩個任務都需要獲取這份資源,此時這倆任務就會發生資源爭搶。這時候,操作系統就需要管理這些任務,采取一些策略來解決資源爭搶問題。

4.1 常見調度策略

  • 優先級分配
  • 時間片輪轉
  • 根據不同場景業務需求,也可以兩者結合進行。

4.2 優先級分配

操作系統根據不同任務的優先程度來分配資源。比如兩個任務同時需要調用該資源時,操作系統會根據這倆任務的優先程度將資源優先分配給優先級高的一方。

4.3 時間片輪轉

操作系統也可以通過分配時間片讓多個任務公平地使用資源,避免一個任務長時間獨占資源。

4.4 總結

操作系統通過對每個任務所代表的優先級以及使用時間片對資源合理的分配,保障每個任務所需要的資源得到滿足,進而解決多任務并行時產生的資源爭搶問題。


5 資源調度與資源爭搶

對于單核 CPU(如早期的傳統計算機、簡單嵌入式設備 )、SMT32 等,其計算資源非常稀缺,MCU 只有一個算術邏輯單元 ALU(用于運算 )。此時若多任務并行,CPU 對 ALU 資源的調度就像一個 “資源競爭” 的場景。比如,我們需要在這個單片機上執行多個任務(任務 1、任務 2、任務 3 ),那么勢必會出現各個任務對 CPU 資源的調度和爭搶問題。

為了解決資源競爭等問題,我們可以給單片機加載一個操作系統,通過操作系統的一些(對 CPU )資源調度策略,來避免單片機(MCU )在多任務執行時產生的資源爭搶沖突問題。

5.1 常見策略

  • 批處理:按照各個任務產生順序依次去執行多個任務。如最初的DOS操作系統就是這樣處理的多任務;
  • 優先級分配:操作系統設定一定的任務優先級規則,然后各個任務根據自身的優先級先后獲取 CPU的ALU 資源,資源緊張時高優先級任務可 “搶占” 低優先級任務資源;
  • 時間片輪轉:操作系統為各個任務合理分配時間片,如10ns,然后各個任務按照時間片輪流使用CPU的ALU資源。每一個任務的時間片使用完后,需要等待下一個自己的時間片到來后使用CPU資源。

5.2 總結

在單片機中,可以通過以上資源調度策略合理的管理和控制單片機的 CPU 資源,保障每個任務都能夠順利執行,避免資源的浪費和爭搶。


6 中斷系統

6.1 中斷

CPU正在執行任務時產生的突發事件,需要CPU暫停當前任務,立刻響應和處理這一事件,當處理完突發事件后,CPU會回到原來任務執行時產生中斷前的位置繼續往后執行。

在計算機系統中,中斷的加入使得CPU能夠在執行任務的同時,及時響應和處理異常或突發事件(如鍵盤按鍵、硬件故障),提高系統的實時性和靈活性。


7 非實時操作系統

對于任務的管理沒有嚴格的時間限制,各任務執行時間的提前、延遲或波動,不會對系統(軟硬件或任務)功能的有效性或整體運行造成嚴重影響,即對任務的時間約束沒有嚴格要求的操作系統。


8 實時操作系統

對于各個任務執行的起始和結束時間點有較為嚴格的約束,各個任務執行時間的提前、延遲或波動會導致系統(軟硬件或任務)功能失效或危險后果,即需要保證CPU在特定時間內響應和完成特定任務的操作系統。

  • 軟實時:對于 CPU 執行任務有特定的時間限制,但任務的某些波動導致整體的任務結果的延遲或失效不會造成極其嚴重后果(比如任務超時可能導致體驗下降,但不影響系統安全 )
  • 硬實時:對于 CPU 執行的任務有極其嚴格的時間限制,任務執行時間的微小偏差都會導致系統失效或造成嚴重后果。比如在一些工業控制、航空航天場景中,任務延遲可能引發危險,常見的硬實時操作系如 FreeRTOS 實時操作系統。

筆者小白,能力有限,以上內容難免存在不足和紕漏,僅供參考,各位閱讀時請帶著批判性思維學習,遇到問題多查查。同時歡迎各位評論區批評指正。謝謝。

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

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

相關文章

網絡安全-同形異義字攻擊:眼見并非為實(附案例詳解)

什么是同形異義字攻擊?對人眼而言,一切看起來完全正常。但實際上,例如單詞 Ηоmоgraph 并不完全等同于單詞 Homograph。它們之間的差異非常細微,難以察覺。Ηоmоgraph 實際上包含了幾個非拉丁字母。在本例中,我們將…

windows服務器 maven 配置環境變量,驗證maven環境變量是否配置成功

前置條件:先確認對應版本的jdk已安裝配置好,可使用java -version檢測; 我使用的apache-maven-3.6.3是對應jdk1.8 1.找到系統變量配置窗口 以windows server2019為例,右鍵計算機屬性, 高級系統設置–》環境變量–》系統變量2.新建M…

安裝 docker compose v2版 筆記250731

安裝 docker compose v2版 筆記250731 簡述 v2版是插件形式 確認系統要求, 已安裝 Docker Engine(版本 20.10.5 或更高) 安裝方式可分為 apt 或 yum 安裝 (能自動升級) apt install docker-compose-pluginyum install docker-compose-plugin 手動二…

PHP 5.5 Action Management with Parameters (English Version)

PHP 5.5 Action Management with Parameters (English Version) Here’s a PHP 5.5 compatible script that uses URL parameters instead of paths for all operations: <?php // Start session for persistent storage session_start();// Initialize the stored actio…

GR-3(4B) 技術報告--2025.7.23--字節跳動 Seed

0. 前言 前兩天字節發布了GR-3&#xff0c;粗略的看了一下&#xff0c;在某些方面超過了SOTA pi0&#xff0c;雖然不開源&#xff0c;但是也可以來看一看。 官方項目頁 1. GR-3模型 1.1 背景 在機器人研究領域&#xff0c;一直以來的目標就是打造能夠幫助人類完成日常任務…

Linux網絡編程:UDP 的echo server

目錄 前言&#xff1a; 一、服務端的實現 1、創建socket套接字 2、綁定地址信息 3、執行啟動程序 二、用戶端的實現 總結&#xff1a; 前言&#xff1a; 大家好啊&#xff0c;前面我們介紹了一些在網絡編程中的一些基本的概念知識。 今天我們就借著上節課提到的&#…

AI+金融,如何跨越大模型和場景鴻溝?

文&#xff5c;白 鴿編&#xff5c;王一粟當AI大模型已開始走向千行百業之時&#xff0c;備受看好的金融行業&#xff0c;卻似乎陷入了落地瓶頸。打開手機銀行想查下貸款額度&#xff0c;對著屏幕說了半天&#xff0c;AI客服卻只回復 “請點擊首頁貸款按鈕”&#xff1b;客戶經…

深度解析:從零構建跨平臺對象樹管理系統(YongYong框架——QT對象樹機制的現代化替代方案)

一、技術背景與核心價值 1.1 QT對象樹的局限性 在Qt框架中&#xff0c;QObject通過對象樹機制實現了革命性的對象管理&#xff1a; #mermaid-svg-SvqKmpFjg76R02oL {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Sv…

力扣46:全排列

力扣46:全排列題目思路代碼題目 給定一個不含重復數字的數組 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意順序 返回答案。 思路 看到所有可能首先想到的就是回溯。 回溯的結束條件也很好寫&#xff0c;用數組的長度來判斷即可。這道題的難點主要是如何進行判…

mac環境配置rust

rustup 是一個命令行工具&#xff0c;用于管理 Rust 編譯器和相關工具鏈 sh 體驗AI代碼助手 代碼解讀復制代碼curl --proto ‘https’ --tlsv1.2 -sSf https://sh.rustup.rs | sh使得 Rust 的安裝在當前 shell 環境中生效 如果你使用的是 bash, zsh 或其他類似的 shell&#xf…

腳手架搭建React項目

腳手架搭建項目 1. 認識腳手架工具 1.1. 前端工程的復雜化 1.1.1. 如果只是開發幾個小的demo程序&#xff0c;那么永遠不要考慮一些復雜的問題&#xff1a; 比如目錄結構如何組織劃分&#xff1b;比如如何關鍵文件之間的相互依賴&#xff1b;比如管理第三方模塊的依賴&#xff…

Golang 調試技巧:在 Goland 中查看 Beego 控制器接收的前端字段參數

&#x1f41b; Golang 調試技巧&#xff1a;在 Goland 中查看 Beego 控制器接收的前端字段參數 在使用 Beego 開發 Web 項目時&#xff0c;我們常常會在控制器中通過 c.GetString()、c.GetInt() 等方法獲取前端頁面傳過來的字段值。而在調試過程中&#xff0c;如何在 Goland 中…

sqli-labs:Less-2關卡詳細解析

1. 思路&#x1f680; 本關的SQL語句為&#xff1a; $sql"SELECT * FROM users WHERE id$id LIMIT 0,1";注入類型&#xff1a;數值型提示&#xff1a;參數id無需考慮閉合問題&#xff0c;相對簡單 2. 手工注入步驟&#x1f3af; 我的地址欄是&#xff1a;http://l…

TRAE 軟件使用攻略

摘要TRAE 是一款集成了人工智能技術的開發工具&#xff0c;旨在為開發者提供高效、智能的編程體驗。它包括三個主要組件&#xff1a;TRAE IDE、TRAE SOLO 和 TRAE 插件。無論是編程新手還是經驗豐富的開發者&#xff0c;都可以通過 TRAE 提高工作效率和代碼質量。標題一&#x…

將開發的軟件安裝到手機:環境配置、android studio設置、命令行操作

將開發的軟件安裝到手機環境配置android studio4.1.2安裝命令行操作環境配置 注意&#xff1a;所有的工具的版本都需要根據當下自己的軟件需要的。 Node&#xff1a;14.16.0 &#xff08;如果安裝了npm&#xff0c;可以使用npm進行當前使用node版本的更改&#xff09; &#x…

Jmeter 命令行壓測、HTML 報告、Jenkins 配置目錄

Jmeter 命令行壓測 & 生成 HTML 測試報告 通常 Jmeter 的 GUI 模式僅用于調試&#xff0c;在實際的壓測項目中&#xff0c;為了讓壓測機有更好的性能&#xff0c;多用 Jmeter 命令行來進行壓測。 官方&#xff1a;Jmeter 最佳實踐 同時&#xff0c;JMeter 也支持生成 HT…

記錄幾個SystemVerilog的語法——覆蓋率

1. 前言 通常說的覆蓋率有兩種類型&#xff1a;code coverage(代碼覆蓋率)和functional coverage(功能覆蓋率)。代碼覆蓋率是使用EDA工具自動從設計代碼里提取出來的&#xff0c;功能覆蓋率是用戶指定的&#xff0c;用于衡量測試設計意圖和功能進展。因此&#xff0c;功能覆蓋…

深度學習基礎—2

第一章、參數初始化 我們在構建網絡之后&#xff0c;網絡中的參數是需要初始化的。我們需要初始化的參數主要有權重和偏置&#xff0c;偏重一般初始化為 0 即可&#xff0c;而對權重的初始化則會更加重要&#xff0c;我們介紹在 PyTorch 中為神經網絡進行初始化的方法。 1.1 常…

PyTorch深度學習快速入門學習總結(三)

現有網絡模型的使用與調整 VGG — Torchvision 0.22 documentation VGG 模型是由牛津大學牛津大學&#xff08;Oxford University&#xff09;的 Visual Geometry Group 于 2014 年提出的卷積神經網絡模型&#xff0c;在 ImageNet 圖像分類挑戰賽中表現優異&#xff0c;以其簡…

是否需要買一個fpga開發板?

糾結要不要買個 FPGA 開發板&#xff1f;真心建議搞一塊&#xff0c;尤其是想在數字電路、嵌入式領域扎根的同學&#xff0c;這玩意兒可不是可有可無的擺設。入門級的選擇不少&#xff0c;全新的像 Cyclone IV、Artix 7 系列&#xff0c;幾百塊就能拿下&#xff0c;要是去二手平…