青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

大城小魔

天下難事,必作于易;天下大事,必作于細

  C++博客 ::  :: 聯(lián)系 :: 聚合  :: 管理

公告


最新評論

C/C++ 內(nèi)存管理算法與實現(xiàn)--第一章:地址線和總線 (翻譯連載)

第四節(jié):Intel奔騰CPU構(gòu)架   

你已經(jīng)了解處理器如何從內(nèi)存讀入和寫入數(shù)據(jù)。然而,大多數(shù)的處理器同樣支持兩種高級內(nèi)存管理機制:分段和分頁。所謂分段是指將計算機的地址空間劃分為特定的區(qū)域。使用分段技術(shù)可以將內(nèi)存劃分為獨立的區(qū)域,這樣應(yīng)用程序之間彼此獨立不會產(chǎn)生沖突。分段提供了內(nèi)存保護的機能。可以創(chuàng)建不帶內(nèi)存保護的內(nèi)存段,但是這樣做并不會帶來什么好處。

分段結(jié)構(gòu)帶來的內(nèi)存保護使得每個應(yīng)用程序都至少分配到一個內(nèi)存段。大型的應(yīng)用程序通常具有好幾個內(nèi)存段。此外操作系統(tǒng)同樣具有一系列屬于自己的特定內(nèi)存 段。這些系統(tǒng)的內(nèi)存段設(shè)置了讀寫的權(quán)限明細,以便創(chuàng)建關(guān)于誰可以獲得讀寫權(quán)限的策略。一般說來,操作系統(tǒng)的代碼段以最高權(quán)限執(zhí)行,應(yīng)用程序裝載到較低權(quán)限 的內(nèi)存段中。


圖1.5

分頁是實現(xiàn)虛擬內(nèi)存的方法之一。由DRAM提供的物理內(nèi)存和從硬盤分配用于模擬DRAM的內(nèi)存一起合并為一個更大的集合內(nèi)存空間。如果啟動了分頁機制,處理器的可尋址的最大字節(jié)數(shù)稱之為虛擬內(nèi)存地址空間。要弄明白這一切的關(guān)鍵是:虛擬內(nèi)存地址空間中的字節(jié)的地址不再跟之前處理器放置在地址總線上的地址一樣了。這意味著,必須創(chuàng)建轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)和轉(zhuǎn)換代碼,以便將虛擬地址空間里的字節(jié)映射到物理內(nèi)存的一個字節(jié)上。(不必關(guān)心數(shù)據(jù)是保存在DRAM還是硬盤上)
當(dāng)必須的分頁構(gòu)造完畢,虛擬內(nèi)存空間便劃分為了稱為頁面(pages)的小區(qū)域。操作系統(tǒng)會判定物理內(nèi)存中運行使用機率低的數(shù)據(jù),將這些物理內(nèi)存中的數(shù)據(jù) 以分頁的形式寫入到硬盤中。如果分段機制被啟用,薄記(bookkeeping)還要執(zhí)行給定內(nèi)存頁與該內(nèi)存頁所屬的分段的關(guān)聯(lián)記錄工作。所有的計算 工作都緊密與處理器相關(guān),所以性能損耗跟硬盤的I/O有直接聯(lián)系,可能會持續(xù)甚至1分鐘。
圖1.6

    注釋:當(dāng)內(nèi)存頁保存在物理內(nèi)存(例如,DRAM)中時,這些內(nèi)存頁放置在被稱為頁幀(Page frame)用于記錄頁面大小的結(jié)構(gòu)中。除了對所有內(nèi)存頁的使用情況進行監(jiān)控外,大多數(shù)操作系統(tǒng)同樣也對頁幀的使用情況進行監(jiān)控。通常頁幀的數(shù)量大大少于內(nèi)存頁的數(shù)量,所以操作系統(tǒng)非常看重小心的對這些寶貴的資源進行管理。
    注釋:可以使用不用硬盤的分頁機制。但是在這種情況下,分頁被轉(zhuǎn)變?yōu)?KB內(nèi)存大小的分段。

因為很容易得到Intel Pentium的處理器所以我決定以Pentium處理器來講解分段和分頁機制我 喜歡用MIPS64處理器來闡述理論,但是我買不起SGI的服務(wù)器(唉)。廉價是Intel系列產(chǎn)品常勝不衰的主要原因之一。像我這樣的在1980年時候 買不起Apple IIe電腦的計算機癡迷者,都轉(zhuǎn)而去尋覓二手的Intel機箱。成千上萬的人不得不因為資金的考慮做出這樣的選擇。所以某種意義上來說,Intel產(chǎn)品廣 泛使用跟基層使用者的推動不無關(guān)系。

Pentium系列處理器一直以來都是流行處理器

CPU             發(fā)布日期          物理地址空間

8086                1978                  1MB
8088                1979                  1MB
80286              1982                  16MB
80386              1985                  4GB
80486              1989                  4GB
Pentium           1993                  4GB
Pentium Pro     1995                  64GB
Pentium II       1997                  64GB
Pentium III      1999                  64GB
Pentium 4        2000                  64GB

    注釋:
當(dāng) 1981年IBM PC誕生的時候,搭載了一顆主頻為4.77MHz的8088CPU。毫無疑問,大型機上開發(fā)人員們欣喜若狂。因為PC給了他們一個屬于自己的施展空間了。 在那個時候,標準的啞終端除了向大型機來回傳輸緩沖區(qū)里的數(shù)據(jù)什么也干不了。不僅如此,工程師也無法對他們的代碼的運行時間和運行方式有絲毫的控制能力。 只能痛苦的等待。Tom Petty說得沒錯,偶爾用PIZZA賄賂下系統(tǒng)管理員,可以讓程序運行得快一些,但是這種奉承很快讓人感覺疲憊。有了IBM PC以后工程師終于用于了屬于自己的機器,擁有一切權(quán)利,不再需要任何等待。

題外話
    我認識一個CDC的工程師,也正是因為PC帶給程序員的諸多好處,他在1982年將FORTRAN '77移植到PC。他的頭走到他身邊問道:“你為什么想在小三輪車一樣的機器上運行代碼,而不是功能強大的大型機上”,他回答:“因為它是我的自己的這段話或許概括了個人電腦(PC)大獲成功的原因所在。

為了留住老客戶,Intel為此跨域了重重困難使他們32位處理器能夠向后兼容16位的處理器構(gòu)架。Intel成功的做到了這一點,我能夠在我的電腦上
使用啟動盤啟動DOS 6.22系統(tǒng),并且運行大多數(shù)老的DOS應(yīng)用程序(包括Doom和Duke Nukem)。
Pentium處理器是一種
運行在幾種不同的工作模式下實現(xiàn)后兼容需求的產(chǎn)品。各個運行模式指定各自不同的處理器如何解釋運行機器指令如何訪問內(nèi)存的方式。Pentium具有四種運行模式。
  • Real mode           實模式
  • Protected mode      保護模式
  • System management mode(SMM) 系統(tǒng)管理模式
  • Virtual 8086 mode           虛擬8086模式


系統(tǒng)管理模式和虛擬8086模式都是特定目的運行模式,只在特定的環(huán)境下使用。我的焦點將主要集中在兩個運行模式上:實模式和保護模式。此外,我會對它們?nèi)绾沃С址侄魏头猪摍C制的部分進行深入。

具備不同的運行模式的特性的這種技術(shù)并不僅僅限于 Intel平臺。例如,MIPS64處理器同樣可以工作在四種運行模式下。
  • Kernel mode        內(nèi)核模式
  • User mode           用戶模式
  • Debug mode        調(diào)試模式
  • Supervisor mode 管理員模式

實模式

第一臺IBM PC完全運行在實模式下。而且所有的32位Intel計算機同樣在啟動的時候運行于實模式下。這是實現(xiàn)向后兼容的必須要具備的最基本的特性。
運行在實模式下的操作系統(tǒng)都非常小(小于128KB)。因為它們都依靠BIOS提供的硬件接口。使得它們可以輕易的適應(yīng)1.44MB的軟盤。病毒保護的修復(fù)盤依據(jù)這個事實,系統(tǒng)修復(fù)盤也是同樣道理。我也買過可運行在啟動盤中那種分區(qū)軟件。

在實模式中,我們在圖1.2中所見到過的通用寄存器被截取為16位的寄存器,錯誤標志寄存器和指令指針寄存器也被截取為16位。實模式寄存器結(jié)構(gòu)如圖1.7所示。



圖1.7

正 如你看到的,寄存器名字前面的'E'前綴被拿掉了。此外,每一個16位的通用寄存器,AX,CX,DX,和EX,可以作為兩個8位寄存器來使用。例 如,AX寄存器可以可做是由AH和AL寄存組合而成的。AH寄存器是AX寄存器的高字節(jié)部分,AL寄存器是AX的低字節(jié)部分。

    注釋:
在圖1.2中的內(nèi)存和模式寄存器在實模式中還是可見的。32位CPU在實模式中依然是32位的,但是它們對于實模式來說沒有任何意義和用處。除非你切換到保護模式當(dāng)中。


實模式中計算機可尋址1M的DRAM。這暗示實模式中只使用了20條地址線。對于運行在實模式中的處理器來說,內(nèi)存中字節(jié)的地址由段地址加上一個偏移量地 址組成。其結(jié)果總是一個20位地址值(記住這個事實:這點非常重要)這就打消了是否真的使用20條地址線的疑問。由段地址和偏移地址的和組成的地址值,便 符合了處理器的地址線上的值。現(xiàn)在你可以得到了為什么叫它為“實模式”的更好解釋。實模式中字節(jié)的地址直接映射到物理內(nèi)存中一個“真實”的字節(jié)。

在Intel匯編語言中,地址由一個"段地址:偏移地址(segment:offset)" 的值對來表示。例如,如果一個字節(jié)位于段地址為0x8200,偏移地址為0x0100,該字節(jié)的地址值就表示為:

0x8200:0x0100

有時候,由于某些原因(一會給出解釋),也可以寫為:

0x8200[0]:0x100


實模式中內(nèi)存地址解析過程如圖1.8:

圖1.8

段地址表示一個特定的內(nèi)存段,并且總是保存在一個16位的段寄存器中。特別的,段地址指基地址,內(nèi)存段的最低地址。各個段寄存器都各自具有特定用途:

寄存器    作用
CS         當(dāng)前執(zhí)行代碼的段地址
SS         堆棧段地址
DS         數(shù)據(jù)段地址
ES          額外段地址(通常作為數(shù)據(jù)段地址)
FS          額外段地址(通常作為數(shù)據(jù)段地址)
GS         額外段地址(通常作為數(shù)據(jù)段地址)

     注釋:
實際當(dāng)中的具有6個寄存器的意思是:在任何時候,只能控制6個寄存一個程序可以獲得大于6個以上的寄存器,但是在任何一刻只有6個寄存器可以訪問。

偏移地址可以保存在16位的通用寄存器中。提供一個16位的偏移地址,這將每個內(nèi)存段限制在64KB的大小以內(nèi)。

    問題:1.如果段地址和偏移地址都存儲在16位的寄存器中,為什么兩個16位值的和卻得到的是20位的值

    答案:原因是段地址的末尾被添加了一個隱含的0,處理器將段地址0x0c00被處理為0x0c000。這表示,在實際書寫中,要將這個隱含0放置到方括號中。(例如,0x0c00[0])這就是為什么處理器得到20位的地址值。

    正如你所見,實模式的 段地址/偏移地址 提供了一種簡單的分段機制。但是,它沒有提供我說提到過的內(nèi)存段邊界保護的機制。糟糕的事實是在實模式中沒有提供任何內(nèi)存保護。
當(dāng)你的程序運行在實模式中,它擁有了一切,甚至可以破壞一切。

    在實模式中運行應(yīng)用程序就好象讓一群童子軍到你家,他們精力充沛,活力十足,隨著你手中的糖果蹦上竄下。如果你不小心,他們會把房子毀掉。將一臺運行在實模式中的機器崩潰非常容易,而且你沒有太多辦法防止它發(fā)生。(除了不斷的備份你的工作)


如果你對上述內(nèi)容疑惑,我肯定有一些人一定存在同樣的疑惑,這里有個C程序代碼的例子可以使運行在實模式下的機器崩潰:


/* --crashdos.c-- */


void main()
{
     unsigned char *ptr;
     int i;

     ptr = (unsigned char *)0x0;
     for(i=0;i<1024;i++)
     {
         ptr[i]=0x0;
     }
     return;
}


看是不是不費吹灰之力?這段攻擊代碼沒有任何特別和秘密之處。我只是覆蓋了位于內(nèi)存底端的中斷向量表而已。如果你想將這類代碼隱藏在一個大的可執(zhí)行程序中,你或許可以將這個代碼簡化不到五行的匯編。如果你真的想做壞事,你能讓鍵盤無法響應(yīng)然后開始格式化硬盤。這個時候能做的就是拔掉電源,不過即使那樣,當(dāng)明白過來發(fā)生什么的時候,或許已經(jīng)太晚了。然而,我想要說明的并不是要告訴你如何去攻擊DOS系統(tǒng)。沒有人再去使用它,總之,我是證明是模式是一個不安全的運行環(huán)境。
更糟的是,實模式不支持分頁機制。你只能使用1MB的DRAM內(nèi)存。在實際情況下呢,竟然還不到1MB,因為BIOS和視頻硬件消耗了相當(dāng)大一部分的內(nèi)存。還記得比爾蓋茨的那番話嗎?

注釋:沒有內(nèi)存保護機制?沒有分頁機制?你現(xiàn)在明白第一個版本的PC-DOS系統(tǒng)是怎樣少于5,000行匯編代碼的了。或許“實”模式的稱呼,正是因為它真的很小

Intel處理器如果僅僅依靠這種米老鼠玩具一樣的內(nèi)存管理,將毫無作為。為了力圖支持更加健壯的操作系統(tǒng)和更大的內(nèi)存地址空間,Intel推出了80386CPU,80386具備4GB的物理地址空間并且支持一個全新的運行模式:保護模式。


posted on 2008-12-06 00:07 momor 閱讀(1312) 評論(1)  編輯 收藏 引用 所屬分類: 翻譯

Feedback

# re: C/C++ 內(nèi)存管理算法與實現(xiàn)--第一章:Intel奔騰CPU構(gòu)架--實模式 (翻譯連載) 2008-12-09 23:43 region
不錯,很受益。  回復(fù)  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲精品国产拍免费91在线| 日韩一级黄色大片| 欧美中文字幕第一页| 国产精品一级| 久久久www成人免费毛片麻豆| 午夜视频久久久久久| 韩日午夜在线资源一区二区| 噜噜噜91成人网| 欧美激情按摩在线| 亚洲自拍偷拍网址| 久久国产精品99国产| 亚洲国产精品欧美一二99| 亚洲靠逼com| 国产精品嫩草影院av蜜臀| 久久久久久免费| 欧美福利一区| 亚洲欧美日韩区| 久久综合一区二区三区| 一区二区免费在线观看| 午夜日韩在线观看| 亚洲乱码国产乱码精品精可以看| 亚洲尤物在线| 亚洲国产精品综合| 午夜精品影院在线观看| 亚洲人在线视频| 午夜久久久久久| 亚洲精品视频一区| 欧美主播一区二区三区| 99国产精品久久| 久久精品盗摄| 亚洲自拍16p| 欧美a级片网| 久久精品盗摄| 欧美日韩亚洲三区| 欧美激情第8页| 国产精品日日做人人爱 | 国产欧美视频一区二区| 免费在线一区二区| 国产精品自拍网站| 亚洲美女精品久久| 亚洲国产美女精品久久久久∴| 亚洲自拍偷拍福利| 99精品视频免费| 久久久免费观看视频| 欧美一区二区三区免费观看视频| 欧美激情在线观看| 亚洲第一主播视频| 在线观看欧美日本| 欧美诱惑福利视频| 新狼窝色av性久久久久久| 欧美日韩国产区| 亚洲黄色免费| 亚洲国产精品综合| 久久蜜桃精品| 久久一区中文字幕| 国产综合久久久久久| 午夜激情一区| 亚欧成人精品| 国产精品剧情在线亚洲| 夜夜爽www精品| 一本色道久久综合亚洲精品婷婷| 欧美国产日韩一区二区在线观看| 欧美jizz19性欧美| 亚洲国产精品久久| 蜜桃av一区二区| 亚洲国产欧洲综合997久久| 亚洲经典视频在线观看| 麻豆国产精品777777在线| 免费日本视频一区| 亚洲激情视频在线播放| 美女精品网站| 亚洲精品黄网在线观看| 在线视频欧美日韩精品| 欧美日韩一区二区三区四区在线观看| 日韩一级大片在线| 亚洲一区二区三区免费在线观看| 欧美日韩一区二区三区视频| 中日韩午夜理伦电影免费| 午夜精品一区二区三区在线播放 | 亚洲欧美在线另类| 久久久久一区二区三区| 亚洲高清在线精品| 欧美日韩国产经典色站一区二区三区| 999亚洲国产精| 香蕉久久a毛片| 一色屋精品亚洲香蕉网站| 久久综合国产精品| 亚洲人成网站在线观看播放| 亚洲在线一区| 国产综合欧美| 欧美精品一区二区三区在线播放| 99re66热这里只有精品4| 欧美日韩激情网| 午夜天堂精品久久久久| 欧美黄色免费| 欧美亚洲免费电影| 影音先锋中文字幕一区| 欧美日韩另类字幕中文| 久久av老司机精品网站导航| 亚洲欧洲美洲综合色网| 亚洲欧美999| 亚洲欧洲午夜| 国产精品亚洲综合| 欧美成人在线影院| 午夜精品视频| 99国产一区| 久久综合久久美利坚合众国| 亚洲香蕉成视频在线观看| 一区二区三区亚洲| 欧美日韩在线免费| 久久婷婷麻豆| 亚洲免费婷婷| 亚洲卡通欧美制服中文| 免费亚洲电影在线| 欧美资源在线观看| 一本色道久久综合狠狠躁篇怎么玩 | 国产精品一级二级三级| 免费中文字幕日韩欧美| 亚洲综合欧美| 日韩系列欧美系列| 亚洲黄色在线视频| 久久亚洲视频| 欧美一区1区三区3区公司| 日韩亚洲欧美精品| 亚洲国产高清在线| 136国产福利精品导航网址应用| 国产免费亚洲高清| 国产精品爱久久久久久久| 欧美精品久久久久a| 免费在线播放第一区高清av| 欧美中文字幕不卡| 午夜久久一区| 午夜精品www| 亚洲一区二区少妇| 一区二区免费看| 亚洲免费av电影| 99在线精品观看| 亚洲日本一区二区| 亚洲精品日韩欧美| 亚洲毛片在线观看.| 亚洲精品欧美专区| 亚洲精品一区在线观看香蕉| 亚洲精品1234| 日韩午夜电影在线观看| 一本色道久久综合亚洲精品不| 亚洲狠狠婷婷| 日韩视频一区二区三区在线播放免费观看| 欧美激情精品久久久久久蜜臀| 欧美77777| 亚洲电影中文字幕| 亚洲另类视频| 亚洲私人影院在线观看| 亚洲欧美在线x视频| 欧美在线观看一区| 久久精品国产96久久久香蕉| 久久网站免费| 欧美国产大片| 国产精品黄色| 国产日韩欧美成人| 激情综合亚洲| 亚洲精品极品| 亚洲欧美在线观看| 久久国产天堂福利天堂| 免费人成精品欧美精品| 亚洲人永久免费| 亚洲小视频在线观看| 久久久久久久国产| 欧美精品在线免费| 国产精品网站视频| 激情久久中文字幕| 中文亚洲字幕| 久久精品国产第一区二区三区最新章节 | 欧美www视频| 欧美日本韩国在线| 国产精品一区二区视频| 在线成人激情视频| 亚洲天堂av综合网| 久久人91精品久久久久久不卡| 欧美华人在线视频| 亚洲一区二区三区在线播放| 久久九九久精品国产免费直播| 欧美成人蜜桃| 国产日韩欧美高清| aa日韩免费精品视频一| 久久久久久夜精品精品免费| 亚洲精品在线免费| 久久se精品一区精品二区| 欧美激情一区二区三区| 国产一区二区三区在线观看免费视频 | 亚洲欧美网站| 欧美激情片在线观看| 亚洲欧美大片| 欧美日韩岛国| 亚洲第一区中文99精品| 亚洲欧美成人在线| 亚洲黄页一区| 鲁大师影院一区二区三区| 国产九色精品成人porny| 日韩亚洲欧美一区| 欧美成人蜜桃|