操作系統內部機制學習

切換線程時需要保存什么

  • 函數需要保存嗎?函數在Flash上,不會被破壞,無需保存。
  • 函數執行到了哪里?需要保存嗎?需要保存。
  • 全局變量需要保存嗎?全局變量在內存上,無需保存。
  • 局部變量需要保存嗎?局部變量在棧里,也是在內存里,只要避免棧不會被破壞即可,局部變量無需保存。
  • 運算的中間值需要保存嗎?中間值保存在CPU寄存器里,另一個線程也需要用到寄存器,所以CPU寄存器要保存。
  • 函數運行到了哪里:也是一個CPU寄存器,名為“PC”。

總結:CPU寄存器需要保存,保存在線程的棧里。

ARM架構

ARM芯片屬于精簡指令計算機(RISC:Reduced Instruction Set Computor),它所用的指令比較簡單,有如下特點:

  1. 對內存只有讀、寫指令。
  2. 對于數據的運算都是在CPU內部實現。
  3. 使用RISC指令的CPU復雜度小一點,易于設計。

在這里插入圖片描述
在這里插入圖片描述

幾條匯編指令

  • 讀內存指令:LDR,即Load之意。
  • 寫內存指令:STR,即Store之意。
  • 加減指令:ADD、SUB
  • 跳轉:BL,Branch And Link
  • 入棧指令:PUSH
  • 出棧指令:POP

加載指令LDR:LDR r0,[addrA],意思是將地址addrA的內容加載到r0里面。
存儲指令STR:STR r0,[addr A],把r0的值存儲到地址addrA上。
加法運算指令(ADD):ADD r0,r1,r2,意思為r0=r1+r2。
減法運算指令(SUB):SUB r0,r1,r2,意思為r0=r1-r2。
寄存器入棧/出棧指令(PUSH/POP)

寄存器入棧(PUSH):PUSH {r3, lr}意思是將寄存器r3和lr寫入內存棧。

  • 本質是寫內存STR指令,高標號寄存器寫入高地址的棧里,低標號寄存器寫入低地址的棧里。
  • lr即r14,寫入地址為sp-4的內存,然后sp=sp-4。
  • r3,寫入地址為sp-4的內存,然后sp=sp-4。

寄存器出棧指令(POP):POP {r3,pc}意思是取出內存棧的數據放入r3和pc中。

  • 本質是讀內存LDR指令,高標號寄存器的內容來自高地址的棧,低標號寄存器的內容來自低地址的棧。
  • 讀地址為sp的內容存入r3,然后sp=sp+4。
  • 讀地址為sp的內容存入pc,然后sp=sp+4。

寄存器別名

在這里插入圖片描述
PUSH指令=多次調用STR指令,并且會調整SP的值。

BL A:會記錄返回地址,保存在R14里,然后跳轉到A執行,執行完后,PC會跳轉到R14所指向的地址。

在這里插入圖片描述
在這里插入圖片描述
初始化棧

IPC

引入IPC,主要是為了兩項功能:

  1. 線程間互斥
  2. 休眠-喚醒機制

隊列
在這里插入圖片描述
隊列里有多個消息塊,消息塊里面可以存儲消息(數據),每個消息塊大小相同。

隊列里有兩個鏈表:Sender List、Receiver List。
在這里插入圖片描述
在這里插入圖片描述
掛起線程也就是將線程從就緒鏈表中移出。
再將線程掛到隊列的等待鏈表中。
啟動定時器。

互斥量如何實現

對于互斥變量a

  1. 關中斷
  2. 匯編指令:原子地修改a

IPC

在這里插入圖片描述
消息隊列的讀取都是使用memcpy()

郵箱的讀取直接賦值即可。
鏈表、定時器、環形緩沖區(讀、寫位置)

信號量的缺點:

  1. 誰都可以釋放信號量
  2. 優先級反轉

Mutex解決

  1. 誰擁有誰釋放
  2. 優先級繼承

一個互斥量可以被同一個線程多次take

信號不是信號量,是一種異步通知機制。
**信號就是線程的軟件中斷。 **

信號處理流程

信號就是線程的“軟件中斷”,跟“硬件中斷”類似:
要安裝信號處理函數,相當于給硬件中斷提供處理函數。

/* thread1 安裝信號,自定義處理函數 */rt_signal_install(SIGUSR1, thread1_signal_handler);/* thread1 要使能信號,相當于使能硬件中斷,解除屏蔽 */
rt_signal_unmask(SIGUSR1);/* 向thread1發出信號,相當于觸發硬件中斷 */
rt_thread_kill(thread1, SIGUSR1);

什么是塊設備?

有存儲功能:寫入數據到pos位置,再讀pos可以得到一樣的數據。
數據的傳輸單位是:扇區。

掛載

掛載點(path)
文件系統
塊設備
在這里插入圖片描述

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

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

相關文章

Leetcode—337.打家劫舍III【中等】

2023每日刷題(五十二) Leetcode—337.打家劫舍III 算法思想 實現代碼 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(null…

I.MX6ULL_Linux_驅動篇(46)linux LCD驅動

LCD 是很常用的一個外設,在Linux 下LCD 的使用更加廣泛,在搭配 QT 這樣的 GUI 庫下可以制作出非常精美的 UI 界面。本章我們就來學習一下如何在 Linux 下驅動 LCD 屏幕。 Linux 下 LCD 驅動簡析 Framebuffer 設備 先來回顧一下裸機的時候 LCD 驅動是怎…

前端入門:HTML初級指南,網頁的簡單實現!

代碼部分&#xff1a; <!DOCTYPE html> <!-- 上方為DOCTYPE聲明&#xff0c;指定文檔類型為HTML --> <html lang"en"> <!-- html標簽為整個頁面的根元素 --> <head> <!-- title標簽用于定義文檔標題 --> <title>初始HT…

單點登錄方案調研與實現

作用 在一個系統登錄后&#xff0c;其他系統也能共享該登錄狀態&#xff0c;無需重新登錄。 演進 cookie → session → token →單點登錄 Cookie 可以實現瀏覽器和服務器狀態的記錄&#xff0c;但Cookie會出現存儲體積過大和可以在前后端修改的問題 Session 為了解決Co…

【其他數學】結式 resultant

結式 resultant 2023年11月30日 #analysis 文章目錄 結式 resultant介紹Sylvester矩陣應用在消元中的應用傳遞函數的化簡 下鏈 介紹 結式用來計算曲線的交點、消元、找參數化曲線的隱含方程。 為了引出定義&#xff0c;思考如下問題&#xff1a; f ( x ) x 2 ? 5 x 6 g (…

UVM建造測試用例

&#xff08;1&#xff09;加入base_test 在一個實際應用的UVM驗證平臺中&#xff0c;my_env并不是樹根&#xff0c;通常來說&#xff0c;樹根是一個基于uvm_test派生的類。真正的測試用例都是基于base_test派生的一個類。 class base_test extends uvm_test;my_env e…

14-2(C++11)類型推導、類型計算

14-2&#xff08;C11&#xff09;類型推導、類型計算 類型推導auto關鍵字auto類型推斷本質auto與引用 聯用auto關鍵字的使用限制 類型計算類型計算分類與類型推導相比四種類型計算的規則返回值后置 類型推導 auto關鍵字 C98中&#xff0c;auto表示棧變量&#xff0c;通常省略…

Leetcode刷題筆記題解(C++):25. K 個一組翻轉鏈表

思路&#xff1a;利用棧的特性&#xff0c;K個節點壓入棧中依次彈出組成新的鏈表&#xff0c;不夠K個節點則保持不變 /*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) : val(x), next(nullptr) {}* };*/ #include <stack> class Solution { …

在國內,現在月薪1萬是什么水平?

看到網友發帖問&#xff1a;現在月薪1W是什么水平&#xff1f; 在現如今的情況下&#xff0c;似乎月薪過萬這個標準已經成為衡量個人能力的一個標準了&#xff0c;尤其是現在互聯網橫行的時代&#xff0c;好像年入百萬&#xff0c;年入千萬就應該是屬于大眾的平均水平。 我不是…

kafka入門(四):消費者

消費者 (Consumer ) 消費者 訂閱 Kafka 中的主題 (Topic) &#xff0c;并 拉取消息。 消費者群組&#xff08; Consumer Group&#xff09; 每一個消費者都有一個對應的 消費者群組。 一個群組里的消費者訂閱的是同一個主題&#xff0c;每個消費者接收主題的一部分分區的消息…

大師學SwiftUI第18章Part2 - 存儲圖片和自定義相機

存儲圖片 在前面的示例中&#xff0c;我們在屏幕上展示了圖片&#xff0c;但也可以將其存儲到文件或數據庫中。另外有時使用相機將照片存儲到設備的相冊薄里會很有用&#xff0c;這樣可供其它應用訪問。UIKit框架提供了如下兩個保存圖片和視頻的函數。 UIImageWriteToSavedPh…

JAVA后端自學技能實操合集

JAVA后端自學技能實操 內容將會持續更新中,有需要添加什么內容可以再評論區留言,大家一起學習FastDFS使用docker安裝FastDFS(linux)集成到springboot項目中 內容將會持續更新中,有需要添加什么內容可以再評論區留言,大家一起學習 FastDFS 組名&#xff1a;文件上傳后所在的 st…

leetcode 100.相同的樹

涉及到遞歸&#xff0c;最好多畫圖理解&#xff0c;希望對你們有幫助 100.相同的樹 題目 給你兩棵二叉樹的根節點 p 和 q &#xff0c;編寫一個函數來檢驗這兩棵樹是否相同。 如果兩個樹在結構上相同&#xff0c;并且節點具有相同的值&#xff0c;則認為它們是相同的。 題目鏈接…

GPIO的使用--滴答定時器--pir人體紅外傳感器

目錄 一、滴答定時器的使用與原理 1、定義 2、原理 &#xff08;1&#xff09;向上計數?編輯 &#xff08;2&#xff09;向下計數 &#xff08;3&#xff09; 代碼流程 a、配置滴答時鐘喚醒頻率 b、滴答時鐘中斷函數 &#xff08;4&#xff09;結果 3、優化-->寄存…

Proxy Hook Trace JSON

Proxy var window {key: "qww",age: 22 } window new Proxy(window, {get(target, p, receiver) {console.log("target: ", target);console.log("p: ", p);// return window[username];/// 這里如果這樣寫. 有遞歸風險的...// return Reflec…

【線性代數與矩陣論】Jordan型矩陣

Jordan型矩陣 2023年11月3日 #algebra 文章目錄 Jordan型矩陣1. 代數重數與幾何重數2. Jordan塊與Jordan標準型2.1 最小多項式與Jordan標準型2.2 兩類重要矩陣 3. 矩陣的Jordan分解3.1 Jordan分解的應用 下鏈 1. 代數重數與幾何重數 在對向量做線性變換時&#xff0c;向量空間…

讀書筆記-《數據結構與算法》-摘要4[插入排序]

插入排序 核心&#xff1a;通過構建有序序列&#xff0c;對于未排序序列&#xff0c;在已排序序列中從后向前掃描(對于單向鏈表則只能從前往后遍歷)&#xff0c;找到相應位置并插入。實現上通常使用in-place排序(需用到O(1)的額外空間) 從第一個元素開始&#xff0c;該元素可…

如何主持一場知識競賽搶答賽

知識競賽主持說難不難&#xff0c;說簡單也不簡單&#xff0c;我就從易到難介紹一下。 入門級&#xff0c;題主不用練習太多其他花哨的技巧&#xff0c;只要注意一點&#xff0c;熟悉比賽流程。知識競賽需要給所有選手一個公平流暢的答題環境&#xff0c;所以題主自身必須非常…

干貨!接口中的大事務,該如何進行優化?

作為后端開發的程序員&#xff0c;我們常常會的一些相對比較復雜的邏輯&#xff0c;比如我們需要給前端寫一個調用的接口&#xff0c;這個接口需要進行相對比較復雜的業務邏輯操作&#xff0c;比如會進行&#xff0c;查詢、遠程接口或本地接口調用、更新、插入、計算等一些邏輯…

掌握iText:輕松處理PDF文檔-進階篇

簡體中文寫入 iText本身對簡體中文的支持有限&#xff0c;但可以通過引入額外的字體包來增強其對簡體中文的支持。例如&#xff0c;可以使用iTextAsian.jar這個亞洲字體包&#xff0c;它包含了幾種簡單的亞洲字體&#xff0c;其中包括簡體中文字體。只需要將iTextAsian.jar放到…