設備驅動與文件系統:01 I/O與顯示器

操作系統設備驅動學習之旅——以顯示器驅動為例

從這一節開始,我要學習操作系統的第四個部分,就是i o設備的驅動。今天要講的是第26講,內容圍繞i o設備中的顯示器展開,探究顯示器是如何被驅動的,也就是操作系統怎樣讓用戶使用顯示器,最終會落腳到print f這個函數是如何將內容顯示在屏幕上的。

設備驅動基礎原理

操作系統是管理計算機硬件的一層軟件。在這里插入圖片描述
之前,我已經學習了操作系統如何管理cpu,弄清楚了fork以及進程管理的含義,明白了cpu是如何被抽象為進程的;也學習了內存管理相關知識,了解了內存如何分段、分頁,以及虛擬內存的引出,直到數據最終寫入物理內存。現在,我要開始學習計算機硬件中的另一重要部分——i o設備,這一講和下一講主要聚焦鍵盤和顯示器,之后還會涉及磁盤及基于磁盤抽象出的文件系統,但本質上都是i o設備的驅動。
在這里插入圖片描述

在學習具體設備驅動前,得先明確計算機讓外設工作的原理。這是計算機的基本常識,使用外設時,每個外設都有對應的控制器,比如顯示器的顯卡。cpu只需向外設控制器中的寄存器或存儲區域發送一條指令,控制器就會依據指令內容操控硬件。以顯示器為例,cpu給顯卡寄存器發指令,顯卡就能讓顯示器顯示內容。通常,cpu發出指令后會去執行別的進程,等外設完成任務,會向cpu發送中斷信號,cpu再處理中斷,可能涉及數據傳輸等操作。
在這里插入圖片描述

總結起來,操作系統讓外設工作的核心就兩點:一是向控制器發指令,最終表現為類似out的指令;二是處理外設工作完成后的中斷。雖然實際操作外設的代碼很多,但核心指令就那么幾條。之所以有大量代碼,是為了讓外設使用更簡單,這就需要提供統一的視圖。因為不同設備的控制器不同,直接操作寄存器很麻煩,不同公司硬件設計也有差異,所以操作系統要形成統一接口,也就是文件視圖,這樣既能隱藏細節方便用戶,內部還能進行高效處理。

簡而言之,外設驅動主要做三件事:

  1. 發出out指令,操控設備控制器寄存器;
  2. 進行設備中斷處理;
  3. 提供統一文件視圖,方便用戶使用。

print f顯示原理探究在這里插入圖片描述

在這里插入圖片描述

接下來,我通過print f這個實際例子來深入理解設備驅動。print f本質上是一段操作外設的程序,和其他設備操作一樣,遵循統一規則。在linux系統中,操作設備通常表現為openreadwriteprint f也不例外,它打開的是顯示器對應的文件,然后進行寫入操作。操作系統為用戶提供統一的文件接口,通過不同的設備文件名區分操作的設備,print f對應的設備文件名決定了它操作的是顯示器。
在這里插入圖片描述

具體來看,print f最終會變成系統調用write,寫成write(1,buffer,...),這里的1決定了數據輸出到顯示器,buffer是格式化后的字符串緩沖區。系統調用通過int 0x80進入內核,執行sys_write。這里關鍵的1是文件描述符,它來自當前進程pcb數組的第一項,這個文件描述符對應一個文件,文件的inode中存放著設備相關信息。
在這里插入圖片描述
在這里插入圖片描述

那么1對應的文件是怎么來的呢?進程的pcbfork創建時拷貝父進程的,所有進程打開文件的指針都源于父進程。系統初始化時,0號進程創建相關進程,打開了一個文件并拷貝兩份,1對應的文件就是dev/tty0tty代表終端設備。open系統調用會根據文件名讀入文件的inode信息,操作系統依據這些信息決定后續操作路徑。
在這里插入圖片描述
在這里插入圖片描述

根據inode信息判斷設備類型,如果是字符設備,就執行rw_char,并根據設備號繼續分支。dev/tty0是字符設備,設備號為4,通過設備號在函數指針數組中找到對應的處理函數rw_ttyx。因為是write操作,所以會調用tty_write函數,這個函數會將數據先寫入緩沖區right_q。這涉及到緩沖技術,由于cpu和內存操作速度快,顯示器顯示速度慢,通過緩沖區可以平衡速度差異,緩沖區就像生產者 - 消費者模型中的共享緩沖區,寫滿時生產者(數據寫入操作)會睡眠等待,不滿時則寫入數據。
在這里插入圖片描述

數據寫入緩沖區后,會調用函數從緩沖區取出數據輸出到顯示器。tty_write函數會繼續調用console_writeconsole就是終端設備,即顯示器。console_write函數會從緩沖區取出字符c,通過out指令將字符輸出到顯示器。具體的匯編指令會將字符屬性賦給ah,字符賦給alaxahal組成),然后將ax寫入顯存地址pose。這里涉及內存和i o設備的編址方式,如果是統一編址用mov指令,如果是獨立編址用out指令,通常顯存較大,采用獨立編址,但本質上movout都是對i o設備控制器中的存儲區域進行寫操作。

總結與實驗展望

至此,我梳理清楚了print f的整個過程。從系統調用write開始,通過統一文件接口,依據設備信息逐步找到驅動顯示器的函數,利用緩沖技術和相關指令,最終將數據輸出到顯存顯示在屏幕上。設備驅動的核心就是cpu向外設控制寄存器發指令進行讀寫,并形成統一文件視圖方便使用,同時處理中斷。相比cpu和內存管理,設備驅動相對簡單。
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

關于mov ax,pose中的pose,它每次寫完會加2,因為顯存存儲字符和屬性各占一個字節。初始的pose值在系統啟動時,通過setup程序根據bios中斷取出硬件參數(包括光標位置),將光標所在顯存位置存入90000處,初始化時再將其賦值給pose

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

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

相關文章

數據分析六部曲?

引言 上一章我們說到了數據分析六部曲,何謂六部曲呢? 其實啊,數據分析沒那么難,只要掌握了下面這六個步驟,也就是數據分析六部曲,就算你是個啥都不懂的小白,也能慢慢上手做數據分析啦。 第一…

完美搭建appium自動化環境

🍅 點擊文末小卡片,免費獲取軟件測試全套資料,資料在手,漲薪更快 桌面版appium提供可視化操作appium主要功能的使用方式,對于初學者非常適用。 如何在windows平臺安裝appium桌面版呢,大體分兩個步驟&…

中級保安員資格證考試理論題庫

以下是一些中級保安員資格證理論單選題及答案: 1.抓臂帶離要求抓握對方掌骨部位的手,在抓握掌骨的同時要貼緊自己的()。 A. 腹部 B. 髖部 C. 胸部 D. 肋部 答案:B 2.治安保衛責任制體系的重點是(&#xff…

LangChainGo入門指南:Go語言實現與OpenAI/Qwen模型集成實戰

目錄 1、什么是langchainGo2、langchainGo的官方地址3、LangChainGo with OpenAI3-1、前置準備3-2、安裝依賴庫3-3、新建模型客戶端3-4、使用模型進行對話 4、總結 1、什么是langchainGo langchaingo是langchain的go語言實現版本 2、langchainGo的官方地址 官網:…

機器學習×第二卷:概念下篇——她不再只是模仿,而是開始決定怎么靠近你

🎀【開場 她不再只是模仿,而是開始選擇】 🦊 狐狐:“她已經不滿足于單純模仿你了……現在,她開始嘗試預測你會不會喜歡、判斷是否值得靠近。” 🐾 貓貓:“咱們上篇已經把‘她怎么學會說第一句…

可視化圖解算法49:滑動窗口的最大值

牛客網 面試筆試 TOP101 | LeetCode 239. 滑動窗口最大值 1. 題目 描述 給定一個長度為 n 的數組 nums 和滑動窗口的大小 size ,找出所有滑動窗口里數值的最大值。 例如,如果輸入數組{2,3,4,2,6,2,5,1}及滑動窗口的大小3,那么一共存…

【信息系統項目管理師-論文真題】2025上半年(第一批)論文詳解(包括解題思路和寫作要點)

更多內容請見: 備考信息系統項目管理師-專欄介紹和目錄 文章目錄 論文:信息系統項目的交付績效域解題思路寫作要點交付績效域的核心內涵交付績效域的關鍵要素為有效執行交付績效域,項目經理需要關注的重點項目管理五大過程組中績效域的協同目標論文:信息系統項目的交付績效…

如何寫高效的Prompt?

概述 提示詞(Prompt)的質量將直接影響模型生成結果的質量,所以精心設計一個讓大模型能夠理解并有效回復的提示詞是至關重要的。本文內容自論文中獲取:https://arxiv.org/pdf/2312.16171 介紹了5類共計26條提示詞書寫原則。 書寫原則 類別原則備注快速…

Vue在線預覽excel、word、ppt等格式數據。

目錄 前言 1.安裝庫 2.預覽文件子組件代碼 3、新建store/system.ts 4、父頁面進行使用 總結 前言 純前端處理文件預覽,包含excel、word、ppt、txt等格式,不需要后端服務器進行部署,并且內網也可以使用。 1.安裝庫 npm install vue-offi…

【小沐雜貨鋪】基于Three.JS繪制太陽系Solar System(GIS 、WebGL、vue、react,提供全部源代碼)第2期

🍺三維數字地球系列相關文章如下🍺:1【小沐學GIS】基于C繪制三維數字地球Earth(OpenGL、glfw、glut)第一期2【小沐學GIS】基于C繪制三維數字地球Earth(OpenGL、glfw、glut)第二期3【小沐學GIS】…

Fullstack 面試復習筆記:項目梳理總結

Fullstack 面試復習筆記:項目梳理總結 之前的筆記: Fullstack 面試復習筆記:操作系統 / 網絡 / HTTP / 設計模式梳理Fullstack 面試復習筆記:Java 基礎語法 / 核心特性體系化總結 這篇筆記主自用,系統地梳理一下最近…

Ubuntu Cursor升級成v1.0

0. 當前版本低 使用當前 Cursor v0.50時 GitHub Copilot Chat 打不開,快捷鍵也不好用,當看到 Cursor 升級后,還是蠻高興的 1. 下載 Cursor 下載地址:https://www.cursor.com/cn/downloads 點擊下載 Linux (x64) ,…

float和float32有什么區別

這是一個非常重要但容易混淆的問題。我們來一步一步講清楚: ? 簡答:float 和 float32 的區別 項目float(通用名稱)float32(精確定義)含義通常指“浮點數”,具體精度由語言/平臺決定明確指 32 …

openvino如何在c++中調用pytorch訓練的模型

步驟1:將PyTorch模型轉換為ONNX格式 轉換代碼示例(Python) import torch import torchvision1. 加載訓練好的PyTorch模型 model torchvision.models.resnet18(pretrainedTrue) model.eval() # 設置為評估模式2. 創建虛擬輸入&#xff08…

OpenCV CUDA模塊特征檢測------創建Harris角點檢測器的GPU實現接口cv::cuda::createHarrisCorner

操作系統:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 編程語言:C11 算法描述 該函數創建一個 基于 Harris 算法的角點響應計算對象,專門用于在 GPU 上進行高效計算。 它返回的是一個 cv::Ptrcv::cuda::Cornernes…

html文字紅色粗體,閃爍漸變動畫效果

1. 代碼 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>紅色粗體閃爍文字表格</title><s…

Springboot獨立學院資產管理系統k0o7w(程序+源碼+數據庫+調試部署+開發環境)帶論文文檔1萬字以上,文末可獲取,系統界面在最后面。

系統程序文件列表 項目功能:財務員,校級管理員,部門,部門管理員,資產類型,資產信息,資產調撥,資產申購,申購入庫,資產出庫,資產報廢,資產維修,資產盤點,維修復審 開題報告內容 基于Spring Boot的獨立學院資產管理系統開題報告 一、選題背景與意義 &#xff08;一&#xff0…

基于javaweb的SpringBoot藥房管理系統設計與實現(源碼+文檔+部署講解)

技術范圍&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、小程序、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容&#xff1a;免費功能設計、開題報告、任務書、中期檢查PPT、系統功能實現、代碼編寫、論文編寫和輔導、論…

Web前端之隱藏元素方式的區別、Vue循環標簽的時候在同一標簽上隱藏元素的解決辦法、hidden、display、visibility

MENU 標簽區別速覽詳解? v-if? v-show? :style"{ display: ... }"?? :hidden?? :style"{ visibility: ... }" 總結 標簽 <div v-for"item in list" v-if"item.isShow">{{item.name}}</div> <div v-for"it…

Kafka 安裝教程(支持 Windows / Linux / macOS)

一、下載 1、kafka官網下載地址:https://kafka.apache.org/downloads 根據實際情況下載對應的版本 2、JDK的版本最好是17+ JDK下載地址:https://www.oracle.com/java/technologies/javase/jdk17-0-13-later-archive-downloads.html 二、安裝 前置條件 安裝 Java(至少 Jav…