九.輸入/輸出保護為了支持多任務,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
load initial_track s; % y:initial data,s:data with noiseT=0.1; % yp denotes the sample value of position% yv denotes the sample value of velocity% Y=[yp(n);yv(n)];% error deviation caused by the random acceleration % known dataY=zeros(2,200);Y0=[0;1];Y(:,1)=Y0;A=[1 T 0 1]; B=[1/2*(T)^2 T]';H=[1 0]; C0=[0 0 0 1];C=[C0 zeros(2,2*199)];Q=(0.25)^2; R=(0.25)^2;
上傳時間: 2014-12-28
上傳用戶:asaqq
Abstract: Designers who must interface 1-Wire temperature sensors with Xilinx field-programmable gate arrays(FPGAs) can use this reference design to drive a DS28EA00 1-Wire slave device. The downloadable softwarementioned in this document can also be used as a starting point to connect other 1-Wire slave devices. The systemimplements a 1-Wire master connected to a UART and outputs temperature to a PC from the DS28EA00 temperaturesensor. In addition, high/low alarm outputs are displayed from the DS28EA00 PIO pins using LEDs.
標簽: PicoBlaze Create Master Xilinx
上傳時間: 2013-11-05
上傳用戶:a6697238
AstroII-EVB-F1K(A)-L144開發板用戶指南
標簽: AstroII-EVB-F 144 開發板 用戶
上傳時間: 2013-11-22
上傳用戶:zhichenglu
Abstract: This application note discusses the development and deployment of 3G cellular femtocell base stations. The technicalchallenges for last-mile residential connectivity and adding system capacity in dense urban environments are discussed, with 3Gfemtocell base stations as a cost-effective solution. Maxim's 3GPP TS25.104-compliant transceiver solution is presented along withcomplete radio reference designs such as RD2550. For more information on the RD2550, see reference design 5364, "FemtocellRadio Reference Designs Using the MAX2550–MAX2553 Transceivers."
標簽: Base-Station Applications Single-Chip Transceiver
上傳時間: 2013-11-07
上傳用戶:songrui
特點 最高輸入頻率 10KHz 顯示范圍0-9999(一段設定)0至999999累積量 計數速度 50/10000脈波/秒可選擇 輸入脈波具有預設刻度功能 累積量同步(批量)或非同步(批次)計數可選擇 數位化指撥設定操作簡易 計數暫時停止功能 1組報警功能 2:主要規格 脈波輸入型式: Jump-pin selectable current sourcing(NPN) or current sinking (PNP) 脈波觸發電位: HI bias (CMOS) (VIH=7.5V, VIL=5.5V) LO bias (TTL) (VIH=3.7V, VIL=2.0V) 最高輸入頻率: <10KHz (up,down,up/down mode) 輸出動作時間 : 0.1 to 99.9 second adjustable 輸出復歸方式: Manual(N) or automatic (R or C) can be modif 繼電器容量: AC 250V-5A, DC 30V-7A 顯示值范圍: 0-9999(PV,SV) 0-999999(TV) 顯示幕: Red high efficiency LEDs high 7.0mm (.276")(PV,SV) Red high efficiency LEDs high 9.2mm (.36")(TV) 參數設定方式: Touch switches 感應器電源: 12VDC +/-3%(<60mA) 記憶方式: Non-volatile E2PROM memory 絕緣耐壓能力: 2KVac/1 min. (input/output/power) 1600Vdc (input/output) 使用環境條件: 0-50℃(20 to 90% RH non-condensed) 存放環境條件: 0-70℃(20 to 90% RH non-condensed) CE認證: EN 55022:1998/A1:2000 Class A EN 61000-3-2:2000 EN 61000-3-3:1995/A1:2001 EN 55024:1998/A1:2001
上傳時間: 2013-10-24
上傳用戶:wvbxj
特點 最高輸入頻率 10KHz 計數速度 50/10000脈波/秒可選擇 四種輸入模式可選擇(加算,減算,加減算,90度相位差加減算) 90度相位差加減算具有提高解析度4倍功能 輸入脈波具有預設刻度功能 計數暫時停止功能 3組報警功能 15BIT類比輸出功能 數位RS-485界面 2:主要規格 脈波輸入型式: Jump-pin selectable current sourcing(NPN) or current sinking (PNP) 脈波觸發電位: HI bias (CMOS) (VIH=7.5V, VIL=5.5V) LO bias (TTL) (VIH=3.7V, VIL=2.0V) 最高輸入頻率: <10KHz (up,down,up/down mode) <3KHz (quadrature mode) 輸出動作時間 : 0.1 to 99.9 second adjustable 輸出復歸方式: Manual(N) or automatic (R or C) can be modif 繼電器容量: AC 250V-5A, DC 30V-7A 顯示值范圍: -199999 to 999999 類比輸出解析度: 15 bit DAC 輸出反應速度: < 1/f+10ms(0-90%) 輸出負載能力: < 10mA for voltage mode < 10V for current mode <[(V+)-7.5V]/20mA for two-wire mode 輸出之漣波: < 0.1% F.S. 通訊位址: "01"-"FF" 傳輸速度: 19200/9600/4800/2400 selective 通信協議: Modbus RTU mode 顯示幕: Red high efficiency LEDs high 14.22mm (.56") 參數設定方式: Touch switches 感應器電源: 12VDC +/-3%(<60mA) 記憶方式: Non-volatile E2PROM memory 絕緣耐壓能力: 2KVac/1 min. (input/output/power) 1600Vdc (input/output) 使用環境條件: 0-50℃(20 to 90% RH non-condensed) 存放環境條件: 0-70℃(20 to 90% RH non-condensed) CE認證: EN 55022:1998/A1:2000 Class A EN 61000-3-2:2000 EN 61000-3-3:1995/A1:2001 EN 55024:1998/A1:2001
上傳時間: 2013-11-23
上傳用戶:redmoons
特點 最高輸入頻率 10KHz 計數速度 50/10000脈波/秒可選擇 四種輸入模式可選擇(加算,減算,加減算,90度相位差加減算) 90度相位差加減算具有提高解析度4倍功能 輸入脈波具有預設刻度功能 前置量設定功能(二段設定)可選擇 數位化指撥設定操作簡易 計數暫時停止功能 3組報警功能 2:主要規格 脈波輸入型式: Jump-pin selectable current sourcing(NPN) or current sinking (PNP) 脈波觸發電位: HI bias (CMOS) (VIH=7.5V, VIL=5.5V) LO bias (TTL) (VIH=3.7V, VIL=2.0V) 最高輸入頻率: <10KHz (up,down,up/down mode) <5KHz (quadrature mode) 輸出動作時間 : 0.1 to 99.9 second adjustable 輸出復歸方式: Manual(N) or automatic (R or C) can be modif 繼電器容量: AC 250V-5A, DC 30V-7A 顯示值范圍: -199999 to 999999 顯示幕: Red high efficiency LEDs high 9.2mm (.36") 參數設定方式: Touch switches 感應器電源: 12VDC +/-3%(<60mA) ( 感應器電源 ) 記憶方式: Non-volatile E2PROM memory 絕緣耐壓能力: 2KVac/1 min. (input/output/power) 1600Vdc (input/output) 使用環境條件: 0-50℃(20 to 90% RH non-condensed) 存放環境條件: 0-70℃(20 to 90% RH non-condensed) CE認證: EN 55022:1998/A1:2000 Class A EN 61000-3-2:2000 EN 61000-3-3:1995/A1:2001 EN 55024:1998/A1:2001
上傳時間: 2013-11-12
上傳用戶:909000580
The Linux Programming Interface - A Linux and UNIX System
標簽: Programming Linux Interface Handbook
上傳時間: 2013-11-10
上傳用戶:asdstation
用MDK 生成bin 文件1用MDK 生成bin 文件Embest 徐良平在RV MDK 中,默認情況下生成*.hex 的可執行文件,但是當我們要生成*.bin 的可執行文件時怎么辦呢?答案是可以使用RVCT 的fromelf.exe 工具進行轉換。也就是說首先將源文件編譯鏈接成*.axf 的文件,然后使用fromelf.exe 工具將*.axf 格式的文件轉換成*.bin格式的文件。下面將具體說明這個操作步驟:1. 打開Axf_To_Bin 文件中的Axf_To_Bin.uv2 工程文件;2. 打開Options for Target ‘Axf_To_Bin’對話框,選擇User 標簽頁;3. 構選Run User Programs After Build/Rebuild 框中的Run #1 多選框,在后邊的文本框中輸入C:\Keil\ARM\BIN31\fromelf.exe --bin -o ./output/Axf_To_Bin.bin ./output/Axf_To_Bin.axf 命令行;4. 重新編譯文件,在./output/文件夾下生成了Axf_To_Bin.bin 文件。在上面的步驟中,有幾點值得注意的是:1. C:\Keil\ARM\BIN31\表示RV MDK 的安裝目錄;2. fromelf.exe 命令的具體語法格式如下:命令的格式為:fromelf [options] input_file命令選項如下:--help 顯示幫助信息--vsn 顯示版本信息--output file 輸出文件(默認的輸出為文本格式)--nodebug 在生成的映象中不包含調試信息--nolinkview 在生成的映象中不包含段的信息二進制輸出格式:--bin 生成Plain Binary 格式的文件--m32 生成Motorola 32 位十六進制格式的文件--i32 生成Intel 32 位十六進制格式的文件--vhx 面向字節的位十六進制格式的文件t--base addr 設置m32,i32 格式文件的基地址--text 顯示文本信息文本信息的標志-v 打印詳細信息-a 打印數據地址(針對帶調試信息的映象)-d 打印數據段的內容-e 打印表達式表print exception tables-f 打印消除虛函數的信息-g 打印調試表print debug tables-r 打印重定位信息-s 打印字符表-t 打印字符串表-y 打印動態段的內容-z 打印代碼和數據大小的信息
上傳時間: 2013-12-17
上傳用戶:AbuGe