亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

蟲蟲首頁| 資源下載| 資源專輯| 精品軟件
登錄| 注冊

生產(chǎn)模式

  • 匯編+保護模式+教程

    九.輸入/輸出保護為了支持多任務,80386不僅要有效地實現任務隔離,而且還要有效地控制各任務的輸入/輸出,避免輸入/輸出沖突。本文將介紹輸入輸出保護。 這里下載本文源代碼。 <一>輸入/輸出保護80386采用I/O特權級IPOL和I/O許可位圖的方法來控制輸入/輸出,實現輸入/輸出保護。 1.I/O敏感指令輸入輸出特權級(I/O Privilege Level)規定了可以執行所有與I/O相關的指令和訪問I/O空間中所有地址的最外層特權級。IOPL的值在如下圖所示的標志寄存器中。 標  志寄存器 BIT31—BIT18 BIT17 BIT16 BIT15 BIT14 BIT13—BIT12 BIT11 BIT10 BIT9 BIT8 BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 00000000000000 VM RF 0 NT IOPL OF DF IF TF SF ZF 0 AF 0 PF 1 CF I/O許可位圖規定了I/O空間中的哪些地址可以由在任何特權級執行的程序所訪問。I/O許可位圖在任務狀態段TSS中。 I/O敏感指令 指令 功能 保護方式下的執行條件 CLI 清除EFLAGS中的IF位 CPL<=IOPL STI 設置EFLAGS中的IF位 CPL<=IOPL IN 從I/O地址讀出數據 CPL<=IOPL或I/O位圖許可 INS 從I/O地址讀出字符串 CPL<=IOPL或I/O位圖許可 OUT 向I/O地址寫數據 CPL<=IOPL或I/O位圖許可 OUTS 向I/O地址寫字符串 CPL<=IOPL或I/O位圖許可 上表所列指令稱為I/O敏感指令,由于這些指令與I/O有關,并且只有在滿足所列條件時才可以執行,所以把它們稱為I/O敏感指令。從表中可見,當前特權級不在I/O特權級外層時,可以正常執行所列的全部I/O敏感指令;當特權級在I/O特權級外層時,執行CLI和STI指令將引起通用保護異常,而其它四條指令是否能夠被執行要根據訪問的I/O地址及I/O許可位圖情況而定(在下面論述),如果條件不滿足而執行,那么將引起出錯碼為0的通用保護異常。 由于每個任務使用各自的EFLAGS值和擁有自己的TSS,所以每個任務可以有不同的IOPL,并且可以定義不同的I/O許可位圖。注意,這些I/O敏感指令在實模式下總是可執行的。 2.I/O許可位圖如果只用IOPL限制I/O指令的執行是很不方便的,不能滿足實際要求需要。因為這樣做會使得在特權級3執行的應用程序要么可訪問所有I/O地址,要么不可訪問所有I/O地址。實際需要與此剛好相反,只允許任務甲的應用程序訪問部分I/O地址,只允許任務乙的應用程序訪問另一部分I/O地址,以避免任務甲和任務乙在訪問I/O地址時發生沖突,從而避免任務甲和任務乙使用使用獨享設備時發生沖突。 因此,在IOPL的基礎上又采用了I/O許可位圖。I/O許可位圖由二進制位串組成。位串中的每一位依次對應一個I/O地址,位串的第0位對應I/O地址0,位串的第n位對應I/O地址n。如果位串中的第位為0,那么對應的I/O地址m可以由在任何特權級執行的程序訪問;否則對應的I/O地址m只能由在IOPL特權級或更內層特權級執行的程序訪問。如果在I/O外層特權級執行的程序訪問位串中位值為1的位所對應的I/O地址,那么將引起通用保護異常。 I/O地址空間按字節進行編址。一條I/O指令最多可涉及四個I/O地址。在需要根據I/O位圖決定是否可訪問I/O地址的情況下,當一條I/O指令涉及多個I/O地址時,只有這多個I/O地址所對應的I/O許可位圖中的位都為0時,該I/O指令才能被正常執行,如果對應位中任一位為1,就會引起通用保護異常。 80386支持的I/O地址空間大小是64K,所以構成I/O許可位圖的二進制位串最大長度是64K個位,即位圖的有效部分最大為8K字節。一個任務實際需要使用的I/O許可位圖大小通常要遠小于這個數目。 當前任務使用的I/O許可位圖存儲在當前任務TSS中低端的64K字節內。I/O許可位圖總以字節為單位存儲,所以位串所含的位數總被認為是8的倍數。從前文中所述的TSS格式可見,TSS內偏移66H的字確定I/O許可位圖的開始偏移。由于I/O許可位圖最長可達8K字節,所以開始偏移應小于56K,但必須大于等于104,因為TSS中前104字節為TSS的固定格式,用于保存任務的狀態。 1.I/O訪問許可檢查細節保護模式下處理器在執行I/O指令時進行許可檢查的細節如下所示。 (1)若CPL<=IOPL,則直接轉步驟(8);(2)取得I/O位圖開始偏移;(3)計算I/O地址對應位所在字節在I/O許可位圖內的偏移;(4)計算位偏移以形成屏蔽碼值,即計算I/O地址對應位在字節中的第幾位;(5)把字節偏移加上位圖開始偏移,再加1,所得值與TSS界限比較,若越界,則產生出錯碼為0的通用保護故障;(6)若不越界,則從位圖中讀對應字節及下一個字節;(7)把讀出的兩個字節與屏蔽碼進行與運算,若結果不為0表示檢查未通過,則產生出錯碼為0的通用保護故障;(8)進行I/O訪問。設某一任務的TSS段如下: TSSSEG                  SEGMENT PARA USE16                        TSS     <>             ;TSS低端固定格式部分                        DB      8 DUP(0)       ;對應I/O端口00H—3FH                        DB      10000000B      ;對應I/O端口40H—47H                        DB      01100000B      ;對用I/O端口48H—4FH                        DB      8182 DUP(0ffH) ;對應I/O端口50H—0FFFFH                        DB      0FFH           ;位圖結束字節TSSLen                  =       $TSSSEG                  ENDS 再假設IOPL=1,CPL=3。那么如下I/O指令有些能正常執行,有些會引起通用保護異常:                         in      al,21h  ;(1)正常執行                        in      al,47h  ;(2)引起異常                        out     20h,al  ;(3)正常實行                        out     4eh,al  ;(4)引起異常                        in      al,20h  ;(5)正常執行                        out     20h,eax ;(6)正常執行                        out     4ch,ax  ;(7)引起異常                        in      ax,46h  ;(8)引起異常                        in      eax,42h ;(9)正常執行 由上述I/O許可檢查的細節可見,不論是否必要,當進行許可位檢查時,80386總是從I/O許可位圖中讀取兩個字節。目的是為了盡快地執行I/O許可檢查。一方面,常常要讀取I/O許可位圖的兩個字節。例如,上面的第(8)條指令要對I/O位圖中的兩個位進行檢查,其低位是某個字節的最高位,高位是下一個字節的最低位。可見即使只要檢查兩個位,也可能需要讀取兩個字節。另一方面,最多檢查四個連續的位,即最多也只需讀取兩個字節。所以每次要讀取兩個字節。這也是在判別是否越界時再加1的原因。為此,為了避免在讀取I/O許可位圖的最高字節時產生越界,必須在I/O許可位圖的最后填加一個全1的字節,即0FFH。此全1的字節應填加在最后一個位圖字節之后,TSS界限范圍之前,即讓填加的全1字節在TSS界限之內。 I/O許可位圖開始偏移加8K所得的值與TSS界限值二者中較小的值決定I/O許可位圖的末端。當TSS的界限大于I/O許可位圖開始偏移加8K時,I/O許可位圖的有效部分就有8K字節,I/O許可檢查全部根據全部根據該位圖進行。當TSS的界限不大于I/O許可位圖開始偏移加8K時,I/O許可位圖有效部分就不到8K字節,于是對較小I/O地址訪問的許可檢查根據位圖進行,而對較大I/O地址訪問的許可檢查總被認為不可訪問而引起通用保護故障。因為這時會發生字節越界而引起通用保護異常,所以在這種情況下,可認為不足的I/O許可位圖的高端部分全為1。利用這個特點,可大大節約TSS中I/O許可位圖占用的存儲單元,也就大大減小了TSS段的長度。 <二>重要標志保護輸入輸出的保護與存儲在標志寄存器EFLAGS中的IOPL密切相關,顯然不能允許隨便地改變IOPL,否則就不能有效地實現輸入輸出保護。類似地,對EFLAGS中的IF位也必須加以保護,否則CLI和STI作為敏感指令對待是無意義的。此外,EFLAGS中的VM位決定著處理器是否按虛擬8086方式工作。 80386對EFLAGS中的這三個字段的處理比較特殊,只有在較高特權級執行的程序才能執行IRET、POPF、CLI和STI等指令改變它們。下表列出了不同特權級下對這三個字段的處理情況。 不同特權級對標志寄存器特殊字段的處理 特權級 VM標志字段 IOPL標志字段 IF標志字段 CPL=0 可變(初POPF指令外) 可變 可變 0  不變 不變 可變 CPL>IOPL 不變 不變 不變 從表中可見,只有在特權級0執行的程序才可以修改IOPL位及VM位;只能由相對于IOPL同級或更內層特權級執行的程序才可以修改IF位。與CLI和STI指令不同,在特權級不滿足上述條件的情況下,當執行POPF指令和IRET指令時,如果試圖修改這些字段中的任何一個字段,并不引起異常,但試圖要修改的字段也未被修改,也不給出任何特別的信息。此外,指令POPF總不能改變VM位,而PUSHF指令所壓入的標志中的VM位總為0。 <三>演示輸入輸出保護的實例(實例九)下面給出一個用于演示輸入輸出保護的實例。演示內容包括:I/O許可位圖的作用、I/O敏感指令引起的異常和特權指令引起的異常;使用段間調用指令CALL通過任務門調用任務,實現任務嵌套。 1.演示步驟實例演示的內容比較豐富,具體演示步驟如下:(1)在實模式下做必要準備后,切換到保護模式;(2)進入保護模式的臨時代碼段后,把演示任務的TSS段描述符裝入TR,并設置演示任務的堆棧;(3)進入演示代碼段,演示代碼段的特權級是0;(4)通過任務門調用測試任務1。測試任務1能夠順利進行;(5)通過任務門調用測試任務2。測試任務2演示由于違反I/O許可位圖規定而導致通用保護異常;(6)通過任務門調用測試任務3。測試任務3演示I/O敏感指令如何引起通用保護異常;(7)通過任務門調用測試任務4。測試任務4演示特權指令如何引起通用保護異常;(8)從演示代碼轉臨時代碼,準備返回實模式;(9)返回實模式,并作結束處理。

    標簽: 匯編 保護模式 教程

    上傳時間: 2013-12-11

    上傳用戶:nunnzhy

  • /* RSA Demo 1.0 版 * 版權所有 (C) 2004 趙春生 * 2004.04.25 * http://timw.yeah.net * http://timw.126.com * 本程

    /* RSA Demo 1.0 版 * 版權所有 (C) 2004 趙春生 * 2004.04.25 * http://timw.yeah.net * http://timw.126.com * 本程序調用Miracl ver 4.82大數運算庫,詳見其附帶手冊。 * P,Q,N,D,E使用RSATool2生成。 */ 編譯提示: 一:將Project-Settings-Settings For(All Configuration)-C/C++中Category項的 Precompiled Headers設置成:Automatic use of precompiled headers(圖1)。 二:將ms32.lib添加到工程中(圖2)。 三:MIRACL是C庫。 extern "C" { #include "miracl.h" #include "mirdef.h" } #pragma comment( lib, "ms32.lib" )

    標簽: 2004 http timw Demo

    上傳時間: 2015-03-23

    上傳用戶:leehom61

  • /* RSA Demo 1.0 版 * 版權所有 (C) 2004 趙春生 * 2004.04.25 * http://timw.yeah.net * http://timw.126.com * 本程

    /* RSA Demo 1.0 版 * 版權所有 (C) 2004 趙春生 * 2004.04.25 * http://timw.yeah.net * http://timw.126.com * 本程序調用Miracl ver 4.82大數運算庫,詳見其附帶手冊。 * P,Q,N,D,E使用RSATool2生成。 */ 編譯提示: 一:將Project-Settings-Settings For(All Configuration)-C/C++中Category項的 Precompiled Headers設置成:Automatic use of precompiled headers(圖1)。 二:將ms32.lib添加到工程中(圖2)。 三:MIRACL是C庫。 extern "C" { #include "miracl.h" #include "mirdef.h" } #pragma comment( lib, "ms32.lib" )

    標簽: 2004 http timw Demo

    上傳時間: 2013-12-17

    上傳用戶:liansi

  • 設計模式——訪問者模式 Visitor模式允許我們在不改動原有結構的基礎之上不斷增加新的功能。 ICumulation接口定義了方法Cumulate()

    設計模式——訪問者模式 Visitor模式允許我們在不改動原有結構的基礎之上不斷增加新的功能。 ICumulation接口定義了方法Cumulate(),旨在計算1+2+……+n,有兩種不同的實現方法,一個是一般的疊加算法GeneralArithmetic,一個是高斯算法GaoSiArithmetic。 因為某種原因,系統需要添加求平均值的功能,還有計算1到n的平方和。 按照一般的思路,我們需要在ICumulation中定義兩個方法分別計算平均值和平方和,并在實現類中同時添加相應的方法。在搭建了visitor模式的架構以后,添加功能的代碼被移植到ICumulationVisitor中,添加的兩種功能也分別被以子類AverageVisitor和PowerVisitor實現。 功能的擴展從在類中添加方法的方式變成了添加新類的方式,該類繼承一定的Visitor接口。這是一個90度的轉換,使得架構符合開放封閉(OCP)原則:功能的擴展無需改動原有代碼。 同時,這里也體現了單一職責原則(SRP),ICumulation層次結構可以因為出現了不同的算法而改變,但是不應該因為需要計算不同的東西(功能)而改變,算法和功能是橫向和縱向的關系。這里visitor模式隔離了算法和功能,ICumulation層次結構負責算法,ICumulationVisitor層次結構負責功能。

    標簽: ICumulation Cumulate Visitor 模式

    上傳時間: 2015-06-12

    上傳用戶:上善若水

  • 最小生成樹問題 若要在n個城市之間建設通信網絡

    最小生成樹問題 若要在n個城市之間建設通信網絡,只需要架設n-1條線路即可。如何以最低的經濟代價建設這個通信網,是一個網的最小生成樹問題。 (1)利用克魯斯卡爾算法求網的最小生成樹。 (2)實現教科書6.5節中定義的抽象樹類型 MFSet。以此表示構造生成樹過程中的連通分量。 (3)以文本形式輸出生成樹中各條邊以及他們的權值。

    標簽: 生成樹 城市 通信網絡

    上傳時間: 2015-11-10

    上傳用戶:jhksyghr

  • 在傳統模式下利用人工進行學生信息管理

    在傳統模式下利用人工進行學生信息管理,存在著較多的缺點,如:效率底,保密性差,時間一長將產生大量的文件和數據,更不便于查找,更新,維護等。諸如這些情況,令學校管理者對學生的信息管理帶來了很大困難,嚴重影響了教育工作者的工作效率,針對這些情況,我們可使用日趨成熟的計算機技術來代替傳統的人工模式,來實現學生信息的現代化管理,這一技術具有手工管理所無法比擬的優點,如:檢索迅速,查找方便,可靠性高,存儲量大,保密性好,壽命長,成本底等。這些優點能夠極大地提高學生信息管理的效率,使我們的學校在市場經濟的發展過程中具有一定的競爭優勢,也是企業實現科學化,正規化,現代化的重要條件。 用計算機制作的學生信息化管理系統還可以通過功能強大的Internet網及時的向學生的家長傳遞該生在校的最新成績,有助于學校與家長的信息互動,為更好地把握學校的教育方針起到了一定的促進作用!

    標簽: 模式 人工 信息管理

    上傳時間: 2016-02-26

    上傳用戶:yoleeson

  • BM 算法是一個較優的模式匹配算法。一般

    BM 算法是一個較優的模式匹配算法。一般,如果不考慮模式串的長度,一個具有時間復雜度O(n)的算法應該是最優的了,但是事實不是如此。BM算法可以實現更高效率的模式匹配。分析和實驗說明,BM匹配算法對于那些字符集比較大,而模式串中出現的字符比較少的時候,工作效率最快。而且,考慮KMP匹配方式的優化,可以結合KMP匹配和BM匹配,進一步提高效率。

    標簽: 算法 BM 模式匹配

    上傳時間: 2013-12-19

    上傳用戶:CHENKAI

  • 基于J2EE的物流信息系統的設計與實現 介紹了J2EE 體系結構、Mv c模式等相關概念和技術

    基于J2EE的物流信息系統的設計與實現 介紹了J2EE 體系結構、Mv c模式等相關概念和技術,并重點探討了 目 前比 較受歡迎的三種開源框架( s t r ut s框架、S Pr i n g框架和H i b e m a t e 框架)。 分析了他們的體系結構、 特點和優缺點。 根據J ZE E的分層結構,結合We b應用 的特點, 將三種框架進行組合設計, 即表現層用S t r ut s框架、 業務邏輯層用S P ri n g 框架、持久層用比b ema t e 框架,從而來構建物流信息系統。這種整合框架使各 層相對獨立, 減少各層之間的禍合程度,同時加快了系統的開發過程,增強了系 統的可維護性和可擴展性,初步達到了分布式物流信息系統的設計目標。 經過以上分析,結合物流系統的業務需求,進行了相關的實現。最后,系統 運用先進的A ja x技術來增強Ui層與服務器的異步通信能力, 使用戶體驗到動態 且響應靈 敏的桌 面級w e b應用程序。 通過江聯公司的試運行結果,系統達到了 渝瞇。 并 且 對 江 聯 公 司 提 出 了 基 于 R F I D 的 解 決 方 案 的 實 施 計 劃 。

    標簽: J2EE 物流信息 模式

    上傳時間: 2016-06-01

    上傳用戶:ynsnjs

  • 在GIS領域中

    在GIS領域中,目前正有一新興的架構模式產生,此架構改變了GIS處理圖資的方式,此架構模式稱為DGIS(Distributed GIS-分散式地理資訊系統)。DGIS將傳統桌上型單機作業之GIS概念延伸至網際網路(Web)之解決方案上,以能符合現行系統圖資處理之需求。而此種以分散式概念延伸至網際網路的架構稱之為網際網路地理資訊系統(WebGIS或Internet GIS)。

    標簽: GIS

    上傳時間: 2014-01-17

    上傳用戶:dongbaobao

  • 這本書是多年來我對專業程式員所做的C++ 教學課程下的一個自然產物。我發現

    這本書是多年來我對專業程式員所做的C++ 教學課程下的一個自然產物。我發現,大部份學生在一個星期的密集訓練之後,即可適應這個語言的基本架構,但要他們「將這些基礎架構以有效的方式組合運用」,我實在不感樂觀。於是我開始嘗試組織出一些簡短、明確、容易記憶的準則,做為C++ 高實效性程式開發過程之用。那都是經驗豐富的C++ 程式員幾乎總是會奉行或幾乎肯定要避免的一些事情。structures of computer science.

    標簽: 程式

    上傳時間: 2016-10-13

    上傳用戶:362279997

主站蜘蛛池模板: 莒南县| 井冈山市| 即墨市| 西乌| 响水县| 金川县| 扎赉特旗| 林口县| 青海省| 吴桥县| 依安县| 元阳县| 太保市| 三穗县| 乐昌市| 巫溪县| 页游| 广河县| 固镇县| 巴楚县| 吕梁市| 历史| 东乡县| 霍城县| 安化县| 长海县| 嘉荫县| 金湖县| 丹寨县| 开远市| 清镇市| 莲花县| 安阳市| 曲阳县| 涞源县| 石门县| 革吉县| 安宁市| 同德县| 成武县| 米易县|