亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2576 | 回復(fù): 7
打印 上一主題 下一主題

[內(nèi)存管理] 內(nèi)核態(tài)內(nèi)存的page table與用戶態(tài)內(nèi)存的page table [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2013-12-26 12:27 |只看該作者 |倒序瀏覽
看書上說,線性空間4G,前3G用于用戶進程,后1G用于內(nèi)核態(tài)。
每個用戶進程都有4G的線性空間。
那么每個進程都包含同樣的后1G空間,用于內(nèi)核態(tài)。那么這1G空間的頁表是怎么處理的?
每個進程都有一份copy嗎?
是什么時候copy的?

求大家指占迷津。

論壇徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辭舊歲徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亞洲杯之卡塔爾
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08處女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技術(shù)圖書徽章
日期:2014-03-25 09:00:29
2 [報告]
發(fā)表于 2013-12-26 14:14 |只看該作者
dean_go 發(fā)表于 2013-12-26 12:27
看書上說,線性空間4G,前3G用于用戶進程,后1G用于內(nèi)核態(tài)。
每個用戶進程都有4G的線性空間。
那么每個進 ...

每個進程都有一份copy,當發(fā)生內(nèi)核態(tài)缺頁異常時,從內(nèi)核的主頁表中同步到進程自己的頁表中。

論壇徽章:
2
申猴
日期:2013-12-26 22:11:31天秤座
日期:2014-12-23 10:23:19
3 [報告]
發(fā)表于 2013-12-26 22:12 |只看該作者
內(nèi)核用的1G空間不需要頁表項

論壇徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
4 [報告]
發(fā)表于 2013-12-27 10:53 |只看該作者
本帖最后由 arm-linux-gcc 于 2013-12-27 10:56 編輯

32位arm的實現(xiàn)方法:
1,每個進程有自己的一份kernel space頁表,也就是說每個進程自己的頁表就完整的表示了4G范圍的映射關(guān)系。
2,kernel的lowmem部分用一級頁表映射,每個entry對應(yīng)1M;vmalloc zone等非線性部分使用二級頁表來映射。
3,做ioremap時并不會更新本進程自己的內(nèi)核頁表,而是更新內(nèi)核主頁表(0xc0004000這個地方),于是本進程在首次使用這個ioremap的返回值時,就會發(fā)生異常,然后在異常處理中會去將內(nèi)核一級主頁表中的對應(yīng)entry同步到本進程的內(nèi)核頁表中,然后重新執(zhí)行發(fā)生異常處的指令,此時本進程的一級頁表中的對應(yīng)entry已經(jīng)有了內(nèi)容,這個內(nèi)容是指向的二級頁表,而二級頁表中的對應(yīng)entry已經(jīng)在ioremap時填好了,所以這次就能夠正常運行了。
4,做iounmap時,不會釋放二級頁表的buffer,只會將buffer里面的內(nèi)容設(shè)置為無效,內(nèi)核主頁表和本進程的內(nèi)核頁表的一級頁表對應(yīng)的entry也仍然會一直指向這個buffer。然后如果對iounmap的地址再訪問,在做虛擬到物理地址轉(zhuǎn)換時,就會發(fā)現(xiàn)對應(yīng)二級頁表中的entry內(nèi)容是非法的,于是發(fā)生異常。當下一次再有ioremap時,就又會重復(fù)利用這個已經(jīng)分配的二級頁表的buffer。

64位arm的實現(xiàn)方法:
用戶空間和內(nèi)核空間的頁表是分離的,TTBR0用來指向用戶空間頁表,TTBR1用來指向內(nèi)核空間頁表,這樣就不存在從內(nèi)核主頁表同步的問題了。
其實armv7中已經(jīng)實現(xiàn)了分離頁表,只是kernel中還沒有使用。
在arm64分支中就用上了分離頁表,因為內(nèi)核地址和用戶地址之間差距巨大(見Documentation\arm64\memory.txt),如果不分離的話,光是頁表就要占據(jù)上百M的內(nèi)存。

論壇徽章:
2
2015年迎新春徽章
日期:2015-03-04 09:49:45IT運維版塊每日發(fā)帖之星
日期:2016-07-29 06:20:00
5 [報告]
發(fā)表于 2013-12-27 12:33 |只看該作者
goter 發(fā)表于 2013-12-26 22:12
內(nèi)核用的1G空間不需要頁表項


哦?能否稍微詳細說一下巍峨不需要頁表項,沒有頁表項,怎么做的轉(zhuǎn)換呢?謝謝。

論壇徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
6 [報告]
發(fā)表于 2013-12-27 12:39 |只看該作者
回復(fù) 3# goter


    只有mips才不需要吧,arm肯定是需要的,powerpc貌似也需要,x86不了解

論壇徽章:
0
7 [報告]
發(fā)表于 2013-12-27 15:25 |只看該作者
回復(fù) 6# arm-linux-gcc

32bit PPC BOOKE的話用三個TLB1 entry來映射lowmem,每個entry 對應(yīng)256M. highmem 還是跟arm32類似。
64bit PPC BOOKE 基本上幾個entry就把所有的內(nèi)存都一一映射了,另外你說Ioremap這些還是走swapper_dir。


   

論壇徽章:
3
雙魚座
日期:2013-09-04 19:47:39天蝎座
日期:2013-12-11 20:30:532015年亞洲杯之澳大利亞
日期:2015-04-20 00:28:02
8 [報告]
發(fā)表于 2013-12-29 22:01 |只看該作者
回復(fù) 3# goter


    如果內(nèi)核空間沒有頁表項, 那么支持大頁的架構(gòu)的內(nèi)核空間如何使用大頁?
   
   x86的架構(gòu) 就使用kernel_physical_mapping_init()函數(shù)初始化了一個swapper_pg_dir的paging hierarchy.
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP