You are on page 1of 23

Operan systmy

Adam eliga
MPM, 2014

Obsah

1 vod

1.1

Histria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.2

Licencie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.3

Filozofia UNIXu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.4

Linuxov strom sborov . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2 Procesy v UNIXe

11

2.1

Mapovanie pamti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13

2.2

Swap: ilzia vekej pamti . . . . . . . . . . . . . . . . . . . . . . . . . . .

13

2.3

Kontext procesu v UNIXe . . . . . . . . . . . . . . . . . . . . . . . . . . .

14

2.4

fork() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

15

2.5

exec..("program", ...) . . . . . . . . . . . . . . . . . . . . . . . . . . .

15

2.6

wait(*int) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

15

2.7

exit(int status) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

16

2.8

Nvrat k forku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

16

2.9

Medziprocesov komunikcia . . . . . . . . . . . . . . . . . . . . . . . . .

17

2.10 Rry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19

2.11 Sockety . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19

3 Shell

21

3.1

21

Manipulcia so sbormi a adresrmi . . . . . . . . . . . . . . . . . . . . .


3

OBSAH
3.2

Prkazov riadok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

22

3.3

Prepnae prkazovho riadku . . . . . . . . . . . . . . . . . . . . . . . . .

23

1 |
1.1

vod

Histria

19691971
Bell laboratories (AT&T)
autori UNIXu: Thompson, Ritchie, McIllroy
UNIX je slovo parodujce MULTICS
vek operan systm
vyvjan konzorciom firiem
projekt skonil nespechom
prv implementcia: PDP-7
minipota (nie v ako skria)
jadro bolo psan vo vyom programovacom jazyku C, o bolo dleit pre
prenositenos
interaktvny uvate priamo komunikoval s potaom
najprv pomocou alekopisu (klvesnica + tlaiare)
neskr pomocou terminlu (klvesnica + obrazovka + jednoduch elektronika)
dnes pracujeme pomocou emultorov terminlov
sben beh viacerch procesov
viac uvateov
hierarchick systm sborov (adresre)

KAPITOLA 1. VOD
1971
systm pre spracovanie textu (patentov dokumentcia)
znakovac jazyk sa dodnes pouva (.nroff manulov strnky v UNIXe)
1974
verejnosti oznmen vznik UNIXu (lnok v odbornom asopise)
prejavy zujmu Bell labs posielaj zadarmo zdrojky univerzitm
v roku 1958 americk vlda pomocou protitrustovho zkona rozbja AT&T
AT&T nesmie predva potae
19741980
vvoj UNIXu sa presva na univerzity (Berkeley)
1976
Lions Book (John Lions)
komentovan zdrojky jadra
19801990
UNIX sa stva referennou platformou pre vvoj TCP/IP protokolov (internet)
C prenik mimo UNIXu
vznikaj komern klony UNIXu
1983
al proces s AT&T
urovnanie s ministrom spravodlivosti
AT&T me vstpi na potaov trh
vznik neprehadn situcia
prvne ahanice a do 1990

1.2. LICENCIE

vypusten kd pod BSD licenciou (monos leglnej distribcie)


80te roky
komern klony UNIXu sa stvaj vzjomne nekompatabiln
rozmach IBM PC
neexistuje lacn UNIX pre IBM PC
1991
vznik Linux jadro napsan Linusom Torvaldsom cel zvyok je u hotov
vaka skupine programtorov GNU okolo Richarda Stallmana
vznik kompletne nov OS UNIXovho typu pre IBM PC
1992
prv verzia BSD UNIXu (zdrojky z roku 1990)
BSD UNIX prichdza u neskoro
idea Open Source / Free Software
snaha zachova tie podmienky, ktor viedli v 70tych rokoch ku vzniku UNIXu

1.2

Licencie

Licencia mus hovori minimlne o tom, e autor programu nezodpoved za chyby.


1) /BSD licencia
tu m zdrojky,
rob, o chce,
nesmie ma alova
2) GNU GPL licencia
ak distribuje program (aj upraven), mus distribuova aj zdrojky

KAPITOLA 1. VOD

1.3

Filozofia UNIXu

McIllroy (1978):
Write programs to do one thing and do it well.
Write programs to work together.
Write programs to handle text streams, because that is universal interface.
X-Windows project:
Mechanism, not policy.

1.4

Linuxov strom sborov

/bin

programy nutn pre nbeh systmu

/boot

jadro, zavdza jadra

/boot/grub/menu.lst

boot menu (GRUB 1.x)

/dev

sbory zariaden (vetko je sbor)

/dev/sda

cel disk

/dev/sda1

prv partcia disku

/dev/dsp

zvukov karta

/dev/null

pseudozariadenie, ktor nerob ni

/dev/zero

pseudozariadenie, z ktorho sa daj ta nuly

/dev/random

pseudozariadenie pre pseudonhodn sla

/etc

globlne systmov konfigurcie

/etc/passwd

zoznam uvateov

/etc/fstab

pripojen filesystmy

/home

normlne s tu domovsk adresre

/lib

zdiean kninice potrebn pre nbeh, moduly jadra

/lost+found

straten bloky pri pokoden

/media
/opt

sem sa pripjaj vymeniten zariadenia


programy nepatriace do distribcie a ich dta (komern
programy)

/proc

cel pseudofile systm, ktor obsahuje pseudosbory,


ktor obsahuj informcie o stave jadra a procesov

/sys

novia verzia /proc

1.4. LINUXOV STROM SBOROV


/root

domovsk adresr superuvatea

/sbin

ako /usr/bin, ale span vinou len rootom

/tmp
/usr

doasn sbory
uvatesk programy a ich dta (nie nutn pre nbeh)

/usr/bin

programy

/user/lib

vionu kninice

/user/include

C header sbory

/usr/share

dta a adresre zdiean viacermi programami (statick)

/usr/share/doc

dokumentcia (txt, html)

/usr/share/man

manulov strnky

/usr/share/info

info strnky

/usr/local

podobne ako /opt, pokia si sami stiahnete zdrojky nieoho


a naintalujete, intaluj sa sem

/var

dta, ktor sa nemenia (systmov), napr.:

/var/spool/mail

odchdzajca pota

/var/spool/print

fronta tlae

10

KAPITOLA 1. VOD

2 |

Procesy v UNIXe

Proces je zkladn jednotka, ktorej OS prideuje zdroje potaa:


as, v ktorom be CPU,
pam,
vstup/vstup.
jadro odovzdva
kontrolu nad CPU

proces

jadro
proces

preruenie
kontrola nasp v jadre

Proces neodovzdva kontrolu dobrovone (ani nevie, e ju stratil), t.j. preemptvny


multitasking. Opak je kooperatvny multitasking (Windows 3.1, rzne mal 8-bitov OS).
Z hadiska jednho procesu:
0000
program
(strojov kd)

toto vytvra
kompiltor

toto sa pouva
pri volan funkci

zsobnk

pam
procesu

kopa (heap)

11

odtiato sa alokuje

12

KAPITOLA 2. PROCESY V UNIXE


Proces je program, ktor be.
program pasvna vec
proces aktvna vec
Proces z hadiska OS me robi 2 typi vec:

1) be a star sa o svoje veci (pam)


2) iada jadro o slubu
vstup, vstup
viac pamti
sieov komunikcia
komunikcia s inmi procesmi
in
Mechanizmus, ktorm proces iada OS o sluby sa vol preruenie (interrupt).
pecilna intrukcia procesora
kontrola je odovzdan jadru, procesor prejde do privilegovanho mdu (ak be
proces, tak je v neprivilegovanom mde toto je softvrov preruenie)
Okrem toho existuj hardwareov preruenia, ktor vyvolvaj perifrie.
typicky: I/O udalosti (pohla sa my, priiel paket na ehternet .0)
v procese je asova, ktor pravidelne vyvolva preruenie
preruuje beh procesu, ke je CPU v neprivilegovanom mde

2.1. MAPOVANIE PAMTI

2.1

13

Mapovanie pamti
proces

fyzick pam

0000

tu vid iba jadro

strnky

MMU

memory
management/mapping
unit
virtulne adresy

2.2

relne adresy

Swap: ilzia vekej pamti

proces 835

fyzick pam

strnky procesu 835

pam
dostupn
procesom

swap

proces xyz

MMU

strnky procesu 835

miesto na disku, sbor vo Windowsoch, partition v UNIXe,


V Linuxe: |swap| 2 |RAM|,
pri behu procesu s niektor virtulne strnky procesu mapovan nikam,
ak proces pristpi na tto strnku, vyvol sa preruenie, tzn. strnka je vo swape,

14

KAPITOLA 2. PROCESY V UNIXE


jadro strnku preta, ulo ju do fyzickej pamti pridelenej procesu, premapuje
strnky,
ak je fyzick pam pln, niektor strnky id do swap.

2.3

Kontext procesu v UNIXe

celkov ria procesu


vetko to, o si jadro o procese pamt, napr.
pam
zsobnk
obsah registrov CPU pri psoeldnom preruen
vstup/vstup (file descriptors)
stdin

stdout

stderr

otvoren
sbory

index je
file descriptor

uniktne slo procesu PID


PID 0 prv proces v systme, tradine /bin/init
tabuka signlov
aktulny adresr
in veci
otvoren sieov spojenia
synchronizan primitvy (multexy, seenafony)
ke odchdza k striedaniu procesov, mus sa kontext prepn (context switch), tento
as je ria a mal by by o najmen, tm ale trp interaktivita
to, ako asto sa proces dostane ku slovu ovplyvuje slo menom priorita m
menie, tm astejie

2.4. FORK()

2.4

15

fork()

jedin spsob, ako me vznikn nov proces


jadro vytvor kpiu beiaceho procesu
kontext kpie je plne rovnaky
vnimka:
PID
nvratov hodnota fork()

proces be

fork()
as
parent
(rodi)

nvratov
hodnota forku
je PID child
procesu

2.5

child
(diea)

nvratov hodnota
forku je 0

exec..("program", ...)

volanie jadra, ktorm proces iada o nahradenie svojho programovho kdu programom z disku
identita a zvyok kontextu zostva zachovan

2.6

wait(*int)

ak na skonenie niektorho z child procesov


vrti PID procesu, ktor skonil
exit status child procesu (dvod ukonenia) ulo do *int

16

KAPITOLA 2. PROCESY V UNIXE

2.7

exit(int status)

proces iada o svoje ukonenie


toto dostane parent od jadra, ak zavolme wait
medzi exit child procesu a volanm wait parenta je child v stave zombie

2.8

Nvrat k forku

li sa iba PID a nvratov hodnota forku


toto vyzer neefektvne z hadiska pamti

proces naalokoval vea pamti

fork()

2 kpie, kad m svoju pam - kpia? NIE!

v skutonosti sa deje toto:


procesy pam (mnoina strnok) a swap po forku zdieaj, ale nevedia o tom.
Strnka sa v skutonosti kopruje a ke sa prv raz zmen.
x = 100;
if(fork()) {
printf("...", x, ...);
x = 10;
} else {
printf("...", x, ...);
}

a teraz sa vytvra kpia pre x

2.9. MEDZIPROCESOV KOMUNIKCIA

17

fork()

parent

child

wait()

exit()

wait blokuje parent, a km neskon niektor z child procesov


pri exit child procesu sa vetko zru, okrem exit statusu a pr alch bitov tkajcich sa toho ako proces skonil (v stave zombie)
o sa deje, ak parent skon bez toho, aby zavolal wait()?
v Linuxe: parentom osirelho procesu sa stva proces s PID=1 (/bin/init)
o sa deje v bash po spusten prkazu $ ls

fork()

wait()

2.9

exec("/bin/ls")

Medziprocesov komunikcia

sli na odovzdanie prostho faktu (jedno-bitovho), e dolo k nejakej udalosti


signl me vysla proces, je uren inmu procesu, volanie
kill(cislo signalu, pid)

18

KAPITOLA 2. PROCESY V UNIXE


signl me vysla aj jadro
prijmajci proces me signl bu ignorova, alebo obsli
mechanizmus obsluhy signlov:
v kontexte procesu sa dr tabuka
signl

adresa v kde procesu

zaiatok kdu, nejakej funkcie

manipulcia s tabukou, funkcia signal(...)


prklady:
SIGINT

niekto stlail CTRL+C na terminli

SIGTERM

ide shutdown systmu

SIGFPE

floating point error (delenie nulou)

SIGSEGV

pokus siahnu mimo virtulnu pam procesu

SIGPIPE

na druhom konci spojenia nikto neta/nezapisuje

SIGCHILD

niektor z det skonilo

signal(SIGCHILD, nejaka funkcia)

vol wait()
fork()

exit()

aby takto fungoval bash, tak na koniec prkazu pridme znak &

2.10. RRY

2.10

19

Rry

volanie pipe(int fd[2]) vytvor rru

fd[1]

fd[0]

pipe()

fork()

ta z rry

zapisuje do rry

ls | cut -c 1-3

ls

2.11

Sockety

obojstrann rry
funguje na nich Internet
UNIXov sockety s sbory

rra

cut

20

KAPITOLA 2. PROCESY V UNIXE

3 |
3.1

Shell

Manipulcia so sbormi a adresrmi

cd adresar
zmena aktulneho adresra, vntorn prkaz BASHu
cd (bez argumentu)
nvrat do domovskho adresra
mkdir adresar
vytvorenie novho adresra
mkdir -p adresar
vytvor adresr a navye aj vetk nutn nadraden adresre
rmdir adresar
odstrnenie przdneho adresra
ls adresar
vype men sborov v adresri
ls -l adresar
vype podrobne pre sbory prstupov prva, vlastnka, skupinu, vekos v bytoch,
dtum poslednej modifikcie, nzov sboru
cp zdroj ciel
koprovanie sboru, ak je ciel adresr, skopruje sa do neho, ak sbor, tak sa prepe,
zdroj me by iba sbor a me ich by aj viac (ak je ciel adresr)
cp -R zdroj ciel
teraz me by zdrojom aj adresr, kopruje rekurzvne
21

22

KAPITOLA 3. SHELL
mv zdroj ciel
presunie alebo premenuje sbor, me to by aj adresr
rm subor
zmazanie sboru (nesmie by adresr)
rm -r adresar
zmae cel adresr

3.2

Prkazov riadok

echo arg1 ... argn


predtm, ako sa prkaz spust, bash sprav expanziu, tzn. prepe vetky pecilne
sekvencie znakov na in znaky
prklady:
* vetky sbory v adresri separovan medzerami
$x hodnota premennej x
*.txt vetky men sborov v adresri, ktor konia .txt
a* vetky men sborov zanajce na a
backslash \
odpecilni nasledujci znak
\* vype hviezdiku
o sprav \\*? vype vetky sbory zanajce na \
jednoduch apostrof (single apostrophe)
cel vntro je odpecilnen
prklad \\* vype \\*
opan apostrof (nad TAB na anglickej klvesnici)
vntro medzi opanmi apostrofmi sa interpretruje ako prkaz, ktor sa spust
a vype na prkazov riadok
naprklad prkaz cp cat mena.txt /mnt/media/zaloha skopruje vetky
sbory, ktorch nzvy s uloen v sbory mena.txt do /mnt/media/zaloha

3.3. PREPNAE PRKAZOVHO RIADKU

3.3

23

Prepnae prkazovho riadku

program arg1 ... argn


argumenty programu s trojak:
pozin
prepnae (zanaj znakom -)
argumenty prepnaov
prepnae maj spravidla dvojak formu
krtku ls -l
dlh ls --long
C kninica v UNIXe obsahuje funkcie, ktor pre programtorov prcu s prepnami
a argumentmi rieia

You might also like