5-ma’ruza. O‘qish va yozishni tashkil qilish. Buyruqlar tili
Download 23.41 Kb.
|
7-ma'ruza
5-MA’RUZA. O‘QISH VA YOZISHNI TASHKIL QILISH. BUYRUQLAR TILI. Kompyuterlarda o‘qish-yozish baytlarda amalga oshiriladi. Masalan berilganlarni o‘qish uchun dastur o‘qish-yozish qurilmasi holatini so‘raydigan va bir qator o‘qish buyruqlarini bajaruvchi siklga ega bo‘lishi kerak. Bunda markaziy protsessor o‘qish-yozish jarayonida bevosita ishtirok etadi.
Takomillashgan kompyuterlarda (misol uchun, SO‘M/QV) o‘qish-yozish jarayonining barcha amallari va boshqaruvi o‘qish-yozish kanallari orqali bajariladi. Yuqoridagi rasmda o‘qish-yozish konfiguratsiyasi keltirilgan. Kanal bajarilishi kerak bo‘lgan amallar ketma-ketligi kanal dastursi orqali beriladi. O‘qish-yozishni bajarish uchun markaziy protsessor START I/O (SIO) buyrug‘ini bajaradi. Bu buyruqda kanal nomeri va kanal dastursining boshlang‘ich adresi beriladi. Keyinchalik kanal markaziy protsessor ishtirokisiz o‘qish-yozish jarayonini amalga oshiradi va bu vaqtda markaziy protsessor boshqa hisoblash ishlarini amalga oshirishi mumkin. Bir vaqtni o‘zida bir nechta kanal ishlashi mumkin. OS o‘qish-yozish jarayoniga bir necha hollarda jalb qilinishi mumkin. Tizim foydalanuvchi dastursi tomonidan o‘qish-yozishga talabni qabul qilishi va bu amalni qachon bajarilishi haqida xabar berishi kerak. Ikkinchidan, OS yozish kanallarini boshqarishi va ular hosil qiluvchi uzilishlarni bajarishi kerak. Foydalanuvchi dastursi o‘qish-yozish amalini bajarish uchun SVC 2 buyrug‘ini beradi. Buyruq parametrlari sifatida kanal nomerini, kanal dastursining adresi va o‘qish-yozish tugaganligini bildirishda ishlatuvchi soha- Jarayon holati bloki (ESB) adresi ko‘rsatiladi. Agar dastur o‘qish-yozish amali tugallashini kutish kerak bo‘lsa, u SVC 0 (WAIT) buyrug‘ini bajarishi kerak. Bu buyruqda hodisa holati blokining adresi ko‘rsatiladi. Demak o‘qish-yozish amalini bajarish quyidagi ko‘rinishda bo‘ladi. SVC 2 {o‘qish-yozish amaliga so‘rov} … … … SVC 0 {natijani kutish} Ayrim hollarda bu ikkita bo‘yruq ketma-ket kelishi mumkin. Biroq, o‘qish-yozish jarayoni bajarilayotganda dastur tomonidan boshqa amallar bajarib turishi (mumkin bo‘lsa) maqsadga muvofiqdir. Quyida bu jarayon to‘liqroq keltirilgan. P1 START 0 ...
LDA #READ kanal dastur adresi LDS #1 kanal nomeri LDT #ESB hodisa holati blokining adresi SVC 2 o‘qish tugallashini kutish LOOP LDA # ESB ESB adresi SVC 0
... { berilganlarni dastur ishchi xotirasiga yozish} LDA #0 ESBga boshlang‘ich qiymat STA ESB LDA #READ LDS #1 LDT #ESB
SVC 2 o‘qish uchun navbatdagi so‘rov ...
J LOOP ...
Kanal dasturlari 1- buyruq READ BYTE X’11’ buyruq q READ, qurilmaq1 BYTE X’0100’ bayt sanagichi q256 WORD BUFIN o‘qish buferi adresi 2- buyruq BYTE X’000000000000’ kanal to‘xtashi ESB BYTE X’000 000’ o‘qish uchun holat bloki BUFIN RESB 256 o‘qish uchun bufer sohasi ...
END Bu dasturda boshda registrlarga kanal dastursi adresi, kanal nomeri va hodisa holati bloki adresi joylashtiriladi, keyin SVC yuz beradi. Kanal dastursi ikkita buyruqdan iborat 1-buyruq o‘qish amali va 1 nomerli qurilmani aniqlaydi va 256 bayt berilganlar BUFIN adresida joylashishi kerakligini bildiradi. Ikkinchi buyruq kanal ishini to‘xtatish va o‘qish-yozish bo‘yicha uzilishni hosil qiladi. ESB bo‘yruq uch baytdan iborat bo‘lib, uning birinchi biti -holati ro‘y bergan (1-ha) yoki yo‘qligini (0-yo‘q) aniqlaydi. +olgan bitlarda bu hodisani kutayotgan jarayonlarga ko‘rsatgich joylashadi. Kutayotgan jarayonlar bo‘lmasa ko‘rsatgich 0 bo‘ladi. O‘qish-yozish amaliga doir murakkabroq misol quyidagi rasmda keltirilgan. Bu holda 4096 bayt yozuvni 22 qurilmadan 14 qurilmaga nusxa olish dastursi keltirilgan. Unda ikkita kanal dastursi bo‘lib ularning biri o‘qish uchun ikkinchisi yozish uchun va ikkita hodisa holati bloki ishlatiladi. P2 START 0 LOOP LDA #0 STA RDESB LDA #READ 22 qurilmaga o‘qish uchun so‘rov LDS #2
LDT #RDESB o‘qish tugashini kutish SVC 2
LDA #WRESB SVC 0
... yozish ketma-ketligini tashkil qilish LDA #0
STA WRESB LDA #WRITE 14 qurilmaga yozish uchun so‘rov LDS #1 LDT #WRESB SVC 2 J LOOP
1- buyruq READ BYTE X’12’ buyruq qREAD, qurilma q2 BYTE X’1000’ baytlar sanagichi q4096 WORD BUFIN o‘qish buferi adresi 2- buyruq BYTE X’000 000 000 000’ YOzish uchun kanal dastursi 1- buyruq WRITE BYTE X’24’ buyruqqWRITE, qurilmaq4 BYTE X’1000’ baytlar sanagichi q4096 WORD BUFOUT yozish buferi adresi 2- buyruq BYTE X’000000000000’ kanal to‘xtashi RDESB BYTE X’000 000’ o‘qish hodisasi holati bloki WRESB BYTE X’800 000’ yozish hodisa holat bloki BUFIN RESB 4096 BUFOUT RESB 4096
OS o‘qish-yozish amaliga so‘rovlarni qanday bajarishni ko‘raylik. Buning uchun har bir o‘qish-yozish kanaliga mos kanal ishchi sohasi ajratiladi. Bu sohada kanal dastursi adresi (agar u bo‘lsa), joriy amal uchun ESB adresi, o‘qish-yozish tugaganligini bildiruvchi bayroq-bit joylashadi. Ishchi soha bundan tashqari shu kanal uchun o‘qish-yozishga so‘rovlar ketma-ketligiga ko‘rsatgich (OS standart dasturlari tomonidan qo‘llab-quvvvatlanuvchi). Foydalanuvchi tomonidan o‘qish-yozish berilgan so‘rov quyidagicha qayta ishlanadi. Agar kanal band bo‘lsa, so‘rov OS tomonidan navbatga qo‘yiladi, aks holda so‘rov kanalga qo‘yiladi. Joriy so‘rov kanal ishchi sohasida saqlanadi. Procedure IOREQ(CHAN, CP , ESB) Kanal TIO buyrug‘i orqali surash if kanal band then (CP, ESB) kanal uchun navbatga qo‘yish else begin
(CP, ESB) kanal ishchi sohasida saqlansin SIO orqali kanalni ishga tushirilsin end Boshqaruv so‘ragan jarayonga LPS orqali qaytarilsin end SVC 2 ni qayta-ishlash algoritmi Quyida OSni o‘qish-yozish uzilishni qayta ishlash algoritmi keltirilgan. Procedure IOINTERRUPT(CHAN) Kanal ishchi sohasidagi bayroqni tekshirilsin if amal normal tugagan then begin
Kanal ishchi sohasidan ESB adresi olinsin SVC buyrug‘i bilan ESB orqali hodisa ro‘y berganligini bildirish if kanal uchun so‘rov navbati bo‘sh emas then begin
Navbatdan keyingi so‘rov (CP, ESB) olinsin Kanal ishchi xotirasida (CP, ESB) saqlansin SIO buyrug‘i bilan kanalni ishga tushirilsin end
end else xato tuzatish uchun mos amallar kilinsin if markaziy protsessor uzilish ro‘y berganda bo‘sh then DISPATH else
Uzilgan jarayonga LPS buyrug‘i orqali boshqaruv uzatilsin Agar kanal bo‘sh bo‘lsa, u ishga tushiriladi va ayni so‘rov kanal ishchi xotirasida saqlanadi. Boshqaruv so‘rov bergan jarayonga qaytarilishi mumkin, o‘zaro malumot almashish (o‘qish-yozish) bo‘layotgan payotda u o‘z ishini davom ettirishi mumkin. IOINTERRUPT protsedurasida o‘qish-yozish bo‘yicha uzilish bo‘lganda OS tomonidan bajariladigan ishlar keltirilgan. Uzilish chaqirgan kanal nomeri uzilishning holat so‘zida (uzilishning ishchi sohasida) bo‘ladi. Uzilish sababini aniqlash uchun OS kanal ishchi sohasidagi bayroq holatini tahlil qiladi. Agar o‘qish-yozish normal tugagan bo‘lsa, uzilish qayta ishlovchisi bu hodisani holati bloki orqali OSni xabardor qiladi. Bu ichki uzilishga olib keluvchi SVC so‘rov orqali amalga oshirilishi mumkin. Bu holni kutayotgan har bir jarayon tayyor holatga keltiriladi. Agar o‘qish-yozish normal bo‘lmagan holda tugasa, OS bu nosozlikni yo‘qotish choralarni ko‘radi: o‘qish xatosi bo‘lsa, qayta o‘qishga harakat qilishi; qog‘oz tugagan bo‘lsa, operatorlarga xabar berish yoki nosozlik haqidagi xabarni so‘ragan jarayonga (foydalanuvchi dasturiga) berishi va jarayon aks tasirini kutish mumkin. Download 23.41 Kb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling