Proseslər
Proses - EHM-in yaddaşına yüklənən proqram kodu və verilənlərin məcmusu anlayışıdır. Proses - yerinə yetirilməmiş proqram (application) və ya əmrdir. Belə ki, proqram - eyni zamanda bir neçə proses yarada bilər. Prosesin kodu zamanın cari anaında yerinə yetirilməyə bilər. Belə ki, proses gözləmə rejimində ola bilər. Bu halda bu cür prosesin kodunun yerinə yetirilməsi dayandırılmış olur. Proses 3 vəziyyətdə ola bilər:
İşləyən proses - yəni, hal-hazırda bu prosesin kodu yerinə yetirilir;
Gözləyən (yatmış - sleeping) proses - hal-hazırda bu prosesin kodu yerinə yetirilmir. Hər hansı bir xəbər gözləyir.
Zombi prosesi - proses özü artıq mövcud deyil, onun kodu və verilənləri artıq operativ yaddaşdan çıxarılıb. Lakin, bu və ya digər səbəbdən proseslər cədvəlində qalıb.
Sistemdəki hər bir prosesə 1-65535 diapozonundan olan bir ədədi identifikator (PID - Preocess Identifier) və ya ana prosesin identifikatoru (PPID - Parent Process Idetifier) uyğun gəlir. PID - prosesin adıdır. Bu ada əsasən ƏS-də biz prosesləri idarə etmək və onlara baxmaq üçün müxtəlif vasitələrdən istifadə zamanı prosesləri adresləyə bilərik. PPID proseslər arasında valideyn münasibətlərini təyin edir. Bu proseslər onun əlamətlərini və imkanlarını əhəmiyyətli dərəcədə müəyyən edir.
Proqramın işi üçün vacib olan digər parametrləri “prosesin ətrafı” adlandırırlar. Belə parametrlərdən biri - idarə edici (nəzarət terminalı) terminaldır. Hər hansı bir terminala bağlı olmayan proseslər “demonlar” adlanır. İstifadəçi tərəfindən işə salınmış bu cür proseslər seans bitənə qədər öz işini bitirmir, cari seansla əlaqəsi yoxdursa, işini davam etdirir və avtomatik sona çata bilməz. Bir qayda olaraq demonlar vasitəsilə server xidmətləri reallaşdırılır. Belə ki, məsələn, çap serveri cupsd demonu - prosesi jurnallaşdırma isə - syslogd ilə realizə olunur.
Linuxda proseslərin siyahısına baxmaq üçün ps əmri istifadə olunur.
ps - parametrsiz şəkildə bu əmr bütün prosesləri göstərir. Bu proseslər demonlar istisna olmaqla, cari sessia zamanı işə salınan proseslərdir.
ps <PID> - PID nömrəsi göstərilmiş proses haqqında məlumat sətrini ekrana çıxarır;
ps <options> - burada options, ps əmrinin parametridir. options - aşağıdakı qiymətlərdən birini və bir neçəsini ala bilər:
-A və ya -e - bütün prosesləri göstərmək;
-f - prosesləri əlifbaya əsasən nizalamaq;
-w - proseslər haqqında məlumatın tam sətrini ekrana çıxarmaq üçün istifadə olunur. Əgər onlar ekranın uzunluğundan uzundursa, onda yazı növbəti sətrə keçməlidir;
-w w - parametri təsvir olunan sətrin uzunluğuna qoyulan məhdudiyyətləri ümumiyyətlə götürməyə imkan verir və lazım gəldikdə 2 və ya daha çox sətri ekrana çıxarır.
Linux ƏS-də proseslər hansı istifadə tərəfindən başlanılıbsa və həmin istifadəçinin hansı səlahiyyətləri varsa, o səlahiyyətlərə də malikdir.
Əslində ƏS onda işləyən istifadəçini həmin istifadəçinin adından (tərəfindən) yerinə yetirilən proseslər kimi qəbul edir. İstifadəçiyə aid olan seans terminalda onun adından açılır. Buna görə də “istifadəçinin fayla giriş səlahiyyəti” dedikdə, istifadəçinin adından fayla girişi yerinə yetirən proseslərə giriş səlahiyyəti başa düşülür.
Yerinə yetirilən proseslərin istifadəçinin adının təyin olunması üçün ƏS, prosesi təyin edən istifadə və qrupların real idetifikatorlarından istifadə edir. Lakin, bu identifikatorlar səlahiyyətlərin tərin olunmasında qərarverici rol oynayır. Bunun üçün hər bir prosesin daha effektiv başqa bir identifikatorlar qrupu var.
Bir qayda olaraq, prosesin real və effektiv identifikatorları eyni olur, lakin, istisnalar da var. Məsələn, passwd utilitləri ilə iş üçün superistifadəçinin identifikatorunu istifadə etmək lazımdır ki. Belə ki,yalnız superistifadəçi parol faylına yaza və onu dəyişə bilər. Bu halda proseslərin effektiv identifikatorlaru real identifikatorlardan fərqlənir.
Hər bir faylın daha bir giriş səlahiyyətləri mövcuddur - SUID və SGID bitləri. Bu bitlər proqram işə salındığı zaman onun sahibinə və qrup sahibinə effektiv identifikator təyin etməyə və başqa istifadəçinin giriş səlahiyyətləri ilə prosesi yerinə yetirir. Beləliklə, passwd faylı root istifadəçisinə aiddir və onda SUID biti quraşdırılıb. Belə ki, proses işə salındığı zaman passwd, root istifadəçisinin səlahiyyətlərinə malik olacaq.
SUID və SGID bitləri chmod proqramı vasitəsilə qurulur.
chmod u+s <file_name> - SUID bitinin quraşdırılması;
chmod g+s <file_name> - SGID bitinin quraşdırılması.
Bu bitlərin quraşdırılması üçün mütləq rejimdə onları 3 bit şəklində göstərmək lazımdır: uyğun olaraq SUID, SGID, sticky bit.
Xüsusi bitləri quraşdırmaq üçün lazımi səlahiyyətləri irəli sürdükdən sonra ədədin əvvəlinə rəqəm qoymaq lazımdır.
ƏS-də rahat işləmək üçün proseslərin təsviri üsulları, onlara giriş saləhiyyətinin təyin olunması azdır. Prosesləri daha effektiv şəkildə idarə etmək lazımdır. İdarəetməni təmin etmək üçün proseslər cədvəlinin strukturuna baxaq.
Sistemdə bütün proseslərin valideyni init prosesidir. Onun PID-si 1, PPID isə 0-dır. Proseslər cədvəlinin hamısını ağac şəklində göstərmək olar. Bu ağacın kökü init olacaq. Bu proses nüvənin bir hissəsi deyil, lakin, sistemdə böyük rol oynayır.
Adları kvadrat mötərizədə yazılan proseslər (məsələn, [kventd] ) nüvənin prosesləridir. Bu proseslər sistemin işini idarə edir. Daha dəqiq desək, onun yaddaş meneceri, prosessorun zaman planlayıcısı, daxili qurğular kimi bəzi hissələrini idarə edir.
Digər proseslər istifadə prosesləridir və terminaldan, yaxud sistem işə salındığı zaman başladılıblar.
Hər bir prosesin müddəti aşağıdakı mərhələlərdən ibarətdir:
1. Prosesin yaradılması:
Bu mərhələdə yeni prosesi yaradan prosesin tam kopyası yaradılır. Məsələn, siz yerini yetirilməsi üçün terminaldan ls əmrini vermisiz. Terminal özünün tam kopyasını yaradır.
2. Prosesin kodunun yüklənməsi və yerinə yetirilməyə hazırlanması:
Birinci mərhələdə yaradılmış nüsxə, yerinə yetirilməsi vacib olan məsələnin kodu ilə əvəz olunur və onun ətradı yaradılır. Yəni, lazımi dəyişənlər təyin olunur.
3. Zombi vəziyyəti:
Bu mərhələdə prosesin yerinə yetirilməsi sona çatıb, onun kodu yaddaçdan çıxarılır, ətrafı dağıdılır, proseslər cədvəldəki yazısı ilə qalır.
4. Prosesin ölməsi:
Bütün yekun mərhələlərdən sonra, proseslər cədvəlindən yazı silinir və beləliklə, proses öz işini bitirir.
Prosesin işləməsi zamanı nüvə onun vəziyyətini yoxlayır və fövqəladə bir hal baş verdikdə ona siqnal göndərmək prosesini idarə edir. Bu proses susmaya görə fəaliyyət göstərə bilər; və ya əgər, onun siqnal işlədicisi varsa, onda o, siqnalı tuta və ya yox saya bilər. SIGKILL və SIGSTOP siqnallarını tutmaq və ya yox saymaq mümkün deyil.
Susmaya görə bir neçə fəaliyyət var:
ignore (yox saymaq) - siqnalın alınmasına baxmayaraq işi davam etdirmək;
bitirmək - prosesin işini bitirmək;
bitirmək + core - prosesin işini bitirmək və cari kataloqda core adlı fayl yaratmaq; core faylı prosesin yaddaşının obrazını (kod və verilənlər) özündə saxlayır.
dayandırmaq - prosesin yerinə yetirilməsini dayandırmaq, lakin, onu bitirməmək və kodu yaddaşdan çıxarmamaq;
Layihəçi, proseslərin həyatında əhəmiyyətli rol oynayır.
Layihəçi - nüvənin bu hissəsi, sistemin çoxməsələliyinə cavabdehdir. Bir zaman vahidində prosessorda yalnız bir məsələ yerinə yetirilə bilər. Məhz, layihəçi (planner) təyin edir ki, işə salınmış proseslərdən hansı birinci, hansı ikinci yerinə yetiriləcək. Bunun üçün hər bir prosesin prioriteti adlanan daha bir parametri var. Proseslərin prioritetlərinə baxmaq üçün ps əmrini -l (long - geniş məlumat) parametri ilə vermək olar.
Öz işi zamanı layihəçi ilk növbədə məsələnin yerinə yetirilməsi prioritetini aşağıdakı ədəd qoyur. Yəni, prioritetini qaldırır. Belə ki, sıfır prioriteti yalnız kritik sistem məsələlərinə məxsusdur. Mənfi (-) prioritetlər isə nüvənin proseslərinə məxsusdur. Böyük prioritetli məsələlər daha az prosessor vaxtı alır və buna görə də onlar bir qayda olaraq yavaş işləyir və daha az sistem resursları tələb edirlər.
Belə bir sual yaranır ki, bəs istifadəçi prosesləri ilə sistem parametrlərini idarə edə bilərmi? Əlbəttə ki, bəli. Bunun üçün Linuxda prosesin prinsipini dəyişməyə, proseslər siqnal göndərməyə imkan verən alətlər toplusu var.
nice -<n> <command_name> - prosesin işə düşdükdən sonra yerinə yetiriləcəyi prioritetini dəyişməyə imkan verir. command_name - əmrin adı göstərilmədən bu əmri versək, onda nəticədə prosesin cari prioritetini ekrana çıxaracaq. Burada n - susmaya görə 10-dur. Prioritetlərin diapazonu -20 ilə 19 arasında dəyişir.
nohup <command_name> - hətta, nəzarət terminalını (SIGHUP) itirsə belə, prosesə işini davam etdirməyə imkan verir. Bu əmri, davamlı işlətmək icra üçün istifadə etmək əlverişlidir. Siz əmri işə salırsınız və terminal seansını bağlayırsınız. Əmr öz işini davam etdirir.
kill -<SIGNAL> <pid> - PID identifikatorlu prosesə siqnal göndərir. Əgər siqnal göstərilməyibsə, bu əmr prosesə susmaya görə SIGTERM siqnalını göndərir.
killall -s <SIGNAL> <process_name> - process_name adlı bütün proseslərə SIGNAL siqnalını göndərir. Əgər siqnal göstərilməyibsə, bu əmr prosesə susmaya görə SIGTERM siqnalını göndərir.
Bu əmr üçün siqnalı SIG prefiksi olmadan vermək lazımdır. Ədədi şəkildə uyğunluq və siqnalın adını əldə etmək üçün killall əmri ilə -l parametri verilir.