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

  免費注冊 查看新帖 |

Chinaunix

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

[內(nèi)存管理] 內(nèi)存管理的疑惑? [復制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2014-09-26 07:31 |只看該作者 |倒序瀏覽
本帖最后由 鬼鬼一哈 于 2014-09-26 07:41 編輯

環(huán)境:32bit  +  2GB RAM
疑問如下:
1.系統(tǒng)啟動時,bios,kernel的code,data,bss都會消耗部分內(nèi)存,此時是否建立頁表?(貌似此處建立頁表好像用處不大)
  如果此時不建立頁表,那是不是這個內(nèi)存將會對內(nèi)存管理透明,實際可以建立page的內(nèi)存應該要減去上面使用的物理內(nèi)存?
  初始化內(nèi)存單元好像也是boot memory allocator之后的吧?

2.對于內(nèi)核而言,頁表都是從3G空間開始映射,假設系統(tǒng)沒有任何用戶進程,則2G內(nèi)存的前896M空間會映射到3G~3G+896M,之后的(2G-896M)只有映射在高端地址空間的128M中使用了?

3.內(nèi)核畢竟是給應用服務的,頁表也是按需進行映射的,如果用戶態(tài)需要內(nèi)存,在將其映射到該進程的地址空間即可,別的進程將無法使用該物理page,所以用戶態(tài)應用進程間才實現(xiàn)了隔離?

4.對于高端內(nèi)存的疑惑,高端內(nèi)存對于內(nèi)核比較珍貴(能最大限度保證不失敗),但為什么說用戶態(tài)分內(nèi)存優(yōu)先使用高端內(nèi)存的地址空間呢(那豈不是這些空間內(nèi)容對所有應用可見了)?

論壇徽章:
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技術圖書徽章
日期:2014-03-25 09:00:29
2 [報告]
發(fā)表于 2014-09-26 08:42 |只看該作者
1、取決于是否進入了保護模式,進入保護模式后,就需要使用頁表。
2、是的,但不可能沒有用戶進程,比如init
3、沒看太明白。
4、應該是低端內(nèi)存比較珍貴,這個好像說反了。。

論壇徽章:
0
3 [報告]
發(fā)表于 2014-09-27 07:22 |只看該作者
本帖最后由 鬼鬼一哈 于 2014-09-27 07:22 編輯

回復 2# humjb_1983

1、取決于是否進入了保護模式,進入保護模式后,就需要使用頁表。
【疑問】進入保護模式前,cpu只能訪問前1M內(nèi)存,從start_kernel中看到,此時boot memory allcotor之后,才有paging_inti的初始化動作,是否認為paging_init后才能用頁表?
2、是的,但不可能沒有用戶進程,比如init
3、沒看太明白。
【疑問】我的意思是:用戶態(tài)使用內(nèi)存,頁表應該是映射到normal區(qū),該虛擬地址只是屬于該進程的地址空間,用戶態(tài)的內(nèi)存最后向內(nèi)核獲取時,是通過vmalloc接口的么?
4、應該是低端內(nèi)存比較珍貴,這個好像說反了。
【疑問】如果說低端內(nèi)存比較珍貴,內(nèi)核大部分內(nèi)存映射都是用的低端地址空間,為什么內(nèi)核都不用高端內(nèi)存呢?

論壇徽章:
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技術圖書徽章
日期:2014-03-25 09:00:29
4 [報告]
發(fā)表于 2014-09-29 08:46 |只看該作者
鬼鬼一哈 發(fā)表于 2014-09-27 07:22
回復 2# humjb_1983
3、沒看太明白。
【疑問】我的意思是:用戶態(tài)使用內(nèi)存,頁表應該是映射到normal區(qū),該虛擬地址只是屬于該進程的地址空間,用戶態(tài)的內(nèi)存最后向內(nèi)核獲取時,是通過vmalloc接口的么?
4、應該是低端內(nèi)存比較珍貴,這個好像說反了。
【疑問】如果說低端內(nèi)存比較珍貴,內(nèi)核大部分內(nèi)存映射都是用的低端地址空間,為什么內(nèi)核都不用高端內(nèi)存呢?

3、當然不是通過vmalloc,vmalloc是內(nèi)核分配非連續(xù)內(nèi)存和高端內(nèi)存的主要方式,用戶態(tài)進程當然不能使用。
對于用戶態(tài)使用的內(nèi)存,在內(nèi)核中的實現(xiàn)通常為:malloc分配虛擬內(nèi)存-->缺頁異常分配物理內(nèi)存(alloc_page之類的接口),然后修改頁表建立映射。
4、內(nèi)核使用低端內(nèi)存的目的是為了提高效率,因為低端內(nèi)存是線性映射,而且是提前映射好的,分配內(nèi)存時無需通過缺頁、映射的方式,效率更高。這也是低端內(nèi)存存在的初衷。

論壇徽章:
0
5 [報告]
發(fā)表于 2014-10-15 10:36 |只看該作者
請問一個問題:
應用進程調(diào)用malloc時分配虛擬內(nèi)存,當發(fā)生缺頁異常時才調(diào)用alloc_pages()。
這里alloc_pages()是調(diào)用__alloc_pages()的,__alloc_pages()掃描zonelist中的每個內(nèi)存管理區(qū)來分配物理頁框。
這其中我有一個疑問:物理內(nèi)存的前896MB被映射給了內(nèi)核,但是這里的__alloc_pages()掃描所有的內(nèi)存管理區(qū),那豈不是用戶進程也可以分配的物理內(nèi)存的前896MB的頁框了嗎?
回復 4# humjb_1983


   

論壇徽章:
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技術圖書徽章
日期:2014-03-25 09:00:29
6 [報告]
發(fā)表于 2014-10-15 10:43 |只看該作者
B_C_1024 發(fā)表于 2014-10-15 10:36
請問一個問題:
應用進程調(diào)用malloc時分配虛擬內(nèi)存,當發(fā)生缺頁異常時才調(diào)用alloc_pages()。
這里alloc_p ...

是的,用戶態(tài)進程也可以分配到低端內(nèi)存。但是內(nèi)存分配時,都有策略(由內(nèi)存分配標記決定),每種策略有相應的內(nèi)存區(qū)fall back順序,對于用戶態(tài)進程,默認是優(yōu)先從高端內(nèi)存分配,當高端內(nèi)存不足時,才可能從低端內(nèi)存分配。

論壇徽章:
0
7 [報告]
發(fā)表于 2014-10-16 09:31 |只看該作者
還有一個問題問一下:
基于slab分配器的內(nèi)存分配函數(shù)是不是只能得到低端內(nèi)存的頁框?那么slab里面的內(nèi)存頁框永遠只能是低端內(nèi)存的頁框,得不到高端內(nèi)存了?
humjb_1983 發(fā)表于 2014-10-15 10:43
是的,用戶態(tài)進程也可以分配到低端內(nèi)存。但是內(nèi)存分配時,都有策略(由內(nèi)存分配標記決定),每種策略有相應 ...

論壇徽章:
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技術圖書徽章
日期:2014-03-25 09:00:29
8 [報告]
發(fā)表于 2014-10-16 13:47 |只看該作者
B_C_1024 發(fā)表于 2014-10-16 09:31
還有一個問題問一下:
基于slab分配器的內(nèi)存分配函數(shù)是不是只能得到低端內(nèi)存的頁框?那么slab里面的內(nèi)存頁 ...

內(nèi)核中大部分情況下,slab分配都是用GFP_KERNEL或GFP_ATOMIC標記,所以,只能從低端內(nèi)存中分配。

論壇徽章:
0
9 [報告]
發(fā)表于 2014-10-16 16:00 |只看該作者
哦,多謝!回復 8# humjb_1983


   

論壇徽章:
0
10 [報告]
發(fā)表于 2014-12-09 14:31 |只看該作者
回復 5# B_C_1024


malloc發(fā)生缺頁中斷的過程
static int __kprobes do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
   fault = __do_page_fault(mm, addr, fsr, flags, tsk);
   return handle_mm_fault(mm, vma, addr & PAGE_MASK, flags);
      return handle_pte_fault(mm, vma, address, pte, pmd, flags);
         return do_anonymous_page(mm, vma, address,pte, pmd, flags);
            page = alloc_zeroed_user_highpage_movable(vma, address);
               struct page *page = alloc_page_vma(GFP_HIGHUSER | movableflags,vma, vaddr);
                  alloc_pages(gfp_mask, order)


   
您需要登錄后才可以回帖 登錄 | 注冊

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP