18-bo‘lim

Kiritish-chiqarish va uzilishlar

So'rab turish va uzilish farqi, uzilishlar jadvali, kontekst saqlash, DMA va qurilmalar bilan aloqa usullari.

🕑 7 daqiqa o‘qish 📄 1 111 so‘z 👁 0 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. So'rab turish va uzilish
  2. Uzilishlar jadvali
  3. DMA - protsessorni chetlab o'tish
  4. Qurilma bilan gaplashish usullari
  5. Xulosa

Shu paytgacha protsessor faqat xotira bilan ishladi. Lekin kompyuterda klaviatura, disk, tarmoq kartasi ham bor.

Muammo shundaki, ular protsessordan millionlab barobar sekin.

Protsessor vaqti qayerga ketadi so'rab turish "tayyormisan?" x1000 - BEKOR o'qish 99% bekor uzilish BOSHQA dastur bajariladi uzilish o'qish 0% bekor Uzilish kelganda uch qadam 1. Holat saqlanadi 2. Ishlovchi chaqiriladi 3. Holat tiklanadi Asosiy dastur uzilish bo'lganini SEZMAYDI ham Taymer uzilishi - ko'p vazifalilikning asosi
Uzilishda taktlar ko'proq bo'lishi mumkin - lekin ular bekor ketmaydi

So'rab turish va uzilish #

Eng sodda yechim - so'rab turish (polling): protsessor qurilmadan "tayyormisan?" deb doimo so'raydi.

Klaviaturadan 5 ta belgi o'qiymiz. Har belgi orasida qurilma 1000 takt tayyorlanadi:

UsulJami taktBekor ketdiBoshqa ishga qoldi
So'rab turish5 0505 00050
Uzilish5 30005 300

Diqqat qiling: uzilishda jami takt ko'proq (5 300 va 5 050). Uzilishning o'zi ham qimmatga tushadi.

Lekin farq shundaki, so'rab turishda protsessor o'sha 5 000 taktni kutishga sarflaydi va boshqa hech narsa qila olmaydi. Uzilishda esa u butun vaqtni boshqa dasturga beradi.

Ya'ni savol "qaysi biri kamroq takt oladi" emas, balki "takt qayerga sarflanadi".

Diqqat qiling: uzilish varianti ko'proq takt oldi (5300 va 5050). Lekin undagi taktlarning hammasi foydali - protsessor kutmadi, boshqa ish qildi.

So'rab turish har doim yomon emas

Uzilishning ham narxi bor: kontekstni saqlash va tiklash ~50-100 takt turadi.

Shuning uchun qurilma juda tez bo'lsa, so'rab turish afzalroq:

VaziyatQaysi usul
Klaviatura, diskUzilish
Yuqori tezlikdagi tarmoq kartasiSo'rab turish
SSD navbatiAralash
Mikrokontroller, oddiy sensorSo'rab turish (sodda)

Linux tarmoq drayverlarida NAPI degan aralash usul bor: yuk kam bo'lganda uzilish, trafik ko'payganda so'rab turishga o'tadi.

Bu tipik muhandislik qarori: bitta "to'g'ri" javob yo'q, sharoitga qarab tanlanadi.

Uzilishlar jadvali #

Protsessor uzilish kelganda qayerga sakrashni qayerdan biladi? Javob - xotiradagi jadvaldan.

Har qurilmaga o'z raqami beriladi va shu raqam bo'yicha ishlovchi topiladi:

Uzilish raqamiQurilma
0taymer
1klaviatura
14disk

Dastur ishlayotganda uzilishlar aralash keladi:

TaktKelgan uzilishKim
10taymer
20taymer
31klaviatura
40taymer
514disk
60taymer
71klaviatura
80taymer

Sakkiz taktda taymer 5 marta urdi va klaviaturadan ikkita belgi keldi.

Taymer uzilishi eng muhimi: aynan u operatsion tizimga dasturlarni navbatma-navbat bajarish imkonini beradi. Usiz ko'p vazifalilik mumkin bo'lmasdi.

Uzilish kelganda protsessor uch qadamni bajaradi:

QadamNima bo'ladi
1Joriy holat (KK, registrlar, bayroqlar) saqlanadi
2Jadvaldan ishlovchi topiladi va chaqiriladi
3Holat tiklanadi va dastur davom etadi

Dastur uzilish bo'lganini sezmaydi ham - xuddi hech narsa bo'lmagandek davom etadi.

Taymer uzilishi - ko'p vazifalilikning asosi

Jadvaldagi 0-uzilishga e'tibor bering: taymer. U doimiy ravishda, soniyada yuzlab marta keladi.

Aynan shu operatsion tizimga dasturlarni almashtirish imkonini beradi:

QadamNima bo'ladi
1Taymer uzilishi keladi
2Yadro boshqaruvni oladi
3Joriy jarayon holati saqlanadi
4Rejalashtiruvchi keyingi jarayonni tanlaydi
5Uning holati tiklanadi va u davom etadi

Usiz majburiy ko'p vazifalilik bo'lmasdi: cheksiz halqaga tushgan dastur butun tizimni qotirib qo'yardi.

Bu "Operatsion tizimlar" darsligining 6-bo'limida batafsil ko'rilgan.

DMA - protsessorni chetlab o'tish #

Diskdan 1 MB o'qish kerak bo'lsin. Protsessor har baytni o'zi ko'chirsa, u million marta band bo'ladi.

DMA (Direct Memory Access) buni hal qiladi: maxsus qurilma ma'lumotni to'g'ridan-to'g'ri xotiraga ko'chiradi.

QadamKim bajaradi
1. "Shu yerdan o'qib, mana bu manzilga yoz"Protsessor (bir marta)
2. Ma'lumotni ko'chirishDMA qurilmasi
3. "Tayyor" uzilishiDMA qurilmasi
4. Ma'lumot bilan ishlashProtsessor

Protsessor 2-qadamda butunlay bo'sh - u boshqa dastur bajaradi.

Bugun deyarli barcha tez qurilmalar DMA ishlatadi: disk, tarmoq kartasi, videokarta, ovoz.

Uzilish ishlovchisi qisqa bo'lishi shart

Uzilish kelganda protsessor joriy ishni to'xtatadi. Ishlovchi uzoq ishlasa, butun tizim javob bermay qoladi.

Qoidalar:

QoidaSabab
Ishlovchi qisqa bo'lsinBoshqa uzilishlar kutadi
Uzoq ishni keyinga qoldiringYadro buni "pastki yarim" deb ataydi
Ishlovchi ichida qulf kutmangDeadlock xavfi
Xotira ajratmangUzilish kontekstida xavfli

Amaliy naqsh: ishlovchi faqat ma'lumotni navbatga qo'yadi, haqiqiy ishlov esa keyinroq, oddiy kontekstda bajariladi.

Bu tarmoqlar darsligining 18-bo'limidagi "hodisa halqasini bloklamang" qoidasi bilan bir xil g'oya.

Qurilma bilan gaplashish usullari #

UsulQanday ishlaydi
Portga akslantirilganMaxsus in/out komandalari (x86 da)
Xotiraga akslantirilganQurilma registrlari xotira manzillari kabi

Ikkinchisi bugun keng tarqalgan: 0xFE000000 manzilga yozish - bu xotiraga emas, videokartaga yozish degani.

Bu yondashuv qulay: alohida komandalar kerak emas, oddiy mov yetarli.

Qurilma xotirasi bilan ishlashda optimallashtirish xavfli

Kompilyator odatda "bu o'zgaruvchini ikki marta o'qish shart emas" deb o'ylaydi va ikkinchi o'qishni olib tashlaydi.

Oddiy xotira uchun bu to'g'ri. Qurilma registri uchun esa halokatli: uning qiymati tashqi sabab bilan o'zgaradi.

Shuning uchun bunday o'zgaruvchilar maxsus belgilanadi:

TilBelgi
C va C++volatile
Rustread_volatile / write_volatile
Javavolatile (boshqa ma'noda - oqimlar uchun)

Yana bir muammo - tartib. Protsessor yozishlarni qayta tartiblashi mumkin, qurilma esa aniq ketma-ketlikni kutadi. Buning uchun xotira to'sig'i (memory barrier) komandalari ishlatiladi.

Drayver yozish shuning uchun ham qiyin: oddiy kodda ko'rinmaydigan qoidalar bu yerda hal qiluvchi bo'lib qoladi.

Amaliy topshiriq
  1. So'rab turish va uzilish farqini uch qatorda yozing.
  2. Uzilishda jami takt ko'proq - nima uchun u baribir yaxshiroq?
  3. Qurilma kechikishi 10 takt bo'lsa, qaysi usul yutardi?
  4. Uzilish narxi 500 takt bo'lsa, hisob qanday o'zgarardi?
  5. Uzilish kelganda bajariladigan uch qadamni yozing.
  6. Uzilishlar jadvalidagi raqam nima uchun kerak?
  7. Sakkiz taktda taymer necha marta urganini sanang.
  8. Nima uchun taymer uzilishi ko'p vazifalilik uchun zarurligini yozing.
  9. DMA ning uch afzalligini sanang.
  10. Uzilishlarni vaqtincha o'chirish qachon kerak bo'lishini o'ylang.

Xulosa #

  • Tashqi qurilmalar protsessordan millionlab barobar sekin.
  • So'rab turish: protsessor doimo so'raydi - sodda, lekin isrofgar.
  • Uzilish: qurilma tayyor bo'lganda o'zi xabar beradi.
  • Uzilishda taktlar ko'proq bo'lishi mumkin, lekin ular bekor ketmaydi.
  • Juda tez qurilmalar uchun so'rab turish afzalroq bo'lishi mumkin.
  • Uzilish raqami jadvaldan ishlovchi manzilini topadi.
  • Protsessor holatni saqlaydi, ishlovchini chaqiradi, holatni tiklaydi.
  • Taymer uzilishi majburiy ko'p vazifalilikning asosi.
  • DMA ma'lumotni protsessorsiz ko'chiradi.
  • Qurilma registrlari bilan ishlaganda volatile va xotira to'siqlari zarur.

Keyingi bo'limda manba kodidan mashina kodigacha bo'lgan butun yo'lni ko'rib chiqamiz.

Xatolik topdingizmi?

Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.