Operatsion tizimlardagi jarayonlarni boshqarishning asosiy tushunchalari, jumladan, jarayon holatlari, rejalashtirish algoritmlari, jarayonlararo aloqa va boshi berk koʻchalarni bartaraf etishni oʻrganing. Dasturchilar va tizim maʼmurlari uchun muhim.
Operatsion tizimlar: Jarayonlarni boshqarish boʻyicha toʻliq qoʻllanma
Jarayonlarni boshqarish har qanday zamonaviy operatsion tizimning asosiy jihatidir. U jarayonlarning bajarilishini boshqarish, resurslarni taqsimlash va silliq koʻp vazifalilikni taʼminlashni oʻz ichiga oladi. Ushbu qoʻllanma jarayonlarni boshqarish tushunchalari, usullari va muammolari haqida batafsil maʼlumot beradi. U talabalar, dasturchilar, tizim maʼmurlari va operatsion tizimlarning qanday ishlashini tushunishga qiziqqan har bir kishi uchun moʻljallangan.
Jarayon nima?
Aslida, jarayon — bu bajarilayotgan dasturning bir nusxasi. Bu shunchaki dastur kodidan koʻproq narsa; u dastur hisoblagichining, registrlarning va oʻzgaruvchilarning joriy qiymatlarini oʻz ichiga oladi. Har bir jarayon oʻz xotira maydoniga ega, bu uning boshqa jarayonlarga bevosita aralashishiga yoʻl qoʻymaydi.
Dasturni retsept, jarayonni esa taomni pishirish harakati deb tasavvur qiling. Siz bir vaqtning oʻzida bir xil dasturni ishga tushiradigan bir nechta jarayonlarga ega boʻlishingiz mumkin (masalan, matn muharririning bir nechta nusxasi), har biri oʻz maʼlumotlari va holatiga ega boʻladi.
Jarayonning asosiy tarkibiy qismlari:
- Dastur kodi (Matn boʻlimi): Bajarilishi kerak boʻlgan koʻrsatmalar.
- Maʼlumotlar boʻlimi: Global oʻzgaruvchilar va dinamik ajratilgan xotira.
- Stek: Funksiya chaqiruvlari, mahalliy oʻzgaruvchilar va qaytish manzillari uchun ishlatiladi.
- Uyum (Heap): Ishlash vaqtida dinamik ravishda ajratilgan xotira.
- Jarayonni Boshqarish Bloki (JBB): Har bir jarayon uchun OT tomonidan yuritiladigan maʼlumotlar strukturasi boʻlib, u jarayon identifikatori, holati, dastur hisoblagichi va registr qiymatlari kabi maʼlumotlarni oʻz ichiga oladi.
Jarayon holatlari
Jarayon oʻzining hayotiy davri mobaynida turli holatlardan oʻtadi. Ushbu holatlarni tushunish jarayonlarni boshqarishni tushunish uchun juda muhimdir.
- Yangi: Jarayon yaratilmoqda.
- Tayyor: Jarayon protsessorga tayinlanishini kutmoqda.
- Bajarilmoqda: Koʻrsatmalar bajarilmoqda.
- Kutishda (Bloklangan): Jarayon biror hodisaning sodir boʻlishini kutmoqda (masalan, kiritish-chiqarishning yakunlanishi yoki signal qabul qilish).
- Tugatilgan: Jarayon oʻz ishini yakunladi.
Bu holatlar jarayonning hayotiy siklini ifodalaydi va operatsion tizim ular oʻrtasidagi oʻtishlarni boshqarish uchun masʼuldir. Masalan, jarayon diskdan maʼlumot oʻqishi kerak boʻlganda, u Bajarilmoqda holatidan Kutishda holatiga oʻtadi va kiritish-chiqarish amaliyoti tugaguncha kutadi. Soʻngra, u yana ishlash navbatini kutib, Tayyor holatiga qaytadi.
Jarayonni Boshqarish Bloki (JBB)
JBB — bu operatsion tizimga jarayonni boshqarish uchun zarur boʻlgan barcha maʼlumotlarni oʻz ichiga olgan maʼlumotlar strukturasi. Bu jarayonning rezyumesiga oʻxshaydi, unda OT uni kuzatib borish uchun bilishi kerak boʻlgan hamma narsa mavjud.
JBBning odatiy tarkibi:
- Jarayon identifikatori (PID): Jarayon uchun noyob identifikator.
- Jarayon holati: Jarayonning joriy holati (masalan, Tayyor, Bajarilmoqda, Kutishda).
- Dastur hisoblagichi (PC): Bajarilishi kerak boʻlgan keyingi koʻrsatmaning manzili.
- Markaziy Protsessor registrlari: Protsessor registrlarining tarkibi (akkumulyatorlar, indeks registrlari, stek koʻrsatkichlari, umumiy maqsadli registrlar va har qanday shart-kod maʼlumotlari).
- Xotirani boshqarish maʼlumotlari: Jarayonga ajratilgan xotira haqidagi maʼlumotlar, masalan, baza va chegara registrlari, sahifa jadvallari yoki segment jadvallari.
- Hisob-kitob maʼlumotlari: Ishlatilgan protsessor vaqti miqdori, vaqt chegaralari, hisob raqamlari, ishlatilgan xotira miqdori va h.k.
- Kiritish-chiqarish holati haqidagi maʼlumotlar: Jarayonga ajratilgan kiritish-chiqarish qurilmalari, ochiq fayllar roʻyxati va h.k.
Jarayonlarni rejalashtirish
Jarayonlarni rejalashtirish — bu tayyor navbatdagi qaysi jarayonga protsessor ajratilishi kerakligini aniqlash faoliyatidir. Rejalashtirishning maqsadi maʼlum mezonlarga muvofiq tizim ish faoliyatini optimallashtirishdir, masalan, protsessor unumdorligini maksimal darajada oshirish, bajarilish vaqtini minimallashtirish yoki jarayonlar oʻrtasida adolatni taʼminlash.
Rejalashtirish navbatlari
Operatsion tizim jarayonlarni boshqarish uchun navbatlardan foydalanadi. Keng tarqalgan navbatlarga quyidagilar kiradi:
- Ishlar navbati: Tizimdagi barcha jarayonlarni oʻz ichiga oladi.
- Tayyor navbat: Bajarilishga tayyor boʻlgan va protsessorni kutayotgan barcha jarayonlarni oʻz ichiga oladi.
- Qurilmalar navbati: Har bir kiritish-chiqarish qurilmasi uchun bittadan navbatlar toʻplami boʻlib, ular ushbu qurilmani kutayotgan jarayonlarni oʻz ichiga oladi.
Rejalashtiruvchilar
Rejalashtiruvchilar — bu keyingi ishga tushiriladigan jarayonni tanlaydigan tizim dasturiy modullaridir. Rejalashtiruvchilarning ikki asosiy turi mavjud:
- Uzoq muddatli rejalashtiruvchi (Ishlar rejalashtiruvchisi): Ishlar navbatidan jarayonlarni tanlab oladi va ularni bajarish uchun xotiraga yuklaydi. U multiprogrammalash darajasini (xotiradagi jarayonlar sonini) nazorat qiladi. U qisqa muddatli rejalashtiruvchiga qaraganda kamroq ishlaydi.
- Qisqa muddatli rejalashtiruvchi (Protsessor rejalashtiruvchisi): Tayyor navbatdan jarayonni tanlaydi va unga protsessorni ajratadi. U juda tez-tez ishlaydi, shuning uchun tez boʻlishi kerak.
Baʼzi tizimlarda multiprogrammalash darajasini kamaytirish uchun jarayonlarni xotiradan (diskka) chiqarib, qayta kiritadigan oʻrta muddatli rejalashtiruvchi ham mavjud. Bu, shuningdek, svoping (swapping) deb ataladi.
Rejalashtirish algoritmlari
Koʻplab rejalashtirish algoritmlari mavjud boʻlib, ularning har biri oʻzining kuchli va zaif tomonlariga ega. Algoritmni tanlash tizimning aniq maqsadlariga bogʻliq. Quyida baʼzi keng tarqalgan algoritmlar keltirilgan:
- Birinchi kelganga birinchi xizmat koʻrsatish (FCFS): Jarayonlar kelish tartibida bajariladi. Amalga oshirish oson, ammo agar uzun jarayon birinchi boʻlib kelsa, qisqa jarayonlar uchun uzoq kutish vaqtlariga olib kelishi mumkin (karvon effekti).
- Eng qisqa ish birinchi (SJF): Eng qisqa bajarilish vaqtiga ega jarayonlar birinchi boʻlib bajariladi. Oʻrtacha kutish vaqtini minimallashtirish nuqtai nazaridan optimal, lekin bajarilish vaqtini oldindan bilishni talab qiladi, bu esa koʻpincha imkonsizdir.
- Ustuvorlikka asoslangan rejalashtirish: Har bir jarayonga ustuvorlik belgilanadi va eng yuqori ustuvorlikka ega jarayon birinchi boʻlib bajariladi. Agar past ustuvorlikdagi jarayonlar doimiy ravishda yuqori ustuvorlikdagi jarayonlar tomonidan toʻxtatib turilsa, bu ochlikka (starvation) olib kelishi mumkin.
- Aylanma tartib (Round Robin - RR): Har bir jarayonga bajarish uchun belgilangan vaqt boʻlagi (kvant) beriladi. Agar jarayon vaqt boʻlagi ichida tugamasa, u tayyor navbatning oxiriga oʻtkaziladi. Adolatli va ochlikni oldini oladi, lekin agar vaqt boʻlagi juda kichik boʻlsa, kontekstni almashtirish xarajatlari samaradorlikni pasaytirishi mumkin.
- Koʻp darajali navbatlarni rejalashtirish: Tayyor navbat bir nechta navbatlarga boʻlinadi, ularning har biri oʻz rejalashtirish algoritmiga ega. Jarayonlar oʻz xususiyatlariga (masalan, interaktiv va paketli) qarab navbatlarga tayinlanadi.
- Qayta aloqali koʻp darajali navbatlarni rejalashtirish: Jarayonlar turli navbatlar oʻrtasida harakatlanishi mumkin. Bu rejalashtiruvchiga jarayonlarning xatti-harakatlariga qarab ularning ustuvorligini dinamik ravishda sozlash imkonini beradi.
Misol: Burst vaqtlari (bajarilish vaqtlari) mos ravishda 24, 3 va 3 millisekund boʻlgan P1, P2 va P3 uchta jarayonni koʻrib chiqaylik. Agar ular P1, P2, P3 tartibida kelsa, FCFS rejalashtiruvi P1, soʻngra P2, soʻngra P3 ning ishlashiga olib keladi. Oʻrtacha kutish vaqti (0 + 24 + 27) / 3 = 17 millisekund boʻladi. Biroq, agar biz SJF dan foydalansak, jarayonlar P2, P3, P1 tartibida bajariladi va oʻrtacha kutish vaqti (0 + 3 + 6) / 3 = 3 millisekund boʻladi – bu sezilarli yaxshilanish!
Jarayonlararo aloqa (JPA)
Jarayonlararo aloqa (JPA) jarayonlarga bir-biri bilan aloqa qilish va sinxronlashish imkonini beradi. Bu birgalikda ishlaydigan bir nechta jarayonlardan iborat murakkab ilovalarni yaratish uchun zarurdir.
Keng tarqalgan JPA mexanizmlari:
- Umumiy xotira: Jarayonlar bir xotira hududini birgalikda ishlatadilar, bu ularga maʼlumotlarga toʻgʻridan-toʻgʻri kirish va oʻzgartirish imkonini beradi. Poyga holatlarini (race conditions) oldini olish uchun ehtiyotkorlik bilan sinxronizatsiya qilishni talab qiladi.
- Xabar uzatish: Jarayonlar bir-biriga xabar yuborish orqali aloqa qiladi. Umumiy xotiraga qaraganda yaxshiroq izolyatsiyani taʼminlaydi, ammo sekinroq boʻlishi mumkin.
- Kanallar (Pipes): Ikki jarayon oʻrtasidagi bir tomonlama aloqa kanali. Odatda bogʻliq jarayonlar (masalan, ota-ona va bola) oʻrtasidagi aloqa uchun ishlatiladi.
- Nomlangan kanallar (FIFOs): Kanallarga oʻxshash, ammo bogʻliq boʻlmagan jarayonlar oʻrtasidagi aloqa uchun ishlatilishi mumkin.
- Xabarlar navbatlari: Jarayonlar navbatga xabar yuborishi va undan qabul qilishi mumkin. Asinxron aloqani taʼminlaydi.
- Soketlar: Bir xil mashinadagi yoki tarmoq orqali jarayonlar oʻrtasidagi aloqa uchun koʻp qirrali mexanizm. Mijoz-server ilovalari va taqsimlangan tizimlar uchun ishlatiladi.
- Signallar: Jarayonga biror hodisa haqida xabar berish uchun yuborilishi mumkin boʻlgan dasturiy uzilish (masalan, tugatish soʻrovi, xato holati).
Misol: Veb-server bir vaqtning oʻzida kiruvchi soʻrovlarni qayta ishlash uchun bir nechta jarayonlardan foydalanishi mumkin. Har bir jarayon bitta soʻrovni qayta ishlashi mumkin va jarayonlar server holati haqidagi maʼlumotlarni almashish uchun umumiy xotira yoki xabar uzatish orqali aloqa qilishi mumkin.
Sinxronizatsiya
Bir nechta jarayonlar umumiy resurslarga kirganda, maʼlumotlarning buzilishi va poyga holatlarini oldini olish uchun sinxronizatsiyani taʼminlash juda muhimdir. Sinxronizatsiya mexanizmlari jarayonlar bajarilishini muvofiqlashtirish va umumiy maʼlumotlarni himoya qilish usullarini taqdim etadi.
Keng tarqalgan sinxronizatsiya usullari:
- Myuteks qulflari (Mutex Locks): Kodning kritik qismini himoya qilish uchun ishlatilishi mumkin boʻlgan binar semafor. Bir vaqtning oʻzida faqat bitta jarayon myuteks qulfiga ega boʻlishi mumkin.
- Semaforlar: Cheklangan miqdordagi resurslarga kirishni nazorat qilish uchun ishlatilishi mumkin boʻlgan myuteks qulflarining umumlashtirilgan koʻrinishi.
- Monitorlar: Umumiy maʼlumotlarni va ularda bajarilishi mumkin boʻlgan amallarni oʻz ichiga olgan yuqori darajadagi sinxronizatsiya konstruksiyasi. Oʻzaro istisno va kutish hamda signal berish uchun shartli oʻzgaruvchilarni taqdim etadi.
- Shartli oʻzgaruvchilar: Jarayonlarga maʼlum bir shartning toʻgʻri boʻlishini kutish imkonini berish uchun monitorlar ichida ishlatiladi.
- Spinloklar: Jarayon qulf mavjudligini qayta-qayta tekshiradigan qulf turi. Qisqa kritik boʻlimlar uchun samarali boʻlishi mumkin, ammo qulf uzoq vaqt ushlab turilsa, protsessor vaqtini isrof qiladi.
Misol: Bir nechta jarayonlar tomonidan oshiriladigan umumiy hisoblagichni koʻrib chiqing. Sinxronizatsiyasiz bir nechta jarayon hisoblagich qiymatini oʻqib, uni oshirib, qayta yozishi mumkin, bu esa notoʻgʻri natijalarga olib keladi. Oshirish operatsiyasini himoya qilish uchun myuteks qulfidan foydalanish bir vaqtning oʻzida faqat bitta jarayon hisoblagichga kirishini taʼminlaydi va poyga holatlarining oldini oladi.
Boshi berk koʻcha (Deadlock)
Boshi berk koʻcha ikki yoki undan ortiq jarayonlar cheksiz bloklanib qolganda yuzaga keladi, har biri boshqasi tomonidan ushlab turilgan resursni kutadi. Bu tizimni toʻxtatib qoʻyishi mumkin boʻlgan jiddiy muammodir.
Boshi berk koʻcha yuzaga kelishining shartlari:
Boshi berk koʻcha yuzaga kelishi uchun bir vaqtning oʻzida toʻrtta shart bajarilishi kerak (Koffman shartlari):
- Oʻzaro istisno: Kamida bitta resurs boʻlinmaydigan rejimda ushlab turilishi kerak; yaʼni bir vaqtning oʻzida faqat bitta jarayon resursdan foydalanishi mumkin.
- Ushlab turish va kutish: Jarayon kamida bitta resursni ushlab turgan holda, hozirda boshqa jarayonlar tomonidan ushlab turilgan qoʻshimcha resurslarni olishni kutishi kerak.
- Majburan tortib olmaslik: Resurslar jarayondan majburan tortib olinishi mumkin emas; resurs faqat uni ushlab turgan jarayon tomonidan ixtiyoriy ravishda boʻshatilishi mumkin.
- Aylanma kutish: Kutayotgan jarayonlar toʻplami {P0, P1, ..., Pn} mavjud boʻlishi kerak, shunda P0 P1 tomonidan ushlab turilgan resursni kutadi, P1 P2 tomonidan ushlab turilgan resursni kutadi, ..., Pn-1 Pn tomonidan ushlab turilgan resursni kutadi va Pn P0 tomonidan ushlab turilgan resursni kutadi.
Boshi berk koʻchalarni bartaraf etish usullari:
Boshi berk koʻchalarni bartaraf etishning bir necha yondashuvlari mavjud:
- Boshi berk koʻchaning oldini olish: Koffman shartlaridan kamida bittasining bajarilmasligini taʼminlash. Masalan, jarayonlardan barcha resurslarni bir vaqtning oʻzida soʻrashni talab qilish yoki resurslarni majburan tortib olishga ruxsat berish.
- Boshi berk koʻchadan qochish: Boshi berk koʻcha holatiga tushib qolmaslik uchun resurslarni taqsimlash haqidagi maʼlumotlardan foydalanish. Bankir algoritmi keng tarqalgan misoldir.
- Boshi berk koʻchani aniqlash va tiklash: Boshi berk koʻchalar sodir boʻlishiga yoʻl qoʻyish, soʻngra ularni aniqlash va tiklash. Tiklash jarayonlarni tugatish yoki resurslarni majburan tortib olishni oʻz ichiga olishi mumkin.
- Boshi berk koʻchani eʼtiborsiz qoldirish: Muammoni eʼtiborsiz qoldirish va u sodir boʻlmaydi deb umid qilish. Bu koʻpchilik operatsion tizimlar, jumladan Windows va Linux tomonidan qoʻllaniladigan yondashuv, chunki boshi berk koʻchaning oldini olish va undan qochish qimmatga tushishi mumkin.
Misol: Ikki jarayon, P1 va P2, va ikki resurs, R1 va R2 ni koʻrib chiqing. P1 R1 ni ushlab turibdi va R2 ni kutmoqda, P2 esa R2 ni ushlab turibdi va R1 ni kutmoqda. Bu aylanma kutishni yaratadi va boshi berk koʻchaga olib keladi. Ushbu boshi berk koʻchaning oldini olishning bir usuli — jarayonlardan ishni boshlashdan oldin barcha resurslarni bir vaqtning oʻzida soʻrashni talab qilishdir.
Haqiqiy hayotdan misollar
Jarayonlarni boshqarish tushunchalari butun dunyodagi turli operatsion tizimlarda qoʻllaniladi:
- Linux: Barcha jarayonlarga protsessor vaqtini adolatli taqsimlashni maqsad qilgan, Toʻliq Adolatli Rejalashtiruvchi (Completely Fair Scheduler - CFS) deb nomlangan murakkab rejalashtirish algoritmidan foydalanadi.
- Windows: Bir nechta ustuvorlik darajalariga ega boʻlgan ustuvorlikka asoslangan rejalashtirish algoritmini qoʻllaydi.
- macOS: Ustuvorlikka asoslangan rejalashtirishni vaqt boʻlaklari bilan birlashtirgan gibrid yondashuvdan foydalanadi.
- Android: Linux yadrosiga qurilgan boʻlib, u mobil qurilmalar uchun optimallashtirilgan oʻxshash jarayonlarni boshqarish usullaridan foydalanadi.
- Haqiqiy vaqt operatsion tizimlari (RTOS): Oʻrnatilgan tizimlar va muhim ilovalarda qoʻllaniladi, koʻpincha vazifalarni oʻz vaqtida bajarilishini kafolatlaydigan maxsus rejalashtirish algoritmlaridan foydalanadi. Misollar: VxWorks va FreeRTOS.
Xulosa
Jarayonlarni boshqarish — bu operatsion tizimlarning koʻp vazifalilik, resurslarni birgalikda ishlatish va tizimdan samarali foydalanishni taʼminlaydigan muhim jihatidir. Ushbu qoʻllanmada muhokama qilingan tushunchalarni tushunish operatsion tizimlar bilan ishlaydigan, ilovalar ishlab chiqadigan yoki tizimlarni boshqaradigan har bir kishi uchun zarurdir. Jarayon holatlari, rejalashtirish algoritmlari, jarayonlararo aloqa va boshi berk koʻchalarni bartaraf etishni oʻzlashtirib, siz yanada mustahkam, samarali va ishonchli dasturiy tizimlarni yaratishingiz mumkin. Turli yondashuvlar oʻrtasidagi murosasani hisobga olishni va oʻzingizning maxsus ehtiyojlaringizga eng mos keladigan usullarni tanlashni unutmang.
Qoʻshimcha oʻrganish uchun
Jarayonlarni boshqarish boʻyicha tushunchangizni chuqurlashtirish uchun quyidagi manbalarni oʻrganishni oʻylab koʻring:
- Operating System Concepts, mualliflar Abraham Silberschatz, Peter Baer Galvin va Greg Gagne
- Modern Operating Systems, muallif Andrew S. Tanenbaum
- Coursera, edX va Udacity kabi platformalardagi operatsion tizimlar boʻyicha onlayn kurslar va darsliklar.
- Siz tanlagan operatsion tizimning hujjatlari (masalan, Linux man sahifalari, Windows API hujjatlari).