|
Linux tizimida jarayonlar
|
bet | 186/222 | Sana | 15.05.2024 | Hajmi | 5,84 Mb. | | #236377 |
Linux tizimidagi asosiy faol obyektlar - bu jarayonlar. Har bir jarayon bitta dasturni bajaradi va dastlab bitta boshqaruv oqimini oladi. Boshqacha qilib aytganda, jarayonda keyingi bajariladigan ko‘rsatmalarni kuzatib boradigan bitta ko‘rsatma hisoblagichi mavjud. Linux qo‘shimcha jarayonlarni yaratishga imkon beradi (bajarishni boshlaganidan keyin). Linux - ko‘p vazifali tizim va bir vaqtning
o‘zida bir nechta mustaqil jarayonlar ishlashi mumkin. Bundan tashqari, har bir foydalanuvchi bir vaqtning o‘zida bir nechta faol jarayonlarga ega bo‘lishi mumkin, shuning uchun bir vaqtning o‘zida yuzlab va hatto minglab jarayonlar katta tizimda ishlashi mumkin. Aslida, bitta foydalanuvchi ishchi stansiyalarida o‘nlab fon jarayonlari mavjud, ular demonlar (daemons) deb nomlanadi. Ular tizim qobig‘idan ishga tushganda boshlanadi. Oddiy demon - bu cron. Ushbu demon sizga Linux tizimingizni bir necha daqiqa, soat, kun va hatto oylar davomida rejalashtirishga imkon beradi. Masalan, foydalanuvchi keyingi seshanba kuni soat 3 da tish shifokoriga borishi rejalashtirilgan deb tasavvur qilamiz. Belgilangan kun va vaqt kelganda, cron demon o‘z ishini ko‘radi va o‘z vaqtida ovozli signal dasturini (yangi jarayon shaklida) boshlaydi. Cron demon shuningdek, vaqti-vaqti bilan vazifalarni bajarish uchun ishlatiladi, masalan, har kuni soat 4.00 da diskdan nusxa olish. Demonlar Linux tizimida juda sodda tarzda amalga oshiriladi, chunki ularning har biri boshqa jarayonlarga qaramasdan alohida jarayon hisoblanadi. Linux operatsion tizimida jarayonlar yaratish juda oddiydir. Fork tizim chaqiruvi asl jarayon nusxasini yaratadi, ona jarayoni (parent process) deb ataladi. Yangi jarayon farzand jarayoni (child process) deb ataladi. Ona va farzand jarayonlari o‘zlarining shaxsiy xotira maydoniga ega. Agar ona jarayoni keyinchalik biron bir o‘zgaruvchini o‘zgartirsa, unda bu o‘zgarishlar farzand jarayoniga ko‘rinmaydi (va aksincha). Ochiq fayllar ona va farzand jarayonlari o‘rtasida almashiladi. Bu shuni anglatadiki, agar biron-bir fayl fork tizim chaqirig‘idan oldin ona jarayonida ochilgan bo‘lsa, kelajakda ikkala jarayonda ham ochiq qoladi. Ushbu faylga biron bir jarayon tomonidan kiritilgan o‘zgartirishlar boshqasiga ko‘rinadigan bo‘ladi. Bu xatti-harakatlar yagona oqilona usuldir, chunki bu o‘zgarishlar ushbu faylni ochadigan har qanday boshqa jarayon uchun ham ko‘rinadi.
Linux operatsion tizimida jarayonni yaratish
pid = fork( ); /* agar fork muvaffaqiyatli tugatilsa, pid > 0 ona jarayonida */
if (pid < 0) {
handle_error(); /* fork muvaffaqiyatsiz tugadi (masalan, xotira yoki qandaydir jadval to‘lib qolsa) */
} else if (pid > 0) { /* bu yerda ona kodi joylashgan */
} else { /* bu yerda farzand kodi joylashgan */
}
Jarayonlar o‘zlarining PID-lariga ega bo‘ladilar (PID-jarayon identifikatori). Yuqorida aytib o‘tilganidek, jarayon yaratilganda, uning PID-si yangi jarayonning onasiga beriladi. Jarayon identifikatorlari turli xil usullarda qo‘llaniladi. Masalan, farzand jarayoni tugaganda, uning onasi yangi tugatilgan farzand jarayonining PID-ni oladi. Bu juda muhim bo‘lishi mumkin, chunki ona jarayonida ko‘plab farzand jarayonlari bo‘lishi mumkin. Farzand jarayonning ham farzand jarayonlari bo‘lishi mumkin. Linux tizimida jarayonlar bir-birlari bilan xabarlarning biron bir shaklidan foydalangan holda aloqa o‘rnatishi mumkin. Siz ikkita jarayon o‘rtasida kanal yaratishingiz mumkin, bunda bitta jarayon baytlar oqimini yozishi mumkin, boshqa jarayon esa o‘qishi mumkin. Ushbu kanallar ba’zan kanallar (pipes) deb ataladi. Jarayonni sinxronizatsiya qilish bo‘sh kanaldan ma’lumotlarni o‘qiyotganda jarayonni blokirovka qilish orqali amalga oshiriladi. Kanalda ma’lumotlar paydo bo‘lganda, jarayon blokdan chiqariladi. Jarayonlar boshqa usulda - dasturiy uzilishlardan foydalangan holda aloqa o‘rnatishi mumkin. Jarayonlar tizimga kiruvchi signal kelganida qanday harakatlar qilish kerakligini aytishi mumkin.
|
| |