gitweb on Svarog
projekti pod git sistemom za održavanje verzija -- projects under the git version control systemdiff --git a/skripta-os2.tex b/skripta-os2.tex
--- a/skripta-os2.tex
+++ b/skripta-os2.tex
% skripta-os2.tex
% Skripta za predmet Operativni Sistemi 2, DMI, PMF, NS
% Doni Pracner, Ivan Pribela
-% 2011/12 -- 2013/14
+% 2011/12 -- 2014/15
\documentclass[a4paper,twoside]{article}
\usepackage[T1]{fontenc}
\newcommand{\inst}{Departman za matematiku i informatiku, PMF, UNS}
\newcommand{\autorinst}{\autor \\ \inst}
\newcommand{\naslov}{Skripta za vežbe iz predmeta operativni sistemi 2}
-\newcommand{\datum}{Februar 2014, Novi Sad}
-\newcommand{\verzija}{ver 14a}
+\newcommand{\datum}{Februar 2015, Novi Sad}
+\newcommand{\verzija}{ver 15a}
\usepackage[serbian]{babel}
\usepackage{fancyhdr}
%margine
\usepackage[top=2cm, bottom=2cm, left=2.5cm, right=2cm]{geometry}
-\begin{document}
+% theorems, definition etc.
+%''''''''''''''''''''''''''
+
+\theoremstyle{definition}
+\newtheorem{def1}{Definicija}
+\theoremstyle{plain}
+\newtheorem{theo}{Teorema}
+\newtheorem{lema}{Lema}
+
+\lstloadlanguages{Modula-2,C++}
+
+\lstset{
+ basicstyle=\ttfamily,
+ showstringspaces=false,
+ breaklines=true
+}
+
+\lstdefinestyle{codeblock}{
+% basicstyle=\footnotesize\ttfamily,
+ keywordstyle=\textbf,
+ columns=[l]fixed,
+ breakatwhitespace=true,
+% prebreak=\P,
+% postbreak=\ding{229}\space,
+ language=Modula-2,
+ xleftmargin=1em
+}
+
+\lstdefinestyle{codeblock-indent}{
+ style=codeblock,
+ xleftmargin=4em
+}
+
+\lstdefinestyle{terminal}{
+ frame=lt,
+% frameround=fftt,
+ backgroundcolor=\color[gray]{.95},
+% prebreak=\P,
+ postbreak=\ding{229}\space,
+ xleftmargin=2em
+}
+
+\lstdefinestyle{numcodeblock}{
+ style=codeblock,
+ numbers=left,
+ firstnumber=1,
+ stepnumber=1
+}
+
+\lstnewenvironment{codeblock}[1][]{\lstset{style=codeblock,#1}}{}
+\lstnewenvironment{codeblock-indent}[1][]{\lstset{style=codeblock-indent,#1}}{}
+\lstnewenvironment{terminal}{\lstset{style=terminal}}{}
+
+%% specijalni blokovi koji služe kao podsetnici u radu ili napomene
+\newcommand{\skica}[1]{
+ \noindent \framebox{\parbox[c]{0.9\textwidth}{ {\small** \textit{#1} }}
+ \newline }
+}
+
+\newcommand{\skicas}[1]{
+ \framebox{* \textit{#1} *}
+}
+
+%boldovane skice visokog prioriteta
+\newcommand{\skicab}[1]{
+ \noindent \framebox{\parbox[c]{0.9\textwidth}{ {\small***
+ \textbf{#1} }} \newline } }
+
+\newcommand{\kod}[1]{{\small\texttt{#1}}}
+
+% ako je sledeci red odkomentarisan nista od skica nece biti ispisano
+% u finalni dokument
+
+ \renewcommand{\skica}[1]{}
%customize the itemize environments
\setlength{\topsep}{-1cm}
}
+ \begin{document}
+
%% ovi redovi daju header i footer
%\setlength{\textheight}{620pt}
-%% specijalni blokovi koji služe kao podsetnici u radu ili napomene
-\newcommand{\skica}[1]{
- \noindent \framebox{\parbox[c]{0.9\textwidth}{ {\small** \textit{#1} }}
- \newline }
-}
-
-\newcommand{\skicas}[1]{
- \framebox{* \textit{#1} *}
-}
-
-%boldovane skice visokog prioriteta
-\newcommand{\skicab}[1]{
- \noindent \framebox{\parbox[c]{0.9\textwidth}{ {\small***
- \textbf{#1} }} \newline } }
-
-\newcommand{\kod}[1]{{\small\texttt{#1}}}
-
-% ako je sledeci red odkomentarisan nista od skica nece biti ispisano
-% u finalni dokument
-
- \renewcommand{\skica}[1]{}
\maketitle
-% theorems, definition etc.
-%''''''''''''''''''''''''''
-
-\theoremstyle{definition}
-\newtheorem{def1}{Definicija}
-\theoremstyle{plain}
-\newtheorem{theo}{Teorema}
-\newtheorem{lema}{Lema}
-
-\lstloadlanguages{Modula-2,C++}
-
-\lstset{
- basicstyle=\ttfamily,
- showstringspaces=false,
- breaklines=true
-}
-
-\lstdefinestyle{codeblock}{
-% basicstyle=\footnotesize\ttfamily,
- keywordstyle=\textbf,
- columns=[l]fixed,
- breakatwhitespace=true,
-% prebreak=\P,
-% postbreak=\ding{229}\space,
- language=Modula-2,
- xleftmargin=4em
-}
-
-\lstdefinestyle{terminal}{
- frame=lt,
-% frameround=fftt,
- backgroundcolor=\color[gray]{.95},
-% prebreak=\P,
- postbreak=\ding{229}\space,
- xleftmargin=2em
-}
-
-\lstdefinestyle{numcodeblock}{
- style=codeblock,
- numbers=left,
- firstnumber=1,
- stepnumber=1
-}
-
-\lstnewenvironment{codeblock}[1][]{\lstset{style=codeblock,#1}}{}
-\lstnewenvironment{terminal}{\lstset{style=terminal}}{}
% ----------------==================--------------------------------------
% Pravi pocetak rada
\label{g-prvi-program}
Tradicionalni prvi program ``Hello World'' bi izgledao ovako:
-\begin{codeblock}
+\begin{codeblock-indent}
MODULE hello;
FROM StrIO IMPORT WriteString, WriteLn;
WriteString('hello world');
WriteLn
END hello.
-\end{codeblock}
+\end{codeblock-indent}
Primećuje se razlika u modulu iz koga se uvoze komande u odnosu na
XDS/TopSpeed verzije M2, tamo je sve bilo u \kod{InOut}, dok se ovde
izvršava prosleđenu komandu u novom \emph{shell}-u. Specifikaciju
komande možemo videti sa
\begin{terminal}
-man system
+ man system
\end{terminal}
odnosno videćemo da je poziv definisan na sledeći način:
-\begin{codeblock}
+\begin{codeblock-indent}
int system(const char *command);
-\end{codeblock}
+\end{codeblock-indent}
što znači da vraća ceo broj, a prima jedan argument koji je pokazivač
(što se označava *) na znak. Ovo je zapravo ceo string, pošto se u C
jeziku oni predstavljaju kao pokazivač na prvi znak, a string se onda
END Zad3.
\end{codeblock}
-Kada imamo imena stavki iz direktorijuma o njima možemo dobiti više
-informacija koristeći sistemski poziv \kod{stat}. On prima dva
-argumenta, prvi je \emph{puna} putanja do fajla, a drugi je pokazivač
-na strukturu u koju će komanda upisati podatke. Obratiti pažnju da
-zbog ovoga struktura već mora postojati u memoriji, ili kao lokalna
-promenljiva odgovarajućeg slogovnog tipa, ili dinamički alocirana
-korišćenjem pokazivača na nju.
+\subsubsection{Primer: Ispis osobina pojedinih fajlova}
+
+O pojedinim fajlovima možemo dobiti više informacija koristeći
+sistemski poziv \kod{stat}. On prima dva argumenta, prvi je
+\emph{puna} putanja do fajla, a drugi je pokazivač na strukturu u koju
+će komanda upisati podatke. Obratiti pažnju da zbog ovoga struktura
+već mora postojati u memoriji, ili kao lokalna promenljiva
+odgovarajućeg slogovnog tipa, ili dinamički alocirana korišćenjem
+pokazivača na nju.
Linux i mnogi drugi srodni sistemi za internu prezentaciju vremena
koriste broj sekundi od početka ``epohe'', odnosno od prvog januara
1970 godine. Za konverziju u klasičnije mere vremena se može koristiti
poziv \kod{localtime}.
+Kao i u prethodnom primeru date su dve verzije definicija nekih
+tipova.
+
\begin{codeblock}
DEFINITION MODULE FOR "C" LibStat32;
FROM SYSTEM IMPORT
size: INTEGER;
blksize: INTEGER;
blocks: INTEGER;
- atime: LONGINT;
- mtime: LONGINT;
- ctime: LONGINT;
+ atime: INTEGER;
+ anano: INTEGER;
+ mtime: INTEGER;
+ mnano:INTEGER;
+ ctime:INTEGER;
+ cnano: INTEGER;
+ unused:LONGINT;
END;
\end{codeblock}
\end{minipage}
END;
PTm = POINTER TO Tm;
PInt = POINTER TO INTEGER;
+ PStat = POINTER TO Stat;
PROCEDURE stat(path: ARRAY OF CHAR; buf: PStat): [INTEGER];
PROCEDURE localtime(time: PInt): PTm;
Korišćenjem sistemske komande \kod{fork} trenutni proces se duplira
(``račva''). Novi proces je identičan sa originalnim, osim u svom
identifikacionom broj. Komanda ne prima parametre i vraća jedan integer, pa se može mapirati na sledeći način:
-\begin{codeblock}
+\begin{codeblock-indent}
PROCEDURE fork(): INTEGER;
-\end{codeblock}
+\end{codeblock-indent}
Oba procesa se nakon račvanja nastavljaju odvijati u sledećem redu
koda. Jedino po čemu se razlikuju je vrednost koju je vratio
procesu je ova vrednost jednaka nuli. Budući da je najčešće potrebno
da dete i roditelj rade različite stvari, to se obično rešava kodom
sledećeg oblika:
-\begin{codeblock}
+\begin{codeblock-indent}
pid := fork();
IF pid = 0 THEN
(* "detetove" operacije *)
ELSE
(* "roditeljske" operacije *)
END;
-\end{codeblock}
+\end{codeblock-indent}
Komanda \kod{wait} (uvezena kao sistemska) se može pozvati u
originalnom procesu sa efektom da se proces uspava dokle god neki od
Prvi korak za instalaciju dodatnog kompajlera GNU Modula 2 je
dodavanje repozitorijuma softvera u sistem. Ovo se može uraditi ručnim
menjanjem fajla \kod{/etc/apt/sources.list} i dodavanjem
-\begin{codeblock}
+\begin{codeblock-indent}
#
# GNU Modula-2 repo
#
-deb http://floppsie.comp.glam.ac.uk/debian/ squeeze main
-deb-src http://floppsie.comp.glam.ac.uk/debian/ squeeze main
-\end{codeblock}
+deb http://floppsie.comp.glam.ac.uk/debian/ wheezy main
+deb-src http://floppsie.comp.glam.ac.uk/debian/ wheezy main
+\end{codeblock-indent}
Alternativno se mogu koristiti sledeće komande:
\begin{terminal}
-sudo add-apt-repository "deb http://floppsie.comp.glam.ac.uk/debian/ squeeze main"
-sudo add-apt-repository "deb-src http://floppsie.comp.glam.ac.uk/debian/ squeeze main"
+sudo add-apt-repository "deb http://floppsie.comp.glam.ac.uk/debian/ wheezy main"
+sudo add-apt-repository "deb-src http://floppsie.comp.glam.ac.uk/debian/ wheezy main"
\end{terminal}
Većina sistema omogućava i da se ovo uradi preko nekih grafičkih