From 11e780fd0f7bed3594de9a7170fadc88c4d48be8 Mon Sep 17 00:00:00 2001 From: Aleksa Vučković Date: Sat, 15 Jan 2022 22:39:07 +0100 Subject: Nova poglavlja + pravopis + knjige --- kernel.tex | 95 ++++++++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 74 insertions(+), 21 deletions(-) (limited to 'kernel.tex') diff --git a/kernel.tex b/kernel.tex index a04da19..c407859 100644 --- a/kernel.tex +++ b/kernel.tex @@ -4,8 +4,9 @@ basicstyle=\footnotesize, frame=single, showstringspaces=false, - tabsize=8, + tabsize=4, escapeinside={<@}{@>}, +% numbers=left } \lstset{defaultdialect=[x86masm]Assembler} @@ -131,12 +132,12 @@ Kod, zajedno sa svim alatima za njegovo korishenje i upotrebu, je dostupan pod Ovaj projakat 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 +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. Radi laksheg kompajlovanja koda od strane chitaoca, kreiran je {\eng toolchain} -- set alata specifichno za kompajlovanje ovog operativnog sistema koji se mozhe +- set alata, specifichno za kompajlovanje ovog operativnog sistema, koji se 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 @@ -167,7 +168,7 @@ Zajedno sa {\eng ARM}-om jedna od najkorish\/c1enijih arhitektura danashnjice. 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 sto je moguc1e adresirati prvih {\eng x} bitova ako se koristi ime +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 vec1a ili jednaka duzhini registra chiju notaciju koristimo.\\ @@ -208,9 +209,9 @@ gdtr & ldtr & idtr \\ Osim pomenutih, pochev od 16bit-ne {\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 +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 prikaz i na to od -kog do kog bita se odnosi data notacija.\\ +kog do kog bita registra se odnosi data notacija.\\ {\eng\begin{tabular}{|c|c|c|c|c|c|c|c|} 63-56 & 55-48 & 47-40 & 39-32 & 31-24 & 23-16 & 15-8 & 7-0 \\ @@ -237,9 +238,18 @@ Registri opshte namene imaju ulogu u chuvanju operandi i pokazivacha: \begin{itemize} \item Operandi za logichke i aritmeticke operacije \item Operandi za adresne kalkulacije -\item Pokazivace na memorijsku lokaciju +\item Pokazivache na memorijsku lokaciju \end{itemize} +Registri opshte namene se mogu koristiti proizvoljno prema potrebi. Medjutim, +dizajneri hardvera su uvideli da postoji moguc1nost daljih optimizacija ukoliko +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 specificnu funkciju svaki put gde je to moguc1e. + Specifichna uloga registara opshte namene: \begin{itemize} \item {\eng eax} - akumulator za operande i podatke rezultata @@ -282,7 +292,7 @@ Specifichna uloga segmentnih registara: \medskip Realni mod je stanje procesora u kojem nam je dozvoljeno adresiranje samo prvih -20mb memorije. Prelazak iz realnog u zasticeni mod postizhe se dalekim skokom +20 megabajta memorije. Prelazak iz realnog u zastic1eni mod postizhe se dalekim skokom {\eng "far jump"}. %{\eng\url{https://wiki.osdev.org/Real_Mode}} @@ -326,9 +336,9 @@ sistema u ram memoriju rachunara. Taj program se naziva {\eng Bootloader}. \section{{\eng Bootloader}} \medskip -{\eng Bootloader} je program koji se nalazi u prvih 512bitova medijuma, i -njegov zadatak je da uchita jezgro operativnog sistema u ram memoriju i preda -mu dalje upravljanje. +{\eng Bootloader} je program koji se nalazi u prvih 512bitova medijuma u {\eng +MBR} odeljku, i njegov zadatak je da uchita jezgro operativnog sistema u ram +memoriju i preda mu dalje upravljanje. %{\eng\url{https://wiki.osdev.org/Bootloader}} @@ -350,11 +360,11 @@ i koji mozhe da se pokrene. \bigskip U daljem tekstu se mogu videti neki od alata korish\/c1enih u kreiranju ovog -rada. Svi korish\/c1eni alati poseduju {\eng GPLv2} ili {\eng GPLv3} licencu. +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. -Jedini program sa liste koji nije {\eng GNU}-ov je {\eng QEMU} virtualna -mashina.\\ +Jedini programi sa ove liste koji nije kreirao {\eng GNU} su {\eng QEMU} +virtualna mashina, {\eng git} i {\eng NeoVim}.\\ Operativni sistem korish\/c1en u izradi ovog projekta je {\eng Artix Linux}. {\eng Artix Linux} je {\eng GNU/Linux} distribucija bazirana na {\eng Arch Linux}-u. @@ -362,7 +372,7 @@ Vec1ina korish\/c1enih programa je vec1 kompajlovana i spremna za upotrebu i nalazi se u oficijalnim repozitorijima.\\ Za programe koji su morali biti manuelno kompajlovani date su instrukcije u -njihovoj podsekciji. Jedini programi koji su morali biti kompajlovani su {\eng +njihovoj podsekciji. Programi koji su morali biti kompajlovani su {\eng binutils} i {\eng gcc} i to da ne bi koristili standardnu biblioteku koju nam je obezbedio operativni sistem domac1in (onaj na kome se kompajluje ovaj projekat). Za ostale programe koji su korish\/c1eni preporuka je koristiti one @@ -421,9 +431,9 @@ 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 karakterishe: obrnut poredak parametara, prefiks pre imena registara i -vrednosti konstanti, a i velichina parametara mora biti definisana. Zbog toga -c1e mozhda nekim chitaocima biti koristan program {\eng "intel2gas"} koji se za -{\eng Arch Linux} mozhe nac1i na stanici +vrednosti konstanti, a i velichina parametara mora biti eksplicitno definisana. +Zbog toga c1e mozhda nekim chitaocima biti koristan program {\eng "intel2gas"} +koji se za {\eng Arch Linux} mozhe nac1i na stanici {\eng\url{https://aur.archlinux.org/packages/intel2gas/}}.\\ Ovaj program je korish\/c1en za kompajlovanje dela koda napisanog u asembleru. @@ -497,7 +507,7 @@ zajedno sa uput\/stvom za kompajlovanje i korish\/c1enje. 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 -objasnjen u daljem tekstu. +objashnjen u daljem tekstu. \section{Manje bitni alati} \medskip @@ -505,11 +515,14 @@ objasnjen u daljem tekstu. \subsection{{\eng NeoVim}} {\eng NeoVim} je uredjivach teksta nastao od {\eng Vim}-a ({\eng Vi improved}). \cite{book:78583}. Konfiguracijski fajlovi autora, mogu se nac1i na -{\eng\url{https;//github.com/aleksav013/nvim}}, i imaju za cilj da stvore +{\eng\url{https://github.com/aleksav013/nvim}}, i imaju za cilj da stvore okruzhenje pogodno za rad na ovom projektu. \subsection{{\eng git}} \smallskip + +Kreator ovog programa je {\eng Linus Torvalds}, chovek koji je kreirao {\eng +Linux kernel}. Izvorni kod softvera se mozhe nac1i na stranici {\eng\url{https://git.kernel.org/pub/scm/git/git.git}}. @@ -533,6 +546,40 @@ ili {\eng USB} flesh sa kojih se kasnije dizhe sistem. {\eng GNU}-ov {\eng debugger} koji sluzhi uglavnom za pronalazhenje greshaka u kodu. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Inspiracija} +\bigskip + +\section{{\eng Minix}} +\medskip +\cite{book:821745}\\ +\cite{book:1400099} +Takodje je napisao i \cite{book:915673}. + +\section{{\eng Linux}} +\medskip + +\section{{\eng BSD}} +\medskip +\cite{book:1310096} + +\section{{\eng Mmurtl}} +\medskip + +\cite{book:658757} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{{\eng Build system}} +\bigskip + +\section{{\eng aleksa-toolchain}} +\medskip + +\section{{\eng Makefile}} +\medskip %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -540,6 +587,10 @@ kodu. \chapter{Jezgro operativnog sistema} \bigskip +Rad je prvobitno bio zamisljen kao postupno izlaganje nastajanja ovog +operativnog sistema, ali se kasnije autor odluchio da ipak izlozhi samo +trenutnu verziju rada, s obrzirom na to da bi rad bio nepotrebno duzhi. + \section{Pochetak} \medskip %{\eng\url{https://wiki.osdev.org/Bare_Bones}} @@ -792,6 +843,8 @@ videti u pochetnom fajlu. {\eng c/heap.c}: +\cite{book:1412}\\ + \begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo1}\srb\end{minipage} \begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo2}\srb\end{minipage} \begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo3}\srb\end{minipage} @@ -860,7 +913,7 @@ videti u pochetnom fajlu. {\eng include/irq.h}: -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/10.libc/irq.h}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C,linerange={1-5,36-40}]{include/10.libc/irq.h}\srb\end{minipage} {\eng include/stdio.h}: -- cgit v1.2.3