From c0afee36ea5b3cc7e613ee4021b9a91a3c6f39a4 Mon Sep 17 00:00:00 2001 From: Aleksa Vučković Date: Fri, 31 Dec 2021 14:59:29 +0100 Subject: Initial commit --- JMThesis.cls | 105 +++++++++ include/binutils/binutils1 | 14 ++ include/binutils/binutils2 | 8 + include/binutils/exportsysroot | 1 + include/gcc/gcc1 | 18 ++ include/gcc/gcc2 | 7 + kernel.pdf | Bin 0 -> 224850 bytes kernel.tex | 480 +++++++++++++++++++++++++++++++++++++++++ 8 files changed, 633 insertions(+) create mode 100644 JMThesis.cls create mode 100644 include/binutils/binutils1 create mode 100644 include/binutils/binutils2 create mode 100644 include/binutils/exportsysroot create mode 100644 include/gcc/gcc1 create mode 100644 include/gcc/gcc2 create mode 100644 kernel.pdf create mode 100644 kernel.tex diff --git a/JMThesis.cls b/JMThesis.cls new file mode 100644 index 0000000..66a2884 --- /dev/null +++ b/JMThesis.cls @@ -0,0 +1,105 @@ +%% SCThesis.cls + +\def\fileversion{0.01} +\def\filedate{06/06/12} + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{JMThesis}[\filedate\space\fileversion\space JM thesis] + +\DeclareOption*{\PassOptionsToClass{\CurrentOption}{book}} + +\ProcessOptions + +\LoadClass{book} + +\def\es{} % eat space for nice formatting + +%% +%% REDEFINE PAGESTYLE "HEADINGS" +%% +%% uppercase removed, slanted replaced by boldface, and underline added, ES +\if@twoside % If two-sided printing. +\def\ps@headings{\let\@mkboth\markboth +%%\def\@oddfoot{\hfill\hbox{\today}\hfill}\def\@evenfoot{\hfill\hbox{\today}\hfill}% No feet. +\def\@evenhead{\underline{\makebox[\textwidth][l]{\es + \rm \thepage \vphantom{g}\hfill \bf \leftmark}}}% +\def\@oddhead{\underline{\makebox[\textwidth][l]{\es + \hbox{}\bf \rightmark \vphantom{g}\hfill \rm\thepage}}}% +\def\chaptermark##1{\markboth {\ifnum \c@secnumdepth >\m@ne + \@chapapp\ \thechapter. \ \fi ##1}{}}% +\def\sectionmark##1{\markright {\ifnum \c@secnumdepth >\z@ + \thesection. \ \fi ##1}}} +\else % If one-sided printing. +\def\ps@headings{\let\@mkboth\markboth +\def\@oddfoot{}\def\@evenfoot{}% No feet. +\def\@oddhead{\hbox {}\sl \rightmark \hfil \rm\thepage}% Heading. +\def\chaptermark##1{\markright {\uppercase{\ifnum \c@secnumdepth >\m@ne + \@chapapp\ \thechapter. \ \fi ##1}}}} +\fi +\pagestyle{headings} + +% CONTENTS ENTRY FOR FULL SECTION TITLES +% +% The following change to a LATEX.TEX part is for: If \section[a]{bb} +% is used in the original setting, then "a" gets the running head as +% well as the entry to the table of contents. Here we want however +% that "a" gets the running head only and the entry to the table of +% contents is still "bb" (JG). +% +% begin of overwrite + +\def\@chap#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@chapnum + \def\@svchap{}\else + \refstepcounter{#1}\edef\@svchap{\csname the#1\endcsname\hskip 1em }\fi + \@tempskipa #5\relax + \ifdim \@tempskipa>\z@ + \begingroup #6\relax + \@hangfrom{\hskip #3\relax\@svshap}{\interlinepenalty \@M #8\par} + \endgroup + \csname #1mark\endcsname{#7}\addcontentsline + {toc}{#1}{\ifnum #2>\c@chapnum \else + \protect\numberline{\csname the#1\endcsname}\fi + #8}\else % #7 changed to #8, JG + \def\@svchaphd{#6\hskip #3\@svchap #8\csname #1mark\endcsname + {#7}\addcontentsline + {toc}{#1}{\ifnum #2>\c@chapnum \else + \protect\numberline{\csname the#1\endcsname}\fi + #8}}\fi % #7 changed to #8, JG + \@xchap{#5}} +% end of overwrite + +% +% RUNNING HEAD MACROS +% +% "empty" left and right head, i.e. without "CHAPTER", chapter- +% number and section-number, only the text specified by parameter (JG). +% +\def\runheadel#1{\markboth{#1}{}} +\def\runheader#1{\markright{#1}} +% +% chapter (left) and section (right) heads, text specified by +% parameter (JG). +% +\def\runheadc#1{\markboth{ + \ifnum \c@secnumdepth>\m@ne + \@chapapp\ \thechapter. \ \fi #1}{}} +\def\runheads#1{\markright{ + \ifnum \c@secnumdepth >\z@ + \thesection. \ \fi #1}} + +% +% DEFINE AND SET FLAG FOR ADDING CHAPER*-TITLES TO THE CONTENS +% +\newif\ifaddcontents \addcontentsfalse % Create flag and set false. + +% +% REDEFINITIONS TO THE REP10 STYLE +% +% Redefinitions to the rep10.sty can only be executed after \documentstyle. +% The modifications are: \addcontentsline in \def\chapter +% uses #2 instead of #1 to make #1 being still the running +% head, but #2 being written into the table of contents. (JG) +% \doubleclearpage is used in \chapter and \chapter*. Depending on the +% addcontents flag, \addcontentsline is executed for \chapter*. +% Set running heads for \chapter* as well. (ES) +% diff --git a/include/binutils/binutils1 b/include/binutils/binutils1 new file mode 100644 index 0000000..d24267d --- /dev/null +++ b/include/binutils/binutils1 @@ -0,0 +1,14 @@ + mkdir build + cd build + + ../configure \ + --target=i686-elf \ + --with-sysroot \ + --prefix=/usr \ + --bindir=/usr/bin \ + --libdir=/usr/lib/i686-elf \ + --disable-nls \ + --disable-werror + + make + make install diff --git a/include/binutils/binutils2 b/include/binutils/binutils2 new file mode 100644 index 0000000..d99af99 --- /dev/null +++ b/include/binutils/binutils2 @@ -0,0 +1,8 @@ + ../configure \ + --target=i686-elf \ + --with-sysroot=$SYSROOT \ + --prefix=/usr \ + --bindir=/usr/bin \ + --libdir=/usr/lib/i686-elf \ + --disable-nls \ + --disable-werror diff --git a/include/binutils/exportsysroot b/include/binutils/exportsysroot new file mode 100644 index 0000000..5d61861 --- /dev/null +++ b/include/binutils/exportsysroot @@ -0,0 +1 @@ +export SYSROOT=/put/do/biblioteke diff --git a/include/gcc/gcc1 b/include/gcc/gcc1 new file mode 100644 index 0000000..c555f2c --- /dev/null +++ b/include/gcc/gcc1 @@ -0,0 +1,18 @@ + mkdir build + cd build + + ../configure \ + --target=i686-elf \ + --prefix=/usr \ + --disable-nls \ + --disable-plugin \ + --enable-languages=c,c++ \ + --without-headers + + make all-gcc + make all-target-libgcc + + make -k check || true + + make install-gcc + make install-target-libgcc diff --git a/include/gcc/gcc2 b/include/gcc/gcc2 new file mode 100644 index 0000000..d406f6c --- /dev/null +++ b/include/gcc/gcc2 @@ -0,0 +1,7 @@ + ../configure \ + --target=i686-elf \ + --prefix=/usr \ + --with-sysroot=$SYSROOT \ + --disable-nls \ + --disable-plugin \ + --enable-languages=c,c++ diff --git a/kernel.pdf b/kernel.pdf new file mode 100644 index 0000000..8ac07c7 Binary files /dev/null and b/kernel.pdf differ diff --git a/kernel.tex b/kernel.tex new file mode 100644 index 0000000..d9d52ba --- /dev/null +++ b/kernel.tex @@ -0,0 +1,480 @@ +\documentclass[a4paper,fleqn,12pt]{JMThesis} +\usepackage{listings} +\lstset{ + language=make, + basicstyle=\footnotesize, + frame=single, + showstringspaces=false, + tabsize=8, + escapeinside={<@}{@>}, +} + +\usepackage[OT2]{fontenc} +\newcommand\eng{\fontencoding{OT1}\fontfamily{\rmdefault}\selectfont} +\newcommand\srb{\fontencoding{OT2}\fontfamily{\rmdefault}\selectfont} + +% \usepackage[serbian,english]{babel} + +\renewcommand{\baselinestretch}{1} +\usepackage{amsfonts} +\usepackage{amsthm} +\usepackage{amsmath} +\usepackage{multicol} +\usepackage{hyperref} +\usepackage{tocloft} + +\newlength\tindent +\setlength{\tindent}{\parindent} +\setlength{\parindent}{0pt} +\renewcommand{\indent}{\hspace*{\tindent}} + +\oddsidemargin 1cm +\evensidemargin 0cm +\textwidth 15cm + +\pagestyle{headings} + +\font \matematicka=wncsc10 scaled 1600 +\font \maturski=wncyb10 scaled 2500 +\font \naslov=wncyb10 scaled 1900 +\font \naslovlat=cmr10 scaled 1900 +\font \imen=wncyr10 scaled 1600 + + +\def\zn{,\kern-0.09em,} +\def\zng{'\kern-0.09em'} +\pagenumbering{roman} +\begin{document} + + +\thispagestyle{empty} + +\begin{center} +{\matematicka Matematichka gimnazija} +\end{center} +\vspace*{50mm} + +\begin{center} +{\maturski MATURSKI RAD} + +\vspace*{8pt} +{\naslov - iz rachunarstva i informatike -} +\end{center} + +\vspace*{10pt} +\begin{center} + {\naslov Izrada \textbf{\eng\Large X86 32bit i686} jezgra operativnog sistema} +\end{center} + +\vspace*{70mm} +\setlength{\columnsep}{50pt} +\begin{multicols}{2} + {\noindent \imen Uchenik: +\\Aleksa Vuchkovic1 $\operatorname{IV}$d} + + +{ \noindent \hfill \imen Mentor:\\ +\hfill \phantom{aaaaaaaa} Milosh Arsic1} +\end{multicols} + +\vfill +\begin{center} +{\imen Beograd, jun 2021.} +\end{center} +\clearpage + +\thispagestyle{empty} +\mbox{} +\clearpage + + +\renewcommand{\contentsname}{Sadrzhaj} +\thispagestyle{empty} + +\pagenumbering{gobble} + +\tableofcontents \clearpage + +\thispagestyle{empty} +\mbox{} +\clearpage + +\pagenumbering{arabic} +\renewcommand{\chaptername}{} +\setcounter{page}{1} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Uvod} +\bigskip +Ideja za ovaj rad prozishla je iz ekstenzivnog korish\/c1enja {\eng GNU/Linux} +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 +{\eng GitHub-u} na stranici {\eng\url{https://github.com/aleksav013/mykernel}}. +Sav kod je dostupan pod {\eng GPLv3} licencom. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Teorija} +\bigskip + +\section{{\eng X86} arhitektura} +\medskip +{\eng X86} arhitektura je probitno bila 8bitna (sadrzhala je registre duzhine 8 +bitova), 16bitna, zatim 32bitna i na kraju 64bitna. Danas 64bitnu {\eng X86} +arhitekturu znamo kao i {\eng{} AMD64}, {\eng X86-64} ili {\eng X86\_64}. + +Zajedno sa {\eng ARM}-om jedna od najkorish\/c1enijih arhitektura. + +\subsection{Registri procesora} +\smallskip +Postoji vishe vrsta registara procesora: +16bitni registri opshte namene: {\eng ax,bx,cx,dx}. + +{\eng\url{https://wiki.osdev.org/CPU_Registers_x86}} + +\subsection{{\eng 32bit i686}} +\smallskip +32bitni registri opshte namene: {\eng eax,ebx,ecx,edx}. +64bitni registri opshte namene: {\eng rax,rbx,rcx,rdx}. + +\subsection{{\eng Real mode}} +\smallskip +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 +{\eng "far jump"}. + +{\eng\url{https://wiki.osdev.org/Real_Mode}} + +\subsection{Segmentacija} +\smallskip +Segmentacija je reshenje kojim se omoguc1ava adresiranje vishe memorije nego +shto je to hardverski predvidjeno. + +{\eng\url{https://wiki.osdev.org/Segmentation}} + +\subsection{{\eng Protected mode}} +\smallskip +Zashtic1en mod je stanje procesora u kojem procesor ima pun pristup celom opsegu +memorije za razliku od realnog moda. + +{\eng\url{https://wiki.osdev.org/Protected_Mode}} + +\section{Redosled pokretanja} +\smallskip +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)} koji je jedna od pochetnih faza {\eng BIOS (Basic +Input Output System)}. U {\eng POST}-u rachunar pokushava da incijalizuje +komponente rachunarskog sistema 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}} + +\subsection{{\eng Bootloader}} +\smallskip +{\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\url{https://wiki.osdev.org/Bootloader}} + +\section{{\eng ELF}} +\medskip +{\eng ELF} je format binarni fajl koji se sastoji od tachno odredjenih sekcija +i koji mozhe da se pokrene. + +{\eng\url{https://wiki.osdev.org/ELF}} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Korish\/c1eni alati} +\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. {\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. + +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. +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 +daljem tekstu. + +\section{{\eng Binutils}} +\medskip +Izvorni kod softvera se mozhe nac1i na stranici +{\eng\url{https://www.gnu.org/software/binutils/}}, +zajedno sa uput\/stvom za kompajlovanje i korish\/c1enje. + +Ovaj paket sadrzhi programe neophodne za kompajlovanje kao shto su asembler i linker. + +\subsection{Pre dodavanja {\eng LIBC}} +\smallskip +Iz razloga shto se ne koristi standardna biblioteka vec1 samostalno napisana +specificno za ovaj projekat, potrebno je manuelno kompajlovati {\eng GNU Binutils}. +Medjutim, postoji moguc1nost korish\/c1enja vec1 spremnog paketa koji se za +distribucije bazirane na {\eng Arch Linux}-u mozhe nac1i na stanici +{\eng\url{https://aur.archlinux.org/packages/i686-elf-binutils/}}. Pojedine distribucije +vec1 imaju ovaj paket kompajlovan, ali je preporuka manuelno kompajlovati da bi +se izbegla nekompatibilnost, a i prosto iz razloga shto c1e nakon formiranja +nashe {\eng C} biblioteke biti neophodno kompajlovati ovaj program za svaki +sistem posebno. + +Za one koje zhele sami da kompajluju dat je deo instrukcija koji se razlikuje +od uput\/stva datog na zvanichnom sajtu a tiche se konfigurisanja pre kompilacije. + +\begin{minipage}{\textwidth}\eng\lstinputlisting[]{include/binutils/binutils1}\srb\end{minipage} +\subsection{Posle dodavanja {\eng LIBC}} +\smallskip +Nakon dodavanja nashe {\eng C} biblioteke potrebno je kompajlovati {\eng GNU +Binutils} tako da tu biblioteku i koristi prilikom kompajlovanja nasheg +operativnog sistema. +\textbf{Napomena:} Potrebno je postaviti {\eng \$SYSROOT} na lokaciju gde se biblioteka nalazi. +To je moguc1e uraditi na sledec1i nachin: + +\begin{minipage}{\textwidth}\eng\lstinputlisting[]{include/binutils/exportsysroot}\srb\end{minipage} + +Instukcije za kompajlovanje date su u nastavku: + +\begin{minipage}{\textwidth}\eng\lstinputlisting[]{include/binutils/binutils2}\srb\end{minipage} + +\subsection{{\eng GNU Asembler}} +\smallskip +Iako trenutno postoje mnogo popularnije alternative poput {\eng +NASM(Netwide Assembler)} i {\eng MASM(Microsoft Assembler )} koji koriste +noviju Intelovu sintaksu, ipak sam izabrao {\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 {\eng\url{https://aur.archlinux.org/packages/intel2gas/}}. + +Ovaj program je korish\/c1en za kompajlovanje dela koda napisanog u asembleru. + +\subsection{{\eng GNU Linker}} +\smallskip +Ovaj program je korish\/c1en za linkovanje("spajanje") svog komapjlovanog koda +u jednu binarnu datoteku koja predstavlja kernel. + +\section{{\eng GCC}} +\medskip +Izvorni kod softvera se mozhe nac1i na stranici +{\eng\url{https://gcc.gnu.org/}}, +zajedno sa uput\/stvom za kompajlovanje i korish\/c1enje. + + +{\eng\url{https://aur.archlinux.org/packages/i686-elf-gcc/}} + +{\eng GCC} je {\eng GNU}-ov set kompajlera. + +\subsection{Pre dodavanja {\eng LIBC}} +\smallskip +\begin{minipage}{\textwidth}\eng\lstinputlisting[]{include/gcc/gcc1}\srb\end{minipage} +\subsection{Posle dodavanja {\eng LIBC}} +\smallskip +\begin{minipage}{\textwidth}\eng\lstinputlisting[]{include/gcc/gcc2}\srb\end{minipage} + +\section{{\eng GRUB}} +\medskip +Izvorni kod softvera se mozhe nac1i na stranici +{\eng\url{https://www.gnu.org/software/grub/}}, +zajedno sa uput\/stvom za kompajlovanje i korish\/c1enje. + +{\eng GRUB} je {\eng bootloader} koji je korish\/c1en na ovom projektu. Plan je +da u buduc1nosti {\eng GRUB} bude zamenjen sa mojim {\eng bootloader}-om, i da +se kompletan kod bude moj. + +\section{{\eng QEMU}} +\medskip +Izvorni kod softvera se mozhe nac1i na stranici +{\eng\url{https://www.qemu.org/}}, +zajedno sa uput\/stvom za kompajlovanje i korish\/c1enje. + +{\eng QEMU} je virtualna mashina u kojoj c1e jezgro biti testirano i +prikazano zarad praktichnih razloga. {\eng QEMU} je odabran za ovaj projekat +jer za razliku od drugih virutalnih mashina poseduje {\eng cli (command line +interface)} iz koga se lako mozhe pozivati iz skripti kao shto su {\eng Makefile}-ovi. + +\section{{\eng Make}} +\medskip +Izvorni kod softvera se mozhe nac1i na stranici +{\eng\url{https://www.gnu.org/software/make/}} +zajedno sa uput\/stvom za kompajlovanje i korish\/c1enje. + +{\eng Make} 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 +objasnjen u daljem tekstu. + +\section{Manje bitni alati} +\medskip + +\subsection{{\eng git}} +\smallskip +Izvorni kod softvera se mozhe nac1i na stranici +{\eng\url{https://git.kernel.org/pub/scm/git/git.git}}. + +{\eng Git} je program koji nam pomazhe da odrzhavamo izvodne fajlove i + +\subsection{{\eng xorriso(libisoburn)}} +\smallskip +{\eng\url{https://www.gnu.org/software/xorriso/}} + +Sluzhi za kreiranje {\eng ISO} fajlova koji se mogu "narezati" na {\eng CD} +ili {\eng USB} flesh sa kojih se kasnije dizhe sistem. + +\subsection{{\eng GDB}} +\smallskip +{\eng\url{https://www.sourceware.org/gdb/}} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Jezgro operativnog sistema} +\bigskip + +\section{Pochetak} +\medskip +{\eng\url{https://wiki.osdev.org/Bare_Bones}} + +\subsection{Teorija} +\smallskip +\subsection{Implementacija} +\smallskip + +\section{Ispis na ekran - {\eng VGA}} +\medskip + +\subsection{Teorija} +\smallskip +\subsection{Implementacija} +\smallskip + +\section{{\eng LIBC} pochetak} +\medskip + +\subsection{Teorija} +\smallskip +\subsection{Implementacija} +\smallskip + +\section{Globalni konstruktori, zashtita steka} +\medskip +{\eng\url{https://wiki.osdev.org/Calling_Global_Constructors}} + +{\eng\url{https://wiki.osdev.org/Stack_Smashing_Protector}} + +\subsection{Teorija} +\smallskip +\subsection{Implementacija} +\smallskip + +\section{{\eng Global Desctiptor Table}} +\medskip +{\eng\url{https://wiki.osdev.org/GDT}} + +\subsection{Teorija} +\smallskip +\subsection{Implementacija} +\smallskip + +\section{{\eng Interrupt Desctiptor Table}} +\medskip +{\eng\url{https://wiki.osdev.org/IDT}} + +\subsection{Teorija} +\smallskip +\subsection{Implementacija} +\smallskip + +\section{{\eng IRQ} i {\eng PIC}} +\medskip +{\eng\url{https://wiki.osdev.org/IRQ}} +{\eng\url{https://wiki.osdev.org/PIC}} + +\subsection{Teorija} +\smallskip +\subsection{Implementacija} +\smallskip + +\section{Tastatura} +\medskip + +\subsection{Teorija} +\smallskip +\subsection{Implementacija} +\smallskip + +\section{{\eng PIT - Programmable Interval Timer}} +\medskip +{\eng\url{https://wiki.osdev.org/PIT}} + +\subsection{Teorija} +\smallskip +\subsection{Implementacija} +\smallskip + +\section{{\eng Heap}} +\medskip +{\eng\url{https://wiki.osdev.org/Heap}} + +\subsection{Teorija} +\smallskip +\subsection{Implementacija} +\smallskip + +\section{{\eng Paging}} +\medskip +{\eng\url{https://wiki.osdev.org/Paging}} + +\subsection{Teorija} +\smallskip +\subsection{Implementacija} +\smallskip + +\section{Moj {\eng LIBC}} +\medskip +{\eng\url{https://wiki.osdev.org/Creating_a_C_Library}} + +\subsection{Teorija} +\smallskip +\subsection{Implementacija} +\smallskip + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Zakljuchak} +Ovaj projekat je bio sjajna prilika da testiram granice svog znanja. + +\thispagestyle{empty} +\mbox{} +\clearpage + +\renewcommand\bibname{Literatura} +\begin{thebibliography}{} +\vspace*{15mm} +\rm +\bibitem{} {\eng\url{https://wiki.osdev.org/Expanded_Main_Page}} +\bibitem{} {\eng\url{http://jamesmolloy.co.uk/tutorial_html/}} +\end{thebibliography} +\addcontentsline{toc}{chapter}{Literatura} + + +\end{document} -- cgit v1.2.3