這一種方案是沒有緩沖區(qū)的存在,因為用戶進(jìn)程如果讀不到數(shù)據(jù)會阻塞,直到讀到數(shù)據(jù)為止,這種情況效率比較低,而且阻塞式的方式,會直接阻止用戶進(jìn)程做其他事情,這對用戶來說是不能接受的。還有一種情況就是每次用戶進(jìn)程都會重啟,對于每個字符的到來都會重啟用戶進(jìn)程,這種效率會嚴(yán)重降低,所以無緩沖區(qū)的軟件不是一個很好的設(shè)計。
作為一個改良點(diǎn),我們可以嘗試在用戶空間中使用一個能讀取 n 個字節(jié)緩沖區(qū)來讀取 n 個字符。這樣的話,中斷服務(wù)程序會把字符放到緩沖區(qū)中直到緩沖區(qū)變滿為止,然后再去喚醒用戶進(jìn)程。這種方案要比上面的方案改良很多。
在 I/O 中,出錯是一種再正常不過的情況了。當(dāng)出錯發(fā)生時,操作系統(tǒng)盡可能處理這些錯誤。有一些錯誤是只有特定的設(shè)備才能處理,有一些是由框架進(jìn)行處理,這些錯誤和特定的設(shè)備無關(guān)。
I/O 錯誤的一類是程序員編程
錯誤,比如還沒有打開文件前就讀流,或者不關(guān)閉流導(dǎo)致內(nèi)存溢出等等。這類問題由程序員處理;另外一類是實(shí)際的 I/O 錯誤,例如向一個磁盤壞塊寫入數(shù)據(jù),無論怎么寫都寫入不了。這類問題由驅(qū)動程序處理,驅(qū)動程序處理不了交給硬件處理,這個我們上面也說過。
設(shè)備驅(qū)動程序統(tǒng)一接口
我們在操作系統(tǒng)概述中說到,操作系統(tǒng)一個非常重要的功能就是屏蔽了硬件和軟件的差異性,為硬件和軟件提供了統(tǒng)一的標(biāo)準(zhǔn),這個標(biāo)準(zhǔn)還體現(xiàn)在為設(shè)備驅(qū)動程序提供統(tǒng)一的接口,因為不同的硬件和廠商編寫的設(shè)備驅(qū)動程序不同,所以如果為每個驅(qū)動程序都單提供接口的話,這樣沒法搞,所以統(tǒng)一。
開關(guān)量輸入輸出模塊之io模塊就是輸入輸出模塊,i代表輸入,o代表輸出。
分布式I/O模塊是針對測控領(lǐng)域中各種類型標(biāo)準(zhǔn)模擬量和開關(guān)量(頻率、脈沖或開關(guān)狀態(tài)信號)檢測及實(shí)施遠(yuǎn)程控制而研制的一種模塊。
輸入輸出模塊
該系列模塊將被測信號前端數(shù)字化,光纖傳輸至主機(jī);或者將主機(jī)發(fā)送的控制命令傳輸給受控設(shè)備,實(shí)施遠(yuǎn)程控制。
特別適用于電磁環(huán)境復(fù)雜的電力或工控現(xiàn)場開關(guān)柜或大型動力設(shè)備(如電源、空調(diào)、電機(jī)等)的設(shè)備狀態(tài)檢測及控制。
遠(yuǎn)程I/O采集模塊
簡單的講遠(yuǎn)程I/O就是具有通信功能的數(shù)據(jù)采集/傳送模塊,自身沒有控制調(diào)節(jié)功能。只是將現(xiàn)場數(shù)據(jù)送到控制中心(比如PLC),或者接受控制中心的數(shù)據(jù),對現(xiàn)場設(shè)備進(jìn)行控制。通信方式很多,各個廠家都有自己標(biāo)準(zhǔn),比如自由口通信、PROFIBUS、MODBUS等等。舉例:操作臺;操作臺按鈕、指示燈。以往都是采用控制電纜和PLC連接。如果采用了遠(yuǎn)程I/O,就可以通過一條通信線和PLC連接,節(jié)省了布線、節(jié)省了PLC自身的I/O點(diǎn)數(shù)
2198-D020-ERS3
2198-H025-ERS
2198-H070-ERS
22B-D012N104
22B-D1P4N104
22B-D4P0N104
22B變頻器蓋子
22C-D012N103
22C-D017N103
22-COMM-D
22D-D2P3N104
22P-D012N103
22P-D045A103
2302-32 VLE2
248-0AA01-0AA0
249490.1 00 00012710-40 MPC 270
25A-D2P3N104
25B-B024N104
25B-B2P5N104
25B-D2P3N114
25C-D1P4N104
2711-B6C20L1
2711-K10C15
2711-K10G15
2711-NC13
2711-NC21
2711-NM232
2711P-K15C4A2
2711P-RDB7C
2711P-RDK15C
2711P-RDK7C
2711P-RDT10C
2711P-RP8A/ 2711P-RDK7C
2711P-T6C20D
2711P-T6C5A
2711-T10C10
2711-T10C8
2711-T9C8
275 1551
2861603-IB-IL-24-DO-8-2A-PAC
2M20FC
2M26FC
2N122-76
2PU4008-2595
2PU4008-3624
2RAA005844A0004A
2REA010165A0001/A2
2UBA004416R0009 ACS580MV_PEBB_R9
300-392-1AJ00-0AA0
300-392-1AM00-0AA0
30-0759-01
3100-MCM
311637 REV04
311637-A01
31A82D-I0 31BB2B4
320390-A02
330130-040-01-00
34R4BFPP-E4
35-1000C/T-L3-5V 103H7123-6211
3557K024CR
3557K024CS
3615RL-05W-B40
3985T PMPP 3000
3AUA00001397
3BHB003154R0101
3BHB005922R0001 UNS0880a-P.V1
3BHB017688R0001 IPS21-35AD
3BHE009319R0001--UNS.2881B-P.V1
3BHE010751R0101
3BHE014185R0001 UUD148AE01
3BHE014185R0003 UUD148AE03
3BHE014340R2059 PVD164 A2059
3BHE023784R1023 PPD113B01-10-150000
3BHE024855R0101
3BHE039203R0101 3BHB021400R0002
3BHL000389P0104
3BSE010535R1 PM645B
3BSE013212R1 DI831
3BSE018292R1 DSAI130
3DV9JZ01
3G3MX2-AB002-ZV1
3HE03612AARA