• <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>

            jake1036

            讀書(shū)筆記之五-----保護(hù)

                                                                     80x86的保護(hù)
              

              1段級(jí)保護(hù)
                包括以下幾種方式 :
                 1.1 段界限檢查 
                       段描述符中的段限長(zhǎng)字段用于防止程序或過(guò)程尋址到段外內(nèi)存位置。段限長(zhǎng)的有效值依賴(lài)于顆粒度G標(biāo)志的設(shè)置狀態(tài)。 

                 1.2 段類(lèi)型TYPE檢查
                        
                 1.3特權(quán)級(jí)檢查
                     段保護(hù)機(jī)制提供了四種特權(quán)級(jí),0級(jí)到3級(jí)。
                      特權(quán)級(jí)有以下三種:
                      1.3.1 當(dāng)前特權(quán)級(jí) CPL 
                              CPL是當(dāng)前正在執(zhí)行程序或任務(wù)的特權(quán)級(jí)。它存放在CS活著SS段寄存器中位0和位1中。 通常CPL等于當(dāng)前代碼段的特權(quán)級(jí)。當(dāng)程序把控制轉(zhuǎn)移到
                            另一個(gè)具有不同特權(quán)級(jí)的代碼段中時(shí),處理器就會(huì)改變CPL。 
                           當(dāng)訪問(wèn)一個(gè)一致代碼段的時(shí)候,處理器對(duì)CPL的設(shè)置有所不同,特權(quán)級(jí)高于或等于一致代碼段DPL的任何段都可以訪問(wèn)一致代碼段,并且當(dāng)處理器訪問(wèn)一個(gè)
                           特權(quán)級(jí)不同于CPL的一致代碼段時(shí),CPL不會(huì)修改成一致代碼段的DPL 。

                      1.3.2 描述符特權(quán)級(jí) DPL
                               
                              DPL是一個(gè)段或者門(mén)的特權(quán)級(jí),它存放在段或門(mén)的DPL字段中。當(dāng)執(zhí)行代碼段試圖訪問(wèn)一個(gè)段或者門(mén)的時(shí)候,段或者門(mén)DPL就會(huì)于
                              CPL以及短或者門(mén)選擇符中的RPL相比較。 根據(jù)被訪問(wèn)的段或者門(mén)的類(lèi)型不同,DPL也有不同的含義。
                              (1) 數(shù)據(jù)段 
                                    其DPL指出允許訪問(wèn)本程序段的程序或任務(wù)應(yīng)具有的最大特權(quán)級(jí)數(shù)值。例如,如果數(shù)據(jù)段的特權(quán)級(jí)DPL是1,那么只有運(yùn)行在CPL為0或者1的
                                   程序,才可以訪問(wèn)這個(gè)段。
                             
                             (2) 非一致代碼段
                                   其DPL指出程序或者任務(wù)訪問(wèn)該段必須具有的特權(quán)級(jí)。 例如如果某個(gè)非一致代碼段的DPL為0 ,那么就只有運(yùn)行在CPL為0 的程序能夠訪問(wèn)這個(gè)段。
                           
                              (3) 調(diào)用門(mén)
                                     與數(shù)據(jù)段的訪問(wèn)規(guī)則相同。
                                
                              (4) 一致和非一致代碼段(通過(guò)調(diào)用門(mén)訪問(wèn))
                                   DPL指示允許代碼段的程序或者任務(wù)應(yīng)該具有的最小特權(quán)級(jí)數(shù)值。如果一致代碼段的DPL是2,那么CPL為0的程序段就不能訪問(wèn)。
                               
                             (5) 任務(wù)狀態(tài)段 TSS
                                   其DPL指出訪問(wèn)TSS的當(dāng)前執(zhí)行程序或任務(wù)可處于的最大特權(quán)級(jí)。與數(shù)據(jù)段訪問(wèn)規(guī)則相同。
             
                            1.3.3 請(qǐng)求特權(quán)級(jí) RPL  
                                        RPL是一種賦予段選擇符的超越特權(quán)級(jí),它存放在選擇符的位0或者位1中。處理器會(huì)同時(shí)檢查RPL或者CPL 。以確定是否允許訪問(wèn)一個(gè)段。
                                        始終取RPL或者CPL之間數(shù)值最大的特權(quán)級(jí)作為訪問(wèn)段時(shí)的最大比較對(duì)象。
                            
                      2  訪問(wèn)數(shù)據(jù)段時(shí)的特權(quán)級(jí)檢查
                           為了訪問(wèn)數(shù)據(jù)段中的操作數(shù),數(shù)據(jù)段中的段選擇符,必須加載進(jìn)數(shù)據(jù)段寄存器中或者堆棧段寄存器中。在把一個(gè)段選擇符加載進(jìn)段寄存器中之前,
                            處理器就會(huì)進(jìn)行特權(quán)級(jí)檢查。
                  
                             它會(huì)把當(dāng)前的段描述符的DPL與 當(dāng)前段選擇符的RPL 和任務(wù)的CPL 進(jìn)行比較,只有DPL大于或者等于 CPL或者RPL 時(shí),CPU才會(huì)把選擇符加載進(jìn)段寄存器。
                             
                       3 代碼段之間的轉(zhuǎn)移控制時(shí)的特權(quán)級(jí)檢查
                          當(dāng)程序的控制權(quán)從一個(gè)代碼段移到另一個(gè)代碼段中時(shí),目標(biāo)代碼段的段選擇符必須加載進(jìn)代碼段寄存器,作為這個(gè)加載過(guò)程的一部分,處理器會(huì)檢測(cè)目標(biāo)代碼段的段描述符,并執(zhí)行各種安全的檢測(cè)。如果這些檢查都通過(guò)了,那么CPU就會(huì)把目標(biāo)代碼段的選擇符加載進(jìn)段寄存器,于是程序的控制權(quán)就被轉(zhuǎn)移到新的代碼段中。
                           JMP CALL 指令可以利用以下四種方法來(lái)引用另外一個(gè)代碼段:
                            (1) 目標(biāo)操作數(shù)含有目標(biāo)代碼段的段選擇符。
                            (2)目標(biāo)操作數(shù)指向一個(gè)調(diào)用門(mén)描述符,該描述符含有目標(biāo)代碼段的選擇符。
                            (3) 目標(biāo)操作數(shù)指向一個(gè)TSS ,而該TSS中含有目標(biāo)代碼段的選擇符 。
                            (4) 目標(biāo)操作數(shù)指向一個(gè)任務(wù)門(mén),該任務(wù)指向一個(gè)TSS ,該TSS中含有目標(biāo)代碼段的選擇符。
                                     
                3.1 當(dāng)不通過(guò)門(mén)調(diào)用把程序控制權(quán)轉(zhuǎn)移到另一個(gè)代碼段時(shí),程序會(huì)進(jìn)行以下四種特權(quán)級(jí)和類(lèi)型信息。 
                     

                目的代碼段中的一致性標(biāo)志C, 它確定了一個(gè)代碼段是非一致代碼段還是一致代碼段。
               當(dāng)C==0 ,即為非一致代碼段,則調(diào)用者的CPL必須等于目的代碼段的DPL ,RPL 則作用不大。RPL在數(shù)值上必須小于或者等于調(diào)用者的CPL才能使它的
                控制轉(zhuǎn)移成功。 當(dāng)非一致代碼的段選擇符被加載進(jìn)CS寄存器中時(shí),特權(quán)級(jí)字段并不會(huì)改變,它仍然是調(diào)用者的CPL ,即使段選擇符的RPL與CPL不同,但是
               仍然是正確的。

                     當(dāng)C == 1 時(shí),即訪問(wèn)一致代碼段的時(shí)候,CPL必須在數(shù)值上大于或者等于目的代碼段的DPL,CPU忽略對(duì)RPL的檢查。對(duì)于一致代碼段,DPL表示調(diào)用者對(duì)代碼段進(jìn)行成功調(diào)用可以處于的最低數(shù)值特權(quán)級(jí)。

                  大多數(shù)代碼段都是非一致代碼段,這樣代碼段只能轉(zhuǎn)移到相同特權(quán)級(jí)的代碼段上,除非轉(zhuǎn)移是通過(guò)一個(gè)調(diào)用門(mén)來(lái)進(jìn)行的。
               
              

                 4 門(mén)描述符 
                    為了對(duì)不同特權(quán)級(jí)的代碼段進(jìn)行受控的訪問(wèn),處理器提供了稱(chēng)為門(mén)描述符的特殊描述符集。
                      有以下四種門(mén)描述符:
                       (1) 調(diào)用門(mén) TYPE = 12
                       (2) 陷阱門(mén) TYPE = 15 
                       (3) 中斷門(mén) TYPE = 14 
                       (4) 任務(wù)門(mén) TYPE = 5 。

                      
             
                        當(dāng)CPU訪問(wèn)調(diào)用門(mén)時(shí),它會(huì)使用調(diào)用門(mén)的段選擇符來(lái)定位目的代碼段的段描述符,然后CPU會(huì)把代碼段描述符的基地址與調(diào)用門(mén)中的偏移值進(jìn)行組合。
                        形成代碼段中指定程序的入口點(diǎn)的線性地址。 
                       
                        通過(guò)調(diào)用門(mén)進(jìn)行程序控制轉(zhuǎn)移的時(shí)候,CPU會(huì)對(duì)4種不同的特權(quán)級(jí)進(jìn)行檢查。
                        (1)當(dāng)前特權(quán)級(jí)CPL 。
                        (2) 調(diào)用門(mén)描述符的請(qǐng)求特權(quán)級(jí)RPL 。
                        (3) 調(diào)用門(mén)描述符特權(quán)級(jí)DPL 。
                        (4) 目的代碼段描述符中的DPL。 
                        (5)目的代碼段描述符的DPL 。 
                        
                 
                 5 棧的切換
                        
                     每當(dāng)調(diào)用門(mén)用于把程序控制轉(zhuǎn)移到一個(gè)更高級(jí)別的非一致代碼段時(shí),CPU會(huì)自動(dòng)切換到目的代碼段特權(quán)級(jí)的堆棧去。 
                     執(zhí)行堆棧切換的目的是為了,防止高級(jí)特權(quán)程序由于堆棧空間不足而引起的崩潰。 同時(shí)也為了防止低特權(quán)級(jí)程序,通過(guò)共享堆棧
                     而干擾高特權(quán)級(jí)程序。
                  
                     每個(gè)任務(wù)最多定義4個(gè)堆棧,一個(gè)運(yùn)行在特權(quán)級(jí)3的應(yīng)用程序代碼,其他分別運(yùn)行在特權(quán)級(jí)0,1,2上。 
                           
                   5.1堆棧的具體切換 

                      當(dāng)特權(quán)級(jí)3的程序在執(zhí)行時(shí),特權(quán)級(jí)3的堆棧的段選擇符和棧指針會(huì)被存放在SS和ESP中,并且在發(fā)生堆棧切換時(shí)保存在被調(diào)用過(guò)程的堆棧上。
                       而特權(quán)級(jí)0、1和2 的堆棧的初始指針都存放在當(dāng)前運(yùn)行任務(wù)的TSS段中,TSS段中這些指針都是只讀值。當(dāng)調(diào)用更高特權(quán)級(jí)的時(shí)候,CPU才會(huì)
                       使用它們建立新的堆棧。 當(dāng)從調(diào)用過(guò)程返回時(shí),相應(yīng)的棧就不存在了,下一次調(diào)用該過(guò)程的時(shí)候,就會(huì)再次使用TSS中的初始指針建立一個(gè)
                       新棧。
                    
                       OS需要負(fù)責(zé)為所有用到的特權(quán)級(jí)建立堆棧和堆棧段描述符,并且在任務(wù)的TSS中設(shè)置初始指針值。

                       當(dāng)通過(guò)一個(gè)過(guò)程調(diào)用其他過(guò)程時(shí)而造成的特權(quán)級(jí)改變的時(shí)候,CPU會(huì)執(zhí)行以下步驟進(jìn)行切換操作,并開(kāi)始在新的特權(quán)級(jí)上執(zhí)行調(diào)用過(guò)程。
                       (1) 使用目的代碼段的DPL從TSS中選擇新棧的指針,從當(dāng)前的TSS中讀取新棧的段選擇符和棧指針。
                       (2) 檢查棧段描述符特權(quán)級(jí)和類(lèi)型是否有效 ,若無(wú)效則產(chǎn)生一個(gè)無(wú)效的TSS 。
                       (3) 臨時(shí)保存SS和ESP寄存器的當(dāng)前值,把新棧的段選擇符和棧指針加載到SS中和ESP中。然后把臨時(shí)保存的SS和ESP壓入到新棧中。
                       (4) 把調(diào)用門(mén)中描述符中指定參數(shù)個(gè)數(shù)的參數(shù)從調(diào)用過(guò)程棧復(fù)制到新棧中。
                       (5) 把返回指令指針壓入(即當(dāng)前CS和EIP內(nèi)容) 壓入新棧。把新代碼段選擇符加載到CS中,同時(shí)把調(diào)用門(mén)中偏移值加載到EIP中。最后開(kāi)始執(zhí)行
                             被調(diào)用的過(guò)程。
                         


                     5.2   從被調(diào)用過(guò)程返回 
                     指令RET用于執(zhí)行近返回、同特權(quán)級(jí)遠(yuǎn)返回、不同特權(quán)級(jí)遠(yuǎn)返回。
                     當(dāng)執(zhí)行遠(yuǎn)返回到一個(gè)調(diào)用過(guò)程時(shí),CPU會(huì)執(zhí)行以下步驟:
                     (1) 檢查保存的CS寄存器中RPL字段,以確定在返回時(shí)特權(quán)級(jí)是否需要改變。
                     (2) 彈出并使用被調(diào)用過(guò)程堆棧上的值加載CS和EIP寄存器



                6 頁(yè)級(jí)保護(hù)
                    頁(yè)目錄和頁(yè)表項(xiàng)中的讀寫(xiě)標(biāo)志R/W和用戶(hù)/超級(jí)用戶(hù)標(biāo)志U/S提供了分段機(jī)制保護(hù)屬性的一個(gè)子集。
                     超級(jí)用戶(hù)級(jí)為 特權(quán)級(jí) 0 ,  1 , 2 。 
                     普通用戶(hù)級(jí)為 特權(quán)級(jí) 3 。

               6.1 頁(yè)轉(zhuǎn)換高速緩沖  TLB
                     為了避免每次內(nèi)存訪問(wèn)都要訪問(wèn)駐留在內(nèi)存中的頁(yè)表,最近使用到的線性地址到物理地址的轉(zhuǎn)換信息被保存在處理器內(nèi)的
                     頁(yè)轉(zhuǎn)換高速緩沖中。只有當(dāng)前需要的轉(zhuǎn)換信息不在高速緩存時(shí),才會(huì)訪問(wèn)內(nèi)存中的頁(yè)表。
                
                6.2 組合頁(yè)級(jí)別和段級(jí)保護(hù)
                      當(dāng)啟用了分頁(yè)機(jī)制,CPU會(huì)首先執(zhí)行段級(jí)保護(hù),然后再處頁(yè)級(jí)保護(hù)。               

              



                
                     




                       












                       





                      
                






                    
             














                             







                            
               









            posted on 2010-09-23 10:21 kahn 閱讀(261) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            国内精品久久久久久久亚洲| 久久国产精品无码HDAV| 久久夜色精品国产亚洲av| 伊人久久成人成综合网222| 亚洲色大成网站WWW久久九九| 精品永久久福利一区二区| 久久AⅤ人妻少妇嫩草影院| 亚洲国产另类久久久精品| 色综合久久88色综合天天| 少妇无套内谢久久久久| 国产综合免费精品久久久| 国色天香久久久久久久小说| 91亚洲国产成人久久精品网址| 久久久亚洲裙底偷窥综合| 久久av高潮av无码av喷吹| 99久久婷婷免费国产综合精品| 亚洲人成无码网站久久99热国产 | 久久e热在这里只有国产中文精品99| 日本久久久久久久久久| 久久精品成人免费看| 欧美大香线蕉线伊人久久| 亚洲人AV永久一区二区三区久久| 精品久久久久久久久中文字幕| 精品多毛少妇人妻AV免费久久| 久久www免费人成精品香蕉| 久久综合丝袜日本网| 国产精品久久影院| 久久精品亚洲一区二区三区浴池 | 久久精品久久久久观看99水蜜桃| 久久精品成人欧美大片| 香蕉久久一区二区不卡无毒影院| 国产亚洲精久久久久久无码| 亚洲AV无码久久精品色欲| 亚洲国产成人精品无码久久久久久综合 | 青青草原综合久久| 国产91久久精品一区二区| 国产亚洲欧美成人久久片| 九九久久99综合一区二区| 国产精品岛国久久久久| 东京热TOKYO综合久久精品| 2021久久国自产拍精品|