asynchronní souborový vstup výstup c. Termíny: Vstup a výstup dat synchronní a asynchronní. Příklad: Použití časovače čekání

Aplikační programátor nemusí přemýšlet o věcech, jako je to, jak systémové programy pracují s registry zařízení. Systém skrývá z aplikací detaily nízkoúrovňové práce se zařízeními. Rozdíl mezi organizováním I/O pomocí dotazování a pomocí přerušení se však projevuje i na úrovni systémových funkcí, v podobě funkcí pro synchronní a asynchronní I/O.

Proveďte funkci synchronní I/O zahrnuje spuštění I/O operace a čekání na dokončení této operace. Teprve po dokončení I/O vrátí funkce řízení volajícímu programu.

Synchronní I/O je pro programátory nejznámější způsob práce se zařízeními. Standardní vstupní/výstupní rutiny programovacího jazyka fungují tímto způsobem.

Volání funkce asynchronní I/O znamená pouze spuštění odpovídající operace. Poté funkce okamžitě vrátí řízení volajícímu programu, aniž by čekala na dokončení operace.

Zvažte například asynchronní zadávání dat. Je jasné, že program nemůže přistupovat k datům, dokud si není jistý, že jeho zadání je kompletní. Ale je docela možné, že program zatím může dělat jinou práci, než nečinně čekat.

Dříve nebo později musí program přesto začít pracovat se zadanými daty, ale nejprve se ujistěte, že asynchronní operace již skončila. K tomuto účelu poskytují různé operační systémy nástroje, které lze rozdělit do tří skupin.

· Čekání na dokončení operace. Je to jako „druhá polovina synchronní operace“. Program nejprve spustil operaci, poté provedl některé nadbytečné akce a nyní čeká na dokončení operace, jako u synchronního vstupu/výstupu.

· Kontrola dokončení operace. V tomto případě program nečeká, ale pouze kontroluje stav asynchronní operace. Pokud vstup/výstup ještě není dokončen, pak má program možnost nějakou dobu chodit.

· Zadání procedury dokončení. V tomto případě při spouštění asynchronní operace uživatelský program indikuje systému adresu uživatelské procedury nebo funkce, kterou by měl systém volat po dokončení operace. Samotný program se již nemusí zajímat o průběh vstupu/výstupu, systém mu to ve správný čas připomene voláním specifikovaná funkce. Tato metoda je nejflexibilnější, protože uživatel může v proceduře dokončení provádět libovolné akce.

V aplikaci Windows jsou k dispozici všechny tři způsoby dokončení asynchronních operací. UNIX nemá asynchronní I/O funkce, ale stejného asynchronního efektu lze dosáhnout jiným způsobem, spuštěním dalšího procesu.

Asynchronní I/O může v některých případech zlepšit výkon a poskytnout další funkčnost. Bez takových nejjednodušší forma asynchronní vstup, jako "vstup z klávesnice bez čekání", četné počítačové hry a simulátory. Logika programu využívajícího asynchronní operace je přitom složitější než u synchronních operací.

Jaká je výše zmíněná souvislost mezi synchronními/asynchronními operacemi a metodami organizace vstupu/výstupu popsanými v předchozím odstavci? Odpovězte si na tuto otázku sami.

Asynchronní I/O pomocí více vláken

Překrývající se a rozšířené I/O umožňují, aby byly I/O prováděny asynchronně v rámci jednoho vlákna, ačkoli operační systém vytváří svá vlastní vlákna pro podporu této funkce. V té či oné podobě se metody tohoto typu často používají v mnoha raných operačních systémech k podpoře omezených forem provádění asynchronních operací na jednovláknových systémech.

Windows však poskytuje podporu multi-threadingu, takže je možné dosáhnout stejného efektu prováděním synchronních I/O operací na více, nezávisle běžících vláknech. Tyto schopnosti byly dříve demonstrovány pomocí vícevláknových serverů a programu grepMT (kapitola 7). Vlákna navíc poskytují koncepčně konzistentní a pravděpodobně mnohem jednodušší způsob provádění asynchronních I/O operací. Alternativou k metodám používaným v programech 14.1 a 14.2 by bylo dát každému vláknu vlastní deskriptor souboru, takže každé vlákno by mohlo zpracovávat každý čtvrtý záznam synchronně.

Tento způsob použití vláken je demonstrován v programu atouMT, který není uveden v knize, ale je obsažen v materiálu zveřejněném na webu. Program atouMT je nejen schopen běžet pod kontrolou jakéhokoli Verze Windows, ale také jednodušší než kterákoli ze dvou verzí asynchronních I/O programů, protože účtování využití zdrojů je v tomto případě méně komplikované. Každé vlákno jednoduše udržuje své vlastní vyrovnávací paměti na svém vlastním zásobníku a prochází posloupností synchronních operací čtení, převodu a zápisu. Výkon programu přitom zůstává na poměrně vysoké úrovni.

Poznámka

Program atouMT.c, který se nachází na webu, obsahuje komentáře o několika možných úskalích, která na vás mohou čekat, když umožníte více vláknům přistupovat ke stejnému souboru současně. Zejména všechny popisovače jednotlivých souborů musí být vytvořeny pomocí funkce CreateHandle, nikoli pomocí funkce DuplicateHandle.

Osobně raději používám vícevláknové zpracování souborů než asynchronní I/O. Vlákna se snadněji programují a ve většině případů poskytují lepší výkon.

Z tohoto obecného pravidla existují dvě výjimky. První z nich, jak je uvedeno výše v této kapitole, se týká situací, ve kterých může existovat pouze jedna nevyřízená operace a pro účely synchronizace lze použít deskriptor souboru. Druhá, důležitější výjimka nastává v případě asynchronních portů pro dokončení I/O, o kterých bude řeč na konci této kapitoly.

Z knihy Postavme si kompilátor! od Crenshawa Jacka

Z knihy Programování v Prologu autor Kloksin U.

Z knihy Programovací jazyk C# 2005 a platforma .NET 2.0. od Troelsena Andrewa

Z knihy Informix Database Administrator's Guide. autor Kustov Viktor

Z knihy Microsoft Visual C++ a MFC. Programování pro Windows 95 a Windows NT autor Frolov Alexander Vjačeslavovič

2.2.3.2 Asynchronní I/O Pro urychlení I/O operací používá server svůj vlastní balíček Asynchronous I/O (AIO) nebo balíček Kernel Asynchronous I/O (KAIO), pokud je k dispozici. Požadavky uživatelského I/O jsou zpracovávány asynchronně,

Z knihy Základy objektově orientovaného programování od Meyera Bertranda

I/O Jak víte, operátoři<< и >> provést směnu číselná hodnota doleva a doprava o určitý počet bitů. Programy v naší knize také používají tyto příkazy k zadávání informací z klávesnice a jejich zobrazení na obrazovce.Pokud na levé straně

Z knihy Systémové programování v Prostředí Windows Autor: Hart Johnson M

Vstup a výstup Dvě třídy knihoven KERNEL poskytují základní vstupní a výstupní zařízení: FILE a STD_FILES. Mezi operace definované na objektu f typu FILE patří následující: create f.make ("název") -- Přidruží f k souboru s názvem jméno f.open_write -- Otevřít f pro zápis f.open_read -- Otevřít f pro

Z knihy Programování v Ruby [Jazyková ideologie, teorie a praxe aplikace] od Fultona Hala

KAPITOLA 14 Asynchronní I/O a porty dokončení I/O operace jsou přirozeně pomalejší než jiné typy zpracování. Důvody tohoto zpomalení jsou následující faktory: Zpoždění kvůli času strávenému hledáním

Z knihy Programování v Prologu pro umělou inteligenci autor Bratko Ivan

10.1.7. Jednoduché I/O Některé I/O metody již znáte z modulu Kernel; volali jsme jim bez určení volajícího. Patří mezi ně funkce get a puts, stejně jako print, printf a p (poslední volá metodu inspect objektu, aby jej vytiskla způsobem, kterému rozumíme).

Z knihy C Programovací jazyk pro osobní počítač autor Bochkov S.O.

Z knihy Linuxové programování s příklady autor Robbins Arnold

Kapitola 6 Vstup a výstup V této kapitole se podíváme na některá vestavěná zařízení pro zápis dat do souboru a čtení dat ze souboru. Takové nástroje lze také použít k formátování programových datových objektů za účelem získání požadované formy jejich vnější reprezentace.

Z knihy Základy programování v Javě autor Sukhov S. A.

Vstup a výstup Funkce vstupu a výstupu ve standardní knihovně C umožňují číst data ze souborů nebo je přijímat ze vstupních zařízení (jako je klávesnice) a zapisovat data do souborů nebo je vydávat na různá zařízení(například na tiskárnu) Vstupní/výstupní funkce

Z knihy QT 4: GUI Programming in C++ od Blanchette Jasmine

4.4. Vstup a výstup Všechny I/O operace Linuxu se provádějí prostřednictvím deskriptorů souborů. Tato část představuje deskriptory souborů, popisuje, jak je získat a uvolnit, a vysvětluje, jak je spouštět.

Z knihy Ideální programátor. Jak se stát profesionálem v oblasti vývoje softwaru autor Martin Robert S.

Z autorovy knihy

Kapitola 12: I/O Téměř každá aplikace vyžaduje čtení nebo zápis souborů nebo provádění jiných I/O operací. Qt poskytuje vynikající I/O podporu pomocí QIODevice, výkonné abstrakce „zařízení“, která umí číst a zapisovat.

Z autorovy knihy

Vstup a výstup Také považuji za velmi důležité, aby mé výsledky byly podpořeny vhodným „vstupem“. Psaní programový kód- kreativní práce. Moje kreativita je obvykle nejlepší, když stojím před kreativní výzvou.

Úloha, která zadala požadavek na I/O operaci, je umístěna supervizorem do stavu čekání na dokončení objednané operace. Když supervizor obdrží zprávu od sekce dokončení, že operace byla dokončena, uvede úlohu do připraveného stavu a pokračuje ve své práci. Tato situace odpovídá synchronnímu I/O. Synchronní I/O je standardem většiny operačních systémů. Pro zvýšení rychlosti spouštění aplikací bylo navrženo v případě potřeby použít asynchronní I/O.

Nejjednodušší verzí asynchronního výstupu je tzv. bufferovaný výstup na externí zařízení, při kterém se data z aplikace nepřenášejí přímo do I/O zařízení, ale do speciální systémové vyrovnávací paměti. V tomto případě je logicky výstupní operace pro aplikaci považována za dokončenou okamžitě a úloha nemusí čekat na dokončení samotného procesu přenosu dat do zařízení. Proces skutečný výstup Data ze systémové vyrovnávací paměti zpracovává I/O supervizor. Za přidělení vyrovnávací paměti z oblasti systémové paměti je samozřejmě zodpovědný speciální systémový proces na pokyn I/O supervizora. Takže v uvažovaném případě bude výstup asynchronní, pokud zaprvé I/O požadavek indikoval potřebu ukládání dat do vyrovnávací paměti a zadruhé, pokud I/O zařízení takové asynchronní operace umožňuje a je to zaznamenáno v UCB. Můžete také organizovat asynchronní zadávání dat. K tomu je však nutné nejen alokovat paměťovou oblast pro dočasné uložení dat načtených ze zařízení a přiřadit přidělenou vyrovnávací paměť úkolu, který operaci nařídil, ale také rozdělit požadavek na I/O operace na dvě části (do dvou požadavků). První požadavek specifikuje operaci pro čtení dat, podobně jako u synchronního I/O. Typ (kód) požadavku je však odlišný a požadavek specifikuje alespoň jeden další parametr – jméno (kód) systémového objektu, který úloha obdrží jako odpověď na požadavek a který identifikuje přidělenou vyrovnávací paměť. Po obdržení názvu vyrovnávací paměti (tento systémový objekt budeme konvenčně nazývat tímto způsobem, ačkoli různé operační systémy používají pro jeho označení i jiné výrazy, například třída), úloha pokračuje ve své práci. Zde je velmi důležité zdůraznit, že v důsledku požadavku na asynchronní vstup dat není úloha I/O supervizorem uvedena do stavu čekání na dokončení I/O operace, ale spíše zůstává v běžícím, resp. stav připravený k provedení. Po nějaké době, po provedení nezbytného kódu, který byl definován programátorem, úloha vydá druhý požadavek na dokončení I/O operace. V tomto druhém požadavku na stejné zařízení, které má samozřejmě jiný kód (nebo název požadavku), úkol specifikuje jméno systémového objektu (buffer pro asynchronní vstup dat) a v případě úspěšné operace čtení dat, okamžitě jej obdrží ze systémové vyrovnávací paměti. Pokud ještě nejsou data zcela přenesena z externího zařízení do systémové vyrovnávací paměti, I/O supervizor přepne úlohu do stavu čekání na dokončení I/O operace a poté již vše připomíná normální synchronní vstup dat.

Asynchronní I/O je obvykle poskytován ve většině operačních systémů s více programováním, zejména pokud operační systém podporuje multitasking pomocí mechanismu vláken. Pokud však neexistuje žádný explicitní asynchronní vstup/výstup, můžete jeho nápady implementovat sami uspořádáním nezávislého vlákna pro výstup dat.

I/O hardware lze považovat za kolekci hardwarové procesory, které jsou schopny pracovat paralelně vůči sobě navzájem i vůči centrálnímu procesoru (procesorům). Na takových „procesorech“ tzv externí procesy. Například pro externí zařízení (vstupní/výstupní zařízení) může být externím procesem sada operací, které posunou tiskovou hlavu, posunou papír o jednu pozici, změní barvu inkoustu nebo vytisknou některé znaky. Externí procesy využívající vstupně/výstupní hardware interagují jak mezi sebou, tak s běžnými „softwarovými“ procesy běžícími na centrálním procesoru. Důležitým faktem je, že rychlost provádění externích procesů se bude výrazně (někdy řádově i více) lišit od rychlosti provádění konvenčních (“ vnitřní") procesy. Pro jejich normální fungování musí být vnější a vnitřní procesy synchronizovány. K vyhlazení efektu silného nesouladu rychlosti mezi interními a externími procesy se používá výše zmíněná vyrovnávací paměť. Můžeme tedy hovořit o systému paralelně interagujících procesů (viz kapitola 6).

Vyrovnávací paměti jsou kritickým zdrojem ve vztahu k interním (softwarovým) a externím procesům, které při svém paralelním vývoji informačně interagují. Prostřednictvím vyrovnávací paměti (bufferů) jsou data buď odesílána z nějakého procesu do adresovatelného externího (operace výstupu dat na externí zařízení), nebo jsou z externího procesu přenášena do nějakého softwarového procesu (operace čtení dat). Zavedení bufferingu jako prostředku informační interakce vyvolává problém správy těchto systémových bufferů, který je řešen pomocí supervizní části OS. V tomto případě má supervizor za úkol nejen přidělovat a uvolňovat vyrovnávací paměti v oblasti systémové paměti, ale také synchronizovat procesy v souladu se stavem operací k naplnění nebo uvolnění vyrovnávacích pamětí a také na ně čekat, pokud žádné volné nejsou. dostupné vyrovnávací paměti a vstupní požadavek/výstup vyžaduje ukládání do vyrovnávací paměti. Typicky I/O supervizor používá standardní synchronizační nástroje přijaté v daném OS k řešení uvedených úloh. Pokud tedy OS vyvinul nástroje pro řešení problémů paralelního provádění interagujících aplikací a úloh, pak zpravidla implementuje i asynchronní vstup/výstup.

synchronní model vstup výstup. Systémová volání read(2) , write(2) a jejich analogy vrátí řízení až poté, co již byla data přečtena nebo zapsána. To často vede k zablokování vlákna.

Poznámka

Ve skutečnosti to tak jednoduché není. read(2) musí čekat, až budou data fyzicky přečtena ze zařízení, ale write(2) ve výchozím nastavení funguje v režimu líného zápisu: vrátí se po přenosu dat do systémové vyrovnávací paměti, ale obecně před data se fyzicky přenášejí do zařízení. To obvykle výrazně zlepšuje pozorovaný výkon programu a umožňuje využití paměti z dat pro jiné účely ihned po návratu write(2). Zpožděné nahrávání má ale i značné nevýhody. Tou hlavní je, že o výsledku fyzické operace se dozvíte ne hned podle návratového kódu write(2) , ale až nějakou dobu po návratu, obvykle návratovým kódem příštího volání write(2). Pro některé aplikace – monitory transakcí, mnoho programů v reálném čase atd. – je to nepřijatelné a jsou nuceny líné nahrávání vypnout. To se provádí pomocí příznaku O_SYNC, který lze nastavit při otevření a změně souboru v otevřít soubor voláním fcntl(2) .

Synchronizaci jednotlivých zápisů lze zajistit voláním fsync(2) . Pro mnoho aplikací zahrnujících více zařízení a/nebo síťová připojení synchronní model nevyhovující. Práce v režimu dotazování také není vždy přijatelná. Faktem je, že select(3C) a poll(2) považují deskriptor souboru za připravený ke čtení až poté, co se data fyzicky objeví v jeho vyrovnávací paměti. Některá zařízení však začnou odesílat data až poté, co jsou k tomu výslovně vyzvána.

U některých aplikací, zejména aplikací v reálném čase, je také důležité znát přesný okamžik, kdy začnou přicházet data. Pro takové aplikace může být také nepřijatelné, aby select(3C) a poll(2) zvažovaly běžné soubory vždy připraven číst a psát. Opravdu, souborový systémčíst z disku a přestože funguje mnohem rychleji než většina ostatních síťová připojení, ale stále je přístup k němu spojen s určitými zpožděními. Pro tvrdé aplikace v reálném čase mohou být tato zpoždění nepřijatelná – ale bez explicitního požadavku na čtení souborový systém nezveřejňuje data!

Pro tvrdé aplikace v reálném čase může být významný jiný aspekt I/O problému. Faktem je, že tvrdé RT aplikace mají vyšší prioritu než jádro, takže provádějí systémová volání – i ta neblokující! - může vést k inverze priority.

Řešení těchto problémů je známo již dlouhou dobu a nazývá se asynchronní vstup/výstup. V tomto režimu I/O systémová volání vrátí řízení ihned po požadavku na ovladač zařízení, obvykle ještě předtím, než byla data zkopírována do systémové vyrovnávací paměti. Vytvoření požadavku spočívá v umístění záznamu (IRP, Input/Output Request Packet, Input/Output request packet) do fronty. Chcete-li to provést, stačí krátce zachytit mutex, který chrání „ocas“ fronty, takže problém inverze priority lze snadno překonat. Aby bylo možné zjistit, zda hovor skončil, a pokud skončil, jak přesně a zda lze použít paměť, ve které byla data uložena, je k dispozici speciální API (viz obr. 8.1).


Rýže. 8.1.

Asynchronní model byl hlavním I/O modelem v operačních systémech jako DEC RT-11, DEC RSX-11, VAX/VMS, OpenVMS. Téměř každý podporuje tento model v té či oné podobě. OS v reálném čase. Unixové systémy používají několik nekompatibilních API pro asynchronní I/O od konce 80. let. V roce 1993 ANSI/IEEE přijalo POSIX 1003.1b, který popisuje standardizované API, které prozkoumáme později v této části.

V Solaris 10 je asynchronní I/O funkce zahrnuta v knihovně libaio.so. Chcete-li sestavit programy, které tyto funkce používají, musíte použít přepínač -laio. Pro generování požadavků na asynchronní I/O se používají funkce aio_read(3AIO), aio_write(3AIO) a lio_listio(3AIO).

Funkce aio_read(3AIO) a aio_write(3AIO) mají jediný parametr, structaiocb *aiocbp. Struktura aiocb je definována v souboru< aio.h> a obsahuje následující pole:

  • int aio_fildes - deskriptor souboru
  • off_t aio_offset - offset v souboru, od kterého začne zápis nebo čtení
  • volatile void* aio_buf - vyrovnávací paměť, do které se mají načíst data nebo do které se data zapisují.
  • size_t aio_nbytes - velikost vyrovnávací paměti. Stejně jako tradiční read(2) dokáže aio_read(3AIO) přečíst méně dat, než bylo požadováno, ale nikdy nepřečte více.
  • int aio_reqprio - prioritu požadavku
  • struct sigevent aio_sigevent - způsob upozornění, že požadavek byl dokončen (probráno dále v této části)
  • int aio_lio_opcode - nepoužívá se pro aio_read(3AIO) a aio_write(3AIO), používá se pouze funkcí lio_listio.

Funkce lio_listio(3AIO) umožňuje generovat více I/O požadavků s jedním systémovým voláním. Tato funkce má čtyři parametry:

  • int režim - může nabývat hodnot LIO_WAIT (funkce čeká na dokončení všech požadavků) a LIO_NOWAIT (funkce vrátí řízení ihned po vygenerování všech požadavků).
  • struct aiocb *list - seznam ukazatelů na struktury aiocb s popisy požadavků.

    Požadavky lze číst nebo zapisovat, to je určeno polem aio_lio_opcode. Požadavky na jeden deskriptor jsou prováděny v pořadí, ve kterém jsou uvedeny v poli seznamu.

  • int nent - počet položek v poli seznamu.
  • struct sigevent *sig - způsob, jak upozornit, že všechny požadavky byly dokončeny. Pokud mode==LIO_WAIT, tento parametr je ignorován.

Knihovna POSIX AIO poskytuje dva způsoby, jak upozornit program na dokončení požadavku, synchronní a asynchronní. Nejprve se podíváme na synchronní metodu. Funkce aio_return(3AIO) vrací stav požadavku. Pokud byl požadavek již dokončen a úspěšně dokončen, vrátí velikost přečtených nebo zapsaných dat v bajtech. Stejně jako tradiční read(2) vrací aio_return(3AIO) 0 bajtů v případě konce souboru. Pokud požadavek selhal nebo ještě nebyl dokončen, vrátí se -1 a nastaví se errno. Pokud požadavek ještě nebyl dokončen, kód chyby je EINPROGRESS.

Funkce aio_return(3AIO) je destruktivní; pokud je zavolán na dokončený požadavek, zničí systémový objekt, který uchovává informace o stavu požadavku. Volání aio_return(3AIO) vícekrát na stejný požadavek proto není možné.

Funkce aio_error(3AIO) vrací kód chyby spojený s požadavkem. Pokud je požadavek úspěšně dokončen, je vrácena 0, pokud dojde k chybě - kód chyby, pro neúplné požadavky - EINPROGRESS.

Funkce aio_suspend(3AIO) blokuje vlákno, dokud se nedokončí jeden z jeho zadaných asynchronních požadavků na vstup/výstup, nebo na určitou dobu. Tato funkce má tři parametry:

  • const struct aiocb *seznam const- pole ukazatelů na deskriptory dotazů.
  • int nent - počet prvků v poli seznamu.
  • const struct timespec *časový limit- časový limit s přesností na nanosekundy (ve skutečnosti s přesností na rozlišení systémový časovač).

Funkce vrátí 0, pokud byla dokončena alespoň jedna z operací uvedených v seznamu. Pokud funkce selže, vrátí -1 a nastaví errno. Pokud funkce vypršela, vrátí také -1 a errno==EINPROGRESS .

Příklad použití asynchronního I/O s kontrolou stavu synchronního požadavku je uveden v příkladu 8.3.

Const char req="GET / HTTP/1.0\r\n\r\n"; int main() ( int s; statická struktura aiocb readrq; statická struktura aiocb *readrqv=(&readrq, NULL); /* Otevřená zásuvka […] */ memset(&readrq, 0, sizeof readrq); readrq.aio_fildes=s ; readrq.aio_buf=buf; readrq.aio_nbytes=sizeof buf; if (aio_read(&readrq)) ( /* ... */ ) write(s, req, (sizeof req)-1); while(1) ( aio_suspend (readrqv , 1, NULL); size=aio_return(&readrq); if (velikost>0) ( write(1, buf, velikost); aio_read(&readrq); ) else if (size==0) ( break; ) else if ( errno!=EINPROGRESS) ( perror("čtení ze zásuvky"); ) ) ) 8.3. Asynchronní I/O se synchronní kontrolou stavu požadavku. Kód je zkrácen, je z něj vyloučeno otevírání zásuvky a zpracování chyb.

Asynchronní upozornění aplikace o dokončení operací se skládá z generování signálu když je operace dokončena. Chcete-li to provést, musíte provést příslušná nastavení v poli aio_sigevent deskriptoru požadavku. Pole aio_sigevent je typu struct sigevent . Tato struktura je definována v a obsahuje následující pole:

  • int sigev_notify - režim upozornění. Platné hodnoty jsou SIGEV_NONE (neposílat potvrzení), SIGEV_SIGNAL (vygenerovat signál, když je požadavek dokončen) a SIGEV_THREAD (po dokončení požadavku spustit zadanou funkci v samostatném vláknu). Solaris 10 také podporuje typ výstrahy SIGEV_PORT, který je popsán v příloze této kapitoly.
  • int sigev_signo - číslo signálu, který bude generován při použití SIGEV_SIGNAL.
  • union sigval sigev_value - parametr, který bude předán obsluze signálu nebo funkci zpracování. Při použití pro asynchronní I/O je to obvykle ukazatel na požadavek.

    Při použití SIGEV_PORT by to měla být struktura ukazatele port_event_t obsahující číslo portu a případně další data.

  • void (*sigev_notify_function)(union sigval) je funkce, která bude volána při použití SIGEV_THREAD.
  • pthread_attr_t *sigev_notify_attributes- atributy vlákna, ve kterém bude spuštěn
  • sigev_notify_function při použití SIGEV_THREAD .

Ne všechny implementace libaio podporují oznámení SIGEV_THREAD. Některé unixové systémy místo toho používají nestandardní výstrahu SIGEV_CALLBACK. Později v této přednášce se budeme zabývat pouze signalizací.

Některé aplikace používají jako číslo signálu SIGIO nebo SIGPOLL (v Unix SVR4 se jedná o stejný signál). Často se také používají SIGUSR1 nebo SIGUSR2; To je výhodné, protože to zajišťuje, že podobný signál nevznikne z jiného důvodu.

Aplikace v reálném čase také používají čísla signálů od SIGRTMIN do SIGRTMAX. Některé implementace pro tento účel přidělují speciální číslo signálu SIGAIO nebo SIGASYNCIO, ale v Solaris 10 takový signál neexistuje.

Před prováděním asynchronních požadavků oznámených signálem byste samozřejmě měli nainstalovat obsluhu tohoto signálu. Pro upozornění musíte použít signály zpracované v režimu SA_SIGINFO. Není možné nainstalovat takový handler pomocí systémových volání signal(2) a sigset(2), musíte použít sigaction(2) . Instalace ovladačů pomocí sigaction

I/O ovládání.

blokově orientované zařízení a byte-orientovaný

hlavní myšlenka

Klíč princip je nezávislost na zařízení

· Obsluha přerušení,

· Ovladače zařízení,

Zdá se jasné, že z různých důvodů je možná široká škála přerušení. Proto je s přerušením spojeno číslo – tzv. číslo přerušení.

Toto číslo jednoznačně odpovídá konkrétní události. Systém dokáže rozpoznat přerušení a pokud nastanou, spustí proceduru odpovídající číslu přerušení.

Některá přerušení (prvních pět v číselném pořadí) jsou vyhrazena pro použití centrální procesor v případě jakýchkoli speciálních událostí, jako je pokus o dělení nulou, přetečení atd. (jedná se o skutečné vnitřní přerušení J).

Hardwarová přerušení se vždy vyskytují asynchronně s ohledem na spuštěné programy. Kromě toho může dojít k několika přerušením současně!

Aby se zajistilo, že systém nebude zmaten při rozhodování o tom, které přerušení má sloužit jako první, existuje speciální schéma priority. Každému přerušení je přiřazena vlastní priorita. Pokud dojde k více přerušením současně, systém upřednostní to, které má nejvyšší prioritu, a zpracování zbývajících přerušení na chvíli odloží.

Systém priority je implementován na dvou čipech Intel 8259 (nebo podobných). Každý čip je řadič přerušení a slouží až osmi prioritám. Čipy lze kombinovat (kaskádovat) pro zvýšení počtu úrovní priority v systému.

Úrovně priority jsou zkráceny IRQ0 - IRQ15.


24. I/O ovládání. Synchronní a asynchronní I/O.

Jednou z hlavních funkcí operačního systému je správa všech vstupních/výstupních zařízení počítače. OS musí posílat příkazy zařízením, zachycovat přerušení a zpracovávat chyby; musí také poskytovat rozhraní mezi zařízeními a zbytkem systému. Pro účely vývoje by rozhraní mělo být stejné pro všechny typy zařízení (nezávislost na zařízení). Více informací o IV kontrole, otázka 23.

Principy ochrany

Protože byl OS UNIX od samého počátku koncipován jako víceuživatelský operační systém, problém autorizace přístupu různých uživatelů k souborům v souborovém systému byl vždy aktuální. Autorizací přístupu rozumíme systémové akce, které povolují nebo zakazují přístup daný uživatel Na tento soubor v závislosti na přístupových právech uživatele a omezeních přístupu nastavených pro soubor. Schéma autorizace přístupu používané v OS UNIX je tak jednoduché a pohodlné a zároveň tak výkonné, že se stalo de facto standardem moderních operačních systémů (které se nevydávají za systémy s víceúrovňovým zabezpečením).

Ochrana souborů

Jak je ve víceuživatelském operačním systému zvykem, UNIX udržuje jednotný mechanismus řízení přístupu k souborům a adresářům souborového systému. Jakýkoli proces může přistupovat k souboru tehdy a pouze tehdy, pokud přístupová práva určená pro soubor odpovídají schopnostem procesu.

Ochrana souborů před neoprávněným přístupem v systému UNIX je založena na třech faktech. Za prvé, každý proces, který vytváří soubor (nebo adresář), je spojen s nějakým identifikátorem uživatele, který je v systému jedinečný (UID - Identifikátor uživatele), což lze dále interpretovat jako identifikátor vlastníka nově vytvořeného souboru. Za druhé, každý proces, který se pokouší získat nějaký přístup k souboru, má přiřazený pár identifikátorů – aktuálního uživatele a identifikátory skupiny. Za třetí, každý soubor je jednoznačně spojen se svým deskriptorem – i-uzlem.

Poslední skutečností stojí za to se podrobněji zabývat. Je důležité pochopit, že názvy souborů a soubory jako takové nejsou totéž. Zejména pokud existuje více pevných odkazů na stejný soubor, více názvů souborů ve skutečnosti představuje stejný soubor a je spojeno se stejným i-uzlem. Jakýkoli i-uzel použitý v souborovém systému vždy jednoznačně odpovídá jednomu a pouze jednomu souboru. I-uzel obsahuje mnoho různých informací (většina z nich je uživatelům dostupná prostřednictvím systémových volání stat a fstat) a mezi těmito informacemi je část, která umožňuje systému souborů vyhodnotit právo daného procesu na přístup k daný soubor v požadovaném režimu.

Obecné zásady ochrany jsou stejné pro všechny stávající verze systému: Informace i-uzlu obsahuje UID a GID aktuálního vlastníka souboru (ihned po vytvoření souboru jsou identifikátory jeho aktuálního vlastníka nastaveny na odpovídající platný identifikátor procesu tvůrce, ale může být později změněn systémovými voláními chown a chgrp). Navíc i-uzel souboru ukládá měřítko, které ukazuje, co může uživatel – jeho vlastník – se souborem dělat, co mohou se souborem dělat uživatelé patřící do stejné skupiny uživatelů jako vlastník a co mohou dělat ostatní. se souborem. Malé detaily implementace v různé možnosti systémy se liší.

28. Správa přístupu k souborům ve Windows NT. Seznamy přístupových práv.

Systém řízení přístupu ve Windows NT se vyznačuje vysokou mírou flexibility, které je dosaženo díky široké škále přístupových subjektů a objektů a také granularitě přístupových operací.

Řízení přístupu k souboru

Pro sdílené prostředky v systému Windows NT se používá společný objektový model, který obsahuje takové charakteristiky zabezpečení, jako je sada povolených operací, identifikátor vlastníka a seznam řízení přístupu.

Objekty ve Windows NT jsou vytvářeny pro jakékoli prostředky, když jsou sdíleny nebo se stávají sdílenými – soubory, adresáře, zařízení, části paměti, procesy. Charakteristiky objektů ve Windows NT jsou rozděleny do dvou částí – na obecnou část, jejíž složení nezávisí na typu objektu, a na část individuální, určenou typem objektu.
Všechny objekty jsou uloženy ve stromových strukturách hierarchické struktury, jehož prvky jsou objekty větvení (adresáře) a objekty listu (soubory). U objektů systému souborů je toto schéma vztahů přímým odrazem hierarchie adresářů a souborů. Pro objekty jiných typů má hierarchický vztahový diagram vlastní obsah, např. pro procesy odráží vztahy rodič-dítě a pro zařízení příslušnost k určitému typu zařízení a propojení zařízení s jinými zařízeními, např. například řadič SCSI s disky.

Kontrola přístupových práv k objektům jakéhokoli typu se provádí centrálně pomocí Security Reference Monitor spuštěného v privilegovaném režimu.

Pro systém Zabezpečení Windows NT se vyznačuje přítomností velkého množství různých předdefinovaných (vestavěných) přístupových subjektů – jak jednotlivých uživatelů, tak skupin. Systém má tedy vždy takové uživatele jako Správce, Systém a Host, stejně jako skupiny Uživatelé, Správci, Operátoři účtů, Operátoři serveru, Všichni a další. Smyslem těchto vestavěných uživatelů a skupin je, že jsou vybaveni určitými právy, což správci usnadňuje vytvoření efektivního systému kontroly přístupu. Při přidávání nového uživatele může administrátor pouze rozhodnout, do které skupiny nebo skupin tohoto uživatele přiřadí. Správce může samozřejmě vytvářet nové skupiny a také přidávat práva k vestavěným skupinám pro implementaci vlastní bezpečnostní politiky, ale v mnoha případech jsou vestavěné skupiny zcela dostačující.

Windows NT podporuje tři třídy operací přístupu, které se liší typem subjektů a objektů zapojených do těchto operací.

□ Oprávnění je soubor operací, které lze definovat pro subjekty všech typů ve vztahu k objektům libovolného typu: soubory, adresáře, tiskárny, části paměti atd. Oprávnění svým účelem odpovídají přístupovým právům k souborům a adresářům v QC UNIX .

□ Práva (uživatelská práva) - jsou definována pro subjekty typu skupiny k provádění určitých systémových operací: nastavení systémového času, archivace souborů, vypnutí počítače atd. Tyto operace zahrnují speciální přístupový objekt - operační systém jako celek .

Jednu vestavěnou uživatelskou skupinu od druhé odlišují především práva, nikoli oprávnění. Některá práva pro vestavěnou skupinu jsou také vestavěná - nelze je z této skupiny odebrat. Ostatní práva vestavěné skupiny lze odstranit (nebo přidat z obecného seznamu práv).

□ Uživatelské schopnosti jsou určeny pro jednotlivé uživatele k provádění akcí souvisejících s tvorbou jejich operačního prostředí, např. změnou skladby hlavního menu programu, možností použití položky menu Spustit atd. Snížením množiny schopností ( které jsou uživateli standardně dostupné), může administrátor uživatele donutit pracovat s operačním prostředím, které administrátor považuje za nejvhodnější a chrání uživatele před případnými chybami.

Práva a oprávnění udělená skupině jsou automaticky udělena jejím členům, což umožňuje správci zacházet s velkým počtem uživatelů jako s jednotkou účetních informací a minimalizovat jejich akce.

Když se uživatel přihlásí do systému, vytvoří se mu tzv. přístupový token, který obsahuje ID uživatele a ID všech skupin, do kterých uživatel patří. Token dále obsahuje: výchozí seznam řízení přístupu (ACL), který se skládá z oprávnění a vztahuje se na objekty vytvořené procesem; seznam uživatelských práv k provádění systémových akcí.

Všechny objekty, včetně souborů, vláken, událostí, dokonce i přístupových tokenů, jsou při vytváření opatřeny popisovačem zabezpečení. Popisovač zabezpečení obsahuje seznam řízení přístupu - ACL.

Popisovač souboru- nezáporné celé číslo přiřazené OS k souboru otevřenému procesem.

ACL(Angličtina) Seznam řízení přístupu- seznam řízení přístupu (anglicky vyslovováno "ekl") - určuje, kdo nebo co může přistupovat ke konkrétnímu objektu a jaké operace má tento subjekt na objektu povoleno nebo zakázáno.

Přístupové seznamy jsou základem selektivních přístupových systémů. ( Wiki)

Vlastník objektu, obvykle uživatel, který jej vytvořil, má selektivní kontrolu nad přístupem k objektu a může změnit ACL objektu tak, aby povolil nebo zabránil ostatním v přístupu k objektu. Vestavěný Správce Windows NT, na rozdíl od superuživatele UNIX, nemusí mít některá oprávnění pro přístup k objektu. Pro implementaci této funkce lze do seznamu ACL zahrnout ID administrátorů a skupin administrátorů, stejně jako běžná ID uživatelů. Správce má však stále možnost provádět jakékoli operace s libovolnými objekty, protože se může vždy stát vlastníkem objektu a poté jako vlastník získat celou sadu oprávnění. Správce však nemůže vrátit vlastnictví předchozímu vlastníkovi objektu, takže uživatel může vždy zjistit, že správce s jeho souborem nebo tiskárnou pracoval.

Když proces požaduje operaci pro přístup k objektu v systému Windows NT, řízení vždy předá monitoru zabezpečení, který porovnává identifikátory uživatele a skupiny uživatelů z přístupového tokenu s identifikátory uloženými v prvcích ACL objektu. Na rozdíl od systému UNIX mohou prvky ACL systému Windows NT obsahovat seznamy povolených i seznamy operací zakázaných pro uživatele.

Windows NT jasně definuje pravidla, podle kterých je ACL přiřazen k nově vytvořenému objektu. Pokud volací kód při vytváření objektu výslovně specifikuje všechna přístupová práva k nově vytvořenému objektu, pak bezpečnostní systém přiřadí tento ACL k objektu.

Pokud volající kód nedodá objektu ACL a objekt má jméno, pak platí princip dědičnosti oprávnění. Bezpečnostní systém se podívá na ACL adresáře objektů, ve kterém je uložen název nového objektu. Některé položky ACL adresáře objektů lze označit jako dědičné. To znamená, že je lze přiřadit k novým objektům vytvořeným v tomto adresáři.

V případě, že proces explicitně nespecifikoval ACL pro vytvářený objekt a objekt adresáře nemá dědičné záznamy ACL, použije se výchozí ACL z přístupového tokenu procesu.


29. Programovací jazyk Java. Java virtuální stroj. technologie Java.

Jáva je objektově orientovaný programovací jazyk vyvinutý společností Sun Microsystems. Java aplikace jsou obvykle kompilovány do vlastního bajtkódu, takže mohou běžet na jakémkoli virtuálním stroji Java (JVM) bez ohledu na architekturu počítače. Java programy jsou přeloženy do bajtkódu, který je spuštěn virtuální stroj Java ( JVM) - program, který zpracovává bajtový kód a přenáší instrukce do zařízení jako interpret, ale s tím rozdílem, že bajtový kód je na rozdíl od textu zpracováván mnohem rychleji.

Výhodou tohoto způsobu spouštění programů je úplná nezávislost bajtkódu na operační systém a hardware, což vám umožní spouštět aplikace Java na jakémkoli zařízení, pro které existuje odpovídající virtuální stroj. Dalším důležitým rysem technologie Java je díky tomu flexibilní systém zabezpečení provádění programu je plně řízeno virtuálním strojem. Jakákoli operace, která překračuje stanovená oprávnění programu (například pokus o neoprávněný přístup k datům nebo připojení k jinému počítači), způsobí okamžité přerušení.

Mezi nevýhody konceptu virtuálního stroje často patří skutečnost, že provádění bajtkódu virtuálním strojem může snížit výkon programů a algoritmů implementovaných v jazyce Java.

Java virtuální stroj(zkráceně Java VM, JVM) - virtuální stroj Java je hlavní součástí běhového systému Java, tzv. Java Runtime Environment (JRE). Java Virtual Machine interpretuje a spouští bajtový kód Java předem vygenerovaný ze zdrojového kódu programu Java kompilátorem Java (javac). JVM lze také použít ke spouštění programů napsaných v jiných programovacích jazycích. Zdrojový kód Ada lze například zkompilovat do bajtkódu Java, který pak může JVM spustit.

JVM je klíčovou součástí platformy Java. Protože virtuální stroje Java jsou k dispozici pro mnoho hardwaru a softwarové platformy Java může být považována jak za middleware, tak za platformu jako takovou, proto platí zásada „zapiš jednou, spusť kdekoli“. Použití jednoho bajtového kódu na více platformách umožňuje Javu popsat jako „jednou zkompilujte, spusťte kdekoli“.

Runtime prostředí

Programy určené ke spuštění na JVM musí být zkompilovány ve standardizovaném přenosném binárním formátu, který je obvykle reprezentován jako soubory .class. Program se může skládat z mnoha tříd umístěných v různých souborech. Pro snazší hostování velkých programů lze některé soubory .class sbalit dohromady do takzvaného souboru .jar (zkratka pro Java Archive).

JVM spouští soubory .class nebo .jar emulací instrukcí napsaných pro JVM interpretací nebo použitím kompilátoru just-in-time (JIT), jako je HotSpot od Sun microsystems. V dnešní době se kompilace JIT používá ve většině JVM k dosažení vyšší rychlosti.

Jako většina virtuálních strojů má Java Virtual Machine architekturu orientovanou na zásobníky podobnou mikrokontrolérům a mikroprocesorům.

JVM, což je instance prostředí JRE (Java Runtime Environment), vstupuje do hry při spouštění programů Java. Po dokončení provádění je tato instance odstraněna nástrojem garbage collector. JIT je součástí Java Virtual Machine, která se používá ke zrychlení doby provádění aplikací. JIT současně kompiluje části bajtového kódu, které mají podobnou funkcionalitu, a proto snižuje množství času potřebného pro kompilaci.

j2se (standardní edice Java 2) – standardní knihovna obsahuje:

GUI, NET, databáze...


30. Platforma .NET. Hlavní myšlenky a ustanovení. .NET programovací jazyky.

.NET Framework - softwarové technologie od společnosti Microsoft, určený pro tvorbu běžných programů a webových aplikací.

Jednou z hlavních myšlenek Microsoft .NET je interoperabilita různých služeb napsaných v různých jazycích. Například služba napsaná v C++ pro Microsoft .NET může volat metodu třídy z knihovny napsané v Delphi; v C# můžete napsat třídu zděděnou z třídy napsané v Visual Basic.NET a výjimku vyvolanou metodou napsanou v C# lze zachytit a zpracovat v Delphi. Každá knihovna (sestavení) v .NET má informace o své verzi, což umožňuje eliminovat případné konflikty mezi různé verze shromáždění.

Aplikace lze také vyvíjet v textovém editoru a používat konzolový kompilátor.

Stejně jako technologie Java vytváří vývojové prostředí .NET bajtový kód pro spuštění virtuálním strojem. Vstupní jazyk tohoto stroje v .NET se nazývá MSIL (Microsoft Intermediate Language) nebo CIL (Common Intermediate Language, novější verze), nebo jednoduše IL.

Použití bajtkódu vám umožňuje dosáhnout funkčnosti napříč platformami na úrovni kompilovaného projektu (v podmínkách .NET: shromáždění), a to nejen na úrovni zdrojového textu, jako například v C. Před spuštěním sestavení v běhovém prostředí CLR je bajtkód převeden kompilátorem JIT zabudovaným do prostředí (just in time, on-the-fly kompilace) do strojových kódů cílového procesoru. Sestavení je také možné zkompilovat do nativního kódu pro vybranou platformu pomocí utility NGen.exe dodávané s .NET Framework.

Během procesu překladu je zdrojový kód programu (napsaný v SML, C#, Visual Basic, C++ nebo v jakémkoli jiném programovacím jazyce, který je podporován .NET) překladačem převeden do tzv. sestavení a uložen jako dynamicky soubor propojené knihovny (Dynamically Linked).Knihovna, DLL) nebo spustitelný soubor(Spustitelný soubor, EXE).

Pro každý kompilátor (ať už je to kompilátor jazyka C#, csc.exe nebo Visual Basic, vbc.exe) běhové prostředí samozřejmě provádí potřebné mapování použitých typů do typů CTS a programového kódu do kódu „ abstraktní stroj” .NET - MSIL (Microsoft Intermediate Language).

Nakonec softwarový projekt je vytvořena ve formě sestavy - soběstačná komponenta pro nasazení, replikaci a opětovné použití. Sestava je identifikována digitální podpis autora a jedinečné číslo verze.

Vestavěné programovací jazyky (součástí .NET Framework):

C#; J#; VB.NET; JScript .NET; C++/CLI - novou verzi C++ (Managed).


31. Funkční součásti OS. Správa souborů

Funkční komponenty OS:

Funkce operačního systému samostatného počítače jsou obvykle seskupeny buď podle typů místních zdrojů, které operační systém spravuje, nebo podle specifických úloh, které se vztahují na všechny zdroje. Někdy se takové skupiny funkcí nazývají subsystémy. Nejdůležitějšími subsystémy správy prostředků jsou subsystémy správy procesů, paměti, souborů a externích zařízení a subsystémy společné všem prostředkům jsou subsystémy. uživatelské rozhraní, ochrana a správa dat.

Správa souborů:

Schopnost OS „chránit“ složitosti skutečného hardwaru se velmi jasně projevuje v jednom z hlavních subsystémů OS – souborovém systému.

Systém souborů propojuje paměťová média na jedné straně a API (application programming interface) pro přístup k souborům na straně druhé. Když aplikační program přistupuje k souboru, nemá ponětí, jak jsou informace v konkrétním souboru umístěny, ani na jakém typu fyzického média (CD, pevný disk, magnetická páska nebo paměťová jednotka flash) jsou zaznamenány. Vše, co program zná, je název souboru, jeho velikost a atributy. Tato data přijímá z ovladače systému souborů. Je to souborový systém, který určuje, kde a jak bude soubor zapsán na fyzické médium (například pevný disk).

Z pohledu operačního systému je celý disk kolekcí clusterů o velikosti od 512 bajtů a větší. Ovladače souborového systému organizují clustery do souborů a adresářů (což jsou ve skutečnosti soubory obsahující seznam souborů v daném adresáři). Tyto stejné ovladače sledují, které clustery se aktuálně používají, které jsou volné a které jsou označeny jako vadné.

Systém souborů však nemusí být nutně přímo spojen s fyzickým paměťovým médiem. Existují virtuální souborové systémy a také síťové systémy souborů, které jsou pouze způsobem přístupu k souborům umístěným na vzdáleném počítači.

V nejjednodušším případě jsou všechny soubory na daném disku uloženy v jednom adresáři. Toto jednoúrovňové schéma bylo použito v CP/M a první verzi MS-DOS 1.0. Hierarchický souborový systém s vnořenými adresáři se poprvé objevil v Multics, poté v UNIXu.

Katalogy pro různé pohony může vytvořit několik samostatných stromů, jako v DOS/Windows, nebo se sloučit do jednoho stromu společného pro všechny disky, jako např Systémy podobné UNIXu Ach.

Ve skutečnosti v systémech DOS/Windows, stejně jako v systémech podobných UNIXu, existuje jeden kořenový adresář s podadresáři nazvanými „c:“, „d:“ atd. Do těchto adresářů jsou připojeny oddíly pevného disku. To znamená, že c:\ je pouze odkaz na file:///c:/. Na rozdíl od souborových systémů podobných UNIXu je však ve Windows zakázán zápis do kořenového adresáře, stejně jako prohlížení jeho obsahu.

V UNIXu je pouze jeden kořenový adresář a všechny ostatní soubory a adresáře jsou vnořeny pod něj. Chcete-li získat přístup k souborům a adresářům na disku, musíte disk připojit pomocí příkazu mount. Chcete-li například otevřít soubory na disku CD, musíte jednoduše říci operačnímu systému: „vezměte systém souborů na tomto disku CD a ukažte jej v adresáři /mnt/cdrom.“ Všechny soubory a adresáře umístěné na CD se objeví v tomto adresáři /mnt/cdrom, který se nazývá bod připojení. Na většině systémů podobných UNIXu vyměnitelné disky(diskety a CD), flash disky a další externí úložná zařízení jsou připojena v adresáři /mnt, /mount nebo /media. Unix a operační systémy podobné UNIXu také umožňují automatické připojování disků při zavádění operačního systému.

Všimněte si prosím použití lomítek v souboru Systémy Windows, UNIX a UNIX-like operační systémy (Ve Windows se používá zpětné lomítko „\“ a v UNIXu a UNIX-like operačních systémech jednoduché lomítko „/“)

Navíc je třeba poznamenat, že výše uvedený systém umožňuje připojit nejen souborové systémy fyzických zařízení, ale i jednotlivé adresáře (parametr --bind) nebo např. ISO obraz(možnost smyčky). Doplňky jako FUSE také umožňují připojit například celý adresář na FTP a velmi velké množství různých zdrojů.

V NTFS a HFS je použita ještě složitější struktura. V těchto souborové systémy každý soubor je sada atributů. Mezi atributy patří nejen tradiční pouze pro čtení, systém, ale také název souboru, velikost a dokonce i obsah. U NTFS a HFS je tedy to, co je uloženo v souboru, pouze jedním z jeho atributů.

Podle této logiky může jeden soubor obsahovat několik variant obsahu. V jednom souboru tak může být uloženo několik verzí stejného dokumentu a také další data (ikona souboru, program spojený se souborem). Tato organizace je typická pro HFS na počítačích Macintosh.


32. Funkční součásti OS. Řízení procesu.

Řízení procesu:

Nejdůležitější částí operačního systému, která přímo ovlivňuje fungování počítače, je subsystém řízení procesů. Proces (nebo jinými slovy úloha) je abstrakce, která popisuje běžící program. Pro operační systém je proces jednotkou práce, požadavkem na spotřebu systémových prostředků.

V multitaskingovém (víceprocesovém) systému může být proces v jednom ze tří hlavních stavů:

RUNNING - aktivní stav procesu, během kterého má proces všechny potřebné zdroje a je přímo vykonáván procesorem;

WAITING - pasivní stav procesu, proces je blokován, nemůže být proveden z vlastních vnitřních důvodů, čeká na nějakou událost, např. na dokončení I/O operace, přijetí zprávy od jiného proces nebo uvolnění nějakého zdroje, který potřebuje;

READY je také pasivní stav procesu, ale v tomto případě je proces zablokován kvůli okolnostem mimo něj: proces má všechny potřebné zdroje, je připraven ke spuštění, ale procesor je zaneprázdněn prováděním jiného procesu.

Během životní cyklus každý proces se pohybuje z jednoho stavu do druhého v souladu s algoritmem plánování procesu implementovaným v daném operačním systému.

standard CP/M

Tvorba operačních systémů pro mikropočítače začala s OS SR/M. Byl vyvinut v roce 1974, poté byl nainstalován na mnoha 8bitových strojích. V rámci tohoto operačního systému vzniklo značné množství softwaru, včetně překladačů z BASIC, Pascal, C, Fortran, Cobol, Lisp, Ada a mnoha dalších, textových jazyků. Umožňují připravovat dokumenty mnohem rychleji a pohodlněji než pomocí psacího stroje.

standard MSX

Tento standard určoval nejen OS, ale také vlastnosti hardwaru pro školní PC. Podle normy MSX auto muselo mít RAM hlasitost minimálně 16 K, stálá paměť 32 K s vestavěným překladačem jazyka BASIC, barevný grafický displej s rozlišením 256x192 pixelů a 16 barvami, tříkanálový 8oktávový generátor zvuku, paralelní port pro připojení tiskárny a řadiče pro ovládání externího disku připojeného externě .

Operační systém takového stroje musel mít tyto vlastnosti: požadovaná paměť - ne více než 16 K, kompatibilita s CP/M na úrovni systémových volání, kompatibilita s DOSem ve formátech souborů na externí disky na bázi disketových magnetických disků, podpora překladačů jazyků BASIC, C, Fortran a Lisp.

Pi - systém

Během počátečního období vývoje osobní počítače Byl vytvořen operační systém USD p-system. Základem tohoto systému byl tzv. P-machine – program emulující hypotetický univerzál počítač. P-stroj simuluje činnost procesoru, paměti a externích zařízení prováděním speciálních instrukcí nazývaných P-kód. Softwarové komponenty Systémy Pi (včetně kompilátorů) jsou kompilovány v P kódu, aplikační programy jsou také kompilovány do P kódu. Tedy hlavní charakteristický rys Systém byl minimálně závislý na vlastnostech PC vybavení. To je to, co zajistilo přenositelnost systému Pi Různé typy auta Kompaktnost P-kódu a vhodně implementovaný stránkovací mechanismus umožnily spouštět relativně velké programy na PC s malou RAM.

I/O ovládání.

I/O zařízení se dělí na dva typy: blokově orientované zařízení a byte-orientovaný zařízení. Blokově orientovaná zařízení ukládají informace do bloků pevné velikosti, z nichž každý má svou vlastní adresu. Nejběžnějším blokově orientovaným zařízením je disk. Bajtově orientovaná zařízení nejsou adresovatelná a neumožňují vyhledávací operace, generují nebo spotřebovávají sekvenci bajtů. Příkladem jsou terminály, řádkové tiskárny, síťové adaptéry. Elektronická součást se nazývá řadič zařízení nebo adaptér. Operační systém se zabývá ovladačem. Regulátor provádí jednoduché funkce, sleduje a opravuje chyby. Každý řadič má několik registrů, které se používají ke komunikaci s centrálním procesorem. OS provádí I/O zápisem příkazů do registrů řadiče. Řadič diskety IBM PC přijímá 15 příkazů, jako je READ, WRITE, SEEK, FORMAT atd. Když je příkaz přijat, procesor opustí řadič a provede jinou práci. Po dokončení příkazu řadič vydá přerušení, aby předal řízení procesoru operačnímu systému, který musí zkontrolovat výsledky operace. Procesor získává výsledky a stav zařízení čtením informací z registrů řadiče.

hlavní myšlenka organizace I/O softwaru spočívá v jeho rozdělení do několika úrovní, přičemž spodní úrovně zajišťují odstínění prvků vybavení od horních a ty poskytují uživatelsky přívětivé rozhraní pro uživatele.

Klíč princip je nezávislost na zařízení. Typ programu by neměl záviset na tom, zda čte data z diskety nebo z diskety pevný disk. Další důležitou otázkou pro I/O software je zpracování chyb. Obecně řečeno, chyby by měly být řešeny co nejblíže hardwaru. Pokud řídicí jednotka zjistí chybu čtení, musí se ji pokusit opravit. Pokud selže, musí ovladač zařízení opravit chyby. A pouze v případě, že si nižší úroveň nedokáže s chybou poradit, ohlásí chybu vyšší úrovni.

Další klíčovou otázkou je použití blokovacích (synchronních) a neblokovacích (asynchronních) přenosů. Většina fyzických I/O operací se provádí asynchronně – procesor zahájí přenos a přejde na jinou práci, dokud nedojde k přerušení. Je nutné, aby I/O operace byly blokovány - po příkazu READ se program automaticky pozastaví, dokud data nedosáhnou programové vyrovnávací paměti.

Posledním problémem je, že některá zařízení jsou sdílená (disky: není problém přistupovat na disk více uživatelů současně), zatímco jiná jsou vyhrazená (tiskárny: řádky vytištěné různými uživateli nelze kombinovat).

K vyřešení těchto problémů je vhodné rozdělit I/O software do čtyř vrstev (obrázek 2.30):

· Obsluha přerušení,

· Ovladače zařízení,

· Vrstva operačního systému nezávislá na zařízení,

· Vlastní softwarová vrstva.

Pojem hardwarové přerušení a jeho zpracování.

Asynchronní nebo externí (hardwarová) přerušení jsou události, které pocházejí z externích zdrojů (např. příslušenství) a může nastat v libovolném okamžiku: signál z časovače, síťová karta nebo disková jednotka, stisknutí kláves na klávesnici, pohyb myši; Vyžadují okamžitou reakci (zpracování).

Téměř všechny vstupně/výstupní systémy v počítači fungují pomocí přerušení. Konkrétně, když stisknete klávesy nebo klepnete myší, hardware generuje přerušení. V reakci na ně systém podle toho přečte kód stisknuté klávesy nebo si pamatuje souřadnice kurzoru myši. Přerušení generuje řadič disku, adaptér lokální síť, sériové porty, audio adaptér a další zařízení.