-
Jonne Itkonen authored
olivat ennen muualla piirrettyjä, nyt bytefieldejä
Jonne Itkonen authoredolivat ennen muualla piirrettyjä, nyt bytefieldejä
kayttojarjestelmat.tex 13.81 KiB
\documentclass[a4paper,12pt]{article}
\usepackage[T1]{fontenc} % huomaa tämän ja inputencin järjestys!
\usepackage[utf8]{inputenc}
\usepackage[finnish]{babel}
\usepackage{lmodern}
%\usepackage{xcolor,colortbl}
\usepackage{graphicx}
\usepackage[hidelinks]{hyperref}
\usepackage[usenames]{xcolor,colortbl}
\usepackage{makeidx}
\makeindex
\usepackage{amsmath}
\graphicspath{{figs/}}
% For the ``auxiliary images downloadable from the textbook of the course''
%\graphicspath{{figs/}{stallings/}}
\usepackage[left=2cm,top=1cm,right=2cm]{geometry}
\usepackage[font=small,format=plain,labelfont=bf,up,textfont=it,up]{caption}
% \usepackage{subfigure} % deprecated
\usepackage{subcaption}
\usepackage{tikz}
\usetikzlibrary{shapes.misc}
\usepackage{bytefield}
\usepackage{listings}
\lstset{
%numbers=left,numberstyle=\tiny,
inputencoding=utf8,
extendedchars=true,
% showspaces=true,showtabs=true,
basicstyle=\footnotesize,
% keywordstyle=\sffamily,
% stringstyle=\sffamily,
showstringspaces=true,
columns=flexible, % !!! Tärkeä, muuten tulee harvaa
% frame=single,
basicstyle=\ttfamily\normalsize, % \ttfamily, jos monospace, hyi
literate={ö}{{\"{o}}}1 {ä}{{\"{a}}}1 {Ö}{{\"{O}}}1 {Ä}{{\"{A}}}1 {å}{{\aa}}1 {Å}{{\aA}}1
}
% jos kommentissa on sana, jossa on vain literate-merkkejä,
% sen ja sitä seuraavan sanan välissä ei ole välilyöntiä ;-?
%\DeclareUnicodeCharacter{00E4}{\"a}
%\DeclareUnicodeCharacter{00A7}{§}
% englanninkielisille sanoille
\newcommand{\engl}[1]{engl. \textit{#1}\index{#1@\textit{#1}}}
% uudelle termille
\newcommand{\intr}[1]{\textbf{#1}\index{#1}}
% x86 mnemonics
\newcommand{\mne}[1]{\lstinline[language={[x86masm]Assembler},basicstyle=\ttfamily\normalsize]:#1:\index{#1}}
% x86 rekisterit
\newcommand{\reg}[1]{\mne{#1}}
% x86 liput
\newcommand{\flag}[1]{\mne{#1}}
% C-koodi osana leipätekstiä
\newcommand{\ccode}[1]{\lstinline[language=C,basicstyle=\ttfamily\normalsize]:#1:}
% C++-koodi osana leipätekstiä
\newcommand{\cpcode}[1]{\lstinline[language={C++},basicstyle=\ttfamily\normalsize]:#1:}
% C#-koodi osana leipätekstiä
\newcommand{\cscode}[1]{\lstinline[language={[Sharp]C},basicstyle=\ttfamily\normalsize]:#1:}
% Java-koodi osana leipätekstiä
\newcommand{\jcode}[1]{\lstinline[language={Java},basicstyle=\ttfamily\normalsize]:#1:}
% bash-koodi osana leipätekstiä
\newcommand{\bash}[1]{\lstinline[language=bash,basicstyle=\ttfamily\normalsize]:#1:}
%make block paragraphs:
\parindent0pt \parskip10pt
% Newpage before section:
\let\stdsection\section
\renewcommand\section{\newpage\stdsection}
% I'm commenting this out as of now. I think this never worked for us because
% no file was ever found. This doesn't seem to look in figs/ and it isn't able
% to check for file extensions such as .pdf or .png or .jpg
%
% Nice idea otherwise.
%
% % deal with missing images which are not directly included in the repository
% % https://tex.stackexchange.com/a/449253
% \newcommand{\noimage}{%
% \setlength{\fboxsep}{-\fboxrule}%
% \fbox{\phantom{\rule{10pt}{10pt}}File missing\phantom{\rule{10pt}{10pt}}}% Framed box
% }
% \let\includegraphicsoriginal\includegraphics
% \renewcommand{\includegraphics}[2][width=\textwidth]{\IfFileExists{#2}{\includegraphicsoriginal[#1]{#2}}{\noimage}}
% pystyteksti bittimerkinnöille
\newlength{\bitlabelwidth}
\newcommand{\rotbitheader}[1]{%
\tiny
\settowidth{\bitlabelwidth}{\quad 99}%
\rotatebox[origin=B]{90}{\makebox[\bitlabelwidth][r]{#1}}%
}
\begin{document}
%\include{./tex/prologi}
\section*{ITKA203 -- Käyttöjärjestelmät \\ Kurssimateriaalia: ''luentomoniste''}
~\\~\\
\paragraph{Tämän version tilanne:}
Tämä versio monisteesta oli käyttökelpoinen jo vuonna 2023 ja todennäköisesti sen jälkeenkin. \textbf{Huomautus:}
Tarkoitus on aina muokata monistetta kurssin aikana niin paljon kuin
ehditään (viime vuosina niukahkosti). Kuitenkin niin, että päälinjat ja sisältö säilyvät samoina
kurssin ensimmäisestä päivästä siihen asti, kun viimeinen
tenttiuusinta on ollut. Sivunumerot saattavat hivenen
heittää versiosta toiseen muutosten johdosta. Mahdolliset uudet kuvat lisätään
ensivaiheessa ilman numerointia, joten jos esimerkiksi luennolla on
puhuttu kuvasta 23 niin se on vielä uusintatentin aikaankin edelleenkin kuva
23.
%Kehityskohteita ja muutosideoita on kerääntynyt iso joukko, mutta
%niitä käydään läpi niin sanotusti silloin, kun jollain on riittävästi
%luppoaikaa\ldots\ ei ehkä tarvitse pidätellä hengitystä suurempia
%muutoksia odotellessa. Jotakin pientä voi muuttua kurssin aikana,
%mutta ei kuitenkaan niin, etteikö ensimmäisenä kurssipäivänä omalle
%koneelle ladattu tai paperille tulostettu versio olisi käyttökelpoinen
%alusta loppuun saakka.
Merkittävät asiavirheet korjataan aina välittömästi -- ilmoita heti, jos
löydät sellaisen!
% Kevään 2016 kaunistelu on tässä vaiheessa edennyt sivulle
%\pageref{BShorizon} asti, josta alkaa edellisen kurssikerran jälkeen
%kajoamaton osuus. Kurssin luennot etenevät korkeintaan sitä tahtia
%kuin tarkistettu osuus monisteestakin. Mutta kuten edellä sanottu,
%koko moniste on jo käyttökelpoinen. Myös liitteen
%\ref{sec:pehmojohdanto} ``pullantuoksuinen pehmojohdanto'' on aivan
%OK.
%\subsubsection*{\label{BShorizon} --- loppuosaa monisteesta ei ole vielä tarkistettu kuluvalle kurssikerralle, vaikka se jo käyttökelpoista kamaa onkin --- }
~\\
\input{./tex/esipuhe}
\newpage
\tableofcontents
\newpage
\include{./tex/listaukset_optiot}
\include{./tex/motivointi}
\include{./tex/esitietoja}
\include{./tex/johdattelua}
\include{./tex/konekieli}
\include{./tex/ohjelma_muisti}
\include{./tex/kayttojarjestelma}
\include{./tex/keskeytykset_kutsurajapinta}
\include{./tex/prosessi_hallinta}
\include{./tex/yhdenaikaisuus_kommunikointi_synkronointi}
\include{./tex/muistinhallinta}
\include{./tex/oheislaitteet}
\include{./tex/tiedostojarjestelmat}
\include{./tex/suunnittelua}
\include{./tex/shellit}
\include{./tex/epilogi}
\appendix
\include{./tex/pehmojohdanto}
\section{Koodiliite}
Tähän on ladottu vuonna 2016 luennoilla esitellyt ohjelmat
sellaisenaan. Pelkästä koodien lukemisesta tuskin on hyötyä verrattuna
omatoimiseen kokeilemiseen, johon luentoesimerkeillä pyrittiin
kannustamaan.
\subsection {``Hei maailma'' ja ``kaikenlaskija''}
\subsubsection*{Hei maailma}
(2016/esimerkit/l05/heimaailma.c)
\lstinputlisting[language=C]{../2016/esimerkit/l05/heimaailma.c}
\subsubsection*{Argumentit ja ympäristömuuttujat}
(2016/esimerkit/l06/argumentit.c)
\lstinputlisting[language=C]{../2016/esimerkit/l06/argumentit.c}
\subsubsection*{Konekieli ja Linux-käyttöjärjestelmäkutsu}
(2016/esimerkit/l07/helloasm\_kommentoitu.s)
\lstinputlisting[language={[x86masm]Assembler}]{../2016/esimerkit/l07/helloasm_kommentoitu.s}
\subsubsection*{Ikuinen silmukka; demonstroi aikakatkaisun tarvetta}
(2016/esimerkit/l10/kaikenlaskija.c)
\lstinputlisting[language=C]{../2016/esimerkit/l10/kaikenlaskija.c}
\subsubsection*{Pieni esimerkki kokonaislukuvakioista C-koodissa}
(2016/esimerkit/l10/lukuja.c)
\lstinputlisting[language=C]{../2016/esimerkit/l10/lukuja.c}
\subsubsection*{Rekursiivinen aliohjelmakutsu}
(2016/esimerkit/l10/rekursio.c)
\lstinputlisting[language=C]{../2016/esimerkit/l10/rekursio.c}
\subsection {Minimalistinen shell-ohjelma, fork() ja exec()}
(2016/esimerkit/l11/minish.c)
\lstinputlisting[language=C]{../2016/esimerkit/l11/minish.c}
\subsection {Prosesseja, säikeitä ja synkronointia}
\subsubsection*{Signaalinkäsittelijän rekisteröiminen}
(2016/esimerkit/l12/sigesim.c)
\lstinputlisting[language=C]{../2016/esimerkit/l12/sigesim.c}
\subsubsection*{Viestijono prosessien välillä}
(2016/esimerkit/l12/chattomyself.c)
\lstinputlisting[language=C]{../2016/esimerkit/l12/chattomyself.c}
\subsubsection*{Rinnakkaislaskentaa säikeistämällä}
Ohjelma, jonka saisi nopeammaksi hajauttamalla laskennan moneen
prosessoriytimeen:
(2016/esimerkit/l12/saikeiden\_tarve.c)
\lstinputlisting[language=C]{../2016/esimerkit/l12/saikeiden_tarve.c}
Nopeutettu versio: (2016/esimerkit/l12/saikeet.c)
\lstinputlisting[language=C]{../2016/esimerkit/l12/saikeet.c}
\subsubsection*{Kilpa-ajotilanne ja datan korruptoituminen}
Ongelmallinen koodi, jossa on ``data race'':
(2016/esimerkit/l13/race.c)
\lstinputlisting[language=C]{../2016/esimerkit/l13/race.c}
Korjattu POSIXin simppelillä MutExilla:
(2016/esimerkit/l13/race\_fixed\_mutex.c)
\lstinputlisting[language=C]{../2016/esimerkit/l13/race_fixed_mutex.c}
(2016/esimerkit/l13/race\_fixed\_sem\_mutex.c)
Korjattu POSIXin semaforilla toteutetulla MutExilla:
\lstinputlisting[language=C]{../2016/esimerkit/l13/race_fixed_sem_mutex.c}
\subsubsection*{Deadlock -tilanne}
(2016/esimerkit/l13/vappu\_deadlock.c)
\lstinputlisting[language=C]{../2016/esimerkit/l13/vappu_deadlock.c}
(2016/esimerkit/l13/vappu\_ei\_lukkiudu.c)
\lstinputlisting[language=C]{../2016/esimerkit/l13/vappu_ei_lukkiudu.c}
\subsubsection*{Tuottaja-kuluttaja -probleemi ja sen ratkaiseminen}
Rikkinäinen koodi, josta puuttuu synkronointi:
(2016/esimerkit/l14/tuottaja\_kuluttaja\_rikki.c)
\lstinputlisting[language=C]{../2016/esimerkit/l14/tuottaja_kuluttaja_rikki.c}
Korjattu koodi:
(2016/esimerkit/l14/tuottaja\_kuluttaja.c)
\lstinputlisting[language=C]{../2016/esimerkit/l14/tuottaja_kuluttaja.c}
\subsubsection*{Jaetun muistialueen käyttö prosessien välillä}
``Leikkipalvelin'', joka tekee jaetun muistialueen, ja poistaa sen
loppuessaan muutaman sekunnin päästä:
(2016/esimerkit/l15/shm\_msgserver.c)
\lstinputlisting[language=C]{../2016/esimerkit/l15/shm_msgserver.c}
``Leikkiasiakas'', joka kytkeytyy leikkipalvelimen tekemään
muistialueeseen ja muokkaa sen sisältöä. HUOM: Useat yhdenaikaiset
asiakasohjelmat sotkevat muistin sisällön kilpa-ajotilanteen vuoksi,
kuten luennolla nähtiin:
(2016/esimerkit/l15/shm\_msgclient.c)
\lstinputlisting[language=C]{../2016/esimerkit/l15/shm_msgclient.c}
\subsection{Välimuistin ruuhkautuminen}
Esimerkki suorituskyvyn romahtamisesta, jos välimuistia ei osata hyödyntää:
(2016/esimerkit/l15/cache.c)
\lstinputlisting[language=C]{../2016/esimerkit/l15/cache.c}
\subsection{Tiedostojen käyttöä C:llä}
Tulostaa tiedostoon tekstiä
(2016/esimerkit/l16/hellofile.c)
\lstinputlisting[language=C]{../2016/esimerkit/l16/hellofile.c}
Lukee tiedostoista merkkejä ja tulostaa ne päätteelle:
(2016/esimerkit/l16/liit.c)
\lstinputlisting[language=C]{../2016/esimerkit/l16/liit.c}
\begin{thebibliography}{99}
\bibitem{WS2009} William Stallings, 2009. Operating Systems -- Internals
and Design Principles, 6th ed.
\bibitem{AA2016OSTEP} Remzi H. Arpaci-Dusseau ja Andrea
C. Arpaci-Dusseau, 2016. Operating Systems: Three Easy
Pieces. Ilmainen on-line oppikirja, saatavilla WWW:ssä osoitteessa
\url{http://pages.cs.wisc.edu/~remzi/OSTEP/} (linkin toimivuus
tarkistettu 17.3.2021)
\bibitem{TTP2002}
Pasi Koikkalainen ja Pekka Orponen, 2002. Tietotekniikan perusteet. {\em
Luentomoniste.} Saatavilla WWW:ssä osoitteessa
\url{http://users.ics.tkk.fi/orponen/lectures/ttp_2002.pdf}
(linkin toimivuus tarkistettu 17.3.2021)
\bibitem{AMDMAN} AMD64 Architecture Programmer's Manual Vol 1--5
\url{https://www.amd.com/system/files/TechDocs/40332.pdf}
(linkin toimivuus tarkistettu 22.5.2023)
\bibitem{GASsyntax} GAS assembler syntax. \url{https://sourceware.org/binutils/docs/as/Syntax.html}
(linkin toimivuus tarkistettu 17.3.2021)
% Jan Hubičkan nimessä olevan aksentoidun c:n unicode-koodi on 010D
% Lähde: unicode.org, Latin Extended-A
\bibitem{SVRABIAMD64}H.J. Lu, Michael Matz, Jan Hubička, Andreas Jaeger, Mark Mitchell (eds.). System V Application Binary Interface
-- AMD64 Architecture Processor Supplement
(automaattisesti julkaistava vedos gitlabissa)
March 13, 2023 (versio linkin toimivuutta tarkistettaessa).
\url{https://gitlab.com/x86-psABIs/x86-64-ABI/-/jobs/artifacts/master/raw/x86-64-ABI/abi.pdf?job=build}
(linkin toimivuus tarkistettu 22.5.2023)
\bibitem{LinkersAndLoaders} John R. Levine, 1999. Linkers and
Loaders. Morgan-Kauffman. (Vapaasti saatavilla oleva käsikirjoitus:
\url{http://www.iecc.com/linker/})
\bibitem{LinuxSyscalls}Filippo Valsorda: Searchable Linux Syscall
Table for x86 and x86\_64
\url{https://filippo.io/linux-syscall-table/} (linkin toimivuus
tarkistettu 17.3.2021)
% IEEE Xplorerilla löydetty viite Little Man Computerista. URL:
% http://ieeexplore.ieee.org/xpl/articleDetails.jsp?tp=&arnumber=977496&queryText%3Dlittle+man+computer
\bibitem{LittleManComputer} Yurcik, W.; Osborne, H. A crowd of Little Man Computers: visual computer simulator teaching tools,
Proceedings of the Winter Simulation Conference, 2001.
%Vol.2, no., pp.1632,1639 vol.2, 2001
\bibitem{TheLocalityPrinciple} Peter J. Denning, 2005. The Locality Principle,
Communications of the ACM, July 2005 / Vol. 48, No. 7 Pages 19-24.
\bibitem{UnixTimeSharing74} Dennis M. Richie; Ken Thompson. The UNIX
time-sharing system, Communications of the ACM, July 1974 / Vol. 17,
No. 7 Pages 365-375. (Jälkikäteen tehty PDF-vedos saatavilla myös
\url{http://www.cs.berkeley.edu/~brewer/cs262/unix.pdf} - linkin
toimivuus tarkistettu 17.3.2021)
\end{thebibliography}
\printindex
\listoffigures
% TODO: Harjoitustehtäväsetti liitteeksi (?)
\iffalse
Nämä tulee oikeastaan tosi hyvin demoissa:
[ACM-wikistä:]
OS/Scripting [elective]
Topics:
* Scripting and the role of scripting languages
* Basic system commands
* Creating scripts, parameter passing
* Executing a script
* Influences of scripting on programming
Learning objectives:
1. Summarize a typical set of system commands provided by an
operating system.
2. Demonstrate the typical functionality of a scripting language,
and interpret the implications for programming.
3. Demonstrate the mechanisms for implementing scripts and the role
of scripts on system implementation and integration.
4. Implement a simple script that exhibits parameter passing.
\fi
\end{document}
%%% Local Variables:
%%% mode: latex
%%% TeX-master: t
%%% End: