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

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 3065 | 回復(fù): 3
打印 上一主題 下一主題

[內(nèi)存管理] Linux-0.11內(nèi)核_段頁(yè)內(nèi)存管理問(wèn)題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2012-11-20 13:47 |只看該作者 |倒序?yàn)g覽
我的疑惑是:intel 80x86 CPU在選擇分頁(yè)機(jī)制后,分段是如何實(shí)現(xiàn)的?段基址是如何獲得的??
下面是我的理解:
        intel 80x86 CPU在沒(méi)有采用分頁(yè)機(jī)制時(shí),是單純的分段機(jī)制,這時(shí)的線性地址就是物理地址。此時(shí)若為新進(jìn)程分配內(nèi)存空間,是可以根據(jù)物理空間的使用情況分配的,此時(shí)的段基址就是實(shí)際的物理地址。
        但采用分頁(yè)機(jī)制之后,是分段機(jī)制與分頁(yè)機(jī)制共存,地址轉(zhuǎn)換為:邏輯地址 --> 線性地址 --> 物理地址。此時(shí)分配內(nèi)存不是連續(xù)的,也就是說(shuō)所謂的段不是實(shí)際的物理段,只是邏輯上(線性地址空間上)的段。此時(shí)的分段機(jī)制在線性地址空間上為新進(jìn)程分配段空間之后,然后又經(jīng)分頁(yè)機(jī)制映射到零碎的物理地址空間(即不連續(xù)的頁(yè)面)。不管分段機(jī)制在線性地址空間上如何映射段空間,采取分頁(yè)機(jī)制之后,都是零碎的物理空間,那么分段機(jī)制還有什么作用??
        在linux-0.11中,是內(nèi)核作者(linus)直接設(shè)定好了幾個(gè)段基址。若沒(méi)有事先設(shè)定段基址,分配內(nèi)存時(shí)由系統(tǒng)根據(jù)線性地址空間使用情況設(shè)置段基址,我想這也沒(méi)有任何意義,而且難以實(shí)現(xiàn)(因?yàn)檫要記錄線性地址空間使用情況)。

上面說(shuō)了那么多,總的就是說(shuō),在采取分頁(yè)機(jī)制之后,分段機(jī)制是不是多余的??我感覺(jué)它沒(méi)任何意義,且不好實(shí)現(xiàn)(因?yàn)檫要記錄線性地址空間使用情況)。



若想一起學(xué)習(xí)linux-0.11內(nèi)核源碼的,可以聯(lián)系我,呵呵,,,e9999e@163.com

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2012-11-21 09:12 |只看該作者
現(xiàn)在明白了!!!!

Intel 80x86段頁(yè)內(nèi)存尋址機(jī)制、Linux-0.11內(nèi)存管理機(jī)制
                                                                                                                       

一、Intel 80x86段頁(yè)內(nèi)存管理機(jī)制

1.段選擇符
段選擇符(段寄存器的低16位)指示著段的描述符,在段描述符中包含有定義段所用的全部信息。段選擇符具體包括:
(1)索引字段:是由13位組成。利用索引字段可以從擁有8192個(gè)段描述符的段描述
符表中選出任何一個(gè)段描述符來(lái)。處理機(jī)用8(8是段描述符的字段數(shù))乘以索引值再加上描述符的基地址(來(lái)自全局描述符寄存器,或者局部描述符寄存器)就是索引字段值。
(2)段描述符指示段字段Ti:這個(gè)字段用來(lái)說(shuō)明使用的是全局描述表GDT,還是局部
描述用符表LDT。若這一位被清成0,說(shuō)明選擇的是全局描述符GDT,若這一位被置成1,說(shuō)明當(dāng)前選中了局部描述符表。
(3)請(qǐng)求特權(quán)級(jí)字段RPL:這個(gè)字段由兩位(位1和位0)組成,所以可以表示0-3共4
個(gè)特權(quán)級(jí)。若這個(gè)字段所含的表示特權(quán)級(jí)的值比程序的特權(quán)級(jí)值。丛撟侄嗡硎镜奶貦(quán)級(jí)比程序的高),它就會(huì)在使用這個(gè)選擇符去訪問(wèn)這個(gè)程序時(shí)覆蓋掉這個(gè)程序的特權(quán)級(jí)。

2.80x86的段頁(yè)內(nèi)存尋址機(jī)制
在保護(hù)方式下,80386不僅采用擴(kuò)充的存儲(chǔ)器分段管理機(jī)制,而且提供可選的存儲(chǔ)器分頁(yè)
管理機(jī)制。這些存儲(chǔ)管理機(jī)制由80386存儲(chǔ)管理部件MMU實(shí)現(xiàn)。

(1)目標(biāo)
80386有32根地址線,在保護(hù)方式下,它們都能發(fā)揮作用,所以可尋址的物理地址空間高達(dá)4G字節(jié)。在以80386及其以上處理器為CPU的PC兼容機(jī)系統(tǒng)中,把地址在1M以下的內(nèi)存稱(chēng)為常規(guī)內(nèi)存,把地址在1M 以上的內(nèi)存稱(chēng)為擴(kuò)展內(nèi)存。
80386 還要對(duì)實(shí)現(xiàn)虛擬存儲(chǔ)器提供支持。雖然與8086可尋址的1M字節(jié)物理地址空間相比,80386可尋址的物理地址空間可謂很大,但實(shí)際的微機(jī)系統(tǒng)不可能安裝如此達(dá)的物理內(nèi)存。所以,為了運(yùn)行大型程序和真正實(shí)現(xiàn)多任務(wù),必須采用虛擬存儲(chǔ)器。虛擬存儲(chǔ)器是一種軟硬件結(jié)合的技術(shù),用于提供比在計(jì)算機(jī)系統(tǒng)中實(shí)際可以使用的物理主存儲(chǔ)器大得多的存儲(chǔ)空間。這樣,程序員在編寫(xiě)程序時(shí)不用考慮計(jì)算機(jī)中物理存儲(chǔ)器的實(shí)際容量。  
80386還要對(duì)存放在存儲(chǔ)器中的代碼及數(shù)據(jù)的共享和保護(hù)提供支持。任務(wù)甲和任務(wù)乙并存,任務(wù)甲和任務(wù)乙必須隔離,以免相互影響。但它們又可能要共享部分代碼和數(shù)據(jù)。所以,80386既要支持任務(wù)隔離,又要支持可共享代碼和數(shù)據(jù)的共享,還要支持特權(quán)保護(hù)。

(2)地址空間和地址轉(zhuǎn)換
保護(hù)方式下的虛擬存儲(chǔ)器由大小可變的存儲(chǔ)塊構(gòu)成,這樣的存儲(chǔ)塊稱(chēng)為段。80386采用稱(chēng)為描述符表(即段表,包括GDT和IDT)來(lái)描述段的位置、大小和使用情況。虛擬存儲(chǔ)器的地址由指示描述符的選擇子和段內(nèi)偏移兩部分構(gòu)成,這樣的地址集合稱(chēng)為虛擬地址空間。80386支持的虛擬地址空間可達(dá)64T字節(jié)(虛擬地址空間由GDT 映射的全局地址空間和由LDT映射的局部地址空間組成。選擇符的索引部分由13 個(gè)比特位表示,加上區(qū)分GDT和LDT的1 個(gè)比特位,因此Intel 80X86 CPU 共可以索引16384 個(gè)選擇符。若每個(gè)段的長(zhǎng)度都取最大值4G,則最大虛擬地址空間范圍是16384 * 4G = 64T)。程序員編寫(xiě)程序時(shí)使用的存儲(chǔ)地址空間是虛擬地址空間,所以,他們可認(rèn)為有足夠大的存儲(chǔ)空間可供使用。
顯然,只有在物理存儲(chǔ)器中的程序才能運(yùn)行,只有在物理存儲(chǔ)器中的數(shù)據(jù)才能訪問(wèn)。因
此,虛擬地址空間必須映射到物理地址空間,二維的虛擬地址必須轉(zhuǎn)化成一維的物理地址。由于物理地址空間遠(yuǎn)小于虛擬地址空間,所以只有虛擬地址空間中的部分可以映射到物理地址空間。由于物理存儲(chǔ)器的大小要遠(yuǎn)小于物理地址空間,所以只有上述部分中的部分才能真正映射到物理存儲(chǔ)器。
線性地址空間由一維的線性地址構(gòu)成,線性地址空間和物理地址空間對(duì)等。線性地址32位長(zhǎng),線性地址空間容量為4GB。
每一個(gè)任務(wù)有一個(gè)虛擬地址(邏輯地址)空間。80386分兩步實(shí)現(xiàn)虛擬地址(邏輯地址)空間到物理地址空間到物理地址空間的映射,也就是分兩步實(shí)現(xiàn)虛擬地址(邏輯地址)到物理地址的轉(zhuǎn)換,但第二步是可選的(即分頁(yè)機(jī)制可選)。
通過(guò)描述符表(即段表,包括GDT和IDT)和描述符,分段管理機(jī)制實(shí)現(xiàn)虛擬地址空間到線性地址空間的映射,實(shí)現(xiàn)把二維的虛擬地址轉(zhuǎn)換為一維的線性地址。這一步總是存在的。
分頁(yè)管理機(jī)制把線性地址空間和物理地址空間分別劃分為大小相同的塊,這樣的塊稱(chēng)為頁(yè)。通過(guò)在線性地址空間的頁(yè)與物理地址空間的頁(yè)建立之間建立的映射表(即頁(yè)表,每個(gè)進(jìn)程都可以擁有自己的頁(yè)表),分頁(yè)管理機(jī)制實(shí)現(xiàn)線性地址空間到物理地址空間的映射,實(shí)現(xiàn)線性地址到物理地址的轉(zhuǎn)換。分頁(yè)管理機(jī)制是可選的,在不采用分頁(yè)管理機(jī)制時(shí),線性地址空間就等同于物理地址空間,線性地址就等于物理地址。
分段管理機(jī)制所使用的可變大小的塊,時(shí)分段管理機(jī)制比較適宜處理復(fù)雜系統(tǒng)的邏輯分段。存儲(chǔ)塊的大小可以根據(jù)適當(dāng)?shù)倪壿嫼x進(jìn)行定義,而不用考慮固定大小的頁(yè)所強(qiáng)加的人為限制。每個(gè)段可作為獨(dú)立的單位處理,以簡(jiǎn)化段的保護(hù)及共享。分頁(yè)機(jī)制使用的固定大小的塊最適合于管理物理存儲(chǔ)器,無(wú)論是管理內(nèi)存還是外存都同樣有效。分頁(yè)管理機(jī)制能夠有效地支持實(shí)現(xiàn)虛擬存儲(chǔ)器。
段及分頁(yè)這兩種機(jī)制是兩種不同的轉(zhuǎn)換機(jī)制,是整個(gè)地址轉(zhuǎn)換函數(shù)的不同的轉(zhuǎn)換級(jí)。雖然兩種機(jī)制都利用存儲(chǔ)在主存儲(chǔ)器中的轉(zhuǎn)換表,但這些表具有獨(dú)立的結(jié)構(gòu)。事實(shí)上,段表存儲(chǔ)在線性地址空間,而頁(yè)表存儲(chǔ)在物理地址空間。因此,段轉(zhuǎn)換表可由分頁(yè)機(jī)制重新進(jìn)行定位而不需段機(jī)制的參與。段轉(zhuǎn)換機(jī)制把虛擬地址轉(zhuǎn)換為線性地址,并在線性地址中訪問(wèn)段轉(zhuǎn)換機(jī)制的表格,而不會(huì)覺(jué)察分頁(yè)機(jī)制已把線性地址轉(zhuǎn)換為物理地址。類(lèi)似地,分頁(yè)機(jī)制對(duì)于程序產(chǎn)生的地址所使用的虛擬地址空間一無(wú)所知。分頁(yè)機(jī)制只是直接地把線性地址轉(zhuǎn)換為物理地址,并且在物理地址中訪問(wèn)轉(zhuǎn)換表格,并不知道虛擬地址空間的存在,甚至不知道段轉(zhuǎn)換機(jī)制的存在。

(3)虛擬存儲(chǔ)器概念
        80386支持的虛擬地址空間可達(dá)64TB。虛擬地址空間由GDT 映射的全局地址空間和由LDT映射的局部地址空間組成。選擇符的索引部分由13 個(gè)比特位表示,加上區(qū)分GDT和LDT的1 個(gè)比特位,因此Intel 80X86 CPU 共可以索引16384 個(gè)選擇符。若每個(gè)段的長(zhǎng)度都取最大值4GB,則最大虛擬地址空間范圍是16384 * 4GB = 64TB。
虛擬存儲(chǔ)器是一種設(shè)計(jì)技術(shù),用于提供比在計(jì)算機(jī)系統(tǒng)中實(shí)際可以使用的物理主存儲(chǔ)器大得多的存儲(chǔ)空間。使用者會(huì)產(chǎn)生一種錯(cuò)覺(jué),好象在程序中可以使用非常大的物理存儲(chǔ)空間。使用虛擬存儲(chǔ)器的好處是:一個(gè)程序可以很容易地在物理存儲(chǔ)器容量大不一樣的、配置范圍很廣的計(jì)算機(jī)上運(yùn)行;編程人員使用虛擬存儲(chǔ)器可以寫(xiě)出比任何實(shí)際配置的物理存儲(chǔ)器都大得多的程序。虛擬存儲(chǔ)器由存儲(chǔ)管理機(jī)制及一個(gè)大容量的快速硬盤(pán)存儲(chǔ)器支持。在程序運(yùn)行的任何時(shí)刻,只把虛擬地址空間的一小部分映射到主存儲(chǔ)器,其余部分則存儲(chǔ)在磁盤(pán)上。因?yàn)橹挥写鎯?chǔ)在主存儲(chǔ)器中的部分虛擬存儲(chǔ)器可由處理器使用,這種虛擬存儲(chǔ)技術(shù)將依賴(lài)程序內(nèi)部訪問(wèn)存儲(chǔ)器的局部化特性,在程序執(zhí)行中只需整個(gè)虛擬存儲(chǔ)器中的少量存儲(chǔ)內(nèi)容在主存儲(chǔ)器中駐留。而當(dāng)訪問(wèn)存儲(chǔ)器的范圍發(fā)生變化時(shí),有必要把虛擬存儲(chǔ)器的某些部分從磁盤(pán)調(diào)入主存儲(chǔ)器,虛擬存儲(chǔ)器的另外的部分,也能從主存儲(chǔ)器傳送回磁盤(pán)上。

3.對(duì)頁(yè)表的進(jìn)一步說(shuō)明
在32位邏輯地址空間的分頁(yè)系統(tǒng)中,每個(gè)頁(yè)表項(xiàng)占用4個(gè)字節(jié),共32位,由于每頁(yè)大小為4KB,并且位于4KB邊界上,故其低12位總是0,因此頁(yè)表項(xiàng)的低12位可做他用。頁(yè)表項(xiàng)的高20位 + 頁(yè)內(nèi)偏移地址(12位) = 32位,可尋址4GB地址空間。每個(gè)進(jìn)程都可以擁有自己的頁(yè)表,頁(yè)表占用的內(nèi)存空間最大為(2^20)*4B = 4MB = 1K個(gè)頁(yè)面(當(dāng)然實(shí)際進(jìn)程的頁(yè)表只是這其中的一部分,并不總是4MB,頁(yè)表項(xiàng)數(shù)要看進(jìn)程需要的內(nèi)存空間的大小而定,頁(yè)表只包括進(jìn)程所擁有的那些頁(yè))。


二、80x86段頁(yè)機(jī)制下的Linux-0.11的內(nèi)存管理機(jī)制

        實(shí)際上,分段和分頁(yè)在某種程度上有點(diǎn)沉余,因?yàn)樗鼈兌伎梢詣澐诌M(jìn)程的物理地址空間:分段可以給每個(gè)進(jìn)程分配不同的線性地址空間,而分頁(yè)可以把同一線性地址空間映射到不同的物理空間。采用分頁(yè)機(jī)制后,就沒(méi)必要再將進(jìn)程分配到不同的線性地址空間。但Linux-0.11內(nèi)核通過(guò)共享頁(yè)目錄和線性地址分段,利用了80x86的分段機(jī)制,即采用段頁(yè)機(jī)制。Linux-0.99及以后的版本中不再共享頁(yè)目錄,不再對(duì)線性地址分段,使每個(gè)進(jìn)程都擁有4GB線性空間,邏輯地址=線性地址,巧妙的“繞過(guò)了”Intel 80x86提供的分段機(jī)制,即采用分頁(yè)機(jī)制。
        Linux-0.11內(nèi)核采用段頁(yè)機(jī)制對(duì)內(nèi)存進(jìn)行管理,具體如下:
Linux-0.11內(nèi)存物理地址0處開(kāi)始放著一頁(yè)頁(yè)目錄表和四頁(yè)頁(yè)表。這一個(gè)頁(yè)目錄表是所有64個(gè)進(jìn)程共享的。其后的四頁(yè)頁(yè)表正好映射16M物理內(nèi)存,是進(jìn)程0的頁(yè)表。以后創(chuàng)建進(jìn)程時(shí)頁(yè)表需要從主內(nèi)存區(qū)申請(qǐng),而頁(yè)目錄項(xiàng)直接從頁(yè)目錄表中取。這樣進(jìn)程和頁(yè)目錄表頁(yè)存在一一對(duì)應(yīng)關(guān)系,任務(wù)號(hào)為nr的進(jìn)程,對(duì)應(yīng)頁(yè)目錄的第nr*16 ~ (nr+1)*16一共16個(gè)目錄項(xiàng)。這樣1個(gè)頁(yè)目錄表占據(jù)1個(gè)物理頁(yè)面,即4KB,每個(gè)頁(yè)目錄項(xiàng)為4字節(jié),因此共又1K個(gè)頁(yè)目錄項(xiàng);每個(gè)頁(yè)目錄項(xiàng)對(duì)應(yīng)一頁(yè)的頁(yè)表,即1K個(gè)頁(yè)表項(xiàng),每個(gè)頁(yè)表項(xiàng)可以映射4K的物理內(nèi)存,因此共有1K*1K*4K=4G的線性空間。這4G的線性空間由64個(gè)進(jìn)程共享,通過(guò)對(duì)線性地址進(jìn)行分段,每個(gè)進(jìn)程都有64MB的線性空間,這樣每個(gè)進(jìn)程都會(huì)有16個(gè)連續(xù)的頁(yè)目錄項(xiàng)。

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2012-11-26 13:29 |只看該作者
看了你寫(xiě)的分析文章,應(yīng)該還是說(shuō)明對(duì)i386硬件機(jī)制理解的 比較透徹的,我現(xiàn)在也在分析linux kernel的一些東東,在linux1.0基礎(chǔ)上開(kāi)始的,初期在bochs上做了一些模擬調(diào)試,遇到了很多問(wèn)題,苦于沒(méi)有人一些分析討論解決問(wèn)題,在論壇上提出的問(wèn)題好像沒(méi)有牛人鳥(niǎo)我,呵呵,希望能夠互相學(xué)習(xí)交流,我的聯(lián)系方式時(shí)wohuljl@126.com,qq是272981549

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2012-11-26 16:37 |只看該作者
也正準(zhǔn)備入手Linux1.0......
您需要登錄后才可以回帖 登錄 | 注冊(cè)

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP