Нити

Традиционални приступ подразумева да процеси имају свој меморијски простор, ресурсе и да имају само једну јединицу извршавања, тј. да се сви послови процеса извршавају секвенцијално. Савремени оперативни системи обично подржавају концепт нити (threads) које представљају основне јединице за извршавање у оквиру процеса. Нити су делови једног процеса и извршавају се коришћењем ресурса који су њему придружени. Осим ресурса процеса којем припадају, нити имају и сопствене ресурсе. Свака нит поседује своје регистре, програмски бројач и стек, а разликује их и јединствени идентификатор (thread ID – TID). Код сегмент, сегмент података, подаци о отвореним фајловима итд. заједнички су за нити једног процеса:

13-1

Једна нит процеса и више нити истог процеса

Оваквим приступом смањује се заузети простор и омогућава се да више нити обавља различите задатке у оквиру једног процеса. Такође, коришћењем нити пружа се могућност да се боље искористе предности које доноси вишепроцесорска архитектура. Рад са више нити (multithreading) подразумева могућност оперативног система да подржи конкурентно или паралелно извршавање више нити.

На почетку извршавања сваки процес добија свој меморијски простор и контролну (иницијалну) нит. Ова нит има задатак да обави потребне иницијализације и креира остале нити које су потребне за извршавање процеса. С обзиром да нити имају све карактеристике процеса, при чему неке ресурсе деле са другим нитима, често се називају и лаким процесима.

У оперативном систему Windows, када се покрене Task Manager, у склопу картице Processes можете видети како изгледа списак покренутих процеса:

процеси-њ7

У склопу картице services могу се видети и различите нити које су део истог процеса (сви они који имају исти PID су део истог процеса). Поред тога, на овој картици приказана су и стања процеса, односно нити:

сервиси-њ7

У верзији Windows 10 изглед Task Manager-а је мало другачији, тако да ту посматрамо картице Details

details

и Services

services

У оперативном систему Linux постоји много различитих програма за праћење система и сваки од њих приказује мање или више информација. Један од изгледа приказа у дистрибуцији Ubuntu приказан је на слици:

Screenshot_20191017_181833

Употреба нити може се илустровати на примеру веб прегледача. Они се могу имплементирани тако да користе бар три нити. Једна нит служи за приказивање хипертекста у оквиру прозора, друга учитава податке са неког сервера, док трећа служи за преузимање података преко мреже:

13-2

Нити веб прегледача

При томе, ове нити деле податке кроз заједничке ресурсе и истовремено се могу извршавати на различитим језгрима истог процесора. Слично, текст процесори могу имати нит која прати писање текста, нит која је задужена да у одређеним временским интервалима сачува документ независно од осталих активности и нит која проверава правопис.

Коришћење нити доноси многе предности. Првенствено омогућавају значајне уштеде меморијског простора и времена. Нити деле меморију и неке ресурсе који припадају истом процесу тако да заузимају мање простора него када су у питању независни процеси. Такође, из истог разлога, нити се креирају много брже од процеса, а и пребацивање контекста између нити истог процеса је брже од пребацивања контекста између процеса јер се пребацују само ресурси који су јединствени за нит – стек, регистри и програмски бројач. Нити пружају могућност апликацијама да наставе рад у ситуацијама када се извршавају дуготрајне операције које би, без поделе послова процеса на нити, привремено зауставиле извршавање осталих делова процеса. Слично, коришћењем нити омогућава се рад процеса чији су делови потпуно блокирани. Развојем и експанзијом вишепроцесорских система до изражаја нарочито долазе предности које доноси коришћење овог концепта јср више нити могу да се извршавају истовремено.

На примеру серверске апликације, која има задатак да опслужи велики број клијената (клијентских апликација) у кратком временском интервалу, могу се добро илустровати погодности које доноси коришћење нити. Традиционални приступ, без коришћења нити, подразумевао је да серверски процес у петљи чека да се појави клијент, а онда се за сваког новог клијента креира нови процес којем ће препустити опслуживање клијента. Коришћењем нити, проблем се решава на сличан начин, али се уместо различитих процеса користи само један у оквиру којег се може креирати велики број нити. Једна нит процеса је задужена да „ослушкује“ мрежу, тј. да прихвата клијенте при чему се за сваког новог клијента креира нова нит. Креирање нити је брже и захтева мање простора него када су у питању процеси, тако да овакав приступ омогућава да се много брже одговори на захтеве, али и да се опслужи много већи број клијената.

13-3

Нити – серверска апликација

У зависности од тога да ли се нитима управља са корисничког или системског нивоа, нити се називају корисничке или нити језгра. При томе, приступ процесору и прилику да се извршавају имају само нити језгра, тако да је потребно направити одговарајућу коресподенцију између корисничких и нити језгра. Ово се постиже пресликавањем (мапирањем) корисничких у нити језгра. Најчешће подржана пресликавања су:

  • Пресликавање више у једну;

  • Пресликавање једна у једну;

  • Пресликавање више у више.

Пресликавање више у једну (many-to-one) подразумева да се више корисничких нити, све које припадају једном процесу, пресликају у једну нит језгра:

13-4

Пресликавање више корисничких нити у једну нит језгра

Број нити језгра је у овом случају једнак броју процеса који постоје у систему. Дакле, језгро манипулише искључиво са процесима, тако да све нити једног процеса извршава кроз једну нит језгра. Код оваквог приступа, нитима се управља из корисничког режима без утицаја језгра оперативног система. Дакле, одлуке о томе која ће се корисничка нит извршавати доносе се на корисничком нивоу. Међутим, језгро оперативног система и даље управља процесима и доноси одлуке која ће се од нити језгра извршавати на процесору. Обично се креирање, распоређивање и управљање корисничким нитима омогућава имплементацијом посебних библиотека чија је основна функција да на корисничком нивоу пруже подршку за рад са нитима.

Главни недостатак оваквог приступа је у томе што, у ситуацијама када се нека од корисничких нити блокира, блокира се и одговарајућа нит језгра, тако да долази до блокирања целог процеса, тј. свих нити које га чине. Пошто само једна нит може приступити језгру у једном тренутку, оваквим приступом не могу да се искористе предности вишепроцесорске архитектуре.

Пресликавање једна у једну (one-to-one) подразумева да се свака корисничка нит преслика у једну нит језгра:

13-5

Пресликавање једне корисничке нити у једну нит језгра

При томе, управљање нитима потпуно се препушта језгру оперативног система. Нити језгра се креирају спорије и има их мање али, за разлику од корисничких нити, језгро има бољу подршку за рад са овим нитима, а над њима има и већи степен контроле. Оваквим приступом се решавају главни проблеми претходног модела. Наиме, обезбеђује се конкурентније извршавање нити, јер постоји могућност да друге нити истог процеса, наставе активности у случају када се једна од њих блокира. Такође, омогућава се да се више нити језгра извршавају паралелно на системима са више процесора. Највећа мана оваквог приступа је ограничавање броја нити језгра а самим тиме и броја нити у корисничком делу. Наиме, због тога што се незанемарљиво мало времена и простора троши при стварању и одржавању нити језгра, многи оперативни системи имају ограничење дозвољеног броја оваквих нити.

Пресликавање више у више (many-to-many) је комбинација (хибрид) претходна два приступа јер подразумева да се, у зависности од потреба процеса и могућности система, корисничке нити једног процеса пресликавају у мањи (или исти у екстремном случају) број нити језгра:

13-6

Пресликавање више корисничких нити у више нити језгра

Број нити, као и начин распоређивања корисничких на нити језгра, одређује се на корисничком нивоу, док се управљање препушта језгру оперативног система. Број нити језгра које ће бити креиране зависи од конкретног процеса, али често и од броја процесора у систему. Наиме, у системима са више процесора природно је да се корисничке нити процеса пресликају у више нити језгра. Ово је најкомплекснији модел за имплементирање, али је и најквалитетнији јер се може прилагодити потребама процеса као и карактеристикама система.

Контролни блок процеса

Да би оперативни системи били у могућности да воде прецизну евиденцију о процесима, обично се користе структуре података које чувају информације о сваком покренутом процесу. Ова динамичка структура се назива Контролни блок процеса и садржи најзначајније податке који омогућавају идентификацију и управљање процесима. Наставите са читањем

Покретање оперативног система

У овом тексту дајемо одговор на питање “Шта се дешава у рачунару од тренутка кад притиснемо дугме за укључивање рачунара (Power On dugme) до тренутка када је оперативни систем потпуно покренут и рачунар спреман за рад”. Наставите са читањем

Стања процеса

Оперативни системи дефинишу скуп стања у којима се, у зависности од тренутне активности и ситуације у систему, процеси могу наћи. Већина система подржава следећа основна стања: Наставите са читањем

Појам процеса

Један од кључних концепата, када су оперативни системи и рачунарски системи у питању, представљају процеси.

Процес се дефинише као програм у извршавању. Наставите са читањем