Operatsion tizimlar: Uchta oson. 2-qism: Abstraktsiya: Jarayon (tarjima)

Operatsion tizimlarga kirish

Salom, Xabr! Men sizning e'tiboringizga bir qator maqolalar-tarjimalarni taqdim etmoqchiman, mening fikrimcha, qiziqarli bo'lgan adabiyot - OSTEP. Ushbu material unix-ga o'xshash operatsion tizimlarning ishini, ya'ni zamonaviy OTni tashkil etuvchi jarayonlar, turli rejalashtiruvchilar, xotira va shunga o'xshash boshqa komponentlar bilan ishlashni chuqur o'rganadi. Bu yerda barcha materiallarning asl nusxasini ko'rishingiz mumkin shu yerda. E'tibor bering, tarjima noprofessional tarzda qilingan (juda erkin), lekin men umumiy ma'noni saqlab qoldim deb umid qilaman.

Ushbu mavzu bo'yicha laboratoriya ishlarini bu erda topishingiz mumkin:

Boshqa qismlar:

Siz mening kanalimni ham ko'rishingiz mumkin telegram =)

Keling, OS foydalanuvchilarga taqdim etadigan eng asosiy abstraktsiyani ko'rib chiqaylik: jarayon. Jarayonning ta'rifi juda oddiy - shunday ishlaydigan dastur. Dasturning o'zi diskda joylashgan jonsiz narsadir - bu ko'rsatmalar to'plami va ehtimol ishga tushirishni kutayotgan ba'zi statik ma'lumotlar. Aynan OS bu baytlarni oladi va ularni ishga tushiradi va dasturni foydali narsaga aylantiradi.
Ko'pincha foydalanuvchilar bir vaqtning o'zida bir nechta dasturni ishga tushirishni xohlashadi, masalan, noutbukda brauzer, o'yin, media pleer, matn muharriri va shunga o'xshash narsalarni ishga tushirishingiz mumkin. Aslida, odatiy tizim bir vaqtning o'zida o'nlab yoki yuzlab jarayonlarni bajarishi mumkin. Bu haqiqat tizimdan foydalanishni osonlashtiradi, siz hech qachon protsessor bepul yoki yo'qligi haqida tashvishlanmaysiz, faqat dasturlarni ishga tushirasiz.

Bu muammoni keltirib chiqaradi: ko'plab protsessorlarning illyuziyasini qanday ta'minlash mumkin? Agar sizda faqat bitta jismoniy protsessor bo'lsa ham, operatsion tizim deyarli cheksiz sonli protsessorlar xayolini qanday yaratishi mumkin?

OS bu illyuziyani CPU virtualizatsiyasi orqali yaratadi. Bitta jarayonni ishga tushirish, keyin uni to'xtatish, boshqa jarayonni boshlash va hokazolar orqali OS ko'plab virtual protsessorlar mavjudligi haqidagi illyuziyani saqlab qolishi mumkin, aslida esa bir yoki bir nechta jismoniy protsessorlar bo'ladi. Ushbu texnika deyiladi CPU resurslarini vaqt bo'yicha taqsimlash. Ushbu texnika foydalanuvchilarga bir vaqtning o'zida xohlagancha ko'p jarayonlarni bajarishga imkon beradi. Ushbu yechimning narxi ishlashdir - chunki agar protsessor bir nechta jarayonlar tomonidan taqsimlansa, har bir jarayon sekinroq qayta ishlanadi.
CPU virtualizatsiyasini amalga oshirish va ayniqsa, uni yaxshi bajarish uchun OT ham past, ham yuqori darajadagi yordamga muhtoj. Past darajadagi qo'llab-quvvatlash chaqiriladi mexanizmlar funksionallikning zarur qismini amalga oshiradigan past darajadagi usullar yoki protokollardir. Bunday funksionallikka misol qilib kontekstni almashtirishni keltirish mumkin, bu esa OTga bitta dasturni to‘xtatish va protsessorda boshqa dasturni ishga tushirish imkoniyatini beradi. Bu vaqtni taqsimlash barcha zamonaviy operatsion tizimlarda amalga oshiriladi.
Ushbu mexanizmlarning tepasida "siyosat" shaklida OTga o'rnatilgan ba'zi mantiqlar mavjud. siyosat operatsion tizim uchun ma'lum bir qaror qabul qilish algoritmidir. Bunday siyosatlar, masalan, birinchi navbatda qaysi dasturni ishga tushirish kerakligini hal qiladi (buyruqlar ro'yxatidan). Shunday qilib, masalan, bu muammo deb nomlangan siyosat bilan hal qilinadi rejalashtiruvchi (rejalashtirish siyosati) va yechimni tanlashda u quyidagi ma'lumotlarga asoslanadi: ishga tushirish tarixi (qaysi dastur oxirgi daqiqalarda eng uzoq vaqt ishga tushirilgan), bu jarayon qanday yukni ko'taradi (qanday turdagi dasturlar ishga tushirilgan), ishlash ko'rsatkichlari (tizimmi yoki yo'qmi) interaktiv o'zaro ta'sir qilish yoki o'tkazish qobiliyati uchun optimallashtirilgan ) va hokazo.

Abstraktsiya: jarayon

Operatsion tizim tomonidan bajariladigan ishlaydigan dasturning abstraktsiyasi biz shunday deb ataladi jarayon. Yuqorida aytib o'tilganidek, jarayon - bu har qanday lahzada ishlaydigan dastur. Biz turli xil tizim resurslaridan ushbu dastur foydalanayotgan yoki uni bajarish jarayonida ta'sir qiladigan umumiy ma'lumotlarni olishimiz mumkin bo'lgan dastur.
Jarayonning tarkibiy qismlarini tushunish uchun siz tizimning holatini tushunishingiz kerak: dastur uning ishlashi davomida nimani o'qishi yoki o'zgartirishi mumkin. Har qanday vaqtda dasturning bajarilishi uchun tizimning qaysi elementlari muhimligini tushunishingiz kerak.
Tizimning aniq elementlaridan biri bu jarayonni o'z ichiga oladi pamyat. Ko'rsatmalar xotirada joylashgan. Dastur o'qiydigan yoki yozadigan ma'lumotlar ham xotirada joylashgan. Shunday qilib, jarayon murojaat qilishi mumkin bo'lgan xotira (manzil maydoni deb ataladi) jarayonning bir qismidir.
Shuningdek, tizim holatining bir qismi registrlardir. Ko'pgina ko'rsatmalar registrlarning qiymatini o'zgartirishga yoki ularning qiymatini o'qishga qaratilgan va shuning uchun registrlar ham jarayonning muhim qismiga aylanadi.
Shuni ta'kidlash kerakki, mashina holati ham ba'zi maxsus registrlardan shakllanadi. Masalan, IP - ko'rsatma ko'rsatgichi — dastur hozirda bajarilayotgan ko‘rsatmaga ko‘rsatgich. Hali bor stack ko'rsatkichi va u bilan bog'liq ramka ko'rsatkichi, boshqarish uchun ishlatiladi: funktsiya parametrlari, mahalliy o'zgaruvchilar va qaytish manzillari.
Nihoyat, dasturlar ko'pincha ROMga (faqat o'qish uchun xotira) kirishadi. Ushbu "I/O" (kirish/chiqarish) ma'lumotlari hozirda jarayon tomonidan ochilgan fayllar ro'yxatini o'z ichiga olishi kerak.

Jarayon API

Jarayon qanday ishlashini tushunishni yaxshilash uchun keling, har qanday operatsion tizim interfeysiga kiritilishi kerak bo'lgan tizim chaqiruvlari misollarini o'rganamiz. Ushbu API-lar har qanday operatsion tizimda u yoki bu shaklda mavjud.

yaratish (yaratish): OT yangi jarayonlarni yaratishga imkon beruvchi ba'zi usullarni o'z ichiga olishi kerak. Terminalga buyruq kiritganingizda yoki belgini ikki marta bosish orqali dasturni ishga tushirganingizda, yangi jarayonni yaratish va keyin belgilangan dasturni ishga tushirish uchun OTga qo'ng'iroq yuboriladi.
O'chir: Jarayonni yaratish uchun interfeys mavjud bo'lganligi sababli, OT jarayonni majburan olib tashlash imkoniyatini ham ta'minlashi kerak. Ko'pgina dasturlar ishlayotganda tabiiy ravishda o'z-o'zidan boshlanadi va tugaydi. Aks holda, foydalanuvchi ularni o'ldirishni xohlaydi va shuning uchun jarayonni to'xtatish uchun interfeys foydali bo'ladi.
kutib turing (kutish): Ba'zida jarayon tugashini kutish foydali bo'ladi, shuning uchun kutish qobiliyatini ta'minlaydigan ba'zi interfeyslar taqdim etiladi.
Turli boshqaruv (turli nazorat): O'ldirish va jarayonni kutishdan tashqari, boshqa turli xil nazorat usullari ham mavjud. Masalan, ko'pgina operatsion tizimlar jarayonni muzlatish (uning bajarilishini ma'lum muddatga to'xtatish) va keyin uni davom ettirish (bajarishni davom ettirish) qobiliyatini ta'minlaydi.
holat (holat): Jarayonning holati haqida ba'zi ma'lumotlarni olish uchun turli xil interfeyslar mavjud, masalan, u qancha vaqt ishlayotgani yoki hozirda qanday holatda.

Operatsion tizimlar: Uchta oson. 2-qism: Abstraktsiya: Jarayon (tarjima)

Jarayonni yaratish: Tafsilotlar

Qizig'i shundaki, dasturlar qanday qilib jarayonlarga aylantiriladi. Ayniqsa, OS dasturni qanday qabul qiladi va ishga tushiradi. Jarayon qanday aniq yaratilgan.
Avvalo, OT dastur kodini va statik ma'lumotlarni xotiraga (protsessning manzil maydoniga) yuklashi kerak. Dasturlar odatda diskda yoki ba'zi bajariladigan formatda qattiq diskda joylashgan. Shunday qilib, dastur va statik ma'lumotlarni xotiraga yuklash jarayoni OTdan ushbu baytlarni diskdan o'qish va ularni xotiraning biror joyiga joylashtirish imkoniyatini talab qiladi.

Dastlabki operatsion tizimlarda yuklash jarayoni ishtiyoq bilan amalga oshirilgan, ya'ni dastur ishga tushirilgunga qadar butun kod xotiraga yuklangan. Zamonaviy operatsion tizimlar buni dangasalik bilan amalga oshiradilar, ya'ni kod yoki ma'lumotlar qismlarini faqat dastur uni bajarish paytida talab qilganda yuklaydi.

Kod va statik ma'lumotlar OS xotirasiga yuklangandan so'ng, jarayonni boshlashdan oldin yana bir nechta ishlarni bajarish kerak. Stack uchun ma'lum hajmdagi xotira ajratilishi kerak. Dasturlar mahalliy o'zgaruvchilar, funksiya parametrlari va qaytariladigan manzillar uchun stekdan foydalanadi. Operatsion tizim bu xotirani ajratadi va uni jarayonga beradi. Stackni ba'zi argumentlar bilan ham ajratish mumkin, xususan, u main() funksiyasining parametrlarini, masalan, argc va argv massivi bilan to'ldiradi.

Operatsion tizim, shuningdek, dastur to'plamiga bir oz xotira ajratishi mumkin. Uyma dasturlar tomonidan dinamik ravishda ajratilgan ma'lumotlarni aniq so'rash uchun ishlatiladi. Dasturlar ushbu bo'sh joyni funksiyani chaqirish orqali talab qiladi malloc () va funksiyani chaqirish orqali uni aniq tozalaydi ozod(). Uyum bog'langan jadvallar, xesh jadvallar, daraxtlar va boshqalar kabi ma'lumotlar tuzilmalari uchun kerak. Dastlab, uyaga kichik hajmdagi xotira ajratiladi, lekin vaqt o'tishi bilan dastur ishga tushganda, yig'ma kutubxona API chaqiruvi malloc() orqali ko'proq xotira talab qilishi mumkin. Operatsion tizim ushbu qo'ng'iroqlarni qondirishga yordam berish uchun ko'proq xotira ajratish jarayonida ishtirok etadi.

Operatsion tizim ishga tushirish vazifalarini, xususan, kiritish/chiqarish bilan bog'liq vazifalarni ham bajaradi. Masalan, UNIX tizimlarida har bir jarayon sukut bo'yicha standart kiritish, chiqish va xatolik uchun 3 ta ochiq fayl identifikatoriga ega. Bu tutqichlar dasturlarga terminaldan ma'lumotlarni o'qish hamda ekranda ma'lumotlarni ko'rsatish imkonini beradi.

Shunday qilib, kod va statik ma'lumotlarni xotiraga yuklash, stekni yaratish va ishga tushirish va kiritish-chiqarish vazifalarini bajarish bilan bog'liq boshqa ishlarni bajarish orqali OT jarayonni bajarish bosqichini tayyorlaydi. Va nihoyat, bitta oxirgi vazifa qoldi: dasturni asosiy () funktsiyasi deb ataladigan kirish nuqtasi orqali ishga tushirish. main() funksiyasini bajarish orqali OT protsessor boshqaruvini yangi yaratilgan jarayonga o'tkazadi, shu bilan dastur bajarila boshlaydi.

Jarayon holati

Endi biz jarayon nima ekanligini va u qanday yaratilishini tushunganimizdan so'ng, keling, u bo'lishi mumkin bo'lgan jarayon holatlarini sanab o'tamiz. Eng oddiy shaklda jarayon quyidagi holatlardan birida bo'lishi mumkin:
Running. Ishlayotganda, jarayon protsessorda ishlaydi. Bu ko'rsatmalar bajarilayotganligini anglatadi.
tayyor. Tayyor holatda jarayon ishga tushirishga tayyor, lekin negadir OS uni belgilangan vaqtda bajarmaydi.
bloklangan. Bloklangan holatda jarayon ba'zi bir hodisalar sodir bo'lgunga qadar uni bajarishga tayyor bo'lishiga to'sqinlik qiladigan ba'zi operatsiyalarni bajaradi. Umumiy misollardan biri, agar jarayon IO operatsiyasini boshlaganida, u boshqa protsessordan foydalanishi uchun bloklanadi.

Operatsion tizimlar: Uchta oson. 2-qism: Abstraktsiya: Jarayon (tarjima)

Ushbu holatlarni grafik shaklida tasavvur qilishingiz mumkin. Rasmda ko'rib turganimizdek, jarayon holati OT ixtiyoriga ko'ra RUNNING va READY oralig'ida o'zgarishi mumkin. Agar jarayonning holati TAYYOR dan ISHLAB CHIQISH ga o'zgarganda, bu jarayon rejalashtirilganligini bildiradi. Qarama-qarshi yo'nalishda - tartibdan olib tashlangan. Jarayon BLOKLANGAN bo'lsa, masalan, men IO operatsiyasini boshlayman, OS uni ba'zi bir voqea sodir bo'lguncha, masalan, IO tugallanmaguncha, shu holatda saqlaydi. hozirgi vaqtda READY holatiga o'tish va, ehtimol, agar OT shunday qaror qilsa, darhol ISHLASH holatiga o'tish.
Keling, ushbu holatlar bo'ylab ikkita jarayon qanday harakat qilishiga misolni ko'rib chiqaylik. Boshlash uchun, ikkala jarayon ham ishlayotganini va ularning har biri faqat protsessordan foydalanayotganini tasavvur qilaylik. Bunday holda, ularning holatlari shunday ko'rinadi.

Operatsion tizimlar: Uchta oson. 2-qism: Abstraktsiya: Jarayon (tarjima)

Quyidagi misolda, bir muncha vaqt ishlagandan so'ng, birinchi jarayon IO ni so'raydi va BLOCKED holatiga kiradi va boshqa jarayonni ishga tushirishga imkon beradi (1.4-rasm). OT 0 jarayoni protsessordan foydalanmayotganini ko'radi va 1-jarayonni boshlaydi. 1-jarayon ishlayotganda IO tugallanadi va 0-jarayonning holati READY ga o'zgaradi. Nihoyat, 1-jarayon tugallandi va tugallangandan so'ng 0-jarayon o'z ishini boshlaydi, bajaradi va tugatadi.

Operatsion tizimlar: Uchta oson. 2-qism: Abstraktsiya: Jarayon (tarjima)

Ma'lumotlar tuzilishi

Operatsion tizimning o'zi dastur bo'lib, har qanday boshqa dastur singari u turli xil tegishli ma'lumotlar qismlarini kuzatib boruvchi asosiy ma'lumotlar tuzilmalariga ega. Har bir jarayonning holatini kuzatish uchun OS ba'zilarini qo'llab-quvvatlaydi jarayonlar ro'yxati READY holatidagi barcha jarayonlar uchun va hozirda ishlayotgan jarayonlarni kuzatish uchun ba'zi qo'shimcha ma'lumotlar. Bundan tashqari, OS bloklangan jarayonlarni kuzatishi kerak. IO tugallangandan so'ng, OT kerakli jarayonni uyg'otishi va uni ishga tushirishga tayyor holatga keltirishi kerak.

Masalan, OT protsessor registrlarining holatini saqlab qolishi kerak. Jarayon to'xtagan paytda, registrlarning holati jarayonning manzil maydonida saqlanadi va uning ishlashi davom etayotgan paytda registrlarning qiymatlari tiklanadi va shu bilan ushbu jarayonning bajarilishi davom etadi.

Tayyor, bloklangan, ishlaydigan shtatlardan tashqari yana bir qancha shtatlar mavjud. Ba'zan, yaratish vaqtida jarayon INIT holatida bo'lishi mumkin. Nihoyat, jarayon tugallangan bo'lsa-da, lekin uning ma'lumotlari hali tozalanmagan bo'lsa, FINAL holatiga joylashtirilishi mumkin. UNIX tizimlarida bu holat deyiladi zombi jarayoni. Bu holat ota-ona jarayoni bolaning qaytish kodini bilmoqchi bo'lgan holatlar uchun foydalidir, masalan, odatda 0 muvaffaqiyat va 1 xatoni bildiradi, ammo dasturchilar turli muammolarni signallash uchun qo'shimcha chiqish kodlarini chiqarishi mumkin. Ota-ona jarayoni tugagach, u tugallangan jarayon tugashini kutish va tugatilgan jarayon bilan bog'liq har qanday ma'lumotlarni o'chirib tashlashi mumkinligi to'g'risida OTga signal berish uchun wait() kabi yakuniy tizim chaqiruvini amalga oshiradi.

Operatsion tizimlar: Uchta oson. 2-qism: Abstraktsiya: Jarayon (tarjima)

Ma'ruzaning asosiy fikrlari:

jarayon — OTda ishlaydigan dasturning asosiy abstraksiyasi. Har qanday vaqtda jarayonni uning holati bo'yicha tavsiflash mumkin: uning manzil maydonidagi xotira tarkibi, protsessor registrlari tarkibi, shu jumladan ko'rsatmalar ko'rsatgichi va stek ko'rsatkichi va IO ma'lumotlari, masalan, o'qilayotgan yoki yozilayotgan ochiq fayllar.
Jarayon API dasturlarning jarayonlarga qilishi mumkin bo'lgan qo'ng'iroqlardan iborat. Odatda bular yaratish, o'chirish yoki boshqa qo'ng'iroqlardir.
● Jarayon ko'p holatlardan birida, jumladan, ishlayotgan, tayyor, bloklangan. Rejalashtirish, rejalashtirishdan istisnolar yoki kutish kabi turli hodisalar jarayonning holatini biridan ikkinchisiga o'zgartirishi mumkin.
Jarayon ro'yxati tizimdagi barcha jarayonlar haqida ma'lumotni o'z ichiga oladi. Undagi har bir yozuv jarayonni boshqarish bloki deb ataladi, bu aslida ma'lum bir jarayon haqida barcha kerakli ma'lumotlarni o'z ichiga olgan tuzilmadir. 

Manba: www.habr.com

a Izoh qo'shish