Попутно заглянул в драйвер, заполнение остатка блока нулями делается драйвером, что криво и накладно. Это задача контроллера (сервера).
Попутно заглянул в драйвер, заполнение остатка блока нулями делается драйвером, что криво и накладно. Это задача контроллера (сервера).
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
Специально перенёс заполнение нулями из сервера в драйвер, чтобы протокол стал более однозначным - при запросе у сервера чтения одного байта - читается один байт, при запросе записи одного байта - пишется один байт.
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
VM.SYS - драйвер мгновенного действия (и то он как раз из-за этого имеет проблемы в SJ), а что касается MX - у нас полно драйверов криво писали. Но это же не повод перенимать глупости
Ладно бы были трудности, так ведь их нет.
А так, согласись, драйвер который ломает функционал системы - драйвером называться не имеет права
---------- Post added at 14:39 ---------- Previous post was at 14:25 ----------
Наглядный пример потери функционала из-за нерабочести .READ/.READC. Это тупой тест, а я видел достаточно много программ которые выполняли реальную работу во время I/O.
Прога тупо читает 20. блоков с SY: и пока они читаются занимается своими делами (инкрементит счетчик).
На достаточно быстром SCSI на 11/83 имеем (время меньше секунды):Код:.TITLE TIO -- I/O TEST .IDENT /V01.00/ .MCALL .LOOKUP,.READC,.EXIT,.PRINT START:: .LOOKUP #AREA,#0,#DBLK BCC 20$ .PRINT #ERR1 10$: CLR R0 .EXIT 20$: .READC #AREA,#0,#BUFF,#WCNT,#CRTN,#0 BCC 30$ .PRINT #ERR2 BR 10$ 30$: CMP FLAG,#1 BCC 40$ ADC COUNT+2 ADC COUNT BR 30$ 40$: MOV #VALUE,R0 MOV COUNT,R1 MOV PC,R2 CALL $CBOMG MOVB #<',>,(R0)+ MOV COUNT+2,R1 MOV PC,R2 CALL $CBOMG .PRINT #VALUE BR 10$ CRTN:: INC FLAG RETURN COUNT:: .WORD 0,0 FLAG:: .WORD 0 BUFF:: .BLKW 256.*20. WCNT == <.-BUFF>/2 DBLK:: .RAD50 /SY/ .WORD 0,0,0 AREA:: .BLKW 7 VALUE: .ASCIZ /XXXXXX,XXXXXX/ ERR1: .ASCIZ /LOOKUP FAILED/ ERR2: .ASCIZ /READ FAILED/ .END START
На УКНЦ (MZ по прерываниям [что не несет никаких проблем программам, работающим с ПП несмотря на мифы об этом]) получается 167000 с чем-то, время около секунды. А на HX примерно за пол минуты имеем ноль сделанногоКод:.RU TIO 000000,002275 .![]()
Последний раз редактировалось form; 13.01.2013 в 11:28.
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
shattered(13.07.2020)
Мифы читал у Арсения на сайте - там выложена подборка каких-то статей, среди прочего была статья с исходниками драйвера MZ без прерываний и обоснование - мол поскольку работают через одну дырку, драйвер может мешать - глотает прерывания (и соответственно портит содержимое CSR или что-то в этом роде). Теоретически такое возможно например в случае запуска чтения с MZ вышеупомянутыми .READ/.READC и параллельной загрузки кода в ПП. Ну или в случае кривого драйвера (что по-видимому имело место с автором статьй) который не выключает прерывания по завершению I/O.
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
А-а-а-а!!!!! Теперь понял. Смысл состоит в том, что если программа через канал 2 передает блок (а это четыре байта), и в это время произойдет прерывание от драйвера MZ, и он тоже начнет что-то передавать по каналу К2, то собьется синхронизация счетчика драйвера канала 2 в системном ПЗУ ПП. Но вообще-то это невозможно, т.к. последний четвертый байт не читается из К2 со стороны ПП, пока не будет завершена операция. Т.е. если по .READ/.READC что-то запросить и сразу же попробовать работать с К2, то у него не будет установлен бит готовности. Как-то вот так ...
Эту тему просматривают: 2 (пользователей: 0 , гостей: 2)