Əməliyyat Sistemləri: Üç Asan Parça. 1-ci hissə: Giriş (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:
- orijinal: pages.cs.wisc.edu/~remzi/OSTEP/Homework/homework.html
- orijinal: github.com/remzi-arpacidusseau/ostep-code
- şəxsi adaptasiyam: github.com/bykvaadm/OS/tree/master/ostep

Kanalıma da baxa bilərsiniz teleqram =)

Proqram əməliyyatı

Proqram işləyərkən nə baş verir? Çalışan proqram bir sadə işi görür - göstərişləri yerinə yetirir. Hər saniyə, milyonlarla və hətta bəlkə də milyardlarla təlimat prosessor tərəfindən RAM-dən alınır, öz növbəsində o, onları deşifrə edir (məsələn, bu təlimatların hansı tipə aid olduğunu tanıyır) və onları yerinə yetirir. Bu, iki ədəd əlavə etmək, yaddaşa daxil olmaq, şərti yoxlamaq, funksiyaya keçid və s. ola bilər. Bir göstəriş yerinə yetirildikdən sonra prosessor digərinin icrasına keçir. Və beləliklə, təlimatdan sonra təlimat, proqram başa çatana qədər yerinə yetirilir.
Bu misal təbii olaraq sadələşdirilmiş hesab olunur - əslində prosessoru sürətləndirmək üçün müasir avadanlıqlar əmrləri növbəsiz yerinə yetirməyə, mümkün nəticələri hesablamağa, təlimatları eyni vaxtda yerinə yetirməyə və buna bənzər fəndlər etməyə imkan verir.

Von Neumann hesablama modeli

Bizim təsvir etdiyimiz işin sadələşdirilmiş forması Von Neumann hesablama modelinə bənzəyir. Von Neumann kompüter sistemlərinin qabaqcıllarından biridir, eyni zamanda oyun nəzəriyyəsinin müəlliflərindən biridir.. Proqram işləyərkən, bir çox başqa hadisələr baş verir, bir çox digər proseslər və üçüncü tərəf məntiqi işləri, əsas məqsədi sistemin işə salınmasını, istismarını və saxlanmasını sadələşdirməkdir.
Proqramların işləməsini asanlaşdıran (və ya hətta eyni vaxtda birdən çox proqramın işləməsinə icazə verən) məsul olan proqramlar toplusu mövcuddur ki, bu proqramlar eyni yaddaşı paylaşmağa və müxtəlif cihazlarla əlaqə saxlamağa imkan verir. Belə proqram təminatı (proqram təminatı) mahiyyətcə əməliyyat sistemi adlanır və onun vəzifələrinə sistemin düzgün və səmərəli işləməsinə nəzarət etmək, həmçinin bu sistemin idarə edilməsinin asanlığını təmin etmək daxildir.

Əməliyyat sistemi

ƏS kimi qısaldılmış əməliyyat sistemi kompüter resurslarını idarə etmək və istifadəçinin kompüterlə qarşılıqlı əlaqəsini təşkil etmək üçün nəzərdə tutulmuş bir-biri ilə əlaqəli proqramlar toplusudur..
ƏS öz effektivliyinə ilk növbədə ən vacib texnika - texnika vasitəsilə nail olur virtuallaşdırma. ƏS fiziki resursla (prosessor, yaddaş, disk və s.) qarşılıqlı əlaqədə olur və onu özünün daha ümumi, daha güclü və istifadəsi asan formasına çevirir. Buna görə də, ümumi bir anlayış üçün əməliyyat sistemini virtual maşınla çox kobud şəkildə müqayisə edə bilərsiniz.
İstifadəçilərə əməliyyat sisteminə əmrlər vermək və bununla da virtual maşının imkanlarından istifadə etmək imkanı vermək üçün (məsələn, proqramın icrası, yaddaşın ayrılması, fayla daxil olmaq və s.) əməliyyat sistemi adlanan bəzi interfeys təmin edir. API (tətbiq proqramlaşdırma interfeysi) və zəng edə biləcəyiniz (zəng). Tipik bir əməliyyat sistemi yüzlərlə sistem zəngi etməyə imkan verir.
Nəhayət, virtuallaşdırma birdən çox proqramı işə salmağa (beləliklə, CPU-nu paylaşmağa) və eyni zamanda onların təlimatlarına və məlumatlarına daxil olmağa (beləliklə, yaddaşı paylaşır) və disklərə daxil olmağa (beləliklə, I/O cihazlarını paylaşmağa) imkan verdiyi üçün əməliyyat sistemi də adlanır. resurs meneceri. Hər bir prosessor, disk və yaddaş sistemin mənbəyidir və beləliklə, əməliyyat sisteminin rollarından biri bu əməliyyat sisteminin hansı vəzifəni yerinə yetirməsindən asılı olaraq, bu resursları idarə etmək, onu səmərəli, dürüst və ya əksinə etmək vəzifəsinə çevrilir. nəzərdə tutulmuşdur.

CPU virtualizasiyası

Aşağıdakı proqramı nəzərdən keçirin:
(https://www.youtube.com/watch?v=zDwT5fUcki4&feature=youtu.be)

Əməliyyat Sistemləri: Üç Asan Parça. 1-ci hissə: Giriş (tərcümə)

Heç bir xüsusi hərəkəti yerinə yetirmir, əslində onun etdiyi hər şey funksiya çağırmaqdır əyirmək(), vəzifəsi vaxt yoxlamasından keçmək və bir saniyə keçdikdən sonra geri qayıtmaqdır. Beləliklə, istifadəçinin arqument kimi ötürdüyü sətri qeyri-müəyyən müddətə təkrarlayır.
Gəlin bu proqramı işə salaq və ona arqument kimi “A” simvolunu verək. Nəticə xüsusilə maraqlı deyil - sistem sadəcə olaraq vaxtaşırı "A" simvolunu göstərən bir proqramı icra edir.
İndi gəlin eyni proqramın bir çox nümunəsi işləyərkən, lakin onu daha aydın etmək üçün fərqli hərflər çıxardıqda seçimi sınayaq. Bu vəziyyətdə nəticə bir qədər fərqli olacaq. Bir prosessorumuz olmasına baxmayaraq, proqram eyni vaxtda icra olunur. Bu necə baş verir? Amma məlum olur ki, əməliyyat sistemi aparat imkanlarının köməyi olmadan deyil, illüziya yaradır. Sistemin birdən çox virtual prosessoru olması illüziyası, tək fiziki prosessoru nəzəri olaraq sonsuz sayda çevirmək və bununla da zahirən proqramların eyni vaxtda işləməsinə imkan verir. Bu illüziya deyilir CPU virtualizasiyası.
Bu şəkil bir çox suallar doğurur, məsələn, bir neçə proqram eyni vaxtda işləmək istəsə, hansı işə salınacaq? ƏS-nin “siyasətləri” bu suala cavabdehdir. Siyasətlər ƏS-nin bir çox yerində istifadə olunur və bu kimi suallara cavab verir və ƏS-nin həyata keçirdiyi əsas mexanizmlərdir. Beləliklə, OS-nin resurs meneceri kimi rolu.

Yaddaşın virtuallaşdırılması

İndi yaddaşa baxaq. Müasir sistemlərdə yaddaşın fiziki modeli bayt massivi kimi təqdim olunur.. Yaddaşdan oxumaq üçün müəyyən etmək lazımdır mobil ünvanıona daxil olmaq üçün. Məlumatları yazmaq və ya yeniləmək üçün siz həmçinin məlumatı və onu yazmaq üçün xananın ünvanını göstərməlisiniz.
Proqramın icrası zamanı yaddaşa daim daxil olur. Proqram bütün verilənlər strukturunu yaddaşda saxlayır və müxtəlif göstərişləri yerinə yetirərək ona daxil olur. Təlimatlar, eyni zamanda, yaddaşda saxlanılır, ona görə də növbəti təlimat üçün hər sorğu üçün daxil olur.

malloc() çağırışı

Zəngdən istifadə edərək yaddaş bölgəsini ayıran aşağıdakı proqramı nəzərdən keçirək malloc () (https://youtu.be/jnlKRnoT1m0):

Əməliyyat Sistemləri: Üç Asan Parça. 1-ci hissə: Giriş (tərcümə)

Proqram bir neçə şeyi edir. Əvvəlcə bir qədər yaddaş ayırır (sətir 7), sonra ayrılmış xananın ünvanını çap edir (sətir 9), ayrılmış yaddaşın birinci yuvasına sıfır yazır. Sonra proqram “p” dəyişəninin ünvanında yaddaşda saxlanılan dəyəri artırdığı dövrəyə daxil olur. O, həmçinin özünün proses identifikatorunu çap edir. Proses ID hər çalışan proses üçün unikaldır. Bir neçə nüsxəni işə saldıqdan sonra maraqlı bir nəticə ilə qarşılaşacağıq: Birinci halda, heç bir şey etməsəniz və sadəcə bir neçə nüsxə işlətsəniz, ünvanlar fərqli olacaq. Ancaq bu bizim nəzəriyyəmizə daxil deyil! Düzdür, çünki müasir paylamalarda yaddaşın təsadüfiləşdirilməsi default olaraq aktivdir. Əgər söndürülübsə, gözlənilən nəticəni alırıq - eyni vaxtda işləyən iki proqramın yaddaş ünvanları uyğun olacaq.

Əməliyyat Sistemləri: Üç Asan Parça. 1-ci hissə: Giriş (tərcümə)

Nəticədə məlum olur ki, iki müstəqil proqram öz şəxsi ünvan fəzaları ilə işləyir və bu da öz növbəsində əməliyyat sistemi tərəfindən fiziki yaddaşda təsvir olunur.. Buna görə də bir proqram daxilində yaddaş ünvanlarının istifadəsi başqalarına heç bir şəkildə təsir etməyəcək və hər bir proqrama elə gəlir ki, onun tamamilə ona verilmiş öz fiziki yaddaşı var. Bununla belə, reallıq ondan ibarətdir ki, fiziki yaddaş əməliyyat sistemi tərəfindən idarə olunan paylaşılan resursdur.

Ardıcıllıq

Əməliyyat sistemlərindəki vacib mövzulardan biri də - ardıcıllıq. Bu termin eyni proqram daxilində eyni vaxtda bir çox şeylə işləyərkən sistemdə yarana biləcək problemlərdən danışarkən istifadə olunur. Ardıcıllıq problemləri hətta əməliyyat sisteminin özündə də yaranır. Əvvəlki yaddaş və prosessorun virtuallaşdırılması nümunələrində biz başa düşdük ki, ƏS eyni anda bir çox şeyi idarə edir - o, birinci prosesi, sonra ikincini və s. Məlum olub ki, bu davranış bəzi problemlərə səbəb ola bilər. Belə ki, məsələn, müasir çoxillik proqramlar belə çətinliklərlə üzləşir.

Aşağıdakı proqramı nəzərdən keçirin:

Əməliyyat Sistemləri: Üç Asan Parça. 1-ci hissə: Giriş (tərcümə)

Əsas funksiyadakı proqram zəngdən istifadə edərək iki mövzu yaradır pthread_create(). Bu misalda iplik digər funksiyalarla yanaşı eyni yaddaş məkanında işləyən, eyni zamanda birdən çox funksiyanın işlədiyi aydın bir funksiya kimi düşünülə bilər. Bu nümunədə hər bir ip funksiyanı işə salır və yerinə yetirir worker() isə öz növbəsində dəyişəni sadəcə artırır,.

Gəlin bu proqramı 1000 arqumenti ilə işə salaq. Təxmin etdiyiniz kimi, nəticə 2000 olmalıdır, çünki hər mövzu dəyişəni 1000 dəfə artırmışdır. Bununla belə, hər şey o qədər də sadə deyil. Gəlin proqramı daha çox təkrarlama sırası ilə işlətməyə çalışaq.

Əməliyyat Sistemləri: Üç Asan Parça. 1-ci hissə: Giriş (tərcümə)

Rəqəm daxil etməklə, məsələn, 100000, biz çıxışı 200000 rəqəmi kimi görməyi gözləyirik. Lakin 100000 rəqəmini bir neçə dəfə işlətsək, nəinki düzgün cavabı görməyəcəyik, həm də müxtəlif yanlış cavablar alacağıq. Cavab ondan ibarətdir ki, rəqəmi artırmaq üçün üç əməliyyat tələb olunur - nömrəni yaddaşdan çıxarmaq, artırmaq və sonra nömrəni geri yazmaq. Bütün bu göstərişlər atomik olaraq (eyni anda) yerinə yetirilmədiyi üçün bu kimi qəribə şeylər baş verə bilər. Bu problem proqramlaşdırmada adlanır yarış vəziyyəti. Naməlum bir anda naməlum qüvvələr hər hansı bir əməliyyatınızın performansına təsir edə bildikdə.

Mənbə: www.habr.com

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