345
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 */
346
} 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.
Dostları ilə paylaş: