субота, 20 априла, 2024
Сам свој мајстор

(Не) желите да направите свој ОС!

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

Зашто направити свој ОС?

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

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

  • Желим да учим;
  • Желим да извежбам своје програмерске вештине;
  • Желим да поправим нешто;
  • Желим то да урадим из забаве.

Сви ови одговори су довољно добар разлог за упуштање у овакву пустоловину. Уколико свој одговор нисте нашли међу понуђенима, а потребни су вам савет или помоћ, слободно нам се јавите.

Почнимо од првог одговора: Желим да учим

Играње рачунарима може да буде активно и пасивно. Некада је тај израз имао мало другачије значење и подразумевао је учење и стварање. Данас се, нажалост, углавном повезује са употребом програма забавног карактера које популарно зовемо „видео игрице”.

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

Уколико вас не занима сам хардвер, постоји други скуп питања на који можда нисте довољно спремни. Сви знамо да осим корисничких услужних програма (апликација) постоји и она друга страна коју зовемо оперативним системом, али који су тачно задаци једног оперативног система? Како и да ли можемо заиста да покренемо практично неограничен број процеса? Која је разлика између програма и процеса? Како један процес види рачунар? Који ресурси су потребни процесу? Како су повезани кориснички програми и оперативни систем? Где су у целој тој причи управљачки програми или тзв. драјвери (енг. drivers)? Како се покреће један оперативни систем од тренутка када притиснемо тастер за стартовање рачунара? Како и где су смештене датотеке? Како се заиста покрећу програми („кликом на иконицу” је погрешан одговор). Сва ова питања су тек почетак који води до теорије проблема оперативних система.

Други одговор гласи: Желим да извежбам своје програмерске вештине

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

Трећи одговор: Желим да направим нешто ново

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

Четврти, и наш последњи понуђени одговор: Желим да се играм

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

Предлог пута до циља

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

Један можда мало необичан савет је да започнете са испробавањем другачијих дистрибуција линукса. Можемо да препоручимо Арч линукс као начин да се упознате са графичким интерфејсом, окружењем радне површи, подешавањем програма за учитавање система (енг. bootloader), итд. Следећи корак би могао да буде инсталирање Џенту (енг. Gentoo) линукса, који захтева још финије познавање оперативног система, нуди још више могућности за подешавање и добар је начин да се упозна са подешавањем, компајлирањем и инсталирањем језгра (енг. kernel). Ове две ставке могу да донесу и до неколико година свакодневне забаве, али постоји и наставак. Постоји дистрибуција „ЛФС” (енг. Linux From Scratch) која је баш све препустила кориснику. Не постоји интуитиван и аутоматизован начин ни за инсталирање ни за подешавање. Морамо да нагласимо да не препоручујемо ЛФС као систем за свакодневни рад већ више као начин за учење. Последња станица је заједница која се посветила документовању стварања појединих делова оперативног система. Реч је о „ОС-дев” заједници, а њу можете пронаћи на сајту wiki.osdev.org.

Покушајте да направите програм који ће се покренути уместо оперативног система. Програм који не захтева оперативни систем, а ради нешто. Нека за почетак испише барем неколико слова на екрану. Додајте унос са тастатуре. Покушајте да покренете више од једног програма, одвојено па истовремено. Додајте подршку за руковање датотекама, комуницирајте са мрежном опремом, или додајте спрега ка графичкој картици. Колико сложено може да буде направити радни оквир налик на Кјут (Qt) или ГТК? Посебно занимљив циљ је покретање неког од постојећих програма на нечему што сада већ можемо да назовемо оперативним системом.

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

За крај

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