From ea8b982f67bcbf92fbf3be8f4da92908b6b788ce Mon Sep 17 00:00:00 2001 From: Aleksa Vučković Date: Sat, 7 May 2022 02:09:34 +0200 Subject: Komentarisanje koda (prvi deo) --- kernel.pdf | Bin 470517 -> 474447 bytes kernel.tex | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 62 insertions(+), 9 deletions(-) diff --git a/kernel.pdf b/kernel.pdf index 3b8e495..04dfe43 100644 Binary files a/kernel.pdf and b/kernel.pdf differ diff --git a/kernel.tex b/kernel.tex index dfbe1b7..214ac13 100644 --- a/kernel.tex +++ b/kernel.tex @@ -93,7 +93,7 @@ \vfill \begin{center} -{\imen Beograd, jun 2021.} +{\imen Beograd, jun 2022.} \end{center} \clearpage @@ -403,9 +403,9 @@ strane {\eng bootloader}-a i da mu bilo predato dalje upravljanje. disku, kreiran kao rezultat kompajlovanja i linkovanja. {\eng ELF} fajl je podeljen na odeljke. Za program koji mozhe da se izvrshi, postoje sledec1i odeljci: odeljak sa tekstom za kod, odeljak sa podacima za globalne promenljive -i odeljak "Rodata" koji obično sadrži konstantne niske ({\eng Read only data}). -{\eng ELF} fajl sadrzhi zaglavlja koja opisuju kako ovi odeljci treba da budu -uskladishteni u memoriji.\\ +i odeljak {\eng ".rodata" (read only data)} koji obichno sadrzhi konstantne +niske. {\eng ELF} fajl sadrzhi zaglavlja koja opisuju kako ovi odeljci treba +da budu uskladishteni u memoriji.\\ Ovaj format definisan je u {\eng System V ABI} ({\eng System V Application Binary Interface}) koji je set specifikacija koji definishe pozivanje funkcija, @@ -616,7 +616,7 @@ koji sadrzhi sve stho je neophodno za uspeshno podizanje sistema. {\eng\url{https://www.sourceware.org/gdb/}} {\eng GDB} je {\eng GNU}-ov {\eng debugger} koji sluzhi za pronalazhenje -greshaka u kodu, kao i aktivno prac1enje izvrshavanja programa (u ovom slucaju +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. @@ -842,12 +842,12 @@ Funkcija koja ispisuje niz karaktera na ekran. \medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/vga11.c}\srb\end{minipage}\smallskip -Funcija koja ispisuje celobrojnu vrednost na ekran tako shto je prvo pretvori u +Funkcija koja ispisuje celobrojnu vrednost na ekran tako shto je prvo pretvori u niz karaktera a zatim iskoristi prethodnu funkciju. \medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/vga12.c}\srb\end{minipage}\smallskip -Funcija koja ispisuje realnu vrednost na ekran tako shto je prvo pretvori u niz +Funkcija koja ispisuje realnu vrednost 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 @@ -861,10 +861,22 @@ brojache kolone i reda na pochetnu poziciju. \section{{\eng Global Desctiptor Table}} \medskip +Globalna tabela deskriptora je struktura u kojoj se chuvaju informacije o +segmentima memorije. + {\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 +operativnog sistema. Ove direktive deluju kao osigurach koji preskache sve +deklaracije ukoliko su one vec1 definisane pod tim imenom. + \medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/gdt1.h}\srb\end{minipage}\smallskip +Autor je kreirao biblioteku {\eng types.h} da bi od\/jednom dodao sve +kompajlerske biblioteke koje definishu vrste promenljivih kao shto su +{\eng int, uint16\_t, bool,...} + \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. @@ -874,30 +886,51 @@ unutar strukture, vec1 c1e se "pakovati" jedna do druge u memoriji. \medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/gdt3.h}\srb\end{minipage}\smallskip -Format koji rachunar prihvata za tabelu svih definicija segmenata. +Format koji rachunar prihvata za tabelu svih definicija segmenata memorije. \medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/gdt4.h}\srb\end{minipage}\smallskip +Funkcije koje su definisane u {\eng c/gdt.c}, a tichu se inicijalizacije +globalne tabele deskriptora. + \medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/gdt5.h}\srb\end{minipage}\smallskip +Direktiva za zatvaranje koja se nalazi na kraju fajla i kojom se zavrshava +segment koda predvidjen za deklaracije. + \medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/gdt6.h}\srb\end{minipage}\smallskip -{\eng c/gdt.c}: +{\eng c/gdt.c}:\\ + +U {\eng source/} folderu se nalaze prototipi za funkcije istoimenog {\eng C} +izvornog fajla. \medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/gdt1.c}\srb\end{minipage}\smallskip +Funkcija napisana u {\eng Assembler}-u koja uchitava tabelu deskriptora u +predvidjeni registar. + \medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/gdt2.c}\srb\end{minipage}\smallskip +Tabela segmenata i pokazivach na nju koji se prosledjuje prethodno pomenutoj +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. + \medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/gdt4.c}\srb\end{minipage}\smallskip +Glavna funkcija koja postavlja velichinu pokazivacha koji se prosledjuje, \medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/gdt5.c}\srb\end{minipage}\smallskip +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 +memorije. \medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/gdt7.c}\srb\end{minipage}\smallskip @@ -907,6 +940,15 @@ Format koji rachunar prihvata za tabelu svih definicija segmenata. \section{{\eng Interrupt Desctiptor Table}} \medskip +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.\\ + +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},...) fukcija ima zadatak da ukloni novonastali problem i obezbedi +operativnom sistemu oporavak od greshke. + {\eng include/source/idt.h}: \medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/04.idt/idt1.h}\srb\end{minipage}\smallskip @@ -919,8 +961,13 @@ Format koji rachunar prihvata za tabelu svih definicija segmenata. \medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/04.idt/idt5.h}\srb\end{minipage}\smallskip +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 koja uchitava tabelu prekida u odgovarajuc1i registar. + \medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/04.idt/idt7.h}\srb\end{minipage}\smallskip \medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/04.idt/idt8.h}\srb\end{minipage}\smallskip @@ -935,8 +982,14 @@ Format koji rachunar prihvata za tabelu svih definicija segmenata. \medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/05.irq/idt1.c}\srb\end{minipage}\smallskip +Asemblerska fukcija koja uchitava pokazivach na tabelu prekida u +predvidjeni registar. + \medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/05.irq/idt2.c}\srb\end{minipage}\smallskip +Tabela segmenata i pokazivach na nju koji se prosledjuje prethodno pomenutoj +funkciji. + \medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/05.irq/idt3.c}\srb\end{minipage}\smallskip \medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/05.irq/idt4.c}\srb\end{minipage}\smallskip -- cgit v1.2.3