5-ma’ruza. O‘qish va yozishni tashkil qilish. Buyruqlar tili


Download 23.41 Kb.
Sana08.06.2020
Hajmi23.41 Kb.
#116203
Bog'liq
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. Keyin­chalik 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 buy­rug‘i­ni 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 hodi­sa 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 muvofiq­dir.

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 beril­gan­lar BUFIN adresida joylashishi kerakligini bildiradi. Ikkinchi buyruq kanal ishini to‘xtatish va o‘qish-yozish bo‘yicha uzilishni hosil qila­di. 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
O‘qish uchun kanal dastursi

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
Bu dasturda o‘qish-yozish amallari bir biriga bog‘liqmas ravishda bajariladi, chunki ular turli kanallarni ishlatadilar. Dastur o‘qish-yozish jarayonlarini turli ESBlar orqali alohida-alohida boshqarib turadi.

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). Foyda­la­nuvchi tomonidan o‘qish-yozish berilgan so‘rov quyidagicha qayta ishlanadi. Agar kanal band bo‘lsa, so‘rov OS tomonidan navbatga qo‘yi­ladi, 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 qayta­ri­lishi mumkin, o‘zaro malumot almashish (o‘qish-yozish) bo‘layotgan payotda u o‘z ishini davom ettirishi mumkin. IOINTERRUPT protse­dura­sida o‘qish-yozish bo‘yicha uzilish bo‘lganda OS tomonidan baja­ri­ladigan ishlar keltirilgan. Uzilish chaqirgan kanal nomeri uzilishning holat so‘zida (uzilishning ishchi sohasida) bo‘ladi. Uzilish sababini aniqlash uchun OS kanal ishchi sohasidagi bayroq hola­tini 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 (foydala­nuvchi dasturiga) berishi va jarayon aks tasirini kutish mumkin.
Download 23.41 Kb.

Do'stlaringiz bilan baham:




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling