- 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í

Systém souborů (file system, FS)

Management procesu I Mgr. Josef Horálek

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

Činnost počítače po zapnutí

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.

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

VISUAL BASIC. Práce se soubory

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

Procesy a vlákna - synchronizace

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

Procesy a vlákna (Processes and Threads)

Cvičení 2. Přesměrování vstupu a výstupu. Posloupnost příkazů. Příkazy pro informaci o uživatelích

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

Úvod do Linuxu. SŠSI Tábor 1

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

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Práce se soubory. Základy programování 2 Tomáš Kühr

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

Přednáška 2. Systémy souborů OS UNIX. Nástroje pro práci se souborovým systémem. Úvod do Operačních Systémů Přednáška 2

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

Strojový kód. Instrukce počítače

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

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

Téma 2 Architektury OS a jejich služby

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

Struktura programu v době běhu

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

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

Nastroje na zpracovani textu:

PSK3-9. Základy skriptování. Hlavička

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

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Unix je víceuživatelský a víceúlohový OS

a co je operační systém?

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.

Operační systémy. Cvičení 4: Programování v C pod Unixem

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

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

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

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

Vysoké učení technické v Brně Fakulta informačních technologií ITP Technika personálních počítačů Služby ROM BIOS a BootROM

Přerušovací systém s prioritním řetězem

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

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

konec šedesátých let vyvinut ze systému Multics původní účel systém pro zpracování textů autoři: Ken Thompson a Denis Ritchie systém pojmnoval Brian

Instalace OS, nastavení systému

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

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

ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE

MS WINDOWS I. řada operačních systémů firmy Microsoft *1985 -? Historie. Práce ve Windows XP. Architektura. Instalace. Spouštění

PB002 Základy informačních technologií

Základy programování (IZP)

Implementace LL(1) překladů

Práce se soubory. Úvod do programování 2 Tomáš Kühr

Jazyk symbolických adres

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY

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

Ukázka zkouškové písemka OSY

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

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

Úvod, jednoduché příkazy

Zadání: TÉMA: Zápis algoritmu, čtení textového souboru, porovnání řetězců.

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

Operační systémy (OS)

Strojový kód k d a asembler procesoru MIPS SPIM. MIPS - prostředí NMS NMS. 32 ks 32bitových registrů ( adresa registru = 5 bitů).

Počítačové sítě Systém pro přenos souborů protokol FTP

Procesy a vlákna Mgr. Josef Horálek

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

Začínáme vážně programovat. Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

Úvod do Unixu. man: příkaz pro zobrazení nápovědy k danému příkazu, programu (pokud je k dispozici), např. man cp. pwd: vypíše cestu k aktuální pozici

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

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

monolitická vrstvená virtuální počítač / stroj modulární struktura Klient server struktura

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Téma 3. Procesy a vlákna

Maturitní téma: Operační MS-DOS

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

Meziprocesová komunikace

Architektura rodiny operačních systémů Windows NT Mgr. Josef Horálek

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ý.

Jazyk C práce se soubory. Jan Hnilica Počítačové modelování 16

Roury a zprávy Mgr. Josef Horálek

Fakulta informačních technologií VUT v Brně Ústav počítačových systémů Technika personálních počítačů, cvičení ITP Služby ROM BIOS a BootRom

PROGRAMOVÁNÍ V SHELLU

Příkazová řádka. predn_02.odt :55:55 1

Programování v jazyce C pro chemiky (C2160) 4. Textové řetězce, zápis dat do souboru

IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ

C++ 0x aka C++11. Základním kamenem je třída std::thread

Střední průmyslová škola a Vyšší odborná škola, Hrabákova 271, Příbram. III / 2 = Inovace a zkvalitnění výuky prostřednictvím ICT

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

Operační systémy. Cvičení 3: Programování v C pod Unixem

Princip funkce počítače

Přednáška 6. Procesy a vlákna (vznik, stavy, atributy). Signály. Nástroje pro práci s procesy a vlákny. Úvod do Operačních Systémů Přednáška 6

Správce virtuálních strojů

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

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,buf,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 anebo 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) 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