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

大城小魔

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

  C++博客 ::  :: 聯系 :: 聚合  :: 管理

公告


最新評論

保護模式

保護模式提供了實模式中所不具備的豐富多彩的內容。Pentium處理器是為保護模式而特別設計的。它內部的執行管道流水線,執行32位指令的效率優于執行16位指令。

電腦在啟動時候,Pentium被設計運行在實模式下,是為了便于電腦在啟動時候操作系統的啟動引導程序的執行。


運行在保護模式下的Intel處理器支持受保護的分段機制,同樣也支持分頁機制。這意味著地址解析會變得更加復雜。在實模式中,我們只需要在段地址上添加一個偏移地址便獲得一個直接與物理內存對應的地址值。在保護模式中,處理器要求在相應的位置加載特定的數據結構。此外段地址和偏移地址對,可能不再直接對應物理地址,好吧,讓我們繼續下面對內容...

保護模式下的分段機制

對Intel平臺上的分段機制理解的最好方法是圖片示例,來解釋它是如何實現的。一幅好的圖例,勝過長篇大論,對于這本問題,尤其如此。所以請認真仔細的看下圖1.9,并跟圖1.8做下比較。你也可以將圖1.9收藏起來,當你想看的候可以隨時看到它。

 


圖1.9


首先注意到保護模式中,使用了圖1.2中所有的完整Pentium寄存器。是的,我們又回到32位寄存器了。同樣,段地址寄存器不再存儲16位的段地址值。而是保存段選擇器。段選擇器是一個16位的數據結構,它包含三個字段。它的組成形式如圖1.10所示。真正重要的字段是索引(index)字段。索引字段存儲了一個描述符表的索引。索引值由0開始。



圖1.10

    注釋索引字段在段選擇器中不是地址值。它跟你在C語言中訪問數據元素時使用的索引類似。處理器取得索引值,并通過內部必要的計算將該索引值與該索引值對應的線性地址匹配。注意我這里說的線性地址(linear         address),不是指物理地址。此時(保護模式下的分段),線性地址和物理地址是一致的,當啟用分頁機        制以后,它們就不一致了,記住這一點。


描述符表是一個入口數組,數組中每個入口(稱之為段描述符)描述對應內存段的相關屬性。段描述符中包含它所描述內存段的基地值。32位的偏移地址加上段描述符的基地值用以指定內存字節的內存地址。有兩種描述符表:全局描述符表(Global Descriptor Table -- GDT)和局部描述符表(Local Descriptor Table--LDT)。所有的操作系統必須具備一個GDT,但是具備一個可配置多個LDT。通常,如果一個LDT被使用,它將用于標識內段段所屬的進程。GDT的基地址保存在GDTR的系統寄存器中。同樣,LDT的基地值保存在LDTR寄存器中。當然,還有一些特定的系統指令用于裝載這些值(例如,LGDT和LLDT指令)。


    注意:本書中討論的大部分操作系統都集中于使用GDT而且很少使用LDT(即使有使用LDT的地方)


GDTR的大小為48位。GDTR有一個很明顯的特點是,它存儲兩個不同的值。第一個大小為16位的值,用于保存GDT大小,單位是字節。另一個32位的值,用于存儲GDT在物理內存中的線性基地址。如圖1.11



圖1.11
問題:1.處理器如何映射一個段選擇器的索引到一個段描述符上呢

 

答案:處理器從段選擇器取得其指定的索引值,將該值乘以8(因為段描述符是64位的緣故,所以該值要為8字節)然后將結果加上由GTDR或者LDTR提供的基地址值。

     注釋:當你在看圖1.2時,或許對另外兩個內存管理寄存器產生了疑惑,其實我并沒有忘記它們。它們對于我
   們的討論話題來說并不如GDTR和LDTR這樣重要。IDTR寄存器和IR寄存器是用于管理硬件中斷和多任務的。本
   書集中討論內存管理,所以不會對此類寄存器做更深入的討論。如果你對它們有興趣,我建議你去選一本我
   在本章末尾提供的相關Intel的手冊資料

之前我提到過的 段描述符存儲著它所描述的內存的線性基地址。然而,段描述符同樣保存著其他完整的元數據。圖1.12更好的展示了在一個段描述符中陳列的內容。在該圖中,我將64位的描述符切分為兩個32位大小。高階部分位于低階部分的頂部。
圖1.12
 
在這個段描述符64位值中打包了大量信息。正如你所看到的,有些字段被分開存儲在描述符的不同位置。在圖1.11中或許有兩個字段沒有明顯標出。首先是SS標志,它標識描述符對應的內存段是系統內存段還是普通的代碼/數據段。系統段,或許看到這個名詞,你在抓頭皮了,系統段是用于提供中斷處理和多任務服務的。我不會介入這些話題。
 
    注意:在接下來的某些部分你會看到大量的1-bit的標志。這里預先說明一下,以供后面參考。當bit標志為1的時候,它表示被置位,當bit標志為0的時候,它表示被清除。底層的操作系統代碼涵蓋大量基于bit的操作。沒有其他方法。使用高級語言的工程師們總是輕視這類底層代碼的工程師。他們稱這些人為bit-bashers或者bit-twiddlers。程序員真是很命苦呀。
 
假定SS標志被置位,描述符中4位類型的字段描述內存段的特定屬性:
 

表 1.1

Bit

Type類型

Description 描述

11

10

9

8

0

0

0

0

data

read-only

0

0

0

1

data

read-only, accessed

0

0

1

0

data

read-write

0

0

1

1

data

read-write, accessed

0

1

0

0

data

read-only, expand down

0

1

0

1

data

read-only, expand down, accessed

0

1

1

0

data

read-write, expand down

0

1

1

1

data

read-write, expand down, accessed

1

0

0

0

code

execute-only

1

0

0

1

code

execute-only, accessed

1

0

1

0

code

execute-read

1

0

1

1

code

execute-read, accessed

1

1

0

0

code

execute-only, conforming

1

1

0

1

code

execute-only, conforming, accessed

1

1

1

0

code

execute-read, conforming

1

1

1

1

code

execute-read, conforming, accessed

 
已訪問內存段是指最近被訪問過的內存段,所以這些內存段描述符位于8bit上的標志被置位。‘Expand down’ 段用于創建堆棧,因為這些段支持內存堆棧創建,創建由高端內存向低端內存延伸(故名Expand down段)。‘Conforming code’段允許較低權限的代碼段跳轉進來,并以允許這些代碼以較低的權限在該段內運行。 
具備安全意識到系統工程師會適時的發出警告,謹慎對待當他們處于允許操作系統內存段設置為Conforming code’段時的環境的時。
 
問題:1.好了,我們明白了這些內存段的分類和段描述符中存儲的元數據的種類。那么這些內存段是如何被保護的呢
答案: 原來是,段選擇器和段描述符包含大部分用于實現保護方案所需的大量信息。處理器充分的利用了這些元數據信息跟蹤內存訪問的違規行為。例如,段描述符里的大小限定字段用于保存內存段內存引用的起始位置到結束位置。同樣段描述符內的類型字段確保該內端段指定為只讀不能寫入。處理器利用段選擇器和段描述符內的權限字段防止非法的可執行代碼或者非法數據獲得較高權限。 
 
    注釋:這點很容易混淆--0x00是最高權限,雖然它是最小的數 
 
權限級別是操作系統用于防止用戶應用程序操縱內核文件并危及系統安全。在實模式的討論中,你見過使實模式系統被破壞和崩潰是如何的簡單。我只是在中斷向量表上跳了一小段華爾茲并擦除了里面的數據。在保護模式中,這樣的威脅,已經被化解了。重要的數據結構和操作系統代碼可以在硬件層得到很好的保護。
Intel平臺支持四種不同的權限級別(0-3)。另一種說法是Intel支持四種保護環。這些保護環如圖1.13所示。這是到目前以來涉及內存保護到結構中極其簡潔的一種了。很多年前當Control Data在編寫NOSVE操作系統的時候,系統構架師想要15個內存保護環!同時代古怪的事情類似Linux和Windows,它們只實現了兩個內存保護換(一個給系統內核,另一個給系統內核以外的所有部分)。他們都沒有充分利用Pentium所提供的內存保護功能。
 

圖1.13
當一個內存被使用,處理器會執行一系列的檢查。這些檢查是在內存地址解析到它的實際物理位置中同時進行。因為這些檢查和地址解析并發執行在相同時鐘周期中,因此不會產生性能問題。將內存管理的任務交由硬件來完成真是再好不過了。如果處理器的某項檢查偵測到內存保護的非法操作,處理器會產生一個異常。異常是由處理器發出的一個信號。處理器的各種中斷處理功能會捕獲并且處理這些異常。詳細的過程已經超出了我們的話題。籠統的來說,處理器利用特定的數據結構——類似中斷描述符表(IDT),將異常轉交給操作系統,由操作系統來決定采取何種處理方式。當操作系統啟動時候,它有負責為處理器進行類似IDT的初始化和設置工作。這使得操作系統可以自由的在IDT注冊特定的處理程序,當發生非法內存操作的時候,相關的處理程序能夠被調用。 當Windows中發生一個內存異常時,一個典型對話框會出現,提示非法內存訪問,并且Windows會終止你的程序,如果想知道我所要表達的意思,那就在Windows編譯并且運行下面的代碼:
 
* --overflow.c-- */
#include<stdio.h>

void main()
{
int array[4];
int i;
for(i=0;i<100;i++)
{
array[i]=i;
printf("set array[%d]=%d\n",i);
}
return;
}
 

上面的代碼中有一個明目張膽的數組越界。當你運行這個程序時,程序會崩潰,Windows會顯示一個如圖1.14中所示的對話框。如果你以前還沒有見過這樣的對話框,好好看看吧。如果你在Windows上進行某種大量指針相關的程序開發,你遲早會看到它。

圖1.14

 

我沒有對控制寄存器說太多。跟目前這部分內容最相關的寄存器是是CR0寄存器。我們會在下一部分看到另一對寄存器。CR0寄存器的第一位(最低順序位)被稱為PE標志位(作為保護模式開啟的標志)。通過將PE標志位置1,我們將處理器切換至保護模式開啟所有我們前面討論的段保護機制。下面是一個完成這個關鍵工作的匯編代碼的片段

 MOV EAX,CR0
OR AL,1
MOV CR0,EAX
另一個達到同樣目的的方法是使用特定目的的SMSWLMSW system 指令: 
 SMSW AX
OR AL,1
LMSW AX
在這里,你已經反復聽到很多名詞:選擇器(selector),描述符(descriptor)等等。如果
這是你第一次聽到關于保護模式的內容。你或許還在混淆它們到底是什么。下面是一個是一個簡
的概要,有助于你記住這一些列的名詞和相互關系:

Cast Member

Purpose

 段選擇器
Segment selector

在描述符表中選擇一個描述符
Selects a descriptor in a descriptor table

段描述符 
Segment descriptor 

描述一個內存段(元數據信息)
Describes a memory segment (metadata)

描述符表
Descriptor table 

保護一個段描述符數組
Holds an array of segment descriptors

描述符表寄存器 
Descriptor table register

存儲描述符表的基地址 
Stores the base address of the descriptor table

 

如果分頁還沒有被啟用,由圖1.9中的結構所生成的最終地址同樣也是物理地址,該地址值與處理器放置到它的32位地址線的值是相同的。如果啟動了分頁,情況不會再是這樣,引導我們進入下一個部分:保護模式下的分頁機制

posted on 2008-12-11 10:16 momor 閱讀(1168) 評論(0)  編輯 收藏 引用 所屬分類: 翻譯
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            先锋亚洲精品| 欧美主播一区二区三区| 欧美剧在线免费观看网站| 欧美一区国产在线| 欧美一区二区高清在线观看| 亚洲欧美日韩精品一区二区| 亚洲性感激情| 久久精品99无色码中文字幕| 久久婷婷人人澡人人喊人人爽 | 91久久夜色精品国产网站| 久久精品道一区二区三区| 欧美一级久久久| 麻豆91精品91久久久的内涵| 亚洲国产婷婷综合在线精品| 在线一区视频| 久久精品久久综合| 欧美激情麻豆| 国产日韩欧美一区二区| 亚洲第一综合天堂另类专| 99国产精品国产精品久久 | 欧美96在线丨欧| 亚洲激精日韩激精欧美精品| 在线中文字幕日韩| 久久久亚洲欧洲日产国码αv| 欧美高清视频www夜色资源网| 国产精品爱啪在线线免费观看| 国模精品娜娜一二三区| 亚洲美女在线观看| 欧美在线亚洲综合一区| 亚洲国产精品成人| 性色av一区二区怡红| 欧美激情中文字幕乱码免费| 国产亚洲精品福利| 一本色道久久综合亚洲91| 久久精品一区二区三区中文字幕| 亚洲国产精品传媒在线观看| 欧美一区二区三区的| 欧美激情精品久久久久久免费印度 | 欧美一区日本一区韩国一区| 欧美粗暴jizz性欧美20| 亚洲欧美中日韩| 欧美午夜在线视频| 亚洲免费成人av| 蜜臀91精品一区二区三区| 亚洲校园激情| 欧美视频成人| 中文欧美日韩| 亚洲久久一区二区| 欧美国产日本高清在线| 极品尤物一区二区三区| 久久精品官网| 午夜久久电影网| 欧美日韩精品久久| 国产真实久久| 欧美综合国产精品久久丁香| 亚洲视频一区| 国产精品大全| 亚洲一区二区三区中文字幕在线| 亚洲国产成人不卡| 欧美高清hd18日本| 亚洲免费黄色| 亚洲精品在线二区| 欧美日韩国产精品专区| 亚洲美女av电影| 亚洲精品久久久久久久久久久 | 可以看av的网站久久看| 1024精品一区二区三区| 麻豆精品传媒视频| 美国十次成人| 亚洲国产精品嫩草影院| 蜜臀av性久久久久蜜臀aⅴ| 久久久久九九九九| 亚洲娇小video精品| 亚洲国产老妈| 国产精品久久久久久久浪潮网站| 亚洲一区二区视频在线观看| 中日韩高清电影网| 国产无遮挡一区二区三区毛片日本| 欧美自拍偷拍午夜视频| 久久频这里精品99香蕉| 日韩一级在线观看| 亚洲一级黄色| 樱花yy私人影院亚洲| 亚洲高清不卡在线观看| 欧美三区视频| 亚洲一区二区成人| 在线精品一区| 日韩香蕉视频| 国产人成一区二区三区影院| 美女视频黄免费的久久| 欧美日韩极品在线观看一区| 欧美一级片一区| 久久免费精品视频| 一区二区三区高清视频在线观看| 一区二区三区国产在线观看| 国产综合婷婷| 亚洲精品一区二区网址| 国产日产亚洲精品| 亚洲激情在线观看| 国产精品一级在线| 亚洲国产精品第一区二区| 国产精品一区视频| 亚洲七七久久综合桃花剧情介绍| 国产精品视频内| 亚洲日本一区二区| 永久域名在线精品| 亚洲一区二区三区欧美| 亚洲另类黄色| 欧美在线一级va免费观看| 亚洲视频专区在线| 欧美超级免费视 在线| 久久人人超碰| 国产精品久久久久久影院8一贰佰| 欧美暴力喷水在线| 欧美亚洲网站| 亚洲一区二区三区在线视频| 免费久久99精品国产自| 久久精品视频播放| 国产毛片一区二区| 中文亚洲免费| 亚洲视频电影图片偷拍一区| 免费观看一级特黄欧美大片| 久久伊人一区二区| 国内精品亚洲| 性伦欧美刺激片在线观看| 亚洲一级高清| 欧美日韩爆操| 亚洲精品网站在线播放gif| 亚洲第一福利在线观看| 久久久久久亚洲精品中文字幕| 先锋影音网一区二区| 欧美日韩亚洲高清| 亚洲精品一品区二品区三品区| 亚洲国产精品va在看黑人| 久久理论片午夜琪琪电影网| 久久国产精品久久久久久久久久| 国产精品日韩欧美| 亚洲男女自偷自拍| 欧美一区二区三区男人的天堂| 国产精品毛片| 午夜天堂精品久久久久 | 亚洲国产小视频在线观看| 伊人男人综合视频网| 久久这里只精品最新地址| 欧美成人激情视频| 91久久精品日日躁夜夜躁欧美| 免费在线观看精品| 日韩亚洲欧美成人一区| 新片速递亚洲合集欧美合集| 国产日韩一区二区三区在线播放| 欧美一区二区三区四区夜夜大片| 久久精品欧美日韩精品| 亚洲视频中文字幕| 性色一区二区三区| 一区在线观看视频| 欧美日韩国产不卡| 亚洲欧美中文另类| 六月婷婷一区| 在线一区欧美| 国产综合久久| 欧美激情一区| 亚洲综合日本| 欧美成人精品三级在线观看| 一区二区三区国产盗摄| 国产精品久久久久久久久久免费看 | 免费黄网站欧美| 亚洲最新中文字幕| 欧美一级视频精品观看| 在线精品视频免费观看 | 在线观看日产精品| 欧美精品一区三区在线观看| 亚洲一区二区三区四区在线观看| 久久久青草婷婷精品综合日韩| 在线观看国产成人av片| 欧美伦理91| 久久久精品五月天| 亚洲欧美日韩爽爽影院| 国产一区二区精品丝袜| 欧美一区亚洲一区| 亚洲字幕一区二区| 亚洲欧美高清| 亚洲区一区二区三区| 欧美寡妇偷汉性猛交| 亚洲欧美日韩综合| 欧美激情一级片一区二区| 亚洲欧美日本日韩| 激情综合中文娱乐网| 国产精品高潮视频| 欧美aⅴ一区二区三区视频| 中文一区二区在线观看| 亚洲成人在线视频播放 | 国产婷婷色一区二区三区在线 | 国产色视频一区| 欧美粗暴jizz性欧美20| 午夜精品久久久久久久蜜桃app| 亚洲黄色三级| 欧美成人a视频| 久久久久免费视频| 小辣椒精品导航| 午夜精品一区二区三区在线播放|