tHe OSkripta - Remastered - Past Paper PDF
Document Details
Uploaded by AmiableJacksonville
2023
null
Tags
Summary
This document is an introduction to operating systems and provides a summary of the key concepts. It also contains details about previous papers of operating systems.
Full Transcript
tHe Special One tHe OSkripta -Remastered- февруари 2023 1 2 Содржина: -2. Предпредговор -------------------------------------------- 4 -1. Предговор --------------------------------------------------- 5 0. Вовед --------------------...
tHe Special One tHe OSkripta -Remastered- февруари 2023 1 2 Содржина: -2. Предпредговор -------------------------------------------- 4 -1. Предговор --------------------------------------------------- 5 0. Вовед ----------------------------------------------------------- 6 1. Процеси ------------------------------------------------------ 13 2. Меѓупроцесна комуникација ------------------------ 35 3. Распоредување на процеси --------------------------- 49 4. Блокада ------------------------------------------------------ 59 5. Управување со меморија-1 ---------------------------- 73 6. Управување со меморија-2 ---------------------------- 91 7. Датотечни системи-1 ---------------------------------- 102 8. Датотечни системи-2 ---------------------------------- 113 9. Тврди дискови и SSD технологија ---------------- 132 10. Влез/Излез ---------------------------------------------- 153 3 -2.Предпредговор Пред да започните со читање и пред јас да си пресечам коцка свинска сланина и турам нежолта ракија утрово, би сакал да упатам еден навистина голем поздрав и една уште поголема благодарност до моите драги колеги Стеф (Админот), Кире (OG), Саве (SaveAFile) и Јанко (Buha), без чија безрезервна поддршка веројатно би се откажал на пола пат и ова дело не би постоело во обликот во кој е достапно денес секому, а можеби и воопшто не би постоело. Несрамежливо заклучувам дека со рамномерна распределба секој од нив на свој начин даде свој придонес за мои убави чувства во еден мој незгоден период во животот кој заедно го надминавме и мислам успеавме попатно да создадеме и нешто интересно. Поклон, дечки!......................................................................................................................................... А сега почитуван студенту, ако чувствуваш Déjà vu вибрации во околината, знаеш што те очекува во ‘Земјата на Чудата’. Веднаш фати го летот скокајќи го предговорот и среќен пат! Алиса со нетрпение те очекува! …………………………………………………………………………………………………………………………………… 4 -1.Предговор Доколку сакате да го положите теоретскиот дел од предметот Оперативни Системи, вие сте на вистинското место. Зошто?! Бидејќи и вие и јас имаме обврска да го положиме испитот, а многуте карактери од кои е водена оваа скрипта се наши сојузници во оваа битка. Таа се содржи од 11 темелно- обработени методски единици извлечени од препорачаната книга “Modern Operating Systems: Second Edition” од Andrew S. Tanenbaum, врз кои се базира самиот испит. Неформалниот стил на изразување кој наоѓа свое гнездо во неа има за цел учењето на предметот на студентот да му го направи позабавно, одошто е истото претходно замислено. Читањето на самата скрипта не треба да претставува измачување и тврдам дека процентуално има барем една-и-пол слика по страница. Затоа не препорачувам ориентирање според болдирани термини, таквиот пристап за побрзо проаѓање на скриптата би бил погрешен и непродуктивен. И неколку-кратното читање на самата скрипта треба да е доволно за разбирање на голем дел од прашањата кои би ги содржел еден испит, но препорачувам решавање на минати испити, откако ќе се прочита или паралелно додека се чита скриптата за да студентот стекне поголема самодоверба одејќи на испит, но и за да ги подобри дотогаш-стекнатите знаења. Се надевам дека бројот на печатни грешки тежи кон 0 и дека материјалот лесно се следи и разбира. Да не заборавиме дека 24/7 на располагање ни стојат (или седат) тетка Wikipedia и чичко YouТube! Со лесно да врви бизнисо почитуван студенту, и меѓу другото, да положиш! Ох, и не ја носи скриптава в читална:) од Авторот. 5 0.Вовед Живеејќи во дваесеттите години на дваесет-и-првиот век, присилно или неприсилно самите користиме, или барем посматраме животни суштества околу нас коишто користат одредени уреди кои се производ на големата информатичка револуција која секогаш успева да извади нови трикови од ракавот, односно претставува поклон кој не престанува да дава. Овие уреди за да функционираат како што функционираат, во себе содржат базичен софтвер кој работи над соодветниот хардвер, без разлика од околината на хардверот, односно дали припаѓа на персонален компјутер, лаптоп, таблет, фрижидер, тостер или машина за перење садови. Ваквиот базичен софтвер кај многу од овие уреди е наречен Оперативен Систем и тој располага со ресурсите на компјутерскиот систем во уредите. Под ресурси, се мисли на: Процесор, раководен од ОС. Меморија, најчесто претставена во повеќе нивоа, исто така раководена од ОС. В/И уреди, како глушец, тастатура, принтер.. управувани од ОС. Комуникациски уреди, Податоци, што се запишуваат и чуваат во меморијата. ОС има задача, крајниот корисник да го направи да се чувствува удобно и самоуверено, натерувајќи го да размислува дека целиот процес е бонбона, преку апстрахирање на сите овие гореспоменати ресурси! 0.1 Едноставен приказ на ОС јадро Едно јадро на ОС располага со одредени ресурси, односно хардвер од компјутерскиот систем составен од чипови, односно транзистори. Како ресурси, повторно, се јавуваат: процесорот и регистрите во него, меморијата, контролери за управување со секундарна меморија, мрежни картички (Ethernet, Wi-Fi), bus контролери (пр. USB). ОС јадрото е зависно од хардверот, но негова улога е крајниот корисник да биде апстрахиран од чиновите кои не се случуваат на сцената, ами зад завесите, додека го користи компјутерскиот систем. -На корисникот му е претставен Виртуелен file систем, каде секој фолдер има свое име, свои својства и тој лесно може да ги менаџира своите документи. Корисникот е поштеден од тоа, директно да запишува на одреден сегмент од некој диск, зашто ОС во позадина преку честа комуникација со диск driver-ите го прави тоа за него. -Корисникот кога сурфа, мануелно не отвара или затвора TCP или UDP конекции. За тоа се грижи токму ОС, кој преку мрежните driver-и комуницира со мрежната картичка и знае точно во кој момент треба да отвори socket, да затвори TCP конекција итн. -На корисникот записот во USB му делува идентично како записите на некој disk. За тоа е виновен ОС, кој комуницира и со driver-ите за магистралите и новите записи ги имплементира во неговиот фамозен Виртуелен file систем. -ОС на крајниот корсник му создава илузија дека располага со бесконечна меморија. Тоа го прави со тн. Виртуелна меморија, со помош на која, дел од hard disk-от по потреба приверемено игра улога на ‘дополнителна’ РАМ меморија. 6 -ОС има задача да ги менаџира процесите кои се извршуваат или чекаат да бидат извршени, да го регулира нивното процесорско време и преку комуникација со Memory Menager-от динамички да алоцира меморија за некој процес доколку е тоа потребно. На сликата е претставено Linux јадро, кое рака-на-срце е далеку поедноставно од Windows јадрото, барем во делот на именувањето на компонентите. 7 Што прави еден ОС? ОС е координатор и сообрајќаец, на пример нема да дозволи два процеси да запишуваат на истиот блок од еден hard disk, или општо кажано, ги решава конфликтните барања за ресурсите. Истовремено е и олеснувач, односно го подобрува искуството на сите што го користат компјутерскиот систем преку имплементираните библиотеки, системот за прозорци, графичкиот кориснички интерфејс итн. Освен користењето и менаџирањето на ресурсите, овозможува multitasking, еден процес да се подели во повеќе task-ови кои паралелно се извршуваат и multiprogamming, односно можноста повеќе процеси истовремено да се содржат во РАМ меморијата. Не постои општо прифатена дефиниција за ОС, но јасно е дека единствена програма која постојано се извршува на еден компјутер поврзан на струја е јадрото на ОС. Историја на компјутерските системи Прва генерација (1945-1955) скап хардвер-ефтини програмери. Втора генерација (1955-1965) појава на транзисторот, инструкциите се чуваат во меморија. Трета генерација (1965-1980), појава на интегрирани кола и multiprogamming, појава на spooling (принтери). Четврта генерација (1980-2000), први ОС, CP/M, MS-DOS, macOS, Windows...; Петта генерација (2000-денес), smartphone, Android. Концепти кај Оперативните Системи Процеси Ќорсокак/Блокада (Deadlocks) Управување со меморија Влез/Излез Датотеки Сигурност 8 0.2 Процеси Првиот концепт кај Оперативните Системи се процесите. За почеток, треба да се направи јасна дистинкција помеѓу една програма и еден процес. На пример, една обична “Hello World” програма снимена на hard disk-от претставува обична датотека. Дури и при компајлирање, оваа програма не е процес. Процес се креира при нејзиното извршување. Во повеќето ОС, процесите формираат стебло на настанување чиј корен е првиот креиран процес. Во дел од случаите, првиот процес којшто го креира ОС кернелот се нарекува init (од initialization, нема врска со британското she fine bruv, innit). Веднаш потоа, доколку немаме GUI, би стартувале shell процес под Linux, или панданот cmd под Windows OS. Shell претставува црн screen кој не’ чека да си играме со внес на најразнолики команди и претставува дете процес на init процесот. Доколку на командна линија внесеме ‘ls os/labs’, тоа значи дека се стратувал нов процес ls, кој е пак дете на shell процесот и со оваа команда бараме да ни се излистаат сите датотеки во os/labs директориумот. Од друга страна, со командата cat test.txt | wc –l може да се избројат линиите( редовите) на датотеката test.txt. Во овој случај shell-от би имал две деца: cat и wc. Вертикалната линија од командата (pipe) означува дека излезот од командата cat треба да се прати како влез во командата wc. Како минимум ресурси неопходни за непреченото дејствување на ОС се: меморија во која е содржан програмскиот код и податоците и множество на регистрите од процесорот за поддршка при извршувањето. Конкретно, програмскиот код за програмата ls.с, како и за останатите команди, е веќе компајлиран и се наоѓа во ОС кернелот и истиот се извршува по испратен системски повик. Заклучно, процесот е некоја програма која се извршува. Тој мора да содржи код, влез/излез, состојба во која што се наоѓа во моментот и ресурси кои ги поседува или дели. На пример, hard disk-от и процесорот ги дели со останатите процеси, додека принтерот би го поседувал, з’ш немојт друг да принтат истовремено. Во продолжение предлагам да проследиме како готвењето на една поинаква, префинета Васина торта може да се асоцира со работата на еден Оперативен Систем. Аналогија со готвењето Превкусната добра, стара Васина торта во облик на срце по повод празникот Св. Валентин. Зададенава тема за рецепти со срце, добро ми дојде, се роди идејата за тортата... Од срце за срце... ))) За пандишпанот јајцата ги матиме со постепено додавање на шеќерот во густа и кремаста смеса. Ги додаваме матејќи на најслаба брзина, помешани мелените ореви, брашното и пецивото. На крај кората од портокалот. Излеваме во тркалезен калап со пречник од 28цм, намрсен и посипан со брашно или пак обложен со хартија. Печиме 30 мин. на 180 степени во претходно загреана рерна или печите према вашата рерна. Топлиот пандишпан го попрскуваме со малку сок од портокал. За филот најпрво ги попаруваме оревите со млекото. Треба да добиеме густа смеса. Оставаме да се ладат. Над пареа ги матиме жолчките со шеќерот во прав и ванилата. Кога ќе ја добијат потребната густина, го додаваме чоколадото и мешаме да се растопи. Оставаме да се излади. Ги додаваме во попарените ореви. Убаво изедначуваме. Го додаваме сокот и кората од портокалот. Се соединува. 9 Пенасто се мати путерот со шеќерот во прав и ванилата. Ја додаваме претходната смеса и се уште еднаш убаво изедначуваме со миксирање. За свилениот шлаг најпрво го ставаме шеќерот со водата да се свари во густ шербет, како за слатко. Вода колку само да го покрие шеќерот. За тоа време ги матиме белките во цврст снег. Готовиот врел шербет во тенок млаз го додаваме матејќи во белките. Продолжуваме со матење на најсилна брзина додека шлагот не ја добие потребната цврстина и не се излади. Финална постапка Кората ја сечеме во облик на срце. Го нанесуваме филот со ореви и жолчки. Врз него свилениот шлаг. Украсуваме. Од остатокот од тестото обликував мали срценца. Добив 9 какви што се на фотографијата. п.с.Украдов насмевки... видов задоволно и среќно лице...))) Израдувајте го/ја и вие вашиот/та сакан/а! Во речникот на Оперативни Системи, горенаведениот рецепт за Васина торта претставува програма, готвачот претставува CPU, состојките се влезни податоци, додека активноста на готвачот (читање на рецептот, додавање на состојките, печење на тортата) го означува процесот. 0.3 Deadlocks Да го замислиме следново сценарио: На процес P1 му треба принтерот како ресурс за да заврши. Во истиот момент, принтерот го држи процес P2. На P2, пак му треба скенерот за да заврши, а скенерот го користи P1. Двата процеси го чекаат другиот да интервенира прв, па ваквото чекање би било подолго од 19тата лигашка титула на англиските Scouser-и и ОС не смее да дозволи некој корисник 30 години да чека, на пример за да зачува одреден MS Word документ. Едно решение е боење на екранот во боите на очите на Марина од истоимената песна на култниот ex-yu рок бенд Prljavo Kazali6te, односно илустрирање на морбидниот Blue Screen of Death (BSoD). 10 0.4 Управување со меморија ОС има свој концепт за управување со меморијата со кој ќе се запознаеме покасно. Главно би се задржале на раководење на меморијата (поделбата на РАМ-от на неколку партиции и разгледување на алгоритмите за сместување процеси во меморијата) и концептот на Виртуелна меморија. 0.5 Датотечен систем Датотечниот систем е централен дел на секој ОС. На корисниците им дава апстракција која многу ја поедноставува манипулацијата и управувањето со податоците на дискот – датотеките. Мора да ги управува директно и уредите и да вклучува код за справување со грешки и да ја обезбеди сигурноста на запишувањето. (на пример кога ненадејно ќе снема струја) Слоевитноста, освен во компјутерските мрежи, се среќава и кај датотечните системи! 0.6 Системски повици Системските повици претставуваат интерфејс за апликациите кон сервисите кои ги нуди ОС. На пример, при отварање на некоја датотека, корисничкиот код за момент престанува да се извршува и се чека ОС кернелот да го изврши кодот за отварање на датотека кој го поседува. Освен open() системскиот повик, поинтересни се: fork(), со кој се креира дете процес индетичен на родителот, waitpid() со кој се чека детето да биде терминирано, exec() со кој се менува кодот на процесот, exit() со кој се терминира даден процес и враќа одредена излезна вредност на родителот. 11 Користеност на ОС по држави Од графиката може да се забележи дека најпопуларни ОСи во светот се Android и Windows. Боди око фактот што Украинците и Русите, иако за жал во војна, се обединети кога станува збор за изборот на ОС на нивниот уред, а тоа е мега-популарниот Windows. Сликата e повеќе темносина од портокалова, но тоа не значи дека поголемиот дел од Земјината популација би го избрала Windows пред Android, зашто во Индија и НР Кина живеат скоро третина од човековите цицачи, а жителите на тие држави се фанови на Google-овиот Android. Впечатливо е и што лемурите во Мадагаскар го преферираат Оперативниот Систем Unknown, покрај веќе- пофалените гиганти Windows и Android. 12 1.Процеси Како што се договоривме, процесите се програми во извршување. Тие претставуваат основна апстракција на ОС. Овозможуваат компјутерски системи со еден CPU да му делуваат на корисникот како системи со повеќе (виртуелни) CPU-a. Концептот за процес се појавил во третата генерација на компјутерите со воведување на multiprogramming. Така, денес во секој миг паралелно работат повеќе процеси, без разлика дали се стартувани од ОС (како shell и ls) или се кориснички стартувани процеси (како hello_world.o). Корисникот е потчинет да верува дека овие процеси се извршуваат паралелно. ОС ја креира илузијата со тоа што на секој еден процес му дава одредено процесорско време. Ваквиот модел на работа на ОС се нарекува модел за секвенцијални процеси. 1.1 Процесен модел Нека се дадени 4 процеси A,B,C и D. Да претпоставиме дека процес А чита од датотека, процес В пресметува факториел, процес С одредува омилена колешка и процес D претставува ls команда со која се листа фолдерот OS/ispiti. Кога компјутерскиот систем има еден CPU, тоа означува дека има еден физички Program Counter, кој кажува до каде моментално е извршен процесот, односно која е наредната инструкција за извршување. Така, секој од процесите се извршува толку колку што му е доделено процесорско време од ОС и Program Counter-от потребно е да ги чува адресите од последно-извршените инструкции за секој од процесите. Ваквиот process switch прави да крајниот корисник мисли дека процесите A,B,C и D се извршуваат паралелно и дека постојат 4 различити Program Counter-и. Креирање на процес Процеси може да се креираат по 4 случени настани и тоа: 1. Иницијализација на системот При самото стартување на компјутерскиот систем се креираат тн. системски процеси, како тие за работа со мрежа, за иницијализација на системот итн. и овие процеси ги стартува самото ОС јадро. 2. Креирање на процес од некој друг процес Еден процес креира друг процес преку системскиот повик fork(); за Linux или преку системскиот повик createProcess(); за Windows. Еден таков пример што веќе го спомнавме, е тој кога shell го креираше ls процесот. 13 3. Креирање на процес по барање на корисникот Со брз двоен лев клик врз Wireshark иконата, корисникот ќе ја разбуди ајкулата и ќе биде стартуван нов процес. 4. Иницирање на batch пакетни задачи Запирање на процес Процеси може да се запрат преку исполување на некој од следниве 4 услови: 1. Нормален излез (своеволно) Кога еден процес ја исполни успешно задачата заради која бил првично создаден, прави системски повик exit(); за Linux или ExitProcess(); за Windows и истиот запира. 2. Излез поради грешка (своеволно) Доколку се повика C компајлер за да искомпајлира именувана.c датотека која не постои во системот, процесот ќе прекине своеволно поради настаната грешка. 3. Фатална грешка (насилно) Доколку некој процес налета на невалидна инструкција, делење со 0, или memory violation (како scanf(a) наместо scanf(&a), тој ќе е принуден да заврши во истиот момент. 4. Убивање од друг процес (насилно) Со користење на системскиот повик kill(); во Linux или terminateProcess(); во Windows, одреден родител би можел да го лиши од живот и насмевки својот дете-процес кој претходно го создал во добар вајб. Хиерархија на процеси Родителите креираат деца процеси, но и децата еден ден ќе станат родители, па и тие како и родителите ќе креираат свои деца процеси, кои според законите на природата, ќе имаат својство на внуци во очите на родителите на нивните родители. Вo UNIX-based OS, се формира хиерархија на процеси и таа се нарекува група на процеси, додека кај Windows не постои концепт на хиерархиско формирање, туку сите процеси се еднакви пред Бог. Пр: cat kniga-1 kniga-2 kniga-3 | grep otorinolaringologija Во примерот, shell креира два дете-процеси cat и grep. Со cat, трите книги се конкатенираат додека со grep, во направената конкатенација се пребарува зборот otorinolaringologija. grep процесот чека да го добие процесорот веднаш по завршувањето на cat за да почне да се извршува. 1.2 Состојби на процесите Според дефинициjа, процесите по било кој ОС, во еден момент можат да бидат во една од 5 состојби, и тоа: Нов, процесот е креиран. Акитвен, инструкциите се извршуваат. Чека(блокиран), процесот чека да се случи нешто(I/O или прием на сигнал). 14 Спремен, процесот чека да му биде назначен CPU, останатите ресурси му се доделени. Терминиран, процесот завршил. Кога еден процес се креира тој секогаш влегува првично во состојба нов. Од оваа состојба директно оди во состојба спремен. За да го добие процесорот и да почне да се извршува треба да одлучи распоредувачот од ОС кернелот и со тоа да отиде во состојба активен. Доколку распоредувачот одлучил дека процесот доволно време го користел процесорот, преку спроведен прекин повторно го става во состојба спремен и спроведува multiprogramming со тоа што сега некој друг процес би го добил процесорот. Дококлу за активниот процес е потребно да се отвори некоја датотека или се чека внес од тастатура, процесот го ослободува процесорот и преминува во состојба блокиран. Кога ќе заврши читањето од датотека или внесот од тастатура, процесот оди во состојба спремен и тука е битно да се напомени, дека блокиран процес никогаш не оди директно во состојба активен. Доколку некој процес завршил со работа го прави системскиот повик exit() и премнува во состојба терминиран. Scheduler или распоредувач е програм кој претставува дел од ОС кернелот и го менаџира извршувањето на процесите, односно одлучува кој процес во кој момент ќе го користи процесорот и обработува прекини. 1.3 Имплементација на процесен модел Оперативниот систем одржува табела на процеси. Во едната колона од табелата се наоѓа PID (Process ID), кој како вели и самото име, претставува единствен идентификатор на процесот. Во втората колона има покажувач кој покажува кон контролниот блок на процесот (PCB), што претставува податочна струкутра која содржи детални информации за самиот процес. Информации во PCB Идентификационен број на процесот, PID. Сотојбата на процесот. Програмски бројач, односно вредноста на адресата на следната инструкција што треба да се изврши за тој процес. 15 Регистри за CPU, зачувување на информацијата за состојбата при прекин, за да може процесот да продолжи каде што застанал. Информација за CPU, односно покажувачи за редовите на чекање и приоритет на процесот. Информации за управување со меморија, односно покажувач кон табелата на страници. Кориснички идентификациони броеви, uid(кој user го креирал процесот), gid(на која група припаѓа процесот); Статус на В/И, претставен со листа на В/И уреди доделни на тој процес и со листа на отворени датотеки. Информации за време на извршување на CPU, реално време на извршување и лимити во однос на користењето. Покажувачи кон таткото и децата процеси. На сликата се дадени баш сите елементи на еден PCB, но само неколку од нив, заедно го градат тн. контекст на процесот. Тоа се: вредноста на CPU регистрите, состојбата на процесот и информациите за управување со меморијата, CPU process status word, stack и frame pointer-и. Промена на констектот (context switch), односно доделувањето на CPU на друг процес, се прави кога се случува прекин, системски повик или според режим на работа. Ваквата промена е скапа операција, затим ОС кернелот го снима контекстот на стариот процес во неговиот PCB и го вчитува контекстот на новиот процес кој треба да се извршува. Подолу е сликовито претставена промената на контекстот за два процеси P0 и P1, односно нивниот премин од состојба спремен во состојба активен и обратно. 16 Context switch, односно смена на процеси се прави при: Прекин од истечено процесорско време доделено од ОС. I/O прекин, пример кога треба да се чита од hard disc или да се внеси од тастатура. Мемориска грешка (Memory Fault), односно кога дел од подоците со кои работи процесот не се во РАМ-от, па мора да се пристапат од Виртуелната меморија. Замка (Trap), односно при случена грешка, процесот е принуден да се доведе до терминирана состојба. Системски повик, како open() со кој ОС кернелот отвара одредена датотека и процесот за тоа време го ослобдува процесорот, или exit() со кој процесот своеволно го завршува животниот век на овој свет студен. 1.4 UNIX – создавање, извршување и завршување на процеси Во продолжение ќе ги разгледаме трите најинтересни системски повици, и тоа fork() за креирање на нов процес, exec() за изведување на програма и exit() за завршување на процес. 1.4.1 fork() Родителот креира дете процес во Linux атмосфера со помош на системскиот повик fork(); Тогаш, детето процес извршува копија од еден ист програм како и родителот. Освен тоа, детето има идентичен PCB како и родителот, со единстевна разлика во PID. Кодот на родителот и детето процеси е сместен во различен сегмент од RAM меморијата, но Program Counter-от првично покажува кон истата инструкција и во двата процеси. Тоа значи дека двата процеси продолжуваат со извршување од истата точка по враќањето од повикот fork(). За детето, процесот fork() враќа 0, додека за родителот-процес fork() го враќа идентификациониот број на дете-процесот. Така, со еден if statement лесно може да се различи родителот од детето. 17 Овој системски повик не е воопшто корисен во single-player mode, па за да има смисла целата игра, потребна му е асистенција од останати системски повици. На пример, доколку shell-от направи деца history и grep, тие не би биле многу корисни доколку останат со кодот од својот родител. Потребно е ОС кернелот преку друг системски повик да им го смени кодот оној на соодветната програма во јадрото, за да може да го пружат максимално својот потенцијал. Пр: Нека е даден процес со PID=25 кој е во состојба активен и нека зелената стрелка го означува Program Counter-от за самиот процес. На сликата се прикажани и дел од информациите кои ги содржи PCB-то за овој процес. 18 Кога програмскиот бројач ќе стигне до fork() инструкцијата кај процесот 25, тој преминува во состојба блокиран и процесорот за моментот го завзема процес од ОС кернелот задолжен за спроведување на системскиот повик fork() и се креира дете со идентичен код и PCB како родителот, со единствена разлика во PID, во случајов со 26. По завршувањето на процесот од ОС кернелот, процесите 25 и 26 се во состојба спремен и ОС кернелот има задача да одлучи кој процес следно треба да премине во состојба активен. Според поставеноста на кодот, родителот ќе си го извршува кодот наменет за родителот и аналогно детето ќе си го извршува кодот наменет за детето. 19 20 Во конкретниот случај, родителот го завршил својот сегмент и влегол во состојба блокиран, но за да излезе од неа го чека завршетокот на неговиот дете процес. Дете-процесот ќе заврши со системскиот повик exit и треба да се има во предвид дека exit(0) означува успешно завршен процес. Системскиот повик exit(0) го спроведува ОС кернелот и го терминира дете процесот и сега може да му го препушти процесорот на родителот процес, за да го доврши преостанатиот свој код. 21 Пр: На почетокот постои еден иницијален процес. Со p = fork() овој иницијален процес ќе креира свое дете. Бидејќи p кај родителот има вредност pid_child, а p кај детето има вредност 0, if (!p) ќе го изврши само детето, односно ќе креира свое дете, па точниот одговор е 3. 1.4.2 exec() Како што Ромео не може без Јулија или како што Барселона не можат без судиите, така и системскиот повик fork() не може без системскиот повик exec(). Како што погоре наведовме, командата history е бесмислено да го има истиот код како нејзиниот родител, процесот shell, па е потребно некакво препокривање на новороденчето, односно на неговиот код. За тоа е заслужен токму системскиот повик exec(), заради кој ОС кернелот го бара соодветниот код од командата history во случајов и го препокрива кодот од shell-от на детето-процес. Всушност како што постојат различни сорти на јаболка и тутун, така постои и цела фамилија на функции exec, и тоа: execl, execle, execlp, execve, execvp и exect. 22 Ваквиот код е карактеристичен за родителот, со тоа што во 99,1605% од случаите, дете- процесот веднаш извршува exec() по неговото креирање, што е и заиста логичен чин. Нека е креиран нов дете процес. Во кодот за извршување наменет за детето прва инструкција е exec(“foo”), со што процес од ОС кернелот го добива процесорот за да го препокрие кодот од родителот со кодот наменет за foo програмата/командата, додека дете процесот преминува во состојба блокиран. 23 По овој системски повик, освен кодот, дете-процесот добива нови вредности и за останатите елементи од PCB-то, како Data, Stack, Process Status, освен PID што останува непроменето. Дете-процесот го добил својот нов реномиран облик и неговиот нов код е спремен за извршување откако ќе го добие процесорот и премине во состојба активен. 24 Со конкретни задачки, се враќаме после рекламите! Останете со нас! 25 ********************************************************************************** Ако зачиниш со вкусно чоколадо, имаш незаборавни моменти. Признај ѝ дека си учел ОС и остани џентлмен, купи ѝ Sorry! ********************************************************************************** 26 grand kafa – Верен пријател на студентите! ********************************************************************************** Омиленото делче од нашите маркети – нашата КАМ пекара со секогаш свежи и топли печива кои ги печеме преку целиот ден! 27 Во одреден број на КАМ маркети ќе ги пронајдете нашите сопствени фурни каде во текот на денот постојано се печат нови, крцкави и свежи печива. Незаменливата арома на топло печените ѓевреци, лепчиња, кроасани со путер или крофни се шири уште на самиот влез од маркетите, а ваше е да ги пробате и да ја почувствувате разликата во вкусот на свежо печениот леб. Печивата се печат во посебно опремена фурна, а самата селекција на производи е префинета и според највисоки стандарди за квалитет. Секогаш свежо и со одлична цена! Купувај мудро! Купувај во КАМ Маркет! ********************************************************************************** Ние знаеме се’ за главоболката. Се прашувате ли како? Ангажиравме научници, мајки, лекари, математичари, студенти, мојата баба, дури и магионичар. Откривме дека можете да ја победите главоболката со само еден Caffetin. Caffetin – Ние знаеме се’ за главоболката! Предупотребавнимателнодасепрочитаупатствотозаиндикациитеризикотодупотреба таизанесаканитедејстваналекотконсултирајтесесоВашиотлекарилисофармацевт! 28 ********************************************************************************* Некои пингвини цел живот мрзнат настинати на минусни темепратури на некој изолиран замрзнат залив... Но, Стаска не е како останатите пингвини. Она пие Red Bull и со своите криииилја го шета и запознава целиот свет со неговите убавини и изненадувања. Биди како Стаска! Пиј Red Bull. ********************************************************************************* 29 -Омилена пица?? -Па, тоа е лесно..со Крали Марко! ********************************************************************************* Пр: Во системот веќе има еден иницијален процес. По извршување на fork() тој ќе креира свое дете. Двата процеси сеуште имаат ист коден сегмент и секој од нив по еднаш ќе испечати и ‘A’ и ‘B’. Двата процеси извршуваат exec(“printC()”) и затим ОС кернелот им доделува нов коден сегмент, па нема да ја извршат последната printf(“B”) линија од почетниот код. Конечниот одговор е 2. 30 Пр: Во системот веќе има еден иницијален процес. По извшрувањето на fork-от во условот за if, коренот креира свое дете. Бидејќи овој системски повик кај детето враќа 0, а кај родителот го враќа PID-то на детето, односно број различен од 0, тогаш if условот ќе е исполнет едино за родителот, и повторно ќе креира дете заради fork-от внатре во if-от. Сега родителот, заедно со своите две деца ќе креираат уште по едно дете заради следниот fork() повик. Вкупно имаме 6 процеси и секој од нив ќе испечат “OS” по еднаш, па бараниот одговор е 6. Пр: Колку пати ќе се испечатат ‘Veronika’, ‘Hristina’ и ‘Eva’ по завршувањето на кодот? #include Int main() { Int i; for(i=0; i