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

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

Chinaunix

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

[內(nèi)存管理] 關(guān)于內(nèi)存管理的一個(gè)小問(wèn)題 [復(fù)制鏈接]

論壇徽章:
6
2015年迎新春徽章
日期:2015-03-04 10:16:53操作系統(tǒng)版塊每日發(fā)帖之星
日期:2015-08-04 06:20:002015亞冠之鹿島鹿角
日期:2015-08-05 16:51:182015亞冠之全北現(xiàn)代
日期:2015-08-07 17:14:392015亞冠之武里南聯(lián)
日期:2015-08-11 15:33:03數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2016-02-02 06:20:00
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2017-05-03 16:45 |只看該作者 |倒序?yàn)g覽
一直在看內(nèi)存管理的分段機(jī)制,向各位大俠求教一下

我們知道邏輯地址包括16位的段選擇符加上32位的偏移量

段描述符中包含32位段基址和20位段限長(zhǎng)以及若干位段屬性

邏輯地址向線性地址轉(zhuǎn)換時(shí)首先通過(guò)段選擇符找到段描述符

然后段描述符中的32位基地址加上32位偏移量就得到了線性地址

那么問(wèn)題來(lái)了,
1.段限長(zhǎng)都是20位那么段偏移量是32位有什么意義?為啥偏移量不是20位
2.虛擬地址空間是2的14次方乘以4G即64T,而線性地址空間是4G,這個(gè)轉(zhuǎn)換的過(guò)程到底是什么樣的?,始終沒(méi)想明白,求解答

論壇徽章:
9
程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-02-11 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-02-14 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-02-14 06:20:0015-16賽季CBA聯(lián)賽之吉林
日期:2016-03-23 17:25:0015-16賽季CBA聯(lián)賽之浙江
日期:2016-04-01 08:25:0615-16賽季CBA聯(lián)賽之山西
日期:2016-04-01 10:09:1915-16賽季CBA聯(lián)賽之廣夏
日期:2016-06-03 15:58:212016科比退役紀(jì)念章
日期:2016-07-28 17:42:5215-16賽季CBA聯(lián)賽之廣東
日期:2017-02-20 23:32:43
2 [報(bào)告]
發(fā)表于 2017-05-03 19:58 |只看該作者
既然樓主發(fā)問(wèn)了,我就來(lái)解釋一下其中的原因。

  要了解這個(gè)問(wèn)題,首先我們需要知道 4 種地址,即虛擬地址,邏輯地址,線性地址和物理地址。每種地址的理解如下:
  1. 虛擬地址
      每個(gè)進(jìn)程運(yùn)行時(shí),只看得到自己在整個(gè)內(nèi)存中運(yùn)行,它會(huì)認(rèn)為整個(gè)內(nèi)存都是它的,此時(shí),從進(jìn)程的角度來(lái)看,內(nèi)存提供的地址叫做虛擬地址。
      虛擬地址也就是進(jìn)程直接接觸的內(nèi)存地址。
  2. 邏輯地址
      為了讓進(jìn)程覺(jué)得只有它一個(gè)進(jìn)程在使用整個(gè)內(nèi)存,而不被其他進(jìn)程干擾,內(nèi)核使用了分段機(jī)制,將內(nèi)存分做一段一段的,每個(gè)段里面包含了代碼段,數(shù)據(jù)段
      和其他各種段,內(nèi)核使用段機(jī)制隔離了進(jìn)程直接的內(nèi)存訪問(wèn)。此時(shí),內(nèi)核使用邏輯地址來(lái)尋址每個(gè)段。邏輯地址有一個(gè)段選擇符合一個(gè)偏移值構(gòu)成。
      段選擇符是由 20 位的段寄存器構(gòu)成,偏移值由 32 位值構(gòu)成。
      邏輯地址在尋址時(shí),先通過(guò)段選擇符在 GDT 或 LDT 中獲得段描述符,段描述符有 8 字節(jié)構(gòu)成,段選擇符從 GDT 或 LDT 中獲得段描述符之后,
      段描述符中函數(shù)該段在線性地址空間中的基地址,基地址由 32 位長(zhǎng)。獲得基地址之后,在和偏移值相加,就能獲得線性地址。
      所以邏輯地址是相對(duì)分段機(jī)制而言。
  3. 線性地址
      線性地址也就是內(nèi)核虛擬內(nèi)存層次的地址,32 位系統(tǒng)中,虛擬內(nèi)存將內(nèi)存看做一個(gè)連續(xù)長(zhǎng)度的地址空間,其長(zhǎng)度為 2 的 32 次方,也就是 4G。
      線性地址主要負(fù)責(zé)分頁(yè)機(jī)制下將虛擬內(nèi)存對(duì)應(yīng)到物理內(nèi)存。
  4. 物理地址
      物理地址,顧名思義就是硬件內(nèi)存的地址,該地址表示硬件內(nèi)存存儲(chǔ)器上的地址。

通過(guò)上面的前提,
  對(duì)于問(wèn)題一:
       段限長(zhǎng)的粒度是由段描述符中的 G 標(biāo)志位控制,該位置位時(shí)表示段的限長(zhǎng)為 4Kb~4G, G位清零,段限長(zhǎng)為 1B ~ 1M。
       邏輯地址空間最多包含 16K 個(gè)段,而每個(gè)段長(zhǎng)最長(zhǎng)可以是 4G, 是的虛擬地址空間最大長(zhǎng)度為 64T。
       段限長(zhǎng)是 20 位,那么也就是按 G 值位的情況算,每個(gè)段長(zhǎng)為 4G, 所有需要使用 32 位偏移來(lái)尋址 4G 里面的內(nèi)容。

     問(wèn)題 2
      虛擬地址是在邏輯地址之上,也就是每個(gè)進(jìn)程都有一個(gè)虛擬地址,該虛擬地址長(zhǎng)為 4G,進(jìn)程是運(yùn)行在分段機(jī)制之上
      由于分段機(jī)制的存在,它會(huì)讓進(jìn)程感覺(jué)整個(gè) 4G 的虛擬地址空間都由它獨(dú)享。段機(jī)制會(huì)將進(jìn)程才分成一個(gè)個(gè)數(shù)據(jù)段,代碼段等。
      也就是說(shuō)虛擬地址最終會(huì)轉(zhuǎn)換為邏輯地址。
      虛擬地址的轉(zhuǎn)換可以理解為如下:
     1. 虛擬地址正在由一個(gè)進(jìn)程在使用,該進(jìn)程任務(wù)虛擬空間由它獨(dú)享。該進(jìn)程的 TSS 里面存儲(chǔ)了各種段寄存器的信息。
     2. 每個(gè)進(jìn)程都會(huì)有各自的代碼段,數(shù)據(jù)段等,例如這些段的地址會(huì)表示為 0x8004800 開(kāi)始的 4K 是代碼段, 0x8004900 開(kāi)始的 4K 是數(shù)據(jù)段。
     3. 虛擬地址轉(zhuǎn)換為邏輯地址是會(huì)先讀取該進(jìn)程對(duì)應(yīng)的段寄存器,譬如 CS,GS,F(xiàn)S,SS 等,該寄存器里存放段選擇符。比如 CS 的值位 0x8,那么他就以該值位索引,
         在 GDT 或 LDT 中查找段描述符,如 GDT[CS] -> 段描述符,獲得段描述符之后,從段描述符中獲得線性地址的基地址。
     4. 獲得基地址之后,使用基地址加上偏移值,就可以獲得對(duì)應(yīng)的線性地址。

綜上所述,可知
   

論壇徽章:
13
15-16賽季CBA聯(lián)賽之八一
日期:2016-07-08 21:00:1415-16賽季CBA聯(lián)賽之同曦
日期:2017-02-15 14:26:1515-16賽季CBA聯(lián)賽之佛山
日期:2017-02-20 14:19:2615-16賽季CBA聯(lián)賽之青島
日期:2017-05-07 16:49:1115-16賽季CBA聯(lián)賽之廣夏
日期:2017-07-30 09:13:1215-16賽季CBA聯(lián)賽之廣東
日期:2018-07-05 22:34:3615-16賽季CBA聯(lián)賽之江蘇
日期:2018-09-03 12:10:2115-16賽季CBA聯(lián)賽之上海
日期:2018-09-25 03:49:2215-16賽季CBA聯(lián)賽之廣東
日期:2018-09-25 04:09:12
3 [報(bào)告]
發(fā)表于 2017-05-03 22:13 |只看該作者
回復(fù) 1# lxy572535121

1. 你是出于什么考慮,要求指定限長(zhǎng)的位數(shù)必須與指定偏移的位數(shù)相等?假設(shè)系統(tǒng)就是限制段的長(zhǎng)度最大1M,你寫(xiě)的應(yīng)用程序如果需要大量?jī)?nèi)存,一個(gè)段滿足不了你,那多分配幾個(gè)就是了,雖然你可能覺(jué)得不爽,但并沒(méi)有什么不行的呀,更何況段描述符里有個(gè)G標(biāo)志,也可以表達(dá)大的長(zhǎng)度;
2. 虛擬地址范圍還有這樣算的呀?32位系統(tǒng),指針變量32位,你如何表達(dá)64T的地址?就算按照你的思路,你說(shuō)的這些段也是重疊的,不能用乘法。

論壇徽章:
9
程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-02-11 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-02-14 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-02-14 06:20:0015-16賽季CBA聯(lián)賽之吉林
日期:2016-03-23 17:25:0015-16賽季CBA聯(lián)賽之浙江
日期:2016-04-01 08:25:0615-16賽季CBA聯(lián)賽之山西
日期:2016-04-01 10:09:1915-16賽季CBA聯(lián)賽之廣夏
日期:2016-06-03 15:58:212016科比退役紀(jì)念章
日期:2016-07-28 17:42:5215-16賽季CBA聯(lián)賽之廣東
日期:2017-02-20 23:32:43
4 [報(bào)告]
發(fā)表于 2017-05-03 22:47 |只看該作者
回復(fù) 3# _nosay

作者這樣提問(wèn)沒(méi)有任何問(wèn)題,
他是對(duì)邏輯地址產(chǎn)生疑問(wèn),而且 32bit 的系統(tǒng)虛擬地址表示 64 T 沒(méi)有問(wèn)題, 32bit 系統(tǒng)線性地址必須是 4G, 物理地址可以大于 4G。

論壇徽章:
13
15-16賽季CBA聯(lián)賽之八一
日期:2016-07-08 21:00:1415-16賽季CBA聯(lián)賽之同曦
日期:2017-02-15 14:26:1515-16賽季CBA聯(lián)賽之佛山
日期:2017-02-20 14:19:2615-16賽季CBA聯(lián)賽之青島
日期:2017-05-07 16:49:1115-16賽季CBA聯(lián)賽之廣夏
日期:2017-07-30 09:13:1215-16賽季CBA聯(lián)賽之廣東
日期:2018-07-05 22:34:3615-16賽季CBA聯(lián)賽之江蘇
日期:2018-09-03 12:10:2115-16賽季CBA聯(lián)賽之上海
日期:2018-09-25 03:49:2215-16賽季CBA聯(lián)賽之廣東
日期:2018-09-25 04:09:12
5 [報(bào)告]
發(fā)表于 2017-05-04 00:41 |只看該作者
回復(fù) 4# Buddy_Zhang1

1. 虛擬地址、邏輯地址、線性地址、物理地址,不能硬生生說(shuō)成4種地址,拿80386來(lái)說(shuō),A1->段式映射->A2->頁(yè)式映射->A3,你如何拿這4種地址與A1、A2、A3對(duì)應(yīng)上?2. 你對(duì)分段機(jī)制要解決的問(wèn)題,理解是錯(cuò)誤的。讓每個(gè)進(jìn)程覺(jué)得自己獨(dú)占內(nèi)存,那是保護(hù)模式要解決的事,如果靠分段就解決進(jìn)程間相互干擾,實(shí)模式下用分段為什么還是會(huì)相互干擾?
    段寄存器最初出現(xiàn)在8086上,解決ALU16位,地址總線20位的問(wèn)題,而80386仍然保留段寄存器,是為了兼容性。
3. 段式管理的"段"和代碼"段"/數(shù)據(jù)"段",根本就是沒(méi)有關(guān)系的兩樣?xùn)|西,每個(gè)段里包含了代碼段、數(shù)據(jù)段和其它各種段,怎么講?
4. 虛擬地址最多包含16K個(gè)段,又是怎么講?
    是因?yàn)楸Wo(hù)模式下段寄存器高13位為段描述符索引嗎?那也是8K個(gè)呀。即使不知道你從哪算的16K,你拿它跟4G相乘,就表示你期望每個(gè)段都能表示4G范圍,那肯定都重疊在0-4G呀,32位變量,怎么能表示出64T?
5. 在32位系統(tǒng),你能寫(xiě)個(gè)程序,反匯編可以看見(jiàn),或者可以打印一個(gè)動(dòng)態(tài)分配超過(guò)4G的地址嗎?
6. 20的寄存器,是筆誤嗎?
7. 線性地址負(fù)責(zé)通過(guò)頁(yè)式映射將虛擬地址轉(zhuǎn)換成物理地址,你知道自己在說(shuō)什么嗎?
8. sorry

論壇徽章:
6
2015年迎新春徽章
日期:2015-03-04 10:16:53操作系統(tǒng)版塊每日發(fā)帖之星
日期:2015-08-04 06:20:002015亞冠之鹿島鹿角
日期:2015-08-05 16:51:182015亞冠之全北現(xiàn)代
日期:2015-08-07 17:14:392015亞冠之武里南聯(lián)
日期:2015-08-11 15:33:03數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2016-02-02 06:20:00
6 [報(bào)告]
發(fā)表于 2017-05-04 09:20 |只看該作者
回復(fù) 3# _nosay
對(duì)于問(wèn)題1我當(dāng)時(shí)是這樣想的:既然段限長(zhǎng)是1M,那么我們可以把32位段基址的低20位置為零,然后偏移量只要用20位就剛好可以使地址在段限長(zhǎng)的1M內(nèi)變化,這樣就不用浪費(fèi)多余的位(當(dāng)時(shí)沒(méi)考慮到G標(biāo)志)
然后現(xiàn)在又有這樣的問(wèn)題:1.段基址有32位,偏移量有32位,都可以尋址4G,用兩個(gè)不是浪費(fèi)么?只要一個(gè)32位的偏移量就可以尋址4G了
2.兩個(gè)分段不會(huì)重合么?例如一個(gè)段基址加上對(duì)應(yīng)的偏移量不會(huì)跑到另一個(gè)段的范圍內(nèi)么?

論壇徽章:
2
2016猴年福章徽章
日期:2016-02-18 15:30:3415-16賽季CBA聯(lián)賽之廣夏
日期:2016-12-07 08:32:11
7 [報(bào)告]
發(fā)表于 2017-05-04 09:47 |只看該作者
本帖最后由 劍魂簫心 于 2017-05-05 19:44 編輯

回復(fù) 4# Buddy_Zhang1

論壇徽章:
6
2015年辭舊歲徽章
日期:2015-03-05 16:13:092015年迎新春徽章
日期:2015-03-05 16:13:092015小元宵徽章
日期:2015-03-06 15:58:1815-16賽季CBA聯(lián)賽之浙江
日期:2016-11-05 14:38:4115-16賽季CBA聯(lián)賽之新疆
日期:2016-11-11 18:38:06
8 [報(bào)告]
發(fā)表于 2017-05-04 10:05 |只看該作者
段限20位,但單位是可調(diào)的。還有一個(gè)粒度位,設(shè)置為1后,段限是以4K為單位的。4K本身有12位,合起來(lái)實(shí)際段限為32位。

論壇徽章:
9
程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-02-11 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-02-14 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-02-14 06:20:0015-16賽季CBA聯(lián)賽之吉林
日期:2016-03-23 17:25:0015-16賽季CBA聯(lián)賽之浙江
日期:2016-04-01 08:25:0615-16賽季CBA聯(lián)賽之山西
日期:2016-04-01 10:09:1915-16賽季CBA聯(lián)賽之廣夏
日期:2016-06-03 15:58:212016科比退役紀(jì)念章
日期:2016-07-28 17:42:5215-16賽季CBA聯(lián)賽之廣東
日期:2017-02-20 23:32:43
9 [報(bào)告]
發(fā)表于 2017-05-04 10:18 |只看該作者
回復(fù) 7# 劍魂簫心

32 位系統(tǒng)的物理地址使用 PAE 可達(dá) 64 G, 但線性空間必須是 4G, 虛擬地址和線性地址不是同一個(gè)概念!

論壇徽章:
13
15-16賽季CBA聯(lián)賽之八一
日期:2016-07-08 21:00:1415-16賽季CBA聯(lián)賽之同曦
日期:2017-02-15 14:26:1515-16賽季CBA聯(lián)賽之佛山
日期:2017-02-20 14:19:2615-16賽季CBA聯(lián)賽之青島
日期:2017-05-07 16:49:1115-16賽季CBA聯(lián)賽之廣夏
日期:2017-07-30 09:13:1215-16賽季CBA聯(lián)賽之廣東
日期:2018-07-05 22:34:3615-16賽季CBA聯(lián)賽之江蘇
日期:2018-09-03 12:10:2115-16賽季CBA聯(lián)賽之上海
日期:2018-09-25 03:49:2215-16賽季CBA聯(lián)賽之廣東
日期:2018-09-25 04:09:12
10 [報(bào)告]
發(fā)表于 2017-05-04 10:49 來(lái)自手機(jī) |只看該作者
本帖最后由 _nosay 于 2017-05-04 10:51 編輯

6# lxy572535121

[size=43.1692px]   這樣考慮,偏移位數(shù)與限長(zhǎng)位數(shù)相等就夠了。    8086為了方便用16位的偏移得到20位的地址,想到了分段的方法,所以把內(nèi)存分成一段一段的不是最終目的,而是為了另外一個(gè)目的,當(dāng)時(shí)也并沒(méi)有考慮從一個(gè)段跨到另一個(gè)段的問(wèn)題,因?yàn)槎渭拇嫫鞯?6位值,和偏移里的16位值,全都用于計(jì)算目的地址,連個(gè)表示長(zhǎng)度的地方都沒(méi)有;
    80386還是純粹為了尋址的話,就如你說(shuō)的,用一個(gè)32位值就行了,連段寄存器都不需要了,但它要考慮兼容老cpu上的程序,還要支持保護(hù)模式。所以除了需要一個(gè)32位值表示基址,還需要20位值+G表示長(zhǎng)度,以及其它位表示別的屬性,這正是段描述符結(jié)構(gòu)設(shè)計(jì)的依據(jù),以及80386保護(hù)模式下改變段寄存器含義的原因。
    另外,保護(hù)模式可以基于段式管理設(shè)計(jì),也可以基于頁(yè)式管理設(shè)計(jì),段式管理并不是保證每個(gè)進(jìn)程有獨(dú)立空間必不可少的東西。
您需要登錄后才可以回帖 登錄 | 注冊(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)專區(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