Linux 使用者空間與核心空間資料交換方式

2021-07-24 19:51:22 字數 1650 閱讀 9978

一般地,在使用虛擬記憶體技術的多工系統上,核心和應用有不同的位址空間,因此,在核心和應用之間以及在應用與應用之間進行資料交換需要專門的機制來實現,眾所周知,程序間通訊(ipc)機制就是為實現應用與應用之間的資料交換而專門實現的,大部分讀者可能對程序間通訊比較了解,但對應用與核心之間的資料交換機制可能了解甚少

本文將詳細介紹 linux 系統下核心與應用進行資料交換的各種方式,包括核心啟動引數、模組引數與 sysfs、sysctl、系統呼叫、netlink、procfs、seq_file、debugfs 和 relayfs。

linux核心提供了多個函式和巨集用於核心空間和使用者空間傳遞資料。

主要有:access_ok(),copy_to_user(),copy_from_user,put_user,get_user。

1.access_ok()

函式原型:int access_ok(int type,unsigned long addr,unsigned long size)

函式access_ok()用於檢查指定位址是否可以訪問。引數type為訪問方式,可以為verify_read(可讀),verify_write(可寫)。addr為要操作的位址,size為要操作的空間大小(以位元組計算)。函式返回1,表示可以訪問,0表示不可以訪問。

2.copy_to_user()和copy_from_user()

函式原型:unsigned long copy_to_user(void *to,const void *from,unsigned long len)

unsigned long copy_from_user(void *to,const void *from,unsigned long len)

這兩個函式用於核心空間與使用者空間的資料交換。copy_to_user()用於把資料從核心空間拷貝至使用者空間,copy_from_user()用於把資料從使用者空間拷貝至核心空間。第乙個引數to為目標位址,第二個引數from為源位址,第三個引數len為要拷貝的資料個數,以位元組計算。這兩個函式在內部呼叫access_ok()進行位址檢查。返回值為未能拷貝的位元組數。

3.get_user()和put_user()

函式原型:int get_user(x,p)

int put_user(x,p)

這是兩個巨集,用於乙個基本資料(1,2,4位元組)的拷貝。get_user()用於把資料從使用者空間拷貝至核心空間,put_user()用於把資料從核心空間拷貝至使用者空間。x為核心空間的資料,p為使用者空間的指標。這兩個巨集會呼叫access_ok()進行位址檢查。拷貝成功,返回0,否則返回-efault。

4.還有兩個函式__copy_to_user()和__copy_from_user(),功能與copy_to_user()和copy_from_user()相同,只是不進行位址檢查。還有兩個巨集__get_user()和__put_user(),功能與get_user()和put_user()相同,也不進行位址檢查。

(通常情況下,應用程式通過核心介面訪問驅動程式,因此,驅動程式需要和應用程式交換資料。linux將儲存器分為「核心空間」和「使用者空間」。作業系統和驅動程式在核心空間執行,應用程式在使用者空間執行,兩者不能簡單地使用指標傳遞資料。因為linux系統使用了虛擬記憶體機制,使用者空間的記憶體可能被換出,當核心空間使用使用者空間指標時,對應的資料可能不在記憶體中。linux核心提供了多個函式和巨集用於核心空間和使用者空間傳遞資料。)

linux核心空間與使用者空間

核心空間和使用者空間是作業系統理論的基礎之一,即核心功能模組執行在核心空間,而應用程式執行在使用者空間。現代的cpu都具有不同的操作模式,代表不同的級別,不同的級別具有不同的功能,在較低的級別中將禁止某些操作。linux系統設計時利用了這種硬體特性,使用了兩個級別,最高端別和最低級別,核心執行在最高...

Linux的使用者空間與核心空間

當核心模組 或執行緒訪問記憶體時,中的記憶體位址都為邏輯位址,而對應到真正的物理記憶體位址,需要位址一對一的對映,如邏輯位址0xc0000003對應的實體地址為0 3,0xc0000004對應的實體地址為0 4,邏輯位址與實體地址對應的關係為 邏輯位址物理記憶體位址 0xc0000000 0 00x...

核心空間與使用者空間

1.核心態與使用者態的區別 1 核心態 的 不受任何限制,可以訪問 所有處理器指令集 記憶體位址以及i o空間 2 使用者態的 只能訪問其位址空間的頁表項中規定的虛擬位址。2.使用者態到核心態的切換方式 1 系統呼叫 軟中斷的一種 由使用者程序主動發起 2 異常 當cpu在執行執行在使用者態下的程式...