linux核心0 11獲取空閒實體記憶體頁的函式ge

時間 2022-07-18 01:40:02

1樓:格調寵兒

198 unsigned long get_free_page(void)

199224 if (!result && swap_out())225 goto repeat;

226 return result;

227}

在這段**中, 沒有存在中斷遮蔽cli , 而在fork系統呼叫中直接使用這個函式, 如果在執行到204的時候被中斷, 並且其他程序也呼叫fork系統呼叫執行完這個函式, 這樣就會導致同一頁被引用兩次, 而mark數值 1 而造成資料重複的錯誤. 不知道會不會造成這樣子的錯誤.

編寫linux核心模組的時候呼叫get_free_page函式出錯!

2樓:吉大大偉

把核心的版本號貼出來的,一般來說沒人用get_free_page這個函式的,所以才會報這個錯,一般都是__get_free_page

3樓:匿名使用者

去lxr.linux.no搜尋...可以對kernel進行全文檢索....

你得核心版本是多少呢..只有__get_free_page,沒有get_free_page,,定義在inux/gfp.h中。

你再試試,我是直接從3.01版本的核心中找到的..(不知不覺到了3.0l了..2,4和2.6都過去了。.)

4樓:匿名使用者

誰教你用這個函式的?一般的驅動裡面不會使用這個函式,都是kmalloc或者kzmalloc了。

5樓:之皓線美麗

;gfp..6都過去了.01版本的核心中找到的.0l了.

你得核心版本是多少呢。.h中.可以對kernel進行全文檢索..,定義在inux/,沒有get_free_page,4和2。

你再試試..(不知不覺到了3..只有__get_free_page.linux.2...no搜尋,我是直接從3.去lxr

如何截獲linux系統中核心模組的匯出函式

6樓:匿名使用者

把核心的版本號貼出來的,一般來說沒人用get_free_page這個函式的,所以才會報這個錯,一般都是__get_free_page

關於虛擬記憶體中頁目錄與頁表在實體記憶體中載入的問題

7樓:匿名使用者

我對linux作業系統的具體情況不是很熟,回答僅供參考。

首先,實體記憶體無所謂核心區使用者區,所有地址都一樣。虛擬的地址空間才分核心區使用者區。

處理器通過檢視頁目錄和頁表,把虛擬地址換算成實體地址。使用者區與核心區的兩個不同的虛擬地址對應同一個實體地址也不要緊。

核心區與使用者區的真正區別在於普通程序能不能訪問該區域中的地址。

在正常情況下,作業系統肯定會把頁目錄和頁表保護起來,可以把它們看作存放在核心區的東西。

編寫作業系統時,頁目錄確實可以放在實體記憶體中的任何地方(當然偏移必須是1000h的倍數),只要把偏移量填進cr3的高20位就可以了。

linux核心的頁目錄放在實體地址0h處,頁表緊隨其後。0.11版linux中,所有使用者程序和核心用的都是這張頁目錄。

切換程序時,改改頁目錄項就行了。新版的linux核心我不太瞭解,抱歉……

每個頁目錄項有4位元組,高20位儲存頁表的實體地址,低12位儲存頁表的屬性。

一張頁表4kb,這4kb必須是連續的。但是各張頁表之間不必連續。linux建立新程序時,僅僅呼叫了get_free_page找到一頁空記憶體,把程序頁表塞進去而已。

頁表不能被普通程序直接訪問。訪問使用者區虛擬地址是看不到程序頁表的。

核心的頁表前面提到過。它就在核心頁目錄的後面,實體地址為1000h,虛擬地址為c0001000h。訪問使用者區的虛擬地址不會看到它。

個人不大擅長表述,恐怕解釋得不是很清楚。歡迎追問。

linux 驅動 dma 為什麼 要物理 地址

linux採用什麼方法實現記憶體的分配和釋放 5

8樓:山寨老闆

linux 採用 buddy 演算法有效分配和釋放物理頁塊。

linux系統記憶體管理的特點linux的程序結束後,它佔用的資源全部釋放,但是記憶體僅僅是設定了標誌,標誌了這部分記憶體已經不再使用,可以被重新分配的。當程序需要記憶體時,linux系統首先從空閒記憶體中查詢分配,空閒記憶體不足時就會使用不再使用的記憶體;另外,如果你的程式又一次執行,系統直接使用記憶體中

的資料,不再從檔案系統讀組,提高了效率。這樣一來,linux的系統使用律會很高,伺服器的在98%以上;這樣做的目的是:linux認為記憶體是最寶貴

的資源,充分利用,不能讓他空閒

9樓:匿名使用者

是不是可以用負載均衡。。。考慮下吧。。

linux 記憶體 為什麼會一直被佔滿

10樓:蠍

區別於windows的記憶體管理。linux記憶體使用的主要特點是,無論實體記憶體有多大,linux 都將其充份利用,將一些程式呼叫過的硬碟資料讀入記憶體,利用記憶體讀寫的高速特性來提高linux系統的資料訪問效能。

沒有正在執行的程式的話,一般是驅動的問題。如果安裝了私有驅動的話,那就刪除。開源驅動可滿足除了大型遊戲之外的大多數需要。

windows是隻在需要記憶體時, 才為應用程式分配記憶體,並不能充分利用大容量的記憶體空間。換句話說,每增加一些實體記憶體,linux都將能充分利用起來,發揮了硬體投資帶來的好處,而 windows只將其做為擺設,即使增加8gb甚至更大。

11樓:過去到未來哇

你可以使用top命令檢視一下程序,和windows資源管理器差不多,然後關掉程序。

pid:程序的id

user:程序所有者

pr:程序的優先順序別,越小越優先被執行

ninice:值

virt:程序佔用的虛擬記憶體

res:程序佔用的實體記憶體

shr:程序使用的共享記憶體

s:程序的狀態。s表示休眠,r表示正在執行,z表示僵死狀態,n表示該程序優先值為負數

%cpu:程序佔用cpu的使用率

%mem:程序使用的實體記憶體和總記憶體的百分比time+:該程序啟動後佔用的總的cpu時間,即佔用cpu使用時間的累加值。

command:程序啟動命令名稱

linux核心和作業系統問題,Linux核心和作業系統問題

從本質上來說作業系統應該就是指核心,因為作業系統的主要任務就是隱藏處理硬體的細節,而這均是由核心去實現的。那為啥說不是完整的呢?核心加上什麼才是完整的呢?這個要先從計算機結構分析自底向上依次是 硬體 驅動程式 核心 使用者介面程式 應用程式。主要是介面程式,它是啥?為什麼需要?如果讓使用者直接和作業...

在linux裡面怎麼獲取mac地址

對於linux使用ifconfig命令 ifconfig a eth0 link encap ethernet hwaddr 00 60 08 c4 99 aa inet addr 131.225.84.67 bcast 131.225.87.255 mask 255.255.248.0 up br...

linux核心有沒有hook機制

有啊,一切順序邏輯,都有被hook的可能。下面是一個linux上的hook的例項 截獲write系統呼叫 ifndef module define module endif ifndef kernel define kernel endif include include include inclu...