系統io操作

2021-06-25 07:50:35 字數 1086 閱讀 5357

乎每一種外設都是通過讀寫裝置上的暫存器來進行的,通常包括控制暫存器、狀態暫存器和資料暫存器三大類,外設的暫存器通常被連續地編址。根據cpu體系結構的不同,cpu對io埠的編址方式有兩種:

典型地,如x86處理器為外設專門實現了乙個單獨的位址空間,稱為"i/o位址空間"或者"i/o埠空間",cpu通過專門的i/o指令(如x86的in和out指令)來訪問這一空間中的位址單元。 

risc指令系統的cpu(如mips arm powerpc等)通常只實現乙個實體地址空間,像這種情況

,外設的

i/o埠的實體地址就被對映到記憶體位址空間中

,外設i/o埠成為記憶體的一部分。此時,cpu可以象訪問乙個記憶體單元那樣訪問外設i/o埠,而不需要設立專門的外設i/o指令。

但是,這兩者在硬體實現上的差異對於軟體來說是完全透明的,驅動程式開發人員可以將記憶體對映方式的i/o埠和外設記憶體統一看作是"i/o記憶體"資源。

一般來說,在系統執行時,外設的i/o記憶體資源的實體地址是已知的,由硬體的設計決定。但是cpu通常並沒有為這些已知的外設i/o記憶體資源的實體地址預定義虛擬位址範圍,驅動程式並不能直接通過實體地址訪問i/o記憶體資源,而必須將它們對映到核心虛位址空間內(通過頁表),然後才能根據對映所得到的核心虛位址範圍,通過訪內指令訪問這些i/o記憶體資源。linux在io.h標頭檔案中宣告了函式ioremap(),用來將i/o記憶體資源的物理位址對映到核心虛位址空間。

但要使用

i/o記憶體首先要申請

,然後才能對映,使用

i/o埠首先要申請

,或者叫請求,對於

i/o埠的請求意思是讓核心知道你要訪問這個埠

,這樣核心知道了以後它就不會再讓別人也訪問這個埠了

.畢竟這個世界僧多粥少啊.申請

i/o埠的函式是

request_region, 申請i/o記憶體的函式是request_mem_region

使用io記憶體需要先使用request_mem_region,然後再使用ioremap對映使用。

使用io埠(x86特有,沒有分配記憶體位址),需要使用 request_region 進行申請。

linux系統IO操作

clib buff page cache disk cache include 開啟流 file fopen const char pathname,const char type 關閉流 int fclose file fp 重新整理流 int fflush file fp 一次讀寫乙個字元 in...

作業系統IO模型

目前io模型主要經歷了以下五種 1 阻塞io 2 非阻塞io 3 io復用 select和poll 4 訊號驅動io sigio 5 非同步io aio 核心空間和使用者空間 由於作業系統都包括核心空間和使用者空間 或者說核心態和使用者態 核心空間主要存放的是核心 和資料,是供系統程序使用的空間。而...

作業系統之IO

io 是指作業系統內部的通訊流,用來提供不同模組的溝通 硬體層面 在硬體層面如何連線不同的模組,這裡採用主從模式,即有乙個mmu管理中心負責與其他硬體連線,然後cpu 記憶體與該mmu管理中心連線,通過這種方式 使得cpu 記憶體與計算機硬體隔離開來,後續的迭代維護不會影響到cpu和記憶體 計算機硬...