<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 134,comments - 22,trackbacks - 0

    一、Linux內存管理到底是分段還是分頁?

    在實模式下沒有引入段式內存管理模式前,程序都是使用絕對地址來進行內存操作的,這樣造成了程序的可移植性差等問題。于 是在8086時代開始引入段式內存管理,段式管理引入了地址映射的概念,不但解決了可移植性問題,也解決了16位ALU和段寄存器的可尋址限制,即支持更 大的內存尋址.每個段的大小是64KB.

    在實模式下,由于系統程序和用戶程序在訪問內存等資源時權限沒有區分,所以很可能造成操作系統出現異常.于是Intel在80286時代開發出來了保護模式.

    而Intel為了兼容80386前的處理器就規定:在IA(Intel Arch)32保護模式下,不能禁止分段,但是分頁是Optional的。/*When operating in protected mode, some form of segmentation must be used. There is no mode bit to disable segmentation. The use of paging, however, is optional.*/.

    既然linux在內存管理上不能禁止分段,那么linux又認為分段會造成大量的內存碎片,所以就通過將邏輯地址中的段基址置為0,加上偏移量形成線性地址,來簡化段式管理內存而使用分頁管理內存的。

    在IA32下,每頁是4K.

    二、linux的三種類型內存地址及關系是什么樣的?

    分段                     分頁

    邏輯地址————> 線性地址 —————->物理地址

    在 x86 架構中,內存被劃分成 3 種類型的地址:

    邏輯地址 (logical address) 由16位段選擇符:32位偏移量來表示,它有可能直接對應于一個物理位置(Intel實模式下)。
    線性地址 (linear address)或虛擬地址 是由段描述符中的32位段基址和邏輯地址中的32位偏移量相加構成的。例如:0x08048394,由于linux把所有的段基址都置為0x00000000.所以線性地址=0x00000000+偏移量=邏輯地址,在不分頁的情況下:線性地址就直接是物理地址;

    物理地址 (physical address) 是使用物理地址總線中的位表示的地址。內存管理單元可以將邏輯地址轉換成物理地址。

    三、為什么在32位的操作系統下每個進程會有4G的內存使用限制?

    由于32位操作系統下,由于虛擬地址空間是2的32次方=4 294 967 296,通常的數據對象都以字節為單位,所以一個進程的可尋址范圍就是4G內存

    四、為什么linux服務器是32位的還可以認出來多于4G的內存?

    本來在IA32下,機器只能認出4G的內存,但Intel為了讓32位的OS能支持更多的內存。采取了PAE(Physical Address Extension, 物理地址擴展)技術.PAE的支持,不僅需要處理器的支持,OS的內核也需要支持才可行(我們通常采用的RHEL3/4/5 kernel都支持PAE),也就是處理器內部增加了PAE寄存器,用于記錄多出的4條地址總線,所以系統就是2^36=64G.

    五、在32位的linux操作系統下,為什么linux系統認出來的內存大于4G,而我的程序每個進程卻只能分配4G以下的內存?

    雖然Intel為其處理器為支持PAE增加了4條地址線,但因為虛擬地址是32位的,所以單個進程還是只能分配4G以下的內存

    Note: Linux can use up to 64 Gigabytes of physical memory on x86 systems. However, the address space of 32-bit x86 processors is only 4 Gigabytes large. Thus means that, if you have a large amount of physical memory, not all of it can be “permanently mapped” by the kernel. The physical memory that’s not permanently mapped is called “high memory”.

    Redhat網站http://www.redhat.com/rhel/compare/

    六、32位的RedHat linux”smp” kernel”hugemem” kernel中內存支持方面有什么建議?

    Smp kernel和hugemem kernel都支持PAE支持,也就意味著最大能支持64G的內存。而RedHat建議當你的物理內存在16GB之內,用SMP” kernel,在16GB-64GB之間使用”Hugemem” kernel.這是因為虛擬地址空間里有1G用于內核空間,而3G用于用戶空間。而關健的一些數據結構是存放在1G內核空間的,在管理32G內存當中,需 要用到0.5G來用于管理這些物理內存(容易觸發OOM killer).雖然32位OS下,內核和用戶空間的比例都是1:3,但Hugemem打了一個補丁,使比例成為4G:4G,即使內核空間和用戶空間相互 獨立,所以也會有性能上的損失,因為應用程序的運行,通常會有內核和用戶空間的切換。所以如果你的內存大于16G,建議你使用64位的OS。

    /* The “SMP” kernel supports a maximum of 16GB of main memory. Systems with more than 16GB of main memory use the “Hugemem” kernel. In certain workload scenarios it may be advantageous to use the “Hugemem” kernel on systems with more than 12GB of main memory. */

    七、我們通常malloc4K內存,到底是怎么對應到物理內存的?

    在linux下,處理器在得到內存的線性地址進行內存尋址時,不是直接在內存的物理地址里查找的,而是通過線性地址轉換到主內存的物理地 址,TLB(Translation lookaside buffer,可以簡單的理解為:一種存儲線性地址和物理地址的硬件高速緩沖器)就是負責將虛擬內存地址翻譯成實際的物理內存地址,而CPU尋址時會優先 在TLB中進行尋址。如果TLB里沒有,則從頁表里進行線性地址到物理地址的轉換.hugepage能增加TLB的命中率,所以會在某些方面能大大提高系 統性能)。

    1、邏輯地址轉線性地址

    LL.jpg

    a、首先根據指令的性質來確定該使用哪一個段寄存器。
    b、根據段寄存器的內容,到GDT中找到相應的“段描述結構”

    c、根據linux把所有的段基址都置為0×00000000.所以0×00000000+偏移量就是線性地址了.在不分頁的情況下:線性地址就直接是物理地址;
    同時,在上面過程中,由于有對訪問權限的檢查,就實現了保護。

    2、線性地址轉物理地址

    在保護模式下,控制寄存器CR0的最高位PG位(PE位控制是否為保護模式)控制著分頁管理機制是否生效,如果PG=1,分頁機制生效,需通過頁表查找才能把線性地址轉換物理地址。如果PG=0,則分頁機制無效,線性地址就直接做為物理地址。

    頁式內存管理中,32位的線性地址劃分為三個部分:10位的頁目錄表下標、10位的頁面表下標、12位的頁內偏移量。CPU增加了一個CR3寄存器存放指向當前頁目錄表的指針。尋址方式就改為:
    a、從CR3取得頁目錄表的基地址;
    b、根據10位頁目錄表下標和從CR3取得的基地址,得到相應頁表的基地址;
    c、根據10位頁面表下標和b中得到的頁表基地址,從頁面表中取得相應的頁面描述項;
    d、將頁面描述項中的頁面基地址和線性地址中的12位頁內地址偏移相加,得到物理地址。
    同時,在地址轉換的過程中也有越界和權限的檢查,就不贅述了。

    LP

    注:傳統的32位操作系統采用的是兩級分頁模型

    64位和PAE支持都采用了三級分頁模型

    posted on 2010-09-30 16:22 何克勤 閱讀(689) 評論(0)  編輯  收藏 所屬分類: GNU Linux/Unix
    主站蜘蛛池模板: 国产成人毛片亚洲精品| 日韩毛片无码永久免费看| 亚洲av永久无码精品国产精品| 四虎国产精品成人免费久久| 亚洲高清无码专区视频| 国产亚洲福利一区二区免费看| 日韩伦理片电影在线免费观看| 亚洲丁香婷婷综合久久| 国产yw855.c免费视频| 亚洲精华国产精华精华液网站| 在线精品免费视频| 理论亚洲区美一区二区三区| 免费h成人黄漫画嘿咻破解版| 国产成人精品亚洲| 中文字幕不卡亚洲| 久久国产精品萌白酱免费| 4480yy私人影院亚洲| 成人免费在线看片| 亚洲欧美综合精品成人导航| 国产精品色午夜视频免费看| 一级毛片人与动免费观看| 亚洲AV无码一区东京热| 午夜免费1000部| 亚洲国产成人久久一区二区三区| 免费a级黄色毛片| 免费在线看污视频| 亚洲乱码卡三乱码新区| 永久中文字幕免费视频网站| 一个人看的免费观看日本视频www 一个人看的免费视频www在线高清动漫 | 亚洲无人区一区二区三区| 免费视频成人片在线观看| 国产亚洲国产bv网站在线| 免费a级毛片网站| 无码免费一区二区三区免费播放 | 国产精品亚洲一区二区在线观看| 亚洲国产精品尤物yw在线| 99久久国产免费-99久久国产免费 99久久国产免费中文无字幕 | 99精品国产免费久久久久久下载| 久久综合亚洲色hezyo| 亚洲成av人在线视| 免费鲁丝片一级在线观看|