From a5f5378f913d9bac3a5d686372cf1b8dda1cd835 Mon Sep 17 00:00:00 2001 From: Aleksa Vučković Date: Tue, 24 May 2022 02:27:37 +0200 Subject: lektorisanje --- kernel.tex | 161 +++++++++++++++++++++++++++++++------------------------------ 1 file changed, 81 insertions(+), 80 deletions(-) (limited to 'kernel.tex') diff --git a/kernel.tex b/kernel.tex index ead876e..36e13c2 100644 --- a/kernel.tex +++ b/kernel.tex @@ -124,18 +124,18 @@ \bigskip Ideja za ovaj rad proizishla je iz ekstenzivnog korish\/c1enja {\eng GNU/Linux} -sistema, kao i zhelja za razumevanjem rada rachunara na najnizhem nivou. +sistema, kao i zhelja za razumevanjem rada rachunara na najnizhem nivou.\\ -Ceo kod je pisan u {\eng GNU Asembler}-u i {\eng C}-u i mozhe se nac1i na +Ceo kod je pisan u {\eng GNU Assembler}-u i {\eng C}-u i mozhe se nac1i na {\eng GitHub}-u na stranici {\eng\url{https://github.com/aleksav013/mykernel}}. -Kod, zajedno sa svim alatima za njegovo korishenje i upotrebu, je dostupan pod -{\eng GPLv3} licencom. +Kod, zajedno sa svim alatima za njegovo korish\/c1enje i upotrebu, je dostupan +pod {\eng GPLv3} licencom.\\ Ovaj projekat se konstantno unapredjuje i nemoguc1e je odrzhavati sinhronizovanim fajlove koji sachinjavaju operativni sistem, a koji se istovremeno pominju u ovom radu. Iz tog razloga, rad c1e biti napisan za verziju operativnog sistema 1.0.0. Na stranici {\eng GitHub}-a ova verzija se -mozhe nac1i pod {\eng tag/s} sekcijom na stranici projekta. +mozhe nac1i pod {\eng tag/s} sekcijom na stranici projekta.\\ Radi laksheg kompajlovanja koda od strane chitaoca, kreiran je {\eng toolchain} - set alata, specifichno za kompajlovanje ovog operativnog sistema, koji se @@ -143,9 +143,9 @@ mozhe nac1i na stranici {\eng\url{https://github.com/aleksav013/aleksa-toolchain}}, takodje dostupan pod {\eng GPLv3} licencom otvorenog koda. Set alata {\eng aleksa-toolchain} kreiran je takodje i iz razloga shto je zapravo neizbezhan -proces kreiranja {\eng cross-compilera} - kompajlera koji kompapajluje kod za -drugi sistem/arhitekturu na trenutnom sistemu/arhitekturi. Na taj nachin i -drugi ljudi osim autora mogu doprineti izradi i pobojshanju ovog operativnog +proces kreiranja \text{{\eng cross-compiler}-a} - kompajlera koji kompajluje +kod za drugi sistem/arhitekturu na trenutnom sistemu/arhitekturi. Na taj nachin +i drugi ljudi osim autora mogu doprineti izradi i poboljshanju ovog operativnog sistema u buduc1nosti.\\ Ovaj projekat ima za cilj da prikazhe postupak kreiranja jednog za sada @@ -166,9 +166,9 @@ ove familije nose zajednichki naziv upravo po sufiksu 86 koji se pojavljuje u imenima svih ovih procesora.\\ U periodu od 1999. do 2003. {\eng AMD} je proshirio velichinu registra na 64 bita -i ta arhitektura ima vishe naziva od kojih su najkorisheniji: {\eng x86\_64, -amd64} i {\eng x64}. Velika vec1ina uredjaja danas koristi {\eng x86\_64} arhitekturu -procesora.\\ +i ta arhitektura ima vishe naziva od kojih su najkorish\/c1eniji: {\eng +x86\_64, amd64} i {\eng x64}. Velika vec1ina uredjaja danas koristi {\eng +x86\_64} arhitekturu procesora.\\ Jezgo operativnog sistema prikazano u ovom radu bazirano je na {\eng X86} arhitekturi sa registrom velichine 32 bita. Konkretna verzija ove arhitekture @@ -182,7 +182,7 @@ imenom 80386 shto oznachava trec1u generaciju {\eng X86} arhitekture. Postoji vishe vrsta registara procesora\cite[75]{misc:1}. Neki od osnovnih registara koje je potrebno pomenuti dati su u tekstu koji sledi. Razlog zbog kojeg su navedena i imena registara prethodnih verzija {\eng X86} arhitekture -je zbog toga shto je moguc1e adresirati prvih {\eng x} bitova ako se koristi +je zbog toga shto je moguc1e adresirati prvih {\eng x} bitova, ako se koristi ime registra za {\eng x}-tobitnu verziju {\eng X86} arhitekture. Naravno, ovo vazhi samo ukoliko je duzhina registra nasheg sistema (32 bita), vec1a ili jednaka duzhini registra chiju notaciju koristimo. @@ -222,7 +222,7 @@ gdtr & ldtr & idtr \\ \hline \end{tabular}}\\ -Osim pomenutih, pochev od shesnaestobitne {\eng X86} arhitekture postoje i +Osim pomenutih, pochev od shesnaestobitne {\eng X86} arhitekture, postoje i registri {\eng ah, bh, ch, dh (h-higher)} koji predstavljaju gornju polovinu (od 9. do 16. bita) {\eng ax, bx, cx, dx} registara redom. U daljem tekstu bic1e prikazan odnos izmedju registara o kome je ranije bilo rechi, kao i @@ -253,7 +253,7 @@ Registri opshte namene imaju ulogu u chuvanju operandi i pokazivacha: \begin{itemize} \item Operandi za logichke i aritmetichke operacije \item Operandi za adresne kalkulacije -\item Pokazivache na memorijsku lokaciju +\item Pokazivacha na memorijsku lokaciju \end{itemize} Registri opshte namene se mogu koristiti proizvoljno prema potrebi. Medjutim, @@ -262,8 +262,8 @@ se svakom od ovih registara dodeli neka specifichna uloga u kojoj je malo bolji od ostalih registara opshte namene.\\ Na taj nachin kompajleri vec1inu vremena kreiraju bolji asemblerski kod nego -ljudi, prosto iz razloga jer svaki od registara opshte namene takodje koriste i -za njihovu specifichnu funkciju svaki put gde je to moguc1e.\\ +ljudi, prosto iz razloga shto svaki od registara opshte namene takodje koriste +i za njihovu specifichnu funkciju svaki put gde je to moguc1e.\\ Specifichna uloga registara opshte namene: \begin{itemize} @@ -295,7 +295,7 @@ Specifichna uloga segmentnih registara: izvrshavaju. \item {\eng ds - data segment}. Osim {\eng ds}, segmentni registri za segmente podataka su i {\eng es, fs}, kao i {\eng gs}. -\item {\eng ss - stack segment} {\eng ss} registar sadrzhi selektor segmenta +\item {\eng ss - stack segment}. {\eng ss} registar sadrzhi selektor segmenta koji pokazuje na segment steka gde se chuva stek programa koji se trenutno izvrshava. Za razliku od registra za segment koda, {\eng ss} registar se mozhe eksplicitno postaviti shto dozvoljava aplikacijama da postave @@ -309,27 +309,27 @@ Specifichna uloga segmentnih registara: Realni mod karakterishe 20-tobitna segmentirana memorija shto znachi da se mozhe adresirati samo malo vishe od jednog megabajta. Svi procesori pochev od 80286 zapochinju u ovom modu nakon paljenja rachunara zbog kompatibilnosti. Da -bismo mogli da adresiramo vishe memorije potrebno je da koristimo segmentne +bismo mogli da adresiramo vishe memorije, potrebno je da koristimo segmentne registre.\\ -Postupak kojim iz realnoh moda prelazimo u zashtic1en mod naziva se daleki skok -{\eng (far jump)} gde pri postavljanju segmentnih registara "skachemo" iz -jednog segmenta u drugi. Daleki skok najchesh\/c1e podrazumeva promenu selektora -segmenta, koji se nalazi u segmentu koda, i koji pokazuje na segment koda u -kome se nalaze instrukcije koje se trenutno izvrshavaju. +Postupak kojim iz realnog moda prelazimo u zashtic1eni mod naziva se daleki +skok {\eng (far jump)} gde pri postavljanju segmentnih registara "skachemo" iz +jednog segmenta u drugi. Daleki skok najchesh\/c1e podrazumeva promenu +selektora segmenta, koji se nalazi u segmentu koda, i koji pokazuje na segment +koda u kome se nalaze instrukcije koje se trenutno izvrshavaju. \section{Segmentacija} \medskip Segmentacija je reshenje kojim se omoguc1ava adresiranje vishe memorije nego shto je to hardverski predvidjeno. Segmentacija se postizhe korish\/c1enjem -{\eng offset}-a. Sa segmenatcijom smo u realnom modu da adresiramo memoriju sa -20 umesto predvidjenih 16 bitova. +{\eng offset}-a. Upravo smo uz pomoc1 segmenatcije u realnom modu adresirali +memoriju sa 20, umesto predvidjenih 16 bitova. \section{{\eng Protected mode}} \medskip -Zashtic1en mod je stanje procesora u kojem procesor ima pun pristup celom +Zashtic1eni mod je stanje procesora u kojem procesor ima pun pristup celom opsegu memorije za razliku od realnog moda. Maksimalna velichina {\eng RAM} memorije koju arhitektura {\eng i386} podrzhava je {\eng 4GB} upravo zbog velichine registra od 32 bita ($2^{32}B = 4GB$). Neki procesori koji @@ -356,16 +356,16 @@ prve instrukcije. \section{Redosled pokretanja} \medskip -Od pritiska dugmeta za paljenje rachunara, pa do uchitavanja operativnog sitema -postoji ceo jedan proces. Nakon pritiska dugmeta rachunar prvo izvrshava {\eng -POST (Power On Self Test)} rutinu koja je jedna od pochetnih faza {\eng BIOS}-a -{\eng (Basic Input Output System)}. U {\eng POST}-u rachunar pokushava da -inicijalizuje komponente rachunarskog sistema jednu po jednu i proverava da li -one ispunjavaju sve uslove za startovanje rachunara. Ukoliko je ceo proces -proshao bez greshaka nastavlja se dalje izvrshavanje {\eng BIOS}-a. {\eng BIOS} -sada ima ulogu da pronadje medijum koji sadrzhi program koji c1e uchitati -jezgro operativnog sistema u ram memoriju rachunara. Taj program se naziva -{\eng Bootloader}. +Od pritiska dugmeta za paljenje rachunara, pa do uchitavanja operativnog +sistema postoji ceo jedan proces. Nakon pritiska dugmeta, rachunar prvo +izvrshava {\eng POST (Power On Self Test)} rutinu, koja je jedna od pochetnih +faza {\eng BIOS}-a {\eng (Basic Input Output System)}. U {\eng POST}-u, +rachunar pokushava da inicijalizuje komponente rachunarskog sistema jednu po +jednu i proverava da li one ispunjavaju sve uslove za startovanje rachunara. +Ukoliko je ceo proces proshao bez greshaka, nastavlja se dalje izvrshavanje +{\eng BIOS}-a. {\eng BIOS} sada ima ulogu da pronadje medijum koji sadrzhi +program koji c1e uchitati jezgro operativnog sistema u ram memoriju rachunara. +Taj program se naziva {\eng Bootloader}. %{\eng\url{https://wiki.osdev.org/Boot_Sequence}} @@ -388,13 +388,13 @@ odeljku Korish\/c1eni alati. %{\eng\url{https://wiki.osdev.org/Bootloader}} -\section{{\eng Multiboot2} specifikacija} +\section{{\eng Multiboot} specifikacija} \medskip {\eng Multiboot} specifikacija je otvoreni standard koji jezgrima obezbedjuje ujednachen nachin pokretanja od strane {\eng bootloader}-a usaglashenih sa ovom specifikacijom. Jedna od prvih stvari koji svako jezgro uradi je postavljanje -konstanti definisanih {\eng multiboot2} standardom da bi bilo prepoznato od +konstanti definisanih {\eng multiboot} standardom da bi bilo prepoznato od strane {\eng bootloader}-a i da bi mu bilo predato dalje upravljanje. \section{{\eng ELF}} @@ -430,7 +430,7 @@ Assembler}-a. U daljem tekstu se mogu videti neki od alata korish\/c1enih u kreiranju ovog rada. Vec1ina korish\/c1enih alata poseduje {\eng GPLv3} licencu. {\eng GNU Public Licence} je licenca otvorenog koda koja dozvoljava -modifikovanje i distribuiranje koda sve dok taj je taj kod javno dostupan. +modifikovanje i distribuiranje koda sve dok je taj kod javno dostupan. Jedini programi sa ove liste koji nije kreirao {\eng GNU} su {\eng QEMU} virtuelna mashina, {\eng git} i {\eng NeoVim} koji koriste {\eng GPLv2} licencu.\\ @@ -501,7 +501,7 @@ Instrukcije za kompajlovanje date su u nastavku. Iako trenutno postoje mnogo popularnije alternative poput {\eng NASM (Netwide Assembler)} i {\eng MASM (Microsoft Assembler)} koji koriste noviju Intelovu sintaksu, autor se ipak odluchio za {\eng GASM} zbog kompatibilnosti sa {\eng -GCC} kompajlerom. {\eng GASM} kosristi stariju {\eng AT\&T} sintaksu koju +GCC} kompajlerom. {\eng GASM} koristi stariju {\eng AT\&T} sintaksu koju karakterishe: obrnut poredak parametara, prefiks pre imena registara i vrednosti konstanti, a i velichina parametara mora biti eksplicitno definisana. Zbog toga c1e mozhda nekim chitaocima biti koristan program {\eng intel2gas} @@ -515,7 +515,7 @@ napisanog u asembleru. \smallskip {\eng GNU Linker} je korish\/c1en za linkovanje, tj. "spajanje" svog -komapjlovanog koda u jednu binarnu datoteku tipa {\eng ELF} koja predstavlja +kompajlovanog koda u jednu binarnu datoteku tipa {\eng ELF} koja predstavlja jezgro (kernel). \section{{\eng GCC}} @@ -526,7 +526,7 @@ Izvorni kod softvera se mozhe nac1i na stranici korish\/c1enje.\\ Isto kao i za {\eng GNU Binutils} moguc1e je pronac1i vec1 spreman paket u -pojedinim distribucijama ali je preporuka manuelno kompajlovati iz +pojedinim distribucijama, ali je preporuka manuelno kompajlovati iz prethodno navedenih razloga. Za {\eng Arch Linux} ovaj paket se mozhe nac1i na stanici {\eng\url{https://aur.archlinux.org/packages/i686-elf-gcc/}}.\\ @@ -578,14 +578,14 @@ Makefile}-ovi. \medskip Izvorni kod softvera se mozhe nac1i na stranici -{\eng\url{https://www.gnu.org/software/make/}} +{\eng\url{https://www.gnu.org/software/make/}}, zajedno sa uput\/stvom za kompajlovanje i korish\/c1enje.\\ -{\eng Make}\cite{book:78575} nam omoguc1ava da sa lakoc1om odrzhavamo i manipulishemo izvornim -fajlovima. Moguc1e je sve kompajlovati, obrisati, kreirati {\eng iso} fajl kao -i pokrenuti {\eng QEMU} virtuelnu mashinu sa samo jednom kljchnom rechi u -terminalu. Kreirani {\eng Makefile} za potrebe ovog projekta bic1e detaljno -objashnjen u sekciji {\eng Build system}. +{\eng Make}\cite{book:78575} nam omoguc1ava da sa lakoc1om odrzhavamo i +manipulishemo izvornim fajlovima. Moguc1e je sve kompajlovati, obrisati, +kreirati {\eng iso} fajl kao i pokrenuti {\eng QEMU} virtuelnu mashinu sa samo +jednom kljuchnom rechi u terminalu. Kreirani {\eng Makefile} za potrebe ovog +projekta bic1e detaljno objashnjen u sekciji {\eng Build system}. \section{Manje bitni alati} \medskip @@ -605,7 +605,7 @@ Linux} kernel. Izvorni kod softvera se mozhe nac1i na stranici {\eng Git} je program koji nam pomazhe da odrzhavamo izvodne fajlove sinhronizovanim sa repozitorijumom. Osim toga znachajan je i njegov sistem -kontrole verzija - moguc1nost da se za svaku promenu({\eng commit}) vidi +kontrole verzija - moguc1nost da se za svaku promenu ({\eng commit}) vidi tachno koji su se fajlovi izmenili i koja je razlika izmedju neke dve verzije projekta. @@ -613,7 +613,7 @@ projekta. \smallskip Izvorni kod softvera se mozhe nac1i na stranici -{\eng\url{https://www.gnu.org/software/xorriso/}} +{\eng\url{https://www.gnu.org/software/xorriso/}}, zajedno sa uput\/stvom za kompajlovanje i korish\/c1enje.\\ Sluzhi za kreiranje {\eng ISO} fajlova koji se mogu "narezati" na {\eng CD} @@ -624,13 +624,13 @@ koji sadrzhi sve shto je neophodno za uspeshno podizanje sistema. \smallskip Izvorni kod softvera se mozhe nac1i na stranici -{\eng\url{https://www.sourceware.org/gdb/}} +{\eng\url{https://www.sourceware.org/gdb/}}, zajedno sa uput\/stvom za kompajlovanje i korish\/c1enje.\\ {\eng GDB} je {\eng GNU}-ov {\eng debugger} koji sluzhi za pronalazhenje greshaka u kodu, kao i aktivno prac1enje izvrshavanja programa (u ovom sluchaju jezgra). Uz pomoc1 ovog programa ustanovljeno je shta svako dugme na tastaturi -vrac1a nakon pritiska shto je znachajno ubzalo proces mapiranja tastature. +vrac1a nakon pritiska, shto je znachajno ubzalo proces mapiranja tastature. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -648,7 +648,7 @@ operativnog sistema kreirao je Endrju S. Tanenbaum kao profesor Vrije univerziteta u Amsterdamu. Profesor Tanenbaum kreirao je operativni sistem kao primer principa koji su prikazani u njegovoj knjizi "Operativni sistemi: Dizajn i Implementacija" ({\eng Operating Systems: Design and -Implementation})\cite{book:1400099}. Osim ove knjige Tanenbaum napisao je i +Implementation})\cite{book:1400099}. Osim ove knjige, Tanenbaum napisao je i mnoge druge koje mogu biti od koristi svima koji zhele da se bave dizajnom operativnih sistema\cite{book:821745}\cite{book:915673}. Zanimljiva chinjenica je da je {\eng Minix} najpopularniji operativni sistem @@ -665,14 +665,14 @@ najkorish\/c1enijim operativnim sistemom ikada. Vec1 duzhe od dve godine koristim operativni sistem sa {\eng Linux} jezgrom shto je bio i glavni razlog zashto sam izabrao rad na ovu temu. -U toku izrade ovog projekta pozheleo sam da bolje razumem kako funkcionishe +U toku izrade ovog projekta, pozheleo sam da bolje razumem kako funkcionishe izrada {\eng Linux} kernela i kako je to "zajednica" ona koja ga pokrec1e i odrzhava, a ne neka velika korporacija. Stoga sam odluchio da dam svoj doprinos i poslao sam nekoliko zakrpa ({\eng patch}-eva) koji su primljeni i implemetirani u novoj 5.17 verziji {\eng Linux} kernela. Ovo iskustvo pokazalo mi je koliko je ozbiljna organizacija koja stoji iza celog tog projekta i koliko je bitno raditi na svim sferama nekog projekta kao shto su i izrada -dokumentacije i spremnost da se edukuju i zaiteresuju mladi ljudi kojima c1e +dokumentacije i spremnost da se edukuju i zainteresuju mladi ljudi kojima c1e ovakvo iskustvo znachiti u daljem profesionalnom usavrshavanju. Drago mi je shto me je ovaj projekat odvazhio da nachinim taj korak i doprinesem mozhda najvec1em softverskom projektu ikada. @@ -681,13 +681,13 @@ najvec1em softverskom projektu ikada. \medskip Najpopularniji {\eng BSD} operativni sistemi su redom {\eng FreeBSD\cite{book:1310096}, OpenBSD} i {\eng NetBSD}. Svaki od njih ima -razlichite ciljeve ali svi se slazhu u jednom: softver mora ostati minimalan. +razlichite ciljeve, ali se svi slazhu u jednom: softver mora ostati minimalan. Svi ovi operativni sistemi svoje sistemske programe i biblioteke imaju napisano -u duplo ako ne i nekoliko puta manje linija koda nego {\eng GNU/Linux}. To ih chini -mnogo lakshim za odrzhavanje, ali i mnogo sigurnijim.\\ +u duplo, ako ne i nekoliko puta manje linija koda nego {\eng GNU/Linux}. To ih +chini mnogo lakshim za odrzhavanje, ali i mnogo sigurnijim.\\ -{\eng BSD} oprativni sistemi razlikuju se od {\eng GNU/Linux}-a po tome shto su -kod {\eng BSD}-a jezgro i korisnichki programi celina koje je nastala od +{\eng BSD} operativni sistemi razlikuju se od {\eng GNU/Linux}-a po tome shto +su kod {\eng BSD}-a jezgro i korisnichki programi celina koja je nastala od strane jednog tima ljudi i odrzhavaju se uporedo, dok je kod {\eng GNU/Linux}-a jezgro {\eng Linux}, a {\eng GNU Coreutils} chini korisnichke programe {\eng (user space)} i njihov razvoj je potpuno nezavisan. Zbog te chinjenice, {\eng @@ -733,8 +733,8 @@ arhive, a zatim je {\eng patch}-uje (primenjuje skup izmena). Nakon toga korish\/c1enjem {\eng GCC} kompajlera na {\eng host} sistemu, kompajluje se poseban {\eng GCC} kompajler koji sluzhi za kompajlovanje izvornog koda namenjenog jezgru ovog operativnog sistema. Nakon toga on se instalira na -put {\eng /opt/aleksa/usr/bin/} gde se nalazi novi {\eng SYSROOT} koji koristi -{\eng Makefile}. +put {\eng /opt/aleksa/usr/bin/}, gde se nalazi novi {\eng \$SYSROOT} koji +koristi {\eng Makefile}. \section{{\eng Makefile}} \medskip @@ -745,7 +745,7 @@ koji se pokrec1e ukucavanjem komande {\eng make $<$ime\_pravila$>$}. U tekstu koji sledi mozhe se videti koji je to set pravila koje su definisani za ovaj projekat. -\medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=make,linerange={70-98}]{include/00.build/Makefile}\srb\end{minipage}\smallskip +\medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=make,linerange={70-200}]{include/00.build/Makefile}\srb\end{minipage}\smallskip Mozhemo videti da je ovo kompleksnija forma {\eng Makefile}-a jer sadrzhi proces rekurzivnog pozivanja {\eng \$(MAKE)} komande. To znachi da ovaj @@ -781,11 +781,11 @@ jeziku\cite{book:441007}\cite{book:690930}. {\eng as/boot.s}:\\ U prvom delu postavljamo promenljive na vrednosti koje su odredjene {\eng -Multiboot2} standardom da bi {\eng bootloader} prepoznao nashe jezgro. +Multiboot} standardom da bi {\eng bootloader} prepoznao nashe jezgro. \medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/boot1.s}\srb\end{minipage}\smallskip -Nakon toga postavljamo prvih 512 bajtova na prethodno pomenute vrednosti ali +Nakon toga postavljamo prvih 512 bajtova na prethodno pomenute vrednosti, ali tako da za svaku promenljivu ostavljamo 32 bita prostora. \medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/boot2.s}\srb\end{minipage}\smallskip @@ -795,7 +795,7 @@ podataka, redom. \medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/boot3.s}\srb\end{minipage}\smallskip -Definishemo sekciju {\eng bss} u kojoj kreiramo stek i dodeljujemo mu 16 +Definishemo sekciju {\eng .bss} u kojoj kreiramo stek i dodeljujemo mu 16 kilobajta. \medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/boot4.s}\srb\end{minipage}\smallskip @@ -808,7 +808,7 @@ ima naziv {\eng "far jump"} jer skachemo van tekuc1eg segmenta. U segmentu koda postavljamo segmentne registre na adresu segmenta podataka. Zatim postavljamo {\eng esp} registar na pochetak steka koji smo -inicijalizovali u {\eng bss} sekciji i predajemo upravljanje {\eng +inicijalizovali u {\eng .bss} sekciji i predajemo upravljanje {\eng kernel\_main} funkciji. \medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/boot6.s}\srb\end{minipage}\smallskip @@ -880,7 +880,7 @@ niz karaktera a zatim iskoristi prethodnu funkciju. \medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/vga12.c}\srb\end{minipage}\smallskip -Funkcija koja ispisuje realnan broj na ekran tako shto je prvo pretvori u niz +Funkcija koja ispisuje realan broj na ekran tako shto je prvo pretvori u niz karaktera a zatim iskoristi funkciju za ispis niza karaktera. \medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/vga13.c}\srb\end{minipage}\smallskip @@ -897,7 +897,7 @@ brojache kolone i reda na pochetnu poziciju. Globalna tabela deskriptora je struktura u kojoj se chuvaju informacije o segmentima memorije.\\ -{\eng include/source/gdt.h}: +{\eng include/source/gdt.h}:\\ Koristimo {\eng \#ifndef} i {\eng \#define} direktive da bi se osigurali da se ovaj fajl ukljuchuje ({\eng include}-uje) samo jednom u toku celog rada @@ -913,7 +913,6 @@ UINT16\_MAX...}. \medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/gdt2.h}\srb\end{minipage}\smallskip -Format u kom rachunar prihvata unos pojedinachnih definicija segmenata. Primetimo {\eng \_\_attribute\_\_((packed))}, na kraju definicije strukture. To nam oznachava da se nec1e ostavljati mesta u memoriji izmedju promenljivih unutar strukture, vec1 c1e se "pakovati" jedna do druge u memoriji. @@ -951,7 +950,8 @@ funkciji. \medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/gdt3.c}\srb\end{minipage}\smallskip -Funkcija koja na osnovu parameta inicijalizuje jedan globalni segment memorije. +Funkcija koja na osnovu parametara inicijalizuje jedan globalni segment +memorije. \medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/gdt4.c}\srb\end{minipage}\smallskip @@ -963,7 +963,7 @@ inicijalizuje sve segmente memorije koji c1e se koristiti, \medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/gdt6.c}\srb\end{minipage}\smallskip -kao i poziva fukciju kojoj prosledjuje pokazivach na globalnu tabelu segmenata +kao i poziva funkciju kojoj prosledjuje pokazivach na globalnu tabelu segmenata memorije. \medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/gdt7.c}\srb\end{minipage}\smallskip @@ -976,12 +976,13 @@ memorije. Globalna tabela prekida je struktura koja nam govori koja funkcija zapravo reaguje kada procesor dobije zahtev za prekid ({\eng interrupt request}). Tada -procesor pauzira ono shto trenutno radi i predaje upravljenje odredjenoj funkciji.\\ +procesor pauzira ono shto trenutno radi i predaje upravljanje odredjenoj +funkciji.\\ Funkcija je duzhna da dojavi procesoru da je c1e ona preuzeti ({\eng handle}-ovati) taj prekid i ukoliko je prekid fatalan (deljenje nulom, {\eng -triple fault},...) funkcija ima zadatak da ukloni novonastali problem i obezbedi -operativnom sistemu oporavak od greshke.\\ +triple fault},...) funkcija ima zadatak da ukloni novonastali problem i +obezbedi operativnom sistemu oporavak od greshke.\\ {\eng include/source/idt.h}: @@ -999,8 +1000,8 @@ Struktura u kojoj rachunar prihvata globalnu tabelu prekida. \medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/04.idt/idt6.h}\srb\end{minipage}\smallskip -Pokazivach na tabelu prekida koja se prosledjuje funkciji napisanoj u {\eng -Assembler}-u, a koja uchitava tabelu prekida u odgovarajuc1i registar. +Pokazivach na tabelu prekida koja se prosledjuje funkciji napisanoj u \text{{\eng +Assembler}-u}, a koja uchitava tabelu prekida u odgovarajuc1i registar. \medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/04.idt/idt7.h}\srb\end{minipage}\smallskip @@ -1107,9 +1108,9 @@ funkciji. \section{{\eng Heap}} \medskip -{\eng Heap} za ovo jezgro kotisti algoritam\cite{book:1412} bitmape da bi na -najefikasniji nachin chuvalo podatke o trenutno korishc1enim blokovima. Hip nam -sluzhi da bismo dinamichki alocirali memoriju, tj. da bismo mogli da +{\eng Heap} za ovo jezgro koristi algoritam\cite{book:1412} bitmape da bi na +najefikasniji nachin sachuvalo podatke o trenutno korish\/c1enim blokovima. Hip +nam sluzhi da bismo dinamichki alocirali memoriju, tj. da bismo mogli da koristimo globalne promenljive, kao i promenljive chiji zhivotni vek mora biti dugotrajniji od funkcije u kojoj je ta promenljiva nastala.\\ -- cgit v1.2.3