隨著經(jīng)濟(jì)的發(fā)展,生活節(jié)奏的加快以及信息技術(shù)的進(jìn)步,人們越來越多的借助高性能的移動手持設(shè)備來完成日常工作,目前手持設(shè)備處理性能有了很大的提高,其所能處理的數(shù)據(jù)量也越來越大,傳統(tǒng)的文件系統(tǒng)管理數(shù)據(jù)方式已經(jīng)越來越滿足不了需求,嵌入式數(shù)據(jù)庫就隨之誕生,為手持設(shè)備提供專業(yè)的數(shù)據(jù)管理。嵌入式數(shù)據(jù)庫的輕量級、被軟件產(chǎn)品包含、無需人工數(shù)據(jù)庫管理等特點使其適合被應(yīng)用于各類嵌入式系統(tǒng)及手持設(shè)備中。使用嵌入式數(shù)據(jù)庫與使用文件系統(tǒng)進(jìn)行客戶端數(shù)據(jù)管理相比更加靈活方便、可以高效地實時更新客戶端本地數(shù)據(jù)。使用數(shù)據(jù)庫完成大量數(shù)據(jù)的存儲和管理,同圖形界面軟件結(jié)合構(gòu)成嵌入式系統(tǒng)應(yīng)用開發(fā)的支撐系統(tǒng)。 SQLite數(shù)據(jù)庫作為一種開源的嵌入式數(shù)據(jù)庫,具有體積小,速度快,存儲量大,API使用方便等諸多的優(yōu)點,目前已經(jīng)成為被廣泛應(yīng)用的嵌入式數(shù)據(jù)庫之一。同樣的,嵌入式圖形界面MINIGUI的開源版本也具有體積小,控件比較豐富,編程難度不高等優(yōu)點,受到廣大嵌入式開發(fā)者的喜愛。 本文的主要任務(wù)是將MINIGUI和SQLite進(jìn)行有針對的裁剪或添加部分功能后移植到開發(fā)板上,然后將圖形界面和數(shù)據(jù)庫相結(jié)合在arm—linux平臺上建立一個具有基本功能的嵌入式信息管理系統(tǒng)。首先分析了系統(tǒng)所使用的硬件平臺并研究了軟件環(huán)境的搭建過程,包括移植Bootloader、移植linux內(nèi)核、建立NFS網(wǎng)絡(luò)文件系統(tǒng)進(jìn)行程序調(diào)試,然后分別給出了嵌入式圖形界面MINIGUI和嵌入式數(shù)據(jù)庫SQLite移植到開發(fā)板的過程和它們各自的開發(fā)技術(shù),最后詳細(xì)研究了如何在MINIGUI中連接SQLite數(shù)據(jù)庫,從而將二者結(jié)合起來編程以實現(xiàn)本系統(tǒng)并給出了系統(tǒng)在開發(fā)過程中所遇到的關(guān)鍵問題的解決方案,包括屏幕旋轉(zhuǎn)及校正、設(shè)計軟鍵盤進(jìn)行屏幕輸入、利用SQLite存儲圖片文件。從而證明了當(dāng)前條件下在嵌入式系統(tǒng)中實現(xiàn)一個比較簡單的信息管理系統(tǒng)是完全可行的。最后討論了該領(lǐng)域存在的一些問題和今后需要進(jìn)一步研究的課題。
標(biāo)簽: ARMLinux 嵌入式 信息管理系統(tǒng)
上傳時間: 2013-07-10
上傳用戶:visit8888
三維彩色信息獲取系統(tǒng)目的是獲取對象的三維空間坐標(biāo)和顏色信息。它是計算機(jī)視覺研究的重要內(nèi)容,也是當(dāng)前信息科學(xué)研究中的一個重要熱點。 本文首先介紹了三維信息獲取技術(shù)的意義和實時可重構(gòu)三維激光彩色信息獲取系統(tǒng)總體方案。該方案合理劃分了系統(tǒng)的圖像處理任務(wù),充分地利用了擁有的硬、軟件資源。闡述了基于FPGA處理器的硬件系統(tǒng)結(jié)構(gòu)及其工作原理和系統(tǒng)工作時序。 本文還研究了圖像處理系統(tǒng)中的數(shù)字邏輯設(shè)計,總結(jié)出了較完整、規(guī)范化的設(shè)計流程和方法,介紹了從圖像處理算法到可編程邏輯器件的規(guī)范化映射方法,總結(jié)了在視頻系統(tǒng)中的高級設(shè)計技巧,包括并行流水線技術(shù)和循環(huán)結(jié)構(gòu)的硬件實現(xiàn)方式等。 為了說明提出的設(shè)計方法,本文分析了基于自適應(yīng)閾值的結(jié)構(gòu)光條紋中心的方向模板快速檢測算法的硬件實現(xiàn)。該算法是把自適應(yīng)閾值法與可變方向模板法相結(jié)合,具有穩(wěn)定性好、精度高、計算簡單、數(shù)據(jù)存儲量小、實現(xiàn)速度快的特點,此外,該方法有利于硬件快速實現(xiàn)。實踐證明這種方法是實用的、有效的。 本文的重點在于研制了具有完全自主知識產(chǎn)權(quán)的實時可重構(gòu)三維激光彩色信息獲取系統(tǒng)中視頻圖像處理專用集成電路。該集成電路是實現(xiàn)系統(tǒng)快速算法的核心,使用現(xiàn)場可編程器FPGA器件EPlK50實現(xiàn)提取激光線、提取人頭輪廓線和提取中心顏色線算法;該集成電路還要實現(xiàn)系統(tǒng)所需的控制邏輯??刂撇糠职▽⒁曨l采集輸出端口信號轉(zhuǎn)化為RGB真彩色信號的數(shù)據(jù)鎖存模塊、各FIFO緩存器的輸入輸出控制模塊和系統(tǒng)需要的其它信號控制模塊。提出提取輪廓線快速算法,即由FPGA處理器與主機(jī)交互式共同快速完成提取人頭正側(cè)影輪廓線算法。該專用集成電路研制是整個實時可重構(gòu)三維激光彩色信息獲取系統(tǒng)實現(xiàn)的關(guān)鍵。
標(biāo)簽:
上傳時間: 2013-07-23
上傳用戶:lguotao
針對高頻感應(yīng)加熱電源中用傳統(tǒng)的模擬鎖相環(huán)跟蹤頻率所存在的問題,提出一種非常適合于高頻感應(yīng)加熱的\r\n新型的數(shù)字鎖相環(huán)。使用FPGA 內(nèi)底層嵌入功能單元中的數(shù)字鎖相環(huán)74HCT297 ,并添加少量的數(shù)字電路來實現(xiàn)。最后利\r\n用仿真波形驗證該設(shè)計的合理性和有效性。整個設(shè)計負(fù)載范圍寬、鎖相時間短,現(xiàn)已成功應(yīng)用于100 kHz/ 30 kW 的感應(yīng)加\r\n熱電源中。
標(biāo)簽: 高頻感應(yīng) 加熱電源 模擬鎖相環(huán) 頻率
上傳時間: 2013-08-22
上傳用戶:nairui21
關(guān)于數(shù)字鎖相環(huán)的一點東西,可以下來看看\r\n
標(biāo)簽: 數(shù)字鎖相環(huán)
上傳時間: 2013-08-26
上傳用戶:7891
1.?dāng)?shù)據(jù)管理:包括司機(jī)基本信息、汽車基本信息、車輛事故信息、車輛維修信\r\n息等的管理;\r\n2.派車運營記錄管理:登記派車的情況、進(jìn)行派車修改;\r\n來確定庫存是否有需要的車型,為賣車做好準(zhǔn)備;\r\n3.查詢管理:能夠根據(jù)車輛編號和派車日期查詢當(dāng)日的派車情況,并能進(jìn)行統(tǒng)\r\n計派車次數(shù)等;\r\n 4.系統(tǒng)管理:用戶管理和系統(tǒng)退出等。\r\n
標(biāo)簽: 數(shù)據(jù)管理 汽車
上傳時間: 2013-09-09
上傳用戶:wanqunsheng
在理論模型的基礎(chǔ)上探討了電子勢壘的形狀以及勢壘形狀隨外加電壓的變化, 并進(jìn)行定量計算, 得出隧穿電壓隨雜質(zhì)摻雜濃度的變化規(guī)律。所得結(jié)論與硅、鍺p-n 結(jié)實驗數(shù)據(jù)相吻合, 證明了所建立的理論模型在定量 研究p-n 結(jié)的隧道擊穿中的合理性與實用性。該理論模型對研究一般材料或器件的隧道擊穿具有重要的借鑒意義。
上傳時間: 2013-10-31
上傳用戶:summery
摘要: 介紹了時鐘分相技術(shù)并討論了時鐘分相技術(shù)在高速數(shù)字電路設(shè)計中的作用。 關(guān)鍵詞: 時鐘分相技術(shù); 應(yīng)用 中圖分類號: TN 79 文獻(xiàn)標(biāo)識碼:A 文章編號: 025820934 (2000) 0620437203 時鐘是高速數(shù)字電路設(shè)計的關(guān)鍵技術(shù)之一, 系統(tǒng)時鐘的性能好壞, 直接影響了整個電路的 性能。尤其現(xiàn)代電子系統(tǒng)對性能的越來越高的要求, 迫使我們集中更多的注意力在更高頻率、 更高精度的時鐘設(shè)計上面。但隨著系統(tǒng)時鐘頻率的升高。我們的系統(tǒng)設(shè)計將面臨一系列的問 題。 1) 時鐘的快速電平切換將給電路帶來的串?dāng)_(Crosstalk) 和其他的噪聲。 2) 高速的時鐘對電路板的設(shè)計提出了更高的要求: 我們應(yīng)引入傳輸線(T ransm ission L ine) 模型, 并在信號的匹配上有更多的考慮。 3) 在系統(tǒng)時鐘高于100MHz 的情況下, 應(yīng)使用高速芯片來達(dá)到所需的速度, 如ECL 芯 片, 但這種芯片一般功耗很大, 再加上匹配電阻增加的功耗, 使整個系統(tǒng)所需要的電流增大, 發(fā) 熱量增多, 對系統(tǒng)的穩(wěn)定性和集成度有不利的影響。 4) 高頻時鐘相應(yīng)的電磁輻射(EM I) 比較嚴(yán)重。 所以在高速數(shù)字系統(tǒng)設(shè)計中對高頻時鐘信號的處理應(yīng)格外慎重, 盡量減少電路中高頻信 號的成分, 這里介紹一種很好的解決方法, 即利用時鐘分相技術(shù), 以低頻的時鐘實現(xiàn)高頻的處 理。 1 時鐘分相技術(shù) 我們知道, 時鐘信號的一個周期按相位來分, 可以分為360°。所謂時鐘分相技術(shù), 就是把 時鐘周期的多個相位都加以利用, 以達(dá)到更高的時間分辨。在通常的設(shè)計中, 我們只用到時鐘 的上升沿(0 相位) , 如果把時鐘的下降沿(180°相位) 也加以利用, 系統(tǒng)的時間分辨能力就可以 提高一倍(如圖1a 所示)。同理, 將時鐘分為4 個相位(0°、90°、180°和270°) , 系統(tǒng)的時間分辨就 可以提高為原來的4 倍(如圖1b 所示)。 以前也有人嘗試過用專門的延遲線或邏輯門延時來達(dá)到時鐘分相的目的。用這種方法產(chǎn)生的相位差不夠準(zhǔn)確, 而且引起的時間偏移(Skew ) 和抖動 (J itters) 比較大, 無法實現(xiàn)高精度的時間分辨。 近年來半導(dǎo)體技術(shù)的發(fā)展, 使高質(zhì)量的分相功能在一 片芯片內(nèi)實現(xiàn)成為可能, 如AMCC 公司的S4405, CY2 PRESS 公司的CY9901 和CY9911, 都是性能優(yōu)異的時鐘 芯片。這些芯片的出現(xiàn), 大大促進(jìn)了時鐘分相技術(shù)在實際電 路中的應(yīng)用。我們在這方面作了一些嘗試性的工作: 要獲得 良好的時間性能, 必須確保分相時鐘的Skew 和J itters 都 比較小。因此在我們的設(shè)計中, 通常用一個低頻、高精度的 晶體作為時鐘源, 將這個低頻時鐘通過一個鎖相環(huán)(PLL ) , 獲得一個較高頻率的、比較純凈的時鐘, 對這個時鐘進(jìn)行分相, 就可獲得高穩(wěn)定、低抖動的分 相時鐘。 這部分電路在實際運用中獲得了很好的效果。下面以應(yīng)用的實例加以說明。2 應(yīng)用實例 2. 1 應(yīng)用在接入網(wǎng)中 在通訊系統(tǒng)中, 由于要減少傳輸 上的硬件開銷, 一般以串行模式傳輸 圖3 時鐘分為4 個相位 數(shù)據(jù), 與其同步的時鐘信號并不傳輸。 但本地接收到數(shù)據(jù)時, 為了準(zhǔn)確地獲取 數(shù)據(jù), 必須得到數(shù)據(jù)時鐘, 即要獲取與數(shù) 據(jù)同步的時鐘信號。在接入網(wǎng)中, 數(shù)據(jù)傳 輸?shù)慕Y(jié)構(gòu)如圖2 所示。 數(shù)據(jù)以68MBös 的速率傳輸, 即每 個bit 占有14. 7ns 的寬度, 在每個數(shù)據(jù) 幀的開頭有一個用于同步檢測的頭部信息。我們要找到與它同步性好的時鐘信號, 一般時間 分辨應(yīng)該達(dá)到1ö4 的時鐘周期。即14. 7ö 4≈ 3. 7ns, 這就是說, 系統(tǒng)時鐘頻率應(yīng)在300MHz 以 上, 在這種頻率下, 我們必須使用ECL inp s 芯片(ECL inp s 是ECL 芯片系列中速度最快的, 其 典型門延遲為340p s) , 如前所述, 這樣對整個系統(tǒng)設(shè)計帶來很多的困擾。 我們在這里使用鎖相環(huán)和時鐘分相技術(shù), 將一個16MHz 晶振作為時鐘源, 經(jīng)過鎖相環(huán) 89429 升頻得到68MHz 的時鐘, 再經(jīng)過分相芯片AMCCS4405 分成4 個相位, 如圖3 所示。 我們只要從4 個相位的68MHz 時鐘中選擇出與數(shù)據(jù)同步性最好的一個。選擇的依據(jù)是: 在每個數(shù)據(jù)幀的頭部(HEAD) 都有一個8bit 的KWD (KeyWord) (如圖1 所示) , 我們分別用 這4 個相位的時鐘去鎖存數(shù)據(jù), 如果經(jīng)某個時鐘鎖存后的數(shù)據(jù)在這個指定位置最先檢測出這 個KWD, 就認(rèn)為下一相位的時鐘與數(shù)據(jù)的同步性最好(相關(guān))。 根據(jù)這個判別原理, 我們設(shè)計了圖4 所示的時鐘分相選擇電路。 在板上通過鎖相環(huán)89429 和分相芯片S4405 獲得我們所要的68MHz 4 相時鐘: 用這4 個 時鐘分別將輸入數(shù)據(jù)進(jìn)行移位, 將移位的數(shù)據(jù)與KWD 作比較, 若至少有7bit 符合, 則認(rèn)為檢 出了KWD。將4 路相關(guān)器的結(jié)果經(jīng)過優(yōu)先判選控制邏輯, 即可輸出同步性最好的時鐘。這里, 我們運用AMCC 公司生產(chǎn)的 S4405 芯片, 對68MHz 的時鐘進(jìn)行了4 分 相, 成功地實現(xiàn)了同步時鐘的獲取, 這部分 電路目前已實際地應(yīng)用在某通訊系統(tǒng)的接 入網(wǎng)中。 2. 2 高速數(shù)據(jù)采集系統(tǒng)中的應(yīng)用 高速、高精度的模擬- 數(shù)字變換 (ADC) 一直是高速數(shù)據(jù)采集系統(tǒng)的關(guān)鍵部 分。高速的ADC 價格昂貴, 而且系統(tǒng)設(shè)計 難度很高。以前就有人考慮使用多個低速 圖5 分相技術(shù)應(yīng)用于采集系統(tǒng) ADC 和時鐘分相, 用以替代高速的ADC, 但由 于時鐘分相電路產(chǎn)生的相位不準(zhǔn)確, 時鐘的 J itters 和Skew 比較大(如前述) , 容易產(chǎn)生較 大的孔徑晃動(Aperture J itters) , 無法達(dá)到很 好的時間分辨。 現(xiàn)在使用時鐘分相芯片, 我們可以把分相 技術(shù)應(yīng)用在高速數(shù)據(jù)采集系統(tǒng)中: 以4 分相后 圖6 分相技術(shù)提高系統(tǒng)的數(shù)據(jù)采集率 的80MHz 采樣時鐘分別作為ADC 的 轉(zhuǎn)換時鐘, 對模擬信號進(jìn)行采樣, 如圖5 所示。 在每一采集通道中, 輸入信號經(jīng)過 緩沖、調(diào)理, 送入ADC 進(jìn)行模數(shù)轉(zhuǎn)換, 采集到的數(shù)據(jù)寫入存儲器(M EM )。各個 采集通道采集的是同一信號, 不過采樣 點依次相差90°相位。通過存儲器中的數(shù) 據(jù)重組, 可以使系統(tǒng)時鐘為80MHz 的采 集系統(tǒng)達(dá)到320MHz 數(shù)據(jù)采集率(如圖6 所示)。 3 總結(jié) 靈活地運用時鐘分相技術(shù), 可以有效地用低頻時鐘實現(xiàn)相當(dāng)于高頻時鐘的時間性能, 并 避免了高速數(shù)字電路設(shè)計中一些問題, 降低了系統(tǒng)設(shè)計的難度。
標(biāo)簽: 時鐘 分相 技術(shù)應(yīng)用
上傳時間: 2013-12-17
上傳用戶:xg262122
隨著我國通信、電力事業(yè)的發(fā)展,通信、電力網(wǎng)絡(luò)的規(guī)模越來越大,系統(tǒng)越來越復(fù)雜。與之相應(yīng)的對交流供電的可靠性、靈活性、智能化、免維護(hù)越來越重要。在中國通信、電力網(wǎng)絡(luò)中,傳統(tǒng)的交流供電方案是以UPS或單機(jī)式逆變器提供純凈不間斷的交流電源。由于控制技術(shù)的進(jìn)步、完善,(N+X)熱插拔模塊并聯(lián)逆變電源已經(jīng)非常成熟、可靠;在歐美的通信、電力發(fā)達(dá)的國家,各大通信運營商、電力供應(yīng)商、軍隊均大量應(yīng)用了這種更合理的供電方案。與其它方案相比較,(N+X)熱插拔模塊并聯(lián)逆變電源具有以下明顯的優(yōu)點。
標(biāo)簽: 熱插拔 模塊 并聯(lián) 應(yīng)用前景
上傳時間: 2014-03-24
上傳用戶:alan-ee
c語言編程軟件vc6.0使用教程,附件包含二個教程文件,VC++6.0培訓(xùn)教程完整版及VC6.0介紹。 Visual C++ 6.0,簡稱VC或者VC6.0,是微軟的一款C++編譯器,將“高級語言”翻譯為“機(jī)器語言(低級語言)”的程序。Visual C++是一個功能強大的可視化軟件開發(fā)工具。自1993年Microsoft公司推出Visual C++1.0后,隨著其新版本的不斷問世,Visual C++已成為專業(yè)程序員進(jìn)行軟件開發(fā)的首選工具。雖然微軟公司推出了 Visual C++.NET(Visual C++7.0),但它的應(yīng)用有很大的局限性,只適用于Windows 2000、Windows XP和Windows NT4.0。所以實際中,更多的是以Visual C++6.0為平臺。 vc6.0使用你首先要打開VC6.0界面,一般用得較多的是Win32控制臺應(yīng)用程序(源程序,擴(kuò)展名.cpp), 步驟是:(先工程—后文件—編譯—連接---運行) 1,建立一個工程,“文件”——“新建”,出現(xiàn)下面界面:選擇“Win32 Console Application”(控制臺應(yīng)用程序,左邊倒數(shù)第三個),命名工程名稱,選擇保存位置。 點擊“確定”,進(jìn)入下一步,看到如下提示界面: 建立一個空工程,對應(yīng)其他需要的你一可以建立別的工程;點擊“完成”,之后 顯示你創(chuàng)建的工程的信息。 2,再在有一個的工程的條件下,我們再建立一個源文件; “文件”——“新建”(快捷鍵Ctri+N),出現(xiàn): 建立源文件,選擇“C++ Source ”,一般都是建立這種文件的(適用在當(dāng)文件中適用)如果要建立頭文件的話,選擇“C/C++ Header File”,(適用在多文件工程中使用)命名,文件名稱,點擊“確定”,之后: 進(jìn)入編輯區(qū),在主界面編寫代碼:如下編寫完之后呢: 可以按編譯按鈕 調(diào)試程序,看看有沒有錯誤,有的話改正,沒有的話就可以再按連接按鈕 檢查連接(多文件工程時常用,檢查文件間是否正常連接),最后,點運行按鈕 ,就可以運行了。 如果是您有代碼如:cpp文件,或 .h 文件,想添加都VC6.0里來測試的話,可以這樣做: 首先,要理解一下 文件擴(kuò)展名為:cpp和.h 文件擴(kuò)張名是.h,代表的是頭文件,一般是書寫一些函數(shù)原型,以及一些在整個程序中常用到的結(jié)構(gòu)體,頻繁使用的函數(shù)說明,定義等等; 文件擴(kuò)張名為,cpp的,是C++中的源文件,也是最常用到的文件,每建立一個工程都要至少一個源文件(至少要有一個函數(shù)入口——主函數(shù)main() ),包含了核心代碼; 建立與運行說明:(以VC 6.0編譯器為例,其他編譯器類似) 首先,打開VC 6.0編譯環(huán)境; 在菜單欄——文件(的下拉菜單中選擇“新建”),在彈出的選擇窗口中,選擇 Win32 Console Application(控制臺應(yīng)用程序) ,在填寫工程名稱,選擇一個程序保存路徑, 點擊“完成”,查看工程信息。 在點擊“確定”,就建立一個簡單的工程了。 再點擊左邊的工程信息右下角的“FileView”選項; 可以看到你新建的工程,再雙擊你新建的工程名 可以查看工程的信息。 在雙擊工程文件,在這里是 777.files,可以看到該工程的包含的文件。 其中,Source Files 為包含所有工程的源文件 Header Files 為包含所有工程的頭文件 在源文件選項“Source Files ”,右鍵單擊中的“添加目錄到工程”,添加你要打開的擴(kuò)展名為 .cpp的源文件。在頭文件選項“ Header Files”,右鍵單擊中的“添加目錄到工程”,添加你要打開的擴(kuò)展名為 . h的頭文件。添加完你所有的頭文件和源文件之后,檢查一下是否添加完畢,之后就可以編譯了。 其中第一個按鈕 為編譯按鈕,可以找出工程的錯誤信息,有錯誤修改,沒錯誤就可以跳到連接 ,編譯右邊的按鈕 ,即第三個按鈕(多文件工程一定要連接,查看文件是否準(zhǔn)確相連接) 當(dāng)編譯,連接都沒有錯誤時,可以按運行按鈕 ,即可以運行了。 相關(guān)資料:vc6.0中文綠色版下載
上傳時間: 2013-10-30
上傳用戶:tianjinfan
九.輸入/輸出保護(hù)為了支持多任務(wù),80386不僅要有效地實現(xiàn)任務(wù)隔離,而且還要有效地控制各任務(wù)的輸入/輸出,避免輸入/輸出沖突。本文將介紹輸入輸出保護(hù)。 這里下載本文源代碼。 <一>輸入/輸出保護(hù)80386采用I/O特權(quán)級IPOL和I/O許可位圖的方法來控制輸入/輸出,實現(xiàn)輸入/輸出保護(hù)。 1.I/O敏感指令輸入輸出特權(quán)級(I/O Privilege Level)規(guī)定了可以執(zhí)行所有與I/O相關(guān)的指令和訪問I/O空間中所有地址的最外層特權(quán)級。IOPL的值在如下圖所示的標(biāo)志寄存器中。 標(biāo) 志寄存器 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許可位圖規(guī)定了I/O空間中的哪些地址可以由在任何特權(quán)級執(zhí)行的程序所訪問。I/O許可位圖在任務(wù)狀態(tài)段TSS中。 I/O敏感指令 指令 功能 保護(hù)方式下的執(zhí)行條件 CLI 清除EFLAGS中的IF位 CPL<=IOPL STI 設(shè)置EFLAGS中的IF位 CPL<=IOPL IN 從I/O地址讀出數(shù)據(jù) CPL<=IOPL或I/O位圖許可 INS 從I/O地址讀出字符串 CPL<=IOPL或I/O位圖許可 OUT 向I/O地址寫數(shù)據(jù) CPL<=IOPL或I/O位圖許可 OUTS 向I/O地址寫字符串 CPL<=IOPL或I/O位圖許可 上表所列指令稱為I/O敏感指令,由于這些指令與I/O有關(guān),并且只有在滿足所列條件時才可以執(zhí)行,所以把它們稱為I/O敏感指令。從表中可見,當(dāng)前特權(quán)級不在I/O特權(quán)級外層時,可以正常執(zhí)行所列的全部I/O敏感指令;當(dāng)特權(quán)級在I/O特權(quán)級外層時,執(zhí)行CLI和STI指令將引起通用保護(hù)異常,而其它四條指令是否能夠被執(zhí)行要根據(jù)訪問的I/O地址及I/O許可位圖情況而定(在下面論述),如果條件不滿足而執(zhí)行,那么將引起出錯碼為0的通用保護(hù)異常。 由于每個任務(wù)使用各自的EFLAGS值和擁有自己的TSS,所以每個任務(wù)可以有不同的IOPL,并且可以定義不同的I/O許可位圖。注意,這些I/O敏感指令在實模式下總是可執(zhí)行的。 2.I/O許可位圖如果只用IOPL限制I/O指令的執(zhí)行是很不方便的,不能滿足實際要求需要。因為這樣做會使得在特權(quán)級3執(zhí)行的應(yīng)用程序要么可訪問所有I/O地址,要么不可訪問所有I/O地址。實際需要與此剛好相反,只允許任務(wù)甲的應(yīng)用程序訪問部分I/O地址,只允許任務(wù)乙的應(yīng)用程序訪問另一部分I/O地址,以避免任務(wù)甲和任務(wù)乙在訪問I/O地址時發(fā)生沖突,從而避免任務(wù)甲和任務(wù)乙使用使用獨享設(shè)備時發(fā)生沖突。 因此,在IOPL的基礎(chǔ)上又采用了I/O許可位圖。I/O許可位圖由二進(jìn)制位串組成。位串中的每一位依次對應(yīng)一個I/O地址,位串的第0位對應(yīng)I/O地址0,位串的第n位對應(yīng)I/O地址n。如果位串中的第位為0,那么對應(yīng)的I/O地址m可以由在任何特權(quán)級執(zhí)行的程序訪問;否則對應(yīng)的I/O地址m只能由在IOPL特權(quán)級或更內(nèi)層特權(quán)級執(zhí)行的程序訪問。如果在I/O外層特權(quán)級執(zhí)行的程序訪問位串中位值為1的位所對應(yīng)的I/O地址,那么將引起通用保護(hù)異常。 I/O地址空間按字節(jié)進(jìn)行編址。一條I/O指令最多可涉及四個I/O地址。在需要根據(jù)I/O位圖決定是否可訪問I/O地址的情況下,當(dāng)一條I/O指令涉及多個I/O地址時,只有這多個I/O地址所對應(yīng)的I/O許可位圖中的位都為0時,該I/O指令才能被正常執(zhí)行,如果對應(yīng)位中任一位為1,就會引起通用保護(hù)異常。 80386支持的I/O地址空間大小是64K,所以構(gòu)成I/O許可位圖的二進(jìn)制位串最大長度是64K個位,即位圖的有效部分最大為8K字節(jié)。一個任務(wù)實際需要使用的I/O許可位圖大小通常要遠(yuǎn)小于這個數(shù)目。 當(dāng)前任務(wù)使用的I/O許可位圖存儲在當(dāng)前任務(wù)TSS中低端的64K字節(jié)內(nèi)。I/O許可位圖總以字節(jié)為單位存儲,所以位串所含的位數(shù)總被認(rèn)為是8的倍數(shù)。從前文中所述的TSS格式可見,TSS內(nèi)偏移66H的字確定I/O許可位圖的開始偏移。由于I/O許可位圖最長可達(dá)8K字節(jié),所以開始偏移應(yīng)小于56K,但必須大于等于104,因為TSS中前104字節(jié)為TSS的固定格式,用于保存任務(wù)的狀態(tài)。 1.I/O訪問許可檢查細(xì)節(jié)保護(hù)模式下處理器在執(zhí)行I/O指令時進(jìn)行許可檢查的細(xì)節(jié)如下所示。 (1)若CPL<=IOPL,則直接轉(zhuǎn)步驟(8);(2)取得I/O位圖開始偏移;(3)計算I/O地址對應(yīng)位所在字節(jié)在I/O許可位圖內(nèi)的偏移;(4)計算位偏移以形成屏蔽碼值,即計算I/O地址對應(yīng)位在字節(jié)中的第幾位;(5)把字節(jié)偏移加上位圖開始偏移,再加1,所得值與TSS界限比較,若越界,則產(chǎn)生出錯碼為0的通用保護(hù)故障;(6)若不越界,則從位圖中讀對應(yīng)字節(jié)及下一個字節(jié);(7)把讀出的兩個字節(jié)與屏蔽碼進(jìn)行與運算,若結(jié)果不為0表示檢查未通過,則產(chǎn)生出錯碼為0的通用保護(hù)故障;(8)進(jìn)行I/O訪問。設(shè)某一任務(wù)的TSS段如下: TSSSEG SEGMENT PARA USE16 TSS <> ;TSS低端固定格式部分 DB 8 DUP(0) ;對應(yīng)I/O端口00H—3FH DB 10000000B ;對應(yīng)I/O端口40H—47H DB 01100000B ;對用I/O端口48H—4FH DB 8182 DUP(0ffH) ;對應(yīng)I/O端口50H—0FFFFH DB 0FFH ;位圖結(jié)束字節(jié)TSSLen = $TSSSEG ENDS 再假設(shè)IOPL=1,CPL=3。那么如下I/O指令有些能正常執(zhí)行,有些會引起通用保護(hù)異常: in al,21h ;(1)正常執(zhí)行 in al,47h ;(2)引起異常 out 20h,al ;(3)正常實行 out 4eh,al ;(4)引起異常 in al,20h ;(5)正常執(zhí)行 out 20h,eax ;(6)正常執(zhí)行 out 4ch,ax ;(7)引起異常 in ax,46h ;(8)引起異常 in eax,42h ;(9)正常執(zhí)行 由上述I/O許可檢查的細(xì)節(jié)可見,不論是否必要,當(dāng)進(jìn)行許可位檢查時,80386總是從I/O許可位圖中讀取兩個字節(jié)。目的是為了盡快地執(zhí)行I/O許可檢查。一方面,常常要讀取I/O許可位圖的兩個字節(jié)。例如,上面的第(8)條指令要對I/O位圖中的兩個位進(jìn)行檢查,其低位是某個字節(jié)的最高位,高位是下一個字節(jié)的最低位??梢娂词怪灰獧z查兩個位,也可能需要讀取兩個字節(jié)。另一方面,最多檢查四個連續(xù)的位,即最多也只需讀取兩個字節(jié)。所以每次要讀取兩個字節(jié)。這也是在判別是否越界時再加1的原因。為此,為了避免在讀取I/O許可位圖的最高字節(jié)時產(chǎn)生越界,必須在I/O許可位圖的最后填加一個全1的字節(jié),即0FFH。此全1的字節(jié)應(yīng)填加在最后一個位圖字節(jié)之后,TSS界限范圍之前,即讓填加的全1字節(jié)在TSS界限之內(nèi)。 I/O許可位圖開始偏移加8K所得的值與TSS界限值二者中較小的值決定I/O許可位圖的末端。當(dāng)TSS的界限大于I/O許可位圖開始偏移加8K時,I/O許可位圖的有效部分就有8K字節(jié),I/O許可檢查全部根據(jù)全部根據(jù)該位圖進(jìn)行。當(dāng)TSS的界限不大于I/O許可位圖開始偏移加8K時,I/O許可位圖有效部分就不到8K字節(jié),于是對較小I/O地址訪問的許可檢查根據(jù)位圖進(jìn)行,而對較大I/O地址訪問的許可檢查總被認(rèn)為不可訪問而引起通用保護(hù)故障。因為這時會發(fā)生字節(jié)越界而引起通用保護(hù)異常,所以在這種情況下,可認(rèn)為不足的I/O許可位圖的高端部分全為1。利用這個特點,可大大節(jié)約TSS中I/O許可位圖占用的存儲單元,也就大大減小了TSS段的長度。 <二>重要標(biāo)志保護(hù)輸入輸出的保護(hù)與存儲在標(biāo)志寄存器EFLAGS中的IOPL密切相關(guān),顯然不能允許隨便地改變IOPL,否則就不能有效地實現(xiàn)輸入輸出保護(hù)。類似地,對EFLAGS中的IF位也必須加以保護(hù),否則CLI和STI作為敏感指令對待是無意義的。此外,EFLAGS中的VM位決定著處理器是否按虛擬8086方式工作。 80386對EFLAGS中的這三個字段的處理比較特殊,只有在較高特權(quán)級執(zhí)行的程序才能執(zhí)行IRET、POPF、CLI和STI等指令改變它們。下表列出了不同特權(quán)級下對這三個字段的處理情況。 不同特權(quán)級對標(biāo)志寄存器特殊字段的處理 特權(quán)級 VM標(biāo)志字段 IOPL標(biāo)志字段 IF標(biāo)志字段 CPL=0 可變(初POPF指令外) 可變 可變 0 不變 不變 可變 CPL>IOPL 不變 不變 不變 從表中可見,只有在特權(quán)級0執(zhí)行的程序才可以修改IOPL位及VM位;只能由相對于IOPL同級或更內(nèi)層特權(quán)級執(zhí)行的程序才可以修改IF位。與CLI和STI指令不同,在特權(quán)級不滿足上述條件的情況下,當(dāng)執(zhí)行POPF指令和IRET指令時,如果試圖修改這些字段中的任何一個字段,并不引起異常,但試圖要修改的字段也未被修改,也不給出任何特別的信息。此外,指令POPF總不能改變VM位,而PUSHF指令所壓入的標(biāo)志中的VM位總為0。 <三>演示輸入輸出保護(hù)的實例(實例九)下面給出一個用于演示輸入輸出保護(hù)的實例。演示內(nèi)容包括:I/O許可位圖的作用、I/O敏感指令引起的異常和特權(quán)指令引起的異常;使用段間調(diào)用指令CALL通過任務(wù)門調(diào)用任務(wù),實現(xiàn)任務(wù)嵌套。 1.演示步驟實例演示的內(nèi)容比較豐富,具體演示步驟如下:(1)在實模式下做必要準(zhǔn)備后,切換到保護(hù)模式;(2)進(jìn)入保護(hù)模式的臨時代碼段后,把演示任務(wù)的TSS段描述符裝入TR,并設(shè)置演示任務(wù)的堆棧;(3)進(jìn)入演示代碼段,演示代碼段的特權(quán)級是0;(4)通過任務(wù)門調(diào)用測試任務(wù)1。測試任務(wù)1能夠順利進(jìn)行;(5)通過任務(wù)門調(diào)用測試任務(wù)2。測試任務(wù)2演示由于違反I/O許可位圖規(guī)定而導(dǎo)致通用保護(hù)異常;(6)通過任務(wù)門調(diào)用測試任務(wù)3。測試任務(wù)3演示I/O敏感指令如何引起通用保護(hù)異常;(7)通過任務(wù)門調(diào)用測試任務(wù)4。測試任務(wù)4演示特權(quán)指令如何引起通用保護(hù)異常;(8)從演示代碼轉(zhuǎn)臨時代碼,準(zhǔn)備返回實模式;(9)返回實模式,并作結(jié)束處理。
上傳時間: 2013-12-11
上傳用戶:nunnzhy
蟲蟲下載站版權(quán)所有 京ICP備2021023401號-1