Əməliyyat Sistemləri: Üç Asan Parça. Hissə 2: Abstraksiya: Proses (tərcümə)

Əməliyyat sistemlərinə giriş

Hey Habr! Fikrimcə, bir maraqlı ədəbiyyatın - OSTEP-in bir sıra məqalə-tərcümələrini diqqətinizə çatdırmaq istərdim. Bu material unix-ə bənzər əməliyyat sistemlərinin işini, yəni proseslər, müxtəlif planlaşdırıcılar, yaddaş və müasir ƏS-ni təşkil edən digər oxşar komponentlərlə işləməyi kifayət qədər dərindən müzakirə edir. Bütün materialların orijinalına burada baxa bilərsiniz burada. Nəzərə alın ki, tərcümə qeyri-peşəkar şəkildə (olduqca sərbəst) edilib, amma ümid edirəm ki, ümumi mənası saxlamışam.

Bu mövzuda laboratoriya işlərini burada tapa bilərsiniz:

Digər hissələr:

Kanalıma da baxa bilərsiniz teleqram =)

ƏS-nin istifadəçilərə təqdim etdiyi ən fundamental abstraksiyaya baxaq: proses. Prosesin tərifi olduqca sadədir - belədir çalışan proqram. Proqramın özü diskdə yerləşən cansız bir şeydir - bu, bir sıra təlimatlar və bəlkə də işə salınmağı gözləyən bəzi statik məlumatlardır. Həmin baytları götürən və onları işlədən, proqramı faydalı bir şeyə çevirən ƏS-dir.
Çox vaxt istifadəçilər eyni anda birdən çox proqramı işə salmaq istəyirlər, məsələn, laptopunuzda brauzer, oyun, media pleyer, mətn redaktoru və s. işlədə bilərsiniz. Əslində, tipik bir sistem eyni vaxtda onlarla və ya yüzlərlə prosesi işlədə bilər. Bu fakt sistemin istifadəsini asanlaşdırır, CPU-nun pulsuz olub-olmaması ilə bağlı heç vaxt narahat olmaq lazım deyil, sadəcə proqramları işlədirsiniz.

Bu, problem yaradır: bir çox CPU-nun illüziyasını necə təmin etmək olar? Yalnız bir fiziki CPU-nuz olsa belə, ƏS, demək olar ki, sonsuz sayda CPU illüziyasını necə yarada bilər?

OS bu illüziyanı CPU virtualizasiyası vasitəsilə yaradır. Bir prosesi başlatmaqla, sonra onu dayandırmaqla, başqa bir prosesə başlamaqla və s., ƏS çoxlu virtual CPU-nun olduğu illüziyasını saxlaya bilər, halbuki əslində bir və ya bir neçə fiziki prosessor olacaq. Bu texnika adlanır CPU resurslarının vaxta görə bölünməsi. Bu texnika istifadəçilərə istədikləri qədər paralel proseslər həyata keçirməyə imkan verir. Bu həllin dəyəri performansdır - çünki CPU bir neçə proses tərəfindən paylaşılırsa, hər bir proses daha yavaş işlənəcəkdir.
CPU virtualizasiyasını həyata keçirmək və xüsusilə bunu yaxşı etmək üçün ƏS həm aşağı səviyyəli, həm də yüksək səviyyəli dəstəyə ehtiyac duyur. Aşağı səviyyəli dəstək deyilir mexanizmləri funksionallığın tələb olunan hissəsini həyata keçirən aşağı səviyyəli metodlar və ya protokollardır. Belə funksionallıq nümunəsi OS-yə bir proqramı dayandırmaq və prosessorda başqa bir proqramı işə salmaq imkanı verən kontekstlərin dəyişdirilməsidir. Bu vaxt bölgüsü bütün müasir əməliyyat sistemlərində həyata keçirilir.
Bu mexanizmlərin üstündə "siyasətlər" şəklində ƏS-də quraşdırılmış bəzi məntiq var. Siyasət əməliyyat sistemi üçün müəyyən qərar qəbul etmə alqoritmidir. Bu cür siyasətlər, məsələn, ilk olaraq hansı proqramın işə salınacağına (əmrlər siyahısından) qərar verir. Belə ki, məsələn, bu problem adlı siyasət həll olunacaq planlayıcı (planlaşdırma siyasəti) və həll variantını seçərkən o, aşağıdakı məlumatları rəhbər tutacaq: başlanğıc tarixçəsi (son dəqiqələrdə hansı proqram ən uzun müddətə işə salınıb), bu prosesin hansı yükü daşıyır (hansı proqramlar işə salınıb), performans göstəriciləri (sistem olub-olmaması interaktiv qarşılıqlı əlaqə və ya ötürmə qabiliyyəti üçün optimallaşdırılmışdır ) və s.

Abstraksiya: proses

Əməliyyat sistemi tərəfindən icra edilən işləyən proqramın abstraksiyasını biz adlandırırıq proses. Daha əvvəl qeyd edildiyi kimi, proses sadəcə olaraq istənilən ani müddət ərzində işləyən proqramdır. Bu proqramın istifadə etdiyi və ya icrası zamanı təsir etdiyi müxtəlif sistem resurslarından ümumi məlumat əldə edə biləcəyimiz proqram.
Prosesin komponentlərini başa düşmək üçün sistemin vəziyyətlərini başa düşməlisiniz: proqramın işləməsi zamanı nə oxuya və ya dəyişə bilər. İstənilən vaxt proqramın icrası üçün sistemin hansı elementlərinin vacib olduğunu başa düşməlisiniz.
Sistemin açıq-aşkar elementlərindən biri prosesin daxil olmasıdır yaddaş. Təlimatlar yaddaşda yerləşir. Proqramın oxuduğu və ya yazdığı məlumatlar da yaddaşda yerləşir. Beləliklə, prosesin ünvanlaya biləcəyi yaddaş (ünvan sahəsi adlanır) prosesin bir hissəsidir.
Həmçinin sistem dövlətinin bir hissəsi registrlərdir. Bir çox göstərişlər registrlərin dəyərinin dəyişdirilməsinə və ya onların dəyərinin oxunmasına yönəldilmişdir və beləliklə, registrlər də prosesin əməliyyatının mühüm hissəsinə çevrilir.
Qeyd etmək lazımdır ki, maşın vəziyyəti də bəzi xüsusi registrlərdən formalaşır. Misal üçün, IP - göstəriş göstəricisi — proqramın hazırda icra etdiyi təlimatın göstəricisi. da var yığın göstərici və onunla əlaqədardır çərçivə göstəricisi, idarə etmək üçün istifadə olunan: funksiya parametrləri, yerli dəyişənlər və qayıdış ünvanları.
Nəhayət, proqramlar tez-tez ROM-a (yalnız oxunan yaddaş) daxil olur. Bu “I/O” (giriş/çıxış) məlumatı proses tərəfindən hazırda açıq olan faylların siyahısını ehtiva etməlidir.

proses API

Prosesin necə işlədiyinə dair anlayışımızı yaxşılaşdırmaq üçün hər hansı bir əməliyyat sistemi interfeysinə daxil edilməli olan sistem çağırışlarının nümunələrini öyrənək. Bu API-lər istənilən OS-də bu və ya digər formada mövcuddur.

Yaratmaq (yaratma): ƏS-də yeni proseslər yaratmağa imkan verən bəzi metodlar olmalıdır. Terminala bir əmr daxil etdikdə və ya simvolu iki dəfə klikləməklə proqramı işə saldıqda, yeni bir proses yaratmaq və sonra göstərilən proqramı işə salmaq üçün ƏS-ə zəng göndərilir.
Removal: Proses yaratmaq üçün interfeys olduğundan, ƏS həm də prosesin aradan qaldırılmasını məcbur etmək qabiliyyətini təmin etməlidir. Əksər proqramlar işlədikcə təbii olaraq öz-özünə başlayacaq və sona çatacaq. Əks halda istifadəçi onları öldürmək istəyər və beləliklə, prosesi dayandırmaq üçün interfeys faydalı olardı.
Gözləmək (gözləmə): Bəzən bir prosesin tamamlanmasını gözləmək faydalıdır, buna görə də gözləmə qabiliyyətini təmin edən bəzi interfeyslər təmin edilir.
Müxtəlif Nəzarət (müxtəlif nəzarət): Öldürmək və prosesi gözləməkdən əlavə, başqa müxtəlif nəzarət üsulları da var. Məsələn, əksər əməliyyat sistemləri prosesi dondurmaq (müəyyən müddət ərzində onun icrasını dayandırmaq) və sonra onu davam etdirmək (icraya davam etmək) imkanı verir.
Status (dövlət): Prosesin nə qədər müddət işlədiyi və ya hazırda hansı vəziyyətdə olduğu kimi bir prosesin statusu haqqında bəzi məlumatları əldə etmək üçün müxtəlif interfeyslər var.

Əməliyyat Sistemləri: Üç Asan Parça. Hissə 2: Abstraksiya: Proses (tərcümə)

Prosesin yaradılması: Təfərrüatlar

Maraqlı məqamlardan biri proqramların məhz proseslərə necə çevrilməsidir. Xüsusilə OS proqramı necə qəbul edir və işlədir. Proses tam olaraq necə yaradılır.
İlk növbədə, ƏS proqram kodunu və statik məlumatları yaddaşa (prosesin ünvan sahəsinə) yükləməlidir. Proqramlar adətən hansısa icra edilə bilən formatda diskdə və ya bərk-dövlət sürücüsündə yerləşir. Beləliklə, proqramın və statik məlumatların yaddaşa yüklənməsi prosesi ƏS-dən həmin baytları diskdən oxuyub yaddaşın hansısa yerində yerləşdirməyi tələb edir.

İlkin əməliyyat sistemlərində yükləmə prosesi həvəslə həyata keçirilirdi, yəni proqram işə salınmazdan əvvəl bütün kod yaddaşa yüklənirdi. Müasir əməliyyat sistemləri bunu tənbəlliklə edir, yəni kod və ya verilənləri yalnız proqramın icrası zamanı tələb etdikdə yükləyir.

Kod və statik məlumatlar ƏS yaddaşına yükləndikdən sonra, prosesin başlamazdan əvvəl görülməli olan daha bir neçə şey var. Yığın üçün müəyyən miqdarda yaddaş ayrılmalıdır. Proqramlar yerli dəyişənlər, funksiya parametrləri və qayıdış ünvanları üçün yığından istifadə edir. ƏS bu yaddaşı ayırır və prosesə verir. Yığın bəzi arqumentlərlə də ayrıla bilər, konkret olaraq o, main() funksiyasının parametrlərini, məsələn, argc və argv massivi ilə doldurur.

Əməliyyat sistemi proqram yığınına da müəyyən yaddaş ayıra bilər. Yığın proqramlar tərəfindən açıq şəkildə dinamik olaraq ayrılmış məlumatları tələb etmək üçün istifadə olunur. Proqramlar funksiyanı çağıraraq bu boşluğu tələb edir malloc () və funksiyanı çağırmaqla onu aydın şəkildə təmizləyir pulsuz(). Yığın əlaqəli vərəqlər, hash cədvəlləri, ağaclar və başqaları kimi məlumat strukturları üçün lazımdır. Əvvəlcə yığına az miqdarda yaddaş ayrılır, lakin zaman keçdikcə proqram işlədikcə yığın kitabxana API çağırışı malloc() vasitəsilə daha çox yaddaş tələb edə bilər. Əməliyyat sistemi bu zəngləri təmin etmək üçün daha çox yaddaşın ayrılması prosesində iştirak edir.

Əməliyyat sistemi həmçinin inisiallaşdırma tapşırıqlarını, xüsusən də I/O ilə əlaqəli olanları yerinə yetirəcək. Məsələn, UNIX sistemlərində hər bir proses standart olaraq standart giriş, çıxış və xəta üçün 3 açıq fayl deskriptoruna malikdir. Bu tutacaqlar proqramlara terminaldan daxil olan məlumatları oxumağa, həmçinin məlumatları ekranda göstərməyə imkan verir.

Beləliklə, kodu və statik verilənləri yaddaşa yükləmək, stek yaratmaq və işə salmaq və I/O tapşırıqlarının yerinə yetirilməsi ilə bağlı digər işləri yerinə yetirməklə ƏS prosesin yerinə yetirilməsi üçün mərhələni hazırlayır. Nəhayət, son bir vəzifə qalır: proqramı main() funksiyası adlanan giriş nöqtəsi vasitəsilə işə salmaq. Əsas () funksiyasını yerinə yetirməklə ƏS CPU idarəetməsini yeni yaradılmış prosesə ötürür və beləliklə proqram icrasına başlayır.

Proses vəziyyəti

İndi bir prosesin nə olduğunu və necə yaradıldığını bir az başa düşdük, gəlin onun ola biləcəyi prosesləri sadalayaq. Ən sadə formada proses bu dövlətlərdən birində ola bilər:
Running. Çalışarkən proses prosessorda işləyir. Bu o deməkdir ki, göstərişlər icra olunur.
Hazır. Hazır vəziyyətdə proses işləməyə hazırdır, lakin nədənsə ƏS onu müəyyən edilmiş vaxtda yerinə yetirmir.
Ban. Bloklanmış vəziyyətdə proses hansısa hadisə baş verənə qədər onun icraya hazır olmasına mane olan bəzi əməliyyatları yerinə yetirir. Ümumi bir nümunə, bir proses IO əməliyyatını başlatdıqda, digər prosessorun prosessordan istifadə edə bilməsi üçün bloklanır.

Əməliyyat Sistemləri: Üç Asan Parça. Hissə 2: Abstraksiya: Proses (tərcümə)

Bu vəziyyətləri qrafik şəklində təsəvvür edə bilərsiniz. Şəkildə gördüyümüz kimi, proses vəziyyəti ƏS-nin mülahizəsinə əsasən RUNNING və READY arasında dəyişə bilər. Prosesin vəziyyəti HAZIRDAN İŞLƏMƏYƏ dəyişdikdə, bu, prosesin planlaşdırıldığı anlamına gəlir. Əks istiqamətdə - layoutdan çıxarılır. Proses BLOKLANMASI zamanı, məsələn, mən IO əməliyyatına başlayıram, OS hər hansı hadisə baş verənə qədər, məsələn, IO tamamlanana qədər onu bu vəziyyətdə saxlayacaq. bu anda HAZIR vəziyyətinə və bəlkə də OS qərar verərsə, dərhal İŞLƏYƏN vəziyyətə keçid.
Bu dövlətlər vasitəsilə iki prosesin necə hərəkət etdiyinə dair bir nümunəyə baxaq. Başlamaq üçün, hər iki prosesin işlədiyini və hər birinin yalnız CPU istifadə etdiyini təsəvvür edək. Bu halda onların dövlətləri belə görünəcək.

Əməliyyat Sistemləri: Üç Asan Parça. Hissə 2: Abstraksiya: Proses (tərcümə)

Aşağıdakı misalda, bir müddət işlədikdən sonra birinci proses IO tələb edir və başqa bir prosesin işə salınmasına imkan verən BLOCKED vəziyyətinə daxil olur (Şəkil 1.4). ƏS 0 prosesinin CPU-dan istifadə etmədiyini görür və 1-ci prosesi başlayır. 1-ci proses işləyərkən IO tamamlanır və 0 prosesinin statusu HAZIR vəziyyətinə keçir. Nəhayət, 1-ci proses tamamlandı və tamamlandıqdan sonra 0-cı prosesi başlayır, icra edir və işini bitirir.

Əməliyyat Sistemləri: Üç Asan Parça. Hissə 2: Abstraksiya: Proses (tərcümə)

Məlumat strukturu

ƏS özü bir proqramdır və hər hansı digər proqram kimi, müxtəlif müvafiq məlumat hissələrini izləyən bəzi əsas məlumat strukturlarına malikdir. Hər bir prosesin vəziyyətini izləmək üçün OS bəzilərini dəstəkləyəcək proses siyahısı HAZIR vəziyyətdə olan bütün proseslər üçün və hazırda işləyən prosesləri izləmək üçün bəzi əlavə məlumatlar. Həmçinin, OS bloklanmış prosesləri izləməlidir. IO tamamlandıqdan sonra ƏS tələb olunan prosesi oyatmalı və onu işə hazır vəziyyətə gətirməlidir.

Məsələn, ƏS prosessor registrlərinin vəziyyətini saxlamalıdır. Proses dayandığı anda registrlərin vəziyyəti prosesin ünvan məkanında saxlanılır və onun fəaliyyətinin davam etdiyi anda registrlərin dəyərləri bərpa olunur və beləliklə də bu prosesin icrası davam etdirilir.

Hazır, bloklanmış, işləyən dövlətlərdən başqa bəzi başqa dövlətlər də var. Bəzən yaradılış zamanı proses INIT vəziyyətində ola bilər. Nəhayət, proses artıq başa çatdıqda, lakin onun məlumatı hələ təmizlənmədikdə, FINAL vəziyyətinə gətirilə bilər. UNIX sistemlərində bu vəziyyət adlanır zombi prosesi. Bu vəziyyət valideyn prosesinin uşağın qaytarma kodunu bilmək istədiyi hallar üçün faydalıdır, məsələn, adətən 0 müvəffəqiyyəti və 1 səhvi bildirir, lakin proqramçılar müxtəlif problemləri bildirmək üçün əlavə çıxış kodları verə bilərlər. Ana proses başa çatdıqda, o, uşaq prosesinin dayandırılmasını gözləmək üçün wait() kimi son sistem çağırışı edir və OS-yə dayandırılmış proseslə əlaqəli hər hansı məlumatı silə biləcəyi barədə siqnal verir.

Əməliyyat Sistemləri: Üç Asan Parça. Hissə 2: Abstraksiya: Proses (tərcümə)

Mühazirənin əsas məqamları:

proses — ƏS-də işləyən proqramın əsas abstraksiyası. İstənilən vaxt prosesi onun vəziyyəti ilə təsvir etmək olar: ünvan məkanındakı yaddaşın məzmunu, təlimat göstəricisi və yığın göstəricisi daxil olmaqla prosessor registrlərinin məzmunu və oxunan və ya yazılan açıq fayllar kimi IO məlumatı.
proses API proqramların proseslərə edə biləcəyi zənglərdən ibarətdir. Adətən bunlar yaratmaq, silmək və ya digər zənglərdir.
● Proses çalışır, hazır, bloklanıb da daxil olmaqla bir çox ştatlardan birindədir. Planlaşdırma, planlaşdırmadan istisnalar və ya gözləmələr kimi müxtəlif hadisələr prosesin vəziyyətini birindən digərinə dəyişə bilər.
Proses siyahısı sistemdəki bütün proseslər haqqında məlumat ehtiva edir. İçindəki hər bir giriş prosesə nəzarət bloku adlanır, əslində bu, müəyyən bir proses haqqında bütün lazımi məlumatları ehtiva edən bir quruluşdur. 

Mənbə: www.habr.com

Добавить комментарий