- program = vykonatelný soubor - proces = jedna instance vykonávaného programu



Podobné dokumenty
- program = vykonatelný soubor - proces = jedna instance vykonávaného programu

Výpočet v módu jádro. - přerušení (od zařízení asynchronně) - výjimky - softvérové přerušení. v důsledku událostí

SÁM O SOBĚ DOKÁŽE POČÍTAČ DĚLAT JEN O MÁLO VÍC NEŽ TO, ŽE PO ZAPNUTÍ, PODOBNĚ JAKO KOJENEC PO PROBUZENÍ, CHCE JÍST.

Téma 2 Architektury OS a jejich služby

Operační systémy. Tomáš Vojnar IOS 2009/2010. Vysoké učení technické v Brně Fakulta informačních technologií Božetěchova 2, Brno

Linux Teorie operačních systémů a realita

Operační systémy (OS)

VISUAL BASIC. Práce se soubory

ZOS OPAKOVÁNÍ. L. Pešička

a co je operační systém?

Činnost počítače po zapnutí

Management procesu I Mgr. Josef Horálek

Operační systém UNIX

Semestrální práce z předmětu. Jan Bařtipán / A03043 bartipan@studentes.zcu.cz

Rozdělení operačních systémů

Principy operačních systémů. Lekce 7: Souborový systém

Vstupní a vstupní proudy v C++

Technologie počítačových sítí 1. cvičení

Operační systém (Operating System)

LdrLib KNIHOVNY PRO TVORBU ZAVADĚČE (LOADERU) ŘÍDICÍCH APLIKACÍ. Příručka uživatele a programátora

Instalace OS, nastavení systému

dostat zdroják Petr Zemek Fakulta informačních technologií VUT v Brně izemek

Řešení pro audit činnosti administrátorů UNIX/Linux serverů

Operační systémy. Tomáš Hudec.

Systém souborů (file system, FS)

Správa procesů a vláken Mgr. Josef Horálek

Operační systémy. Přednáška 2: Procesy a vlákna

Úvod. unx-predn_01-uvod.odt :13:43 1

Pár odpovědí jsem nenašla nikde, a tak jsem je logicky odvodila, a nebo jsem ponechala odpověď z pefky, proto je možné, že někde bude chyba.

zení Koncepce připojení V/V zařízení POT POT ... V/V zařízení jsou připojena na sběrnici pomocí řadičů. Řadiče Připojení periferních zařízení

HW počítače co se nalézá uvnitř počítačové skříně

Nastroje na zpracovani textu:

Koncepce DMA POT POT. Při vstupu nebo výstupu dat se opakují jednoduché činnosti. Jednotlivé kroky lze realizovat pomocí speciálního HW.

Procesy a vlákna - synchronizace

Operační systémy a sítě

Technické prostředky počítačové techniky

Operační systémy. Tomáš Vojnar IOS 2010/2011. Vysoké učení technické v Brně Fakulta informačních technologií Božetěchova 2, Brno

PL/SQL. Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd.

PB153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ

2 Základní funkce a operátory V této kapitole se seznámíme s použitím funkce printf, probereme základní operátory a uvedeme nejdůležitější funkce.

Software je ve světě IT vše, co není Hardware. Do softwaru patří aplikace, program, proces, algoritmus, ale i data (text, obrázky), operační systém

PSK3-5. Přesměrování vstupu a výstupu. Vstup a výstup

Téma 1: Bitová kopie systému. Téma 1: Bitová kopie systému

Základní programové vybavení počítače

IUJCE 07/08 Přednáška č. 1

IUJCE Přednáška č. 11. další prvky globální proměnné, řízení viditelnosti proměnných, funkcí

18. února 2015, Brno Připravil: David Procházka. Programovací jazyk C++

Aktualizace softwaru Uživatelská příručka

Operační systémy. Cvičení 5: Volání jádra, procesy, vlákna.

Úvod Jednoduchá komunikace Sockety Konec. Programování v C# Síťová komunikace. Petr Vaněček 1 / 33

PARA Filozofové, kuřáci a holič

SÁM O SOBĚ DOKÁŽE POČÍTAČ DĚLAT JEN O MÁLO VÍC NEŽ TO, ŽE PO ZAPNUTÍ, PODOBNĚ JAKO KOJENEC PO PROBUZENÍ, CHCE

Základy informatiky. Operační systémy

Téma 3. Procesy a vlákna

Delphi podstata, koncepce a metody MDI aplikace

Acronis True Image 8.0

<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************

Sběrnicová struktura PC Procesory PC funkce, vlastnosti Interní počítačové paměti PC

Operační systémy 2. Přednáška číslo 1. Úvod do OS

Přednáška. Systémy souborů. FAT, NTFS, UFS, ZFS. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Číslicové měřicí systémy. Téma 4

Operační systémy 2. Struktura odkládacích zařízení Přednáška číslo 10

Bootkity v teorii a praxi. Martin Dráb martin.drab@ .cz

Basic256 - úvod do programování Příklady. ing. petr polách


ZOS CV1 Základy operačních systémů

Algoritmus Minimax. Tomáš Kühr. Projektový seminář 1

Universal Serial Bus. Téma 12: USB. Komunikační principy Enumerace Standardní třídy zařízení

Klíčové pojmy: Cyklus, řídící proměnná, inicializace, test podmínky, přerušení cyklu, vnořování cyklů.

Ukazky Zdroje:... 17

PROGRAMOVÁNÍ V C++ CVIČENÍ

UNIX. Historie a základní pojmy. Historie. Před ním. Začátek

FASTPort. Nová sběrnice pro připojení inteligentních karet* k osmibitovým počítačům. aneb. Jak připojit koprocesor

ÚVOD DO OPERAČNÍCH SYSTÉMŮ. Vývoj SW aplikací. Unix, POSIX, WinAPI, programování komunikace s periferními zařízeními, ovladače zařízení

Technické prostředky počítačové techniky

Desktop systémy Microsoft Windows

Komunikace eorders. aegis. aegis.cz. Konference Common 2009 Malá Fatra. Evžen Kučera

Operační systémy 1. Přednáška číslo Struktura odkládacích zařízení

Logická struktura pevného disku

IT ESS II. 1. Operating Systém Fundamentals

Blast Rozhraní DeviceNet

CHARAKTERISTIKY MODELŮ PC

Úvod do Operačních Systémů

Operační systémy. Tomáš Vojnar IOS 2014/2015. Vysoké učení technické v Brně Fakulta informačních technologií Božetěchova 2, Brno

) informace o stavu řízené veličiny (předávaná řídícímu systému) - nahrazování člověka při řízení Příklad řízení CNC obráběcího stroje

Informační systémy 2008/2009. Radim Farana. Obsah. Skripty a dávky. Nastavení aktuální databáze. USE DatabaseName

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

x86 assembler and inline assembler in GCC

Principy operačních systémů. Lekce 2: Správa paměti

Západočeská univerzita v Plzni FAKULTA PEDAGOGICKÁ KATEDRA VÝPOČETNÍ A DIDAKTICKÉ TECHNIKY

Práce s knihovnami. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016

Stavy procesů. Požadavky na OS při práci s procesy

PB071 Programování v jazyce C

Opatření a vyzkoušení distribuce. Michal Dočekal

Přednáška. Vstup/Výstup. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

MS WINDOWS II. Jádro. Správa objektů. Správa procesů. Zabezpečení. Správa paměti

Acronis True Image 9.0

Přerušení POT POT. Přerušovací systém. Přerušovací systém. skok do obslužného programu. vykonávaný program. asynchronní událost. obslužný.

Motivace. Vstup a výstup. Minimální komunikace. Motivace. ÚDPJ - Vstup a výstup. Ing. Lumír Návrat katedra informatiky, A

Transkript:

Proces - program = vykonatelný soubor - proces = jedna instance vykonávaného programu UNIX - souběžně (simultaneously) se může vykonávat mnoho procesů (šachový velmistr) - může se vykonávat mnoho instancí jednoho programu (např. pogramu kp pro kopírování souborů) Proces v UNIXu - proces je jednotka (entita), která vykonává programy a poskytuje prostředí pro jejich vykonávání - adresový prostor + počítadlo instrukcí - proces je základní jednotkou plánování (scheduling) - procesor vykonává v jednom okamžiku nejvíc jeden proces - soutěží a vlastní prostředky - požadují vykonání služeb jádra

Systémová volání pro procesy - vytvoření procesu pid = fork(); vytvoří se (téměř) identická kopie volajícího procesu - jak je rozeznáme? o adresový prostor je kopie adresového prostoru volajícího programu a vykonává se stejný program o vytvořený proces má svou kopii deskriptorů souborů, které odkazují na stejné soubory o volající proces rodič o vytvořený proces potomek o každý proces (kromě prvního má svého rodiče) o rodič může mít více potomků o návrat ze systémového volání (fork) na stejné místo o jádro identifikuje procesy číslem procesu, které se nazývá identifikátor procesu (process identifier PID) o návratová hodnota pid bude ve volajícím procesu PID vytvořeného potomka a v potomkovi bude nula o program může obsahovat kód rodiče i potomka

main() /*kód rodiče*/ pid=fork(); if (!pid) /*kód potomka*/... if (pid) /*kód rodiče*/... rodič pid potomka!= 0 pid = fork(); potomek pid == 0

- častěji, v nově vytvořeném procesu se vykoná nový program voláním některého tvaru služby exec kp název souboru, který obsahuje vykonatelný program pro kopírovaní souborů main(int argc, char *argv[]) int stav; if (fork()== 0) execl( kp, kp, argv[1], argv[2], 0); wait(&stav); printf( kopirovani skonceno ); původní program je v paměti přepsán a potomek nepokračuje vykonáváním starého programu, ale potomek se vrátí z volání s počítadlem instrukcí nastaveným na první vykonatelnou instrukci nového programu

- čekání na skončení potomka pid = wait (stav_adresa); stav_adresa je adresa celočíselné proměnné, která bude obsahovat koncový stav procesu - ukončení procesu exit(stav); C programy volají exit při návratu z funkce main pid=fork( ); pid=wait(&status); exit(stav);

proč jsou na vykonání nového procesu nutná dvě systémová volání a tedy dvojité náklady? - v klient-server aplikacích program server může vytvořit voláním fork více procesů pro obsluhu klientů (v moderních systémech více vláken) - možno v procesu vyvolat vykonání programu bez vytvoření nového procesu - mezi fork a exec může potomek vykonat vhodné akce ještě dřív než je vyvolán nový program

Meziprocesová komunikace - přenos dat mezi procesy umožňují roury - vytvoření roury pipe(fdptr); fdptr pole dvou deskriptorů pro zápis do a čtení z roury int pfd[2];... pipe(pfd);... write(pfd[1],...); read(pfd[0],...);... write(pfd[1],...); read(pfd[0],...);

- komunikace mezi procesy o proces vytvoří rouru voláním pipe o voláním fork vytvořené procesy získají deskriptory souborů roury o procesy čtou z a zapisují do roury o synchronizace - příklad obousměrné komunikace rodiče a potomka

k_p[0] k_p[1] rodič fork k_p[0] k_p[1] potomek k_r[0] k_r[1] k_r[0] k_r[1] - vytvoříme dvě roury pro tok dat k rodičovi k_r a tok dat k potomkovi k_p - potomek má vlastní kopie deskriptorů souborů pro obě roury - standardní vstupy a výstupy přesměrujeme na roury

char string[] = ahoj ; main() int pocet, i; int k_r[2], k_p[2]; char b[64]; pipe(k_r); pipe(k_p); if(fork() == 0) /*potomek*/ close(0); dup(k_p[0]); close(1); dup(k_r[1]); close(k_r[1]); close(k_p[0]); close(k_r[0]); close(k_p[1]); for(;;) if ((pocet= read(0,b,sizeof(b))) == 0) exit(); write(1,b,pocet);

/*rodic*/ close(1); dup(k_p[1]); close(0); dup(k_r[0]); close(k_p[1]); close(k_r[0]); close(k_p[0]); close(k_r[1]); for (i=0; i<3; i++) write(1,string,strlen(string)); read(0,buf, sizeof(buf)); vykonání: potomek buď najde v rouře k_p data nebo počká až je tam rodič vloží, když je přečte vloží je do roury k_r rodič třikrát vloží data do roury k_p a potom přečte nebo čeká na data z roury k_r ahoj ahoj ahoj a po jejich třetím přečtení skončí

potomek po třetím přečtení čeká na další data protože žádný proces nemá otevřený deskriptor souboru pro zápis, nikdo už do roury data nezapíše volání read vrátí konec souboru, tedy nula přečtených bytů a potomek skončí exit proč zavírat nadbytečné deskriptory souborů? o šetříme o vykonáváním fork a exec získávají nezavřené deskriptory souborů další procesy a v nich vykonávané programy o read z roury vrátí konec souboru jenom tehdy neníli otevřená pro zápis

Vykonatelný (executable) program obyčejný soubor určený na vykonání na HW v prostředí OS více formátů a.out Assembler OUTput Format ELF Executable and Linking Format (Linux, System V) COFF Common Object File Format (BSD) PE/COFF Microsoft's Portable Executable (PE) Mají následující strukturu: 1. Primární hlavička identifikující typ vykonatelného programu, často formou magického čísla, počet sekcí, začáteční hodnotu počítadla instrukcí 2. Hlavičky sekcí s velikostí sekce, virtuální adresou,... 3. Sekce obsahující data, text (instrukční segment), inicializovaná data, informace o neinicializovaných datech (bss block started by symbol) 4. Jiné sekce obsahující tabulku symbolů užitečnou pro ladění

Shell interpret příkazů - první slovo (symbol) na řádku je interpretován jako jméno příkazu o kód vykonatelného programu, např. po kompilaci programu v C jazyce o vykonatelný program jako posloupnost příkazů shellu o vnitřní (vestavěné) příkazy, vykoná shell o příkazy pro řízení vykonávání if, for, while o cd, who... - příkazy mohou být vykonávány o synchronně, shell čeká na vykonání příkazu před čtením následujícího příkazu o asynchronně, v pozadí, za příkazem následuje &, shell začne vykonávat příkaz a je připraven přijmout další příkaz - přesměrování o < soubor použij soubor jako standardní vstup o > soubor použij soubor jako standardní výstup o 2> soubor použij soubor jako standardní chybový výstup - kolona ls l wc

/*read command line until end of line */ while(read(stdin, buffer, numchars)) /*parse command line*/ if(/*command line contains & */) amper = 1; else amper = 0; /*for commands not part of the shell command language*/ if (fork() == 0) /*redirection of IO?*/ if (/*redirect output*/) fd = creat(newfile, fmask); close(stdout); dup(fd); close(fd); /*stdout is now redirected*/ if(/*piping*/) pipe(fildes); if (fork() == 0) /*first component of command line*/ close(stdout); dup(fildes[1]); close(fildes[1]);

close(fildes[0]); /*stdout now goes to pipe*/ /*child process does command*/ execlp(command1,command1,0); /*2 nd command component of command line*/ close(stdin); dup(fildes[0]); close(fildes[0]); close(fildes[1]); /*standard input now comes from pipe*/ execve(command2,command2,0); /*parent continues over here... *waits for child to exit if required */ if(amper == 0) retid = wait(&status); [Bach 86]

who ls -l nroff mm velkydokument & nroff mm velkydokument > vystup ls l wc Shell wait fork fork wc ls -l exit read write

Zavedení operačního systému - nezávislost HW a OS o na jedné HW architektuře různé OS, Linux/Windows o na různých HW architekturách stejný OS (vyčlení se strojově závislá část OS) - při zapnutí počítače v hlavní paměti není žádný program - operační systém musí zavést sám sebe - bootstrap, to boot Main Entry: 1 boot strap Pronunciation: 'büt-"strap Function: noun Date: 1913 1 plural : unaided efforts -- often used in the phrase by one's own bootstraps 2 : a looped strap sewed at the side or the rear top of a boot to help in pulling it on Main Entry: 3 bootstrap Function: transitive verb Date: 1951 : to promote or develop by initiative and effort with little or no assistance <bootstrapped herself to the top> Merriam-Webster Online

- zavedení OS je posloupnost kroků: o po připojení k síti HW generuje RESET o začne se vykonávat program v trvalé paměti (ROM) strojový zavaděč, který čte první sektor z disku do hlavní paměti (PC paměť ROM adresa 0xfffffff0, BIOS 1. test HW (přítomnost zařízení) 2. inicializace HW (tabulka instalovaných zřízení) 3. hledá disk s operačním systémem (pružné, pevné, CD-ROM) 4. přečte první sektor a zapíše ho do RAM, adresa 0x00007c00 a vykoná skok na tuto adresu ROM 0xfffffff0 RAM 0x00007c00

o začne se vykonávat zavaděč operačního systému (boot loader), který je (nebo jeho začátek) v prvním sektoru, který z disku do RAM přečte jádro OS Linux - zavedení z pružného disku o komprese při kompilaci o dekomprese při zavádění o zavaděč je v jazyce symbolických instrukcí (assembly language) o po přeložení jádra je zavaděč umístěn na začátek souboru s přeloženým jádrem o zapíše se na pružný disk od prvního sektoru o BIOS tedy přečte zavaděč a vykoná skok na jeho začátek o zavolá proceduru BIOSu na vypsání Loading... o zavolá proceduru BIOSu na zavedení funkce setup()jádra na adresu 0x00090000 a zavede zbytek jádra o skok na setup() - zavedení z pevného disku - obecně o pevný disk je rozdělen na oblasti, které můžeme považovat za logické disky o první sektor disku, MBR master boot record obsahuje tabulku oblastí a krátký program, který zavádí první sektor oblasti, která je označena jako aktivní

- LILO (LInux LOader) - dvoustupňové zavádění o instalován v MBR namísto programu, který zavádí první sektor aktivní oblasti v prvním sektoru aktivní oblasti o dvě části o první část zavede BIOS na adresu 0x000007c0 a tato zavede druhou část do RAM na adresu 0x0009b000 o druhá část zjistí operační systémy na disku a nabídne uživateli, aby si vybral o po výběru (anebo po uplynutí čekací doby předdefinovaný default) přečte první sektor vybrané oblasti o jestli je zaváděn Linux, zavaděč vypíše Loading... o zavede funkci setup()jádra na adresu 0x00090000 a zavede zbytek jádra o skok na setup() - setup() o zjistí velkost RAM o inicializuje anebo reinicializuje přídavná zařízení,... o skok na funkci startup_32() - startup_32() o vykonává dekompresi o vytvoří proces 0 o skok na start_kernel()

- start_kernel() o inicializuje téměř všechny součásti jádra o vytvoří proces 1 s programem init UNIX obecně - při zavádění vytvoří proces 0 běžící v módě jádro - proces 0 vytvoří službou fork proces 1, který sám sebe přepíše do uživatelského adresového prostoru - proces 1 vykoná exec( /.../init,...) - init čte řádky souboru inittab a vytváří procesy, ve kterých vykoná exec programu specifikovaného v řádku, pro terminály getty - getty otevření zařízení jako otevření souboru, open vrátí deskriptor souboru, vykoná se však specificky pro jednotlivé druhy zařízení pro terminál, open čeká na vstup

... open terminál; if(otevření úspěšné) exec login; if(úspěšné přihlášení)... exec shell; else počítej pokusy; opakuj pro povolený počet; - úspěšné přihlášení začal přihlašovací (login) shell, init čeká na jeho skončení (login shell je potomek) a vytvoří nový getty - neúspěšné přihlášení login vykoná exit, zavře se terminál, init vytvoří nový getty