петак, 26 априла, 2024
Ослобађање

Линукс унатрашке

Аутор: Никола Харди

Увод

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

PDF reader и покретање програма

Претпоставићемо да пред собом управо имате PDF читач (уграђен у browser или као посебан програм). Крајњи резултат је слика на монитору, али пре тога је PDF фајл морао бити преузет на рачунар, покренут програм који учитава тај фајл, затим била је потребна мрежа за приступ интернету. Један од задатака оперативних система је да пруже управо такав вид подршке апликацијама. Видећемо мало касније да на крају сви путеви некако воде до кернела. Овај ниво обухвата крајње апликације које најчешће користимо, у овом случају evince, okular, apvlv и xpdf. Наравно, у ову групу програма спадају и разни аудио player-и, интернет прегледачи, канцеларијски пакети и остало.

Окружење радне површи

PDF читач сте могли да покренете на много начина – рецимо кликом на датотеку у неком прегледачу датотека или директним покретањем програма. Да бисмо се лакше снашли у збрци датотека и директоријума, временом су развијени скупови програма за ту намену – desktop, односно радна окружења. Њихова намена је, у широком смислу, да нам омогуће да покрећемо програме, да пронађемо датотеке, да поређамо прозоре по нашој жељи итд. Појам окружења радне површи је врло широк и није јасно дефинисан. У овај ниво спадају GNOME, Unity, MATE, KDE, Xfce и многи други. Наравно да не морамо користити комплетна окружења радне површи за ове задатке, али ово је класична поставка на данашњим кућним рачунарима које покреће Linux.

Session manager

Један рачунар може користити више корисника и могу бити доступна разна окружења радне површи истовремено. Да би рачунар знао које графичко окружење да покрене и који корисник тренутно жели да користи рачунар, морамо на неки начин да му пренесемо ту информацију. За овај задатак је најчешће задужен session manager (некада се назива и desktop manager). Условно речено, session manager видимо када се пријављујемо на рачунар, уносимо корисничко име, лозинку и бирамо сесију (desktop окружење). Неки од примера session manager-а су LightDM, GDM, KDM и slim. Ово је још један обичан програм на рачунару и њега је такође морао неко да покрене. За покретање session manager-а углавном је задужен init system о којем ће бити речи мало касније. Битно је поменути да је за графички session manager потребна подршка за графичка окружења коју (још увек) пружа X server.

X server

У реду, сада смо већ стигли до границе иза које просечан корисник рачунара не види шта се са системом дешава. X server је програм који систему пружа подршку за графичка окружења. X није једини, али је још увек de facto стандард за Unix-олике системе. О алтернативама и животу X.org пројекта је било више речи у нашем претходном броју када смо писали о Wayland-у. X се налази на путу од апликације која жели да исцрта нешто на монитору, а после њега су driver за графичку карту и подршка у кернелу. Подршка коју X пружа, углавном се своди на то да опслужи захтеве за исцртавање апликације. Као резултат добијемо слику која представља стање те апликације, а ту слику потом window manager приказује у неком делу монитора. Window manager може да функционише као део окружења радне површи или засебно, а о овоме је такође било више речи у претходном броју у већ поменутом тексту. X је такође један од процеса које најчешће покреће init system.

Init

Већ неколико пута смо у овом тексту поменули init system, што наравно значи да је ово врло битан део целог система. О init процесу и init системима можемо да напишемо и целу књигу, али овај пут ћемо само покушати да опишемо њихову намену и задатак. Init system је (један од) система за аутоматско покретање сервиса и програма. Можемо рећи да су његове две главне компоненте init процес и init скрипте. Init процес је први процес који се покреће на нашем рачунару, покреће га сам кернел, његов ID је 1 и из њега настају сви остали процеси. Друга компонента су init скрипте које се готово увек налазе у /etc/init.d/ директоријуму. Init скрипте представљају упутства за покретање сервиса (тзв. daemon-a) и других програма. Init system функционише отприлике тако што након покретања init процеса, кернел покрене сервисе и то путем извршавања већ поменутих init скрипти. Као и у другим деловима система, и овде постоји низ алтернатива. Неки примери су SystemV, OpenRC, upstart и SystemD.

Кернел

Кернел је једна од магичних речи која се често спомиње у Linux свету и свету других оперативних система и спада у домен црне магије за многе кориснике рачунара. Када смо већ до колена загазили у црну магију, ред је да разјаснимо о чему је тачно реч. Наравно, и ово је тема која заслужује посебан текст, књигу и живот. Када бисмо оперативни систем морали да поделимо на неколико делова, то би били кернел и све остало. Кернел води сасвим другачији живот у рачунару у односу на остале процесе. Управља хардвером, одлучује који процес ће се извршавати, шта ће процесор да ради у неком тренутку и управља RAM меморијом. Кернел је заправо једино место где се нови процеси могу креирати. У кернелу се налазе driver-и (зову се још и управљачки програми) који нам омогућују да користимо наш рачунар, а још важније је да омогућују нашим програмима рад и на другим рачунарима без обзира на то колико се разликују по хардверским карактеристикама. Кернел обезбеђује интерфејс за управљање фајловима, приступ мрежи и још мноштво тога, а процес иницијализације, „распакивања” и покретања кернела такође излазе из оквира овог текста. Најбитнија ствар коју треба да знамо, јесте да кернел представља спрегу између хардвера, управља радом рачунара, покреће се процесом „boot-овања” за који је задужен bootloader и након што кернел постане функционалан, покреће се процес init, а остатак већ знате. Осим Linux кернела постоје и други, рецимо Mach, Hurd и BSD. Кернел се често зове и језгро, што би било буквално значење те речи.

Bootloader

Процесори имају крајње једноставан и досадан начин рада. Можемо их сматрати црним кутијама које на основу једног низа нула и јединица (програмске речи, инструкције, дела кода програма) знају у какво стање треба да се подесе, а потом да од неког другог низа нула и јединица (подаци), направе трећи низ нула и јединица (резултат) и тај резултат забележе негде (записивање у меморију). Када укључимо рачунар, дешава се управо то. Процесор почне да извршава неки програм, а програм који учитава оперативни систем, тачније прво кернел, па онда све остало, назива се bootloader. Ако се питате зашто не покрећемо одмах кернел, одговор је једноставан. Кернел је превелик да би га процесор могао одмах покренути па прво користимо једноставнији програм чија намена је учитавање кернела и припрема за његово покретање. Неки од најпопуларнијих су опште познати GRUB (да, да, оно чудо са којим сте имали проблема), LILO (њега вероватно не користите, осим ако нисте slacker) или u-boot (ако се срећете са embeded системима или имате raspberry). Међутим, ни ово није крај јер можемо да имамо више bootloader-а на рачунару, више уређаја на којима се налазе оперативни системи, а процесор не може директно да комуницира ни са хард диском, ни са монитором, а опет на неки начин можете да видите bootloader или да изаберете уређај са којег желите да стартујете систем. За то је задужен BIOS.

BIOS

BIOS (Basic Input/Output System) је први и основни сет програмске подршке на рачунару. Обезбеђује га произвођач матичне плоче, а његова намена је да пружи врло једноставна подешавања рачунара и комуникацију са рачунаром на неком основном нивоу. BIOS пружа подршку за испис на монитор, унос са тастатуре и приступ меморијским уређајима. Ово значи да је BIOS довољан да бисте покренули неки програм на рачунару, без потребе за оперативним системом. Bootloader је један такав програм, али ви можете да напишете и свој програм који ће се извршавати директно на процесору. За овакве играрије препоручујемо osdev wiki (http://wiki.osdev.org). Занимљиво је рећи да се ови програми морају налазити у првих 512 бајтова уређаја (односи се на CD, хард диск или flash меморију) и не могу бити већи од 1MB. Овде такође постоје алтернативе, постоје open source BIOS-и, а за више детаља о томе потражите open firmware, openbios и coreboot.

POST

Остао је још један мали детаљ. Пре него што BIOS постане сасвим функционалан, рачунар прво покреће POST (Power On Self Test) да би проверио своје стање. POST је најчешће део BIOS-а, односно део firmware-а матичне плоче. То су она прва слова која се појаве када притиснете дугме за укључивање и оно што пишти када меморија, процесор или графичка картица нису на својем месту.

За крај

Рецимо да смо сада прошли комплетан пут од преузимања нашег часописа до притиска дугмета за укључивање. Бољи израз би можда био да смо пролетели кроз ову процедуру јер много тога није написано. Има више начина како се систем може стартовати, али ово је један класичан пример. Дакле, да се подсетимо али сад хронолошким редом. POST извршава основни вид провере хардвера, проверава да ли су све компоненте рачунара на броју. BIOS је први ниво апстракције који омогућава процесору да комуницира са остатком рачунара и говори процесору на којем уређају да потражи програм који треба да изврши. Тај први програм се налази у bootsector-у (првих 512 бајтова неког меморијског уређаја) и назива се bootloader. То је мали програм који учитава кернел и започиње његову иницијализацију. Након што је кернел функционалан, он покреће први процес на систему – init процес, и њему препушта да даље активира систем. Init system потом покрене основне сервисе, између осталог и X који пружа услуге за графичка окружења, покреће се session manager како би се корисник пријавио за рад и потом се покреће окружење радне површи. У окружењу радне површи већ имамо иконице које представљају фајлове, документа, директоријуме и изршне датотеке. Када изаберемо неку од икона, покреће се потребан програм и он се појављује на монитору. Надамо се да смо успели да вас заинтересујемо. Врло радо ћемо писати о сличним темама и тиме вам помоћи да решите неке недоумице. Јавите нам се и изаћи ћемо вам у сусрет.