Výstup asynchrónneho vstupu súboru c. Termíny: Vstup a výstup údajov synchrónne a asynchrónne. Príklad: Použitie časovača čakania

Aplikačný programátor nemusí myslieť na veci, ako napríklad ako systémové programy pracujú s registrami zariadení. Systém skrýva z aplikácií detaily nízkoúrovňovej práce so zariadeniami. Rozdiel medzi organizovaním I/O pomocou pollingu a pomocou prerušení sa však prejavuje aj na úrovni systémových funkcií, v podobe funkcií pre synchrónne a asynchrónne I/O.

Vykonajte funkciu synchrónne I/O zahŕňa spustenie I/O operácie a čakanie na dokončenie tejto operácie. Až po dokončení I/O funkcia vráti riadenie volajúcemu programu.

Synchrónne I/O je pre programátorov najznámejší spôsob práce so zariadeniami. Štandardné vstupné/výstupné rutiny programovacieho jazyka fungujú týmto spôsobom.

Volanie funkcie asynchrónne I/O znamená iba spustenie príslušnej operácie. Potom funkcia okamžite vráti riadenie volajúcemu programu bez čakania na dokončenie operácie.

Zvážte napríklad asynchrónne zadávanie údajov. Je jasné, že program nemôže pristupovať k údajom, kým si nie je istý, že jeho zadávanie je dokončené. Je však celkom možné, že program môže zatiaľ vykonávať inú prácu, než nečinne čakať.

Skôr či neskôr musí program predsa len začať pracovať so zadanými údajmi, najskôr sa však uistite, že asynchrónna operácia už skončila. Na tento účel poskytujú rôzne operačné systémy nástroje, ktoré možno rozdeliť do troch skupín.

· Čakanie na dokončenie operácie. Je to ako „druhá polovica synchrónnej operácie“. Program najprv spustil operáciu, potom vykonal nejaké vedľajšie akcie a teraz čaká na dokončenie operácie, ako pri synchrónnom vstupe/výstupe.

· Kontrola dokončenia operácie. V tomto prípade program nečaká, ale iba kontroluje stav asynchrónnej operácie. Ak vstup/výstup ešte nie je dokončený, potom má program možnosť nejaký čas chodiť.

· Pridelenie postupu dokončenia. V tomto prípade pri spustení asynchrónnej operácie užívateľský program oznámi systému adresu užívateľskej procedúry alebo funkcie, ktorú by mal systém zavolať po dokončení operácie. Samotný program už nemusí zaujímať priebeh vstupu/výstupu, systém mu to v pravý čas pripomenie zavolaním špecifikovaná funkcia. Táto metóda je najflexibilnejšia, pretože používateľ môže poskytnúť akékoľvek akcie v procese dokončovania.

V aplikácii Windows sú k dispozícii všetky tri spôsoby dokončenia asynchrónnych operácií. UNIX nemá asynchrónne I/O funkcie, ale rovnaký asynchrónny efekt možno dosiahnuť iným spôsobom, spustením dodatočného procesu.

Asynchrónne I/O môžu v niektorých prípadoch zlepšiť výkon a poskytnúť ďalšie funkčnosť. Bez takých najjednoduchšia forma asynchrónny vstup, ako napríklad „vstup z klávesnice bez čakania“, početné počítačové hry a simulátory. Logika programu využívajúceho asynchrónne operácie je zároveň zložitejšia ako pri synchrónnych operáciách.

Aké je vyššie uvedené spojenie medzi synchrónnymi/asynchrónnymi operáciami a metódami organizovania vstupu/výstupu diskutovanými v predchádzajúcom odseku? Na túto otázku si odpovedzte sami.

Asynchrónne I/O pomocou viacerých vlákien

Prekrývajúce sa a rozšírené I/O umožňujú vykonávať I/O asynchrónne v rámci jedného vlákna, hoci operačný systém vytvára svoje vlastné vlákna na podporu tejto funkcie. V tej či onej forme sa metódy tohto typu často používajú v mnohých skorých operačných systémoch na podporu obmedzených foriem vykonávania asynchrónnych operácií na jednovláknových systémoch.

Windows však poskytuje podporu multi-threadingu, takže je možné dosiahnuť rovnaký efekt vykonávaním synchrónnych I/O operácií na viacerých, nezávisle spustených vláknach. Tieto schopnosti boli predtým demonštrované pomocou viacvláknových serverov a programu grepMT (kapitola 7). Vlákna navyše poskytujú koncepčne konzistentný a pravdepodobne oveľa jednoduchší spôsob vykonávania asynchrónnych I/O operácií. Alternatívou k metódam používaným v programoch 14.1 a 14.2 by bolo dať každému vláknu vlastný deskriptor súboru, takže každé vlákno by mohlo spracovať každý štvrtý záznam synchrónne.

Tento spôsob použitia vlákien je demonštrovaný v programe atouMT, ktorý nie je uvedený v knihe, ale je zahrnutý v materiáli zverejnenom na webovej stránke. Program atouMT je nielen schopný bežať pod kontrolou akéhokoľvek Verzie systému Windows, ale aj jednoduchšie ako ktorákoľvek z dvoch verzií asynchrónnych I/O programov, keďže účtovanie o použití zdrojov je v tomto prípade menej komplikované. Každé vlákno jednoducho udržiava svoje vlastné vyrovnávacie pamäte na svojom vlastnom zásobníku a prechádza sekvenciou synchrónnych operácií čítania, konverzie a zápisu. Výkon programu zároveň zostáva na pomerne vysokej úrovni.

Poznámka

Program atouMT.c, ktorý sa nachádza na webovej stránke, obsahuje komentáre k niekoľkým možným nástrahám, ktoré na vás môžu čakať, keď umožníte viacerým vláknam pristupovať k rovnakému súboru súčasne. Najmä všetky jednotlivé popisovače súborov musia byť vytvorené pomocou funkcie CreateHandle a nie pomocou funkcie DuplicateHandle.

Osobne radšej používam viacvláknové spracovanie súborov ako asynchrónne I/O. Vlákna sa ľahšie programujú a vo väčšine prípadov poskytujú lepší výkon.

Z tohto všeobecného pravidla existujú dve výnimky. Prvý z nich, ako je uvedené vyššie v tejto kapitole, sa týka situácií, v ktorých môže existovať iba jedna nevybavená operácia a na účely synchronizácie možno použiť deskriptor súboru. Druhá, dôležitejšia výnimka nastáva v prípade asynchrónnych portov na dokončenie I/O, o ktorých sa bude diskutovať na konci tejto kapitoly.

Z knihy Postavme si kompilátor! od Crenshawa Jacka

Z knihy Programovanie 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. Programovanie pre Windows 95 a Windows NT autora Frolov Alexander Vjačeslavovič

2.2.3.2 Asynchrónne I/O Na urýchlenie I/O operácií server používa svoj vlastný balík Asynchronous I/O (AIO) alebo balík Kernel Asynchronous I/O (KAIO), ak je k dispozícii. Požiadavky na vstup/výstup používateľa sa spracúvajú asynchrónne,

Z knihy Základy objektovo-orientovaného programovania od Meyera Bertranda

I/O Ako viete, operátori<< и >> vykonajte zmenu číselná hodnota vľavo a vpravo o určitý počet bitov. Programy v našej knihe tiež používajú tieto príkazy na zadávanie informácií z klávesnice a ich zobrazenie na obrazovke.Ak na ľavej strane

Z knihy Systémové programovanie v Prostredie Windows Autor: Hart Johnson M

Vstup a výstup Dve triedy knižníc KERNEL poskytujú základné vstupné a výstupné možnosti: FILE a STD_FILES. Medzi operácie definované na objekte f typu FILE patria tieto: create f.make ("meno") -- Asociuje f so súborom s názvom f.open_write -- Otvoriť f pre zápis f.open_read -- Otvoriť f pre

Z knihy Programovanie v rubíne [Jazyková ideológia, teória a prax aplikácie] od Fultona Hala

KAPITOLA 14 Asynchrónne I/O a porty dokončenia I/O operácie sú prirodzene pomalšie ako iné typy spracovania. Dôvody tohto spomalenia sú nasledujúce faktory: Oneskorenia spôsobené časom stráveným hľadaním

Z knihy Programovanie v Prologu pre umelú inteligenciu autor Bratko Ivan

10.1.7. Jednoduché I/O Už ste oboznámení s niektorými I/O metódami z modulu Kernel; zavolali sme im bez určenia volajúceho. Patria sem funkcie get a puts, ako aj print, printf a p (ten volá metódu kontroly objektu, aby ho vytlačila spôsobom, ktorému rozumieme).

Z knihy C Programming Language for a Personal Computer autor Bochkov S. O.

Z knihy Linuxové programovanie s príkladmi autora Robbins Arnold

Kapitola 6 Vstup a výstup V tejto kapitole sa pozrieme na niektoré vstavané funkcie na zapisovanie údajov do súboru a čítanie údajov zo súboru. Takéto nástroje možno použiť aj na formátovanie programových dátových objektov s cieľom získať požadovanú formu ich vonkajšej reprezentácie.

Z knihy Základy programovania v jazyku Java autor Sukhov S. A.

Vstup a výstup Funkcie vstupu a výstupu v štandardnej knižnici C vám umožňujú čítať dáta zo súborov alebo ich prijímať zo vstupných zariadení (ako je klávesnica) a zapisovať dáta do súborov alebo ich odosielať do rôzne zariadenia(napríklad do tlačiarne).Vstupné/výstupné funkcie

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

4.4. Vstup a výstup Všetky I/O operácie Linuxu sa vykonávajú prostredníctvom deskriptorov súborov. Táto časť predstavuje deskriptory súborov, popisuje, ako ich získať a uvoľniť, a vysvetľuje, ako ich spustiť.

Z knihy Ideálny programátor. Ako sa stať profesionálom v oblasti vývoja softvéru autora Martin Róbert S.

Z knihy autora

Kapitola 12: I/O Takmer každá aplikácia vyžaduje čítanie alebo zápis súborov alebo vykonávanie iných I/O operácií. Qt poskytuje vynikajúcu I/O podporu pomocou QIODevice, výkonnej abstrakcie „zariadení“, ktoré dokážu čítať a zapisovať.

Z knihy autora

Vstup a výstup Tiež považujem za veľmi dôležité, aby moje výsledky boli poháňané vhodným „vstupom“. Písanie programový kód- tvorivá práca. Moja kreativita je zvyčajne najlepšia, keď stojím pred kreatívnou výzvou.

Úlohu, ktorá zadala požiadavku na I/O operáciu, umiestni supervízor do stavu čakania na dokončenie objednanej operácie. Keď supervízor dostane správu z dokončovacej sekcie, že operácia bola dokončená, uvedie úlohu do stavu pripravenosti a pokračuje vo svojej práci. Táto situácia zodpovedá synchrónnemu I/O. Synchrónne I/O je štandardom väčšiny operačných systémov. Na zvýšenie rýchlosti vykonávania aplikácií sa v prípade potreby navrhlo použiť asynchrónne I/O.

Najjednoduchšou verziou asynchrónneho výstupu je takzvaný bufferovaný výstup na externé zariadenie, pri ktorom sa dáta z aplikácie neprenášajú priamo do I/O zariadenia, ale do špeciálnej systémovej vyrovnávacej pamäte. V tomto prípade sa logicky výstupná operácia pre aplikáciu považuje za dokončenú okamžite a úloha nemusí čakať na dokončenie samotného procesu prenosu dát do zariadenia. Proces skutočný výstupÚdaje zo systémovej vyrovnávacej pamäte spracováva I/O supervízor. Prirodzene, špeciálny systémový proces na príkaz I/O supervízora je zodpovedný za pridelenie vyrovnávacej pamäte z oblasti systémovej pamäte. Takže v uvažovanom prípade bude výstup asynchrónny, ak po prvé I/O požiadavka indikovala potrebu ukladania údajov do vyrovnávacej pamäte a po druhé, ak I/O zariadenie umožňuje takéto asynchrónne operácie a je to zaznamenané v UCB. Môžete tiež organizovať asynchrónne zadávanie údajov. Na to je však potrebné nielen vyčleniť pamäťovú oblasť na dočasné uloženie údajov načítaných zo zariadenia a priradiť pridelenú vyrovnávaciu pamäť k úlohe, ktorá nariadila operáciu, ale aj rozdeliť požiadavku na I/O operácie na dve časti (na dve požiadavky). Prvá požiadavka špecifikuje operáciu na čítanie údajov, podobne ako pri synchrónnom I/O. Typ (kód) požiadavky je však odlišný a požiadavka špecifikuje aspoň jeden dodatočný parameter – názov (kód) systémového objektu, ktorý úloha dostane ako odpoveď na požiadavku a ktorý identifikuje pridelenú vyrovnávaciu pamäť. Po získaní názvu vyrovnávacej pamäte (tento systémový objekt budeme konvenčne nazývať týmto spôsobom, hoci rôzne operačné systémy používajú na označenie aj iné výrazy, napríklad trieda), úloha pokračuje vo svojej práci. Tu je veľmi dôležité zdôrazniť, že v dôsledku požiadavky na asynchrónny vstup údajov nie je úloha I/O supervízorom uvedená do stavu, aby čakala na dokončenie I/O operácie, ale zostáva v bežiacom, resp. stav pripravený na vykonanie. Po určitom čase, po vykonaní potrebného kódu, ktorý definoval programátor, úloha vydá druhú požiadavku na dokončenie I/O operácie. V tejto druhej požiadavke na to isté zariadenie, ktoré má, samozrejme, iný kód (alebo názov požiadavky), úloha špecifikuje názov systémového objektu (buffer pre asynchrónny vstup dát) a ak je operácia načítania dát úspešná, okamžite ho prijme zo systémovej vyrovnávacej pamäte. Ak ešte neboli dáta úplne prenesené z externého zariadenia do systémovej vyrovnávacej pamäte, I/O supervízor prepne úlohu do stavu čakania na dokončenie I/O operácie a potom už všetko pripomína bežný synchrónny vstup dát.

Asynchrónne I/O sa zvyčajne poskytujú vo väčšine operačných systémov s viacerými programami, najmä ak operačný systém podporuje multitasking pomocou mechanizmu vlákien. Ak však neexistuje žiadny explicitný asynchrónny vstup/výstup, môžete jeho nápady implementovať sami organizovaním nezávislého vlákna pre výstup údajov.

I/O hardvér možno považovať za kolekciu hardvérové ​​procesory, ktoré sú schopné pracovať paralelne voči sebe navzájom, ako aj voči centrálnemu procesoru (procesorom). Na takýchto „spracovateľoch“ tzv vonkajšie procesy. Napríklad pre externé zariadenie (vstupné/výstupné zariadenie) môže byť externý proces súborom operácií, ktoré preložia tlačovú hlavu, posunú papier o jednu pozíciu, zmenia farbu atramentu alebo vytlačia niektoré znaky. Externé procesy využívajúce vstupno/výstupný hardvér interagujú navzájom aj s bežnými „softvérovými“ procesmi bežiacimi na centrálnom procesore. Dôležitým faktom je, že rýchlosť vykonávania externých procesov sa bude výrazne (niekedy rádovo alebo aj viac) líšiť od rýchlosti vykonávania konvenčných („“ interné") procesy. Pre ich normálnu prevádzku musia byť externé a interné procesy synchronizované. Na vyhladenie efektu silného nesúladu rýchlosti medzi internými a externými procesmi sa používa vyššie uvedené ukladanie do vyrovnávacej pamäte. Môžeme teda hovoriť o systéme paralelne interagujúcich procesov (pozri kapitolu 6).

Nárazníky sú kritickým zdrojom vo vzťahu k interným (softvérovým) a externým procesom, ktoré počas svojho paralelného vývoja informačne interagujú. Prostredníctvom vyrovnávacej pamäte (bufferov) sa údaje buď odosielajú z nejakého procesu do adresovateľného externého (operácia výstupu údajov na externé zariadenie), alebo sa z externého procesu prenášajú do nejakého softvérového procesu (operácia čítania údajov). Zavedenie bufferingu ako prostriedku informačnej interakcie nastoľuje problém manažovania týchto systémových bufferov, ktorý je riešený pomocou dohľadovej časti OS. V tomto prípade má supervízor za úlohu nielen prideľovať a uvoľňovať vyrovnávacie pamäte v oblasti systémovej pamäte, ale aj synchronizovať procesy v súlade so stavom operácií na naplnenie alebo uvoľnenie vyrovnávacích pamätí, ako aj čakať na ne, ak nie sú voľné. dostupné vyrovnávacie pamäte a vstupná požiadavka/výstup vyžaduje ukladanie do vyrovnávacej pamäte. Typicky I/O supervízor používa štandardné synchronizačné nástroje prijaté v danom OS na riešenie uvedených úloh. Ak teda OS vyvinul nástroje na riešenie problémov paralelného vykonávania interagujúcich aplikácií a úloh, potom spravidla implementuje aj asynchrónny vstup/výstup.

synchrónny model vstup výstup. Systémové volania read(2) , write(2) a ich analógy vrátia riadenie až po prečítaní alebo zápise údajov. To často vedie k zablokovaniu vlákna.

Poznámka

V skutočnosti to nie je také jednoduché. read(2) musí čakať, kým sa dáta fyzicky načítajú zo zariadenia, ale write(2) štandardne funguje v režime s oneskoreným zápisom: vráti sa po prenose údajov do vyrovnávacej pamäte systému, ale vo všeobecnosti pred údaje sa fyzicky prenesú do zariadenia. To zvyčajne výrazne zlepšuje pozorovaný výkon programu a umožňuje použiť pamäť z údajov na iné účely ihneď po návrate write(2). Oneskorené nahrávanie má ale aj značné nevýhody. Hlavným je, že o výsledku fyzickej operácie sa dozviete nie okamžite podľa návratového kódu write(2) , ale až nejaký čas po návrate, zvyčajne návratovým kódom nasledujúceho volania write(2). Pre niektoré aplikácie – monitory transakcií, mnohé programy v reálnom čase atď. – je to neprijateľné a sú nútené vypnúť lenivé nahrávanie. Na to slúži príznak O_SYNC, ktorý je možné nastaviť pri otvorení a zmene súboru otvorený súbor volaním fcntl(2) .

Synchronizáciu jednotlivých zápisov je možné zabezpečiť volaním fsync(2) . Pre mnohé aplikácie zahŕňajúce viacero zariadení a/alebo sieťových pripojení synchrónny model nepohodlné. Práca v režime hlasovania tiež nie je vždy prijateľná. Faktom je, že select(3C) a poll(2) považujú deskriptor súboru za pripravený na čítanie až potom, čo sa dáta fyzicky objavia v jeho vyrovnávacej pamäti. Niektoré zariadenia však začnú odosielať údaje až po výslovnom vyzvaní.

Pri niektorých aplikáciách, najmä aplikáciách v reálnom čase, je tiež dôležité poznať presný moment, kedy začnú prichádzať dáta. Pre takéto aplikácie môže byť tiež neprijateľné, aby výber(3C) a poll(2) zvažovali bežné súbory vždy pripravený čítať a písať. naozaj, systém súborovčítať z disku a hoci funguje oveľa rýchlejšie ako väčšina ostatných sieťové pripojenia, ale stále je prístup k nemu spojený s určitými oneskoreniami. Pre tvrdé aplikácie v reálnom čase môžu byť tieto oneskorenia neprijateľné - ale bez explicitnej požiadavky na čítanie systém súborovúdaje nezverejňuje!

Pre tvrdé aplikácie v reálnom čase môže byť významný iný aspekt I/O problému. Faktom je, že tvrdé aplikácie RT majú vyššiu prioritu ako jadro, takže vykonávajú systémové volania - dokonca aj neblokujúce! - môže viesť k inverzia priority.

Riešenie týchto problémov je známe už dlho a nazýva sa asynchrónny vstup/výstup. V tomto režime I/O systémové volania vrátia riadenie ihneď po požiadavke ovládaču zariadenia, zvyčajne ešte pred skopírovaním údajov do systémovej vyrovnávacej pamäte. Vytvorenie požiadavky pozostáva z umiestnenia záznamu (IRP, Input/Output Request Packet, Input/Output request packet) do frontu. Aby ste to dosiahli, stačí nakrátko zachytiť mutex, ktorý chráni „chvost“ frontu, takže problém inverzie priority možno ľahko prekonať. Aby bolo možné zistiť, či sa hovor skončil a či sa skončil, ako presne a či je možné použiť pamäť, v ktorej boli dáta uložené, je k dispozícii špeciálne API (pozri obr. 8.1).


Ryža. 8.1.

Asynchrónny model bol hlavným I/O modelom v operačných systémoch ako DEC RT-11, DEC RSX-11, VAX/VMS, OpenVMS. Takmer každý podporuje tento model v tej či onej forme. OS v reálnom čase. Unixové systémy používali niekoľko nekompatibilných API pre asynchrónne I/O od konca osemdesiatych rokov. V roku 1993 ANSI/IEEE prijali POSIX 1003.1b, ktorý popisuje štandardizované API, ktoré preskúmame neskôr v tejto časti.

V Solaris 10 je asynchrónna I/O funkčnosť zahrnutá v knižnici libaio.so. Ak chcete vytvoriť programy, ktoré používajú tieto funkcie, musíte použiť prepínač -laio. Na generovanie požiadaviek na asynchrónne I/O sa používajú funkcie aio_read(3AIO), aio_write(3AIO) a lio_listio(3AIO).

Funkcie aio_read(3AIO) a aio_write(3AIO) majú jeden parameter, structaiocb *aiocbp. Štruktúra aiocb je definovaná v súbore< aio.h> a obsahuje nasledujúce polia:

  • int aio_fildes - deskriptor súboru
  • off_t aio_offset - offset v súbore, od ktorého sa začne zapisovať alebo čítať
  • volatile void* aio_buf - vyrovnávacia pamäť, do ktorej sa majú načítať dáta alebo do ktorej sa dáta zapisujú.
  • size_t aio_nbytes - veľkosť vyrovnávacej pamäte. Rovnako ako tradičné read(2) dokáže aio_read(3AIO) prečítať menej údajov, ako sa požadovalo, ale nikdy neprečíta viac.
  • int aio_reqprio - požiadať o prioritu
  • struct sigevent aio_sigevent - spôsob oznamovania, že požiadavka bola dokončená (diskutované neskôr v tejto časti)
  • int aio_lio_opcode - nepoužíva sa pre aio_read(3AIO) a aio_write(3AIO), používa sa iba funkciou lio_listio.

Funkcia lio_listio(3AIO) vám umožňuje generovať viacero I/O požiadaviek s jedným systémovým volaním. Táto funkcia má štyri parametre:

  • int režim - môže nadobúdať hodnoty LIO_WAIT (funkcia čaká na dokončenie všetkých požiadaviek) a LIO_NOWAIT (funkcia vráti riadenie ihneď po vygenerovaní všetkých požiadaviek).
  • struct aiocb *zoznam - zoznam ukazovateľov na štruktúry aiocb s popismi požiadaviek.

    Požiadavky možno čítať alebo zapisovať, čo je určené poľom aio_lio_opcode. Požiadavky na jeden deskriptor sa vykonávajú v poradí, v akom sú uvedené v poli zoznamu.

  • int nent - počet záznamov v poli zoznamu.
  • struct sigevent *sig - spôsob, ako oznámiť, že všetky požiadavky boli dokončené. Ak mode==LIO_WAIT, tento parameter sa ignoruje.

Knižnica POSIX AIO poskytuje dva spôsoby, ako oznámiť programu, že požiadavka bola dokončená, synchrónny a asynchrónny. Najprv sa pozrime na synchrónnu metódu. Funkcia aio_return(3AIO) vráti stav požiadavky. Ak je požiadavka už dokončená a úspešne dokončená, vráti veľkosť načítaných alebo zapísaných údajov v bajtoch. Rovnako ako tradičné read(2), aio_return(3AIO) vráti 0 bajtov v prípade konca súboru. Ak požiadavka zlyhala alebo ešte nebola dokončená, vráti sa -1 a nastaví sa errno. Ak požiadavka ešte nebola dokončená, kód chyby je EINPROGRESS.

Funkcia aio_return(3AIO) je deštruktívna; ak sa zavolá na dokončenú požiadavku, zničí systémový objekt, v ktorom sú uložené informácie o stave požiadavky. Volanie aio_return(3AIO) viackrát na rovnakú požiadavku preto nie je možné.

Funkcia aio_error(3AIO) vráti kód chyby spojený s požiadavkou. Ak sa požiadavka úspešne dokončí, vráti sa 0, ak sa vyskytne chyba - kód chyby, pre neúplné požiadavky - EINPROGRESS.

Funkcia aio_suspend(3AIO) blokuje vlákno, kým sa nedokončí jedna z jeho špecifikovaných asynchrónnych I/O požiadaviek alebo na určitý čas. Táto funkcia má tri parametre:

  • const struct aiocb *zoznam const- pole ukazovateľov na deskriptory dotazov.
  • int nent - počet prvkov v poli zoznamu.
  • const struct timespec *timeout- časový limit s presnosťou na nanosekundy (v skutočnosti s presnosťou na rozlíšenie systémový časovač).

Funkcia vráti 0, ak bola dokončená aspoň jedna z operácií uvedených v zozname. Ak funkcia zlyhá, vráti -1 a nastaví errno. Ak funkcia vypršala, vráti tiež -1 a errno==EINPROGRESS .

Príklad použitia asynchrónnych I/O s kontrolou stavu synchrónnej požiadavky je uvedený v príklade 8.3.

Const char req="GET / HTTP/1.0\r\n\r\n"; int main() ( int s; statická štruktúra aiocb readrq; statická štruktúra aiocb *readrqv=(&readrq, NULL); /* Otvorená 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 (size>0) (write(1, buf, size); aio_read(&readrq); ) else if (size==0) ( break; ) else if ( errno!=EINPROGRESS) ( perror("čítanie zo zásuvky"); ) ) ) 8.3. Asynchrónne I/O so synchrónnou kontrolou stavu požiadavky. Kód je skrátený, je z neho vylúčené otvorenie zásuvky a spracovanie chýb.

Asynchrónne oznámenie aplikácie o dokončení operácií pozostáva z generovanie signálu keď je operácia dokončená. Aby ste to dosiahli, musíte vykonať príslušné nastavenia v poli aio_sigevent deskriptora požiadavky. Pole aio_sigevent je typu struct sigevent . Táto štruktúra je definovaná v a obsahuje nasledujúce polia:

  • int sigev_notify - režim upozornenia. Platné hodnoty sú SIGEV_NONE (neodosielať potvrdenia), SIGEV_SIGNAL (vygenerovať signál po dokončení požiadavky) a SIGEV_THREAD (po dokončení požiadavky spustiť zadanú funkciu v samostatnom vlákne). Solaris 10 podporuje aj typ výstrahy SIGEV_PORT, o ktorom sa hovorí v prílohe k tejto kapitole.
  • int sigev_signo - číslo signálu, ktorý sa vygeneruje pri použití SIGEV_SIGNAL.
  • union sigval sigev_value - parameter, ktorý bude odovzdaný obsluhe signálu alebo funkcii spracovania. Pri použití pre asynchrónne I/O je to zvyčajne ukazovateľ na požiadavku.

    Pri použití SIGEV_PORT by to mala byť štruktúra ukazovateľa port_event_t obsahujúca číslo portu a prípadne ďalšie údaje.

  • void (*sigev_notify_function)(union sigval) je funkcia, ktorá sa zavolá pri použití SIGEV_THREAD.
  • pthread_attr_t *sigev_notify_attributes- atribúty vlákna, v ktorom sa spustí
  • sigev_notify_function pri použití SIGEV_THREAD .

Nie všetky implementácie libaio podporujú oznámenie SIGEV_THREAD. Niektoré systémy Unix namiesto toho používajú neštandardné upozornenie SIGEV_CALLBACK. Ďalej v tejto prednáške budeme diskutovať iba o signalizácii.

Niektoré aplikácie používajú ako číslo signálu SIGIO alebo SIGPOLL (v Unix SVR4 ide o rovnaký signál). Často sa používajú aj SIGUSR1 alebo SIGUSR2; Je to výhodné, pretože to zabezpečuje, že podobný signál nevznikne z iného dôvodu.

Aplikácie v reálnom čase tiež používajú čísla signálov od SIGRTMIN do SIGRTMAX. Niektoré implementácie prideľujú na tento účel špeciálne číslo signálu SIGAIO alebo SIGASYNCIO, ale v systéme Solaris 10 takýto signál neexistuje.

Samozrejme, pred vykonaním asynchrónnych požiadaviek oznámených signálom by ste mali nainštalovať obsluhu tohto signálu. Na notifikáciu musíte použiť signály spracované v režime SA_SIGINFO. Nie je možné nainštalovať takúto obsluhu pomocou systémových volaní signal(2) a sigset(2), musíte použiť sigaction(2) . Inštalácia ovládačov pomocou sigaction

I/O ovládanie.

blokovo orientované zariadenia a bajtovo orientovaný

Hlavná myšlienka

kľúč princíp je taký nezávislosť zariadenia

· Prerušiť manipuláciu,

· Ovládače zariadení,

Zdá sa jasné, že z rôznych dôvodov je možná široká škála prerušení. Preto je s prerušením spojené číslo – takzvané číslo prerušenia.

Toto číslo jednoznačne zodpovedá konkrétnej udalosti. Systém dokáže rozpoznať prerušenia a keď nastanú, spustí procedúru zodpovedajúcu číslu prerušenia.

Niektoré prerušenia (prvých päť v číselnom poradí) sú vyhradené na použitie centrálny procesor v prípade akýchkoľvek špeciálnych udalostí, ako je pokus o delenie nulou, pretečenie atď. (toto sú skutočné vnútorné prerušenia J).

Hardvérové ​​prerušenia sa vždy vyskytujú asynchrónne s ohľadom na spustené programy. Okrem toho môže nastať niekoľko prerušení súčasne!

Aby sa zabezpečilo, že systém nebude zmätený pri rozhodovaní o tom, ktoré prerušenie služby bude prvé, existuje špeciálna schéma priority. Každé prerušenie má priradenú vlastnú prioritu. Ak dôjde k viacerým prerušeniam súčasne, systém uprednostní to, ktoré má najvyššiu prioritu, pričom spracovanie zostávajúcich prerušení na chvíľu odloží.

Systém priority je implementovaný na dvoch čipoch Intel 8259 (alebo podobných). Každý čip je radičom prerušení a slúži až ôsmim prioritám. Čipy je možné kombinovať (kaskádovať), aby sa zvýšil počet úrovní priority v systéme.

Úrovne priority sú označené skratkou IRQ0 - IRQ15.


24. I/O ovládanie. Synchrónne a asynchrónne I/O.

Jednou z hlavných funkcií OS je správa všetkých vstupno/výstupných zariadení počítača. OS musí posielať príkazy zariadeniam, zachytávať prerušenia a spracovávať chyby; musí tiež poskytovať rozhranie medzi zariadeniami a zvyškom systému. Na účely vývoja by rozhranie malo byť rovnaké pre všetky typy zariadení (nezávislosť na zariadení). Viac informácií o IV kontrole, otázka 23.

Zásady ochrany

Keďže OS UNIX bol od samého začiatku koncipovaný ako operačný systém pre viacerých používateľov, problém autorizácie prístupu rôznych používateľov k súborom v súborovom systéme bol vždy aktuálny. Autorizáciou prístupu rozumieme systémové akcie, ktoré povoľujú alebo zakazujú prístup daný používateľ Komu tento súbor v závislosti od prístupových práv používateľa a obmedzení prístupu nastavených pre súbor. Schéma autorizácie prístupu používaná v OS UNIX je taká jednoduchá a pohodlná a zároveň taká výkonná, že sa stala de facto štandardom moderných operačných systémov (ktoré sa nevydávajú za systémy s viacúrovňovým zabezpečením).

Ochrana súborov

Ako je vo viacužívateľskom operačnom systéme zvykom, UNIX zachováva jednotný mechanizmus riadenia prístupu k súborom a adresárom súborového systému. Akýkoľvek proces môže pristupovať k súboru vtedy a len vtedy, ak prístupové práva špecifikované pre súbor zodpovedajú schopnostiam procesu.

Ochrana súborov pred neoprávneným prístupom v systéme UNIX je založená na troch faktoch. Po prvé, každý proces, ktorý vytvára súbor (alebo adresár), je spojený s nejakým identifikátorom používateľa jedinečným v systéme (UID - Identifikátor používateľa), ktorý možno ďalej interpretovať ako identifikátor vlastníka novovytvoreného súboru. Po druhé, každý proces, ktorý sa pokúša získať nejaký prístup k súboru, má priradený pár identifikátorov – identifikátor aktuálneho používateľa a skupiny. Po tretie, každý súbor je jedinečne spojený s jeho deskriptorom - i-uzlom.

Posledná skutočnosť stojí za to podrobnejšie sa zaoberať. Je dôležité pochopiť, že názvy súborov a súbory ako také nie sú to isté. Najmä ak existuje viacero pevných odkazov na rovnaký súbor, viaceré názvy súborov v skutočnosti predstavujú rovnaký súbor a sú spojené s rovnakým i-uzlom. Akýkoľvek i-uzol použitý v súborovom systéme vždy jednoznačne zodpovedá jednému a iba jednému súboru. I-uzol obsahuje množstvo rôznych informácií (väčšina z nich je používateľom dostupná prostredníctvom systémových volaní stat a fstat) a medzi týmito informáciami je časť, ktorá umožňuje súborovému systému vyhodnotiť právo daného procesu na prístup k daný súbor v požadovanom režime.

Všeobecné zásady ochrany sú rovnaké pre všetky existujúce verzie systému: Informácie o i-uzle zahŕňajú UID a GID aktuálneho vlastníka súboru (hneď po vytvorení súboru sú identifikátory jeho aktuálneho vlastníka nastavené na zodpovedajúci platný identifikátor procesu tvorcu, ale môže byť neskôr zmenený systémovými volaniami chown a chgrp). Okrem toho i-uzol súboru ukladá škálu, ktorá označuje, čo môže používateľ – jeho vlastník – so súborom robiť, čo môžu so súborom robiť používatelia patriaci do rovnakej skupiny používateľov ako vlastník a čo môžu robiť iní. so súborom. Malé detaily implementácie v rôzne možnosti systémy sa líšia.

28. Riadenie prístupu k súborom vo Windows NT. Zoznamy prístupových práv.

Systém riadenia prístupu vo Windows NT sa vyznačuje vysokou mierou flexibility, ktorá sa dosahuje vďaka širokej škále prístupových subjektov a objektov, ako aj granularite prístupových operácií.

Kontrola prístupu k súborom

Pre zdieľané prostriedky v systéme Windows NT sa používa spoločný objektový model, ktorý obsahuje také bezpečnostné charakteristiky, ako sú množina povolených operácií, identifikátor vlastníka a zoznam riadenia prístupu.

Objekty vo Windows NT sa vytvárajú pre akékoľvek prostriedky, keď sú zdieľané alebo sa stanú zdieľanými – súbory, adresáre, zariadenia, časti pamäte, procesy. Charakteristiky objektov vo Windows NT sú rozdelené na dve časti – všeobecnú časť, ktorej zloženie nezávisí od typu objektu, a individuálnu časť, určenú typom objektu.
Všetky objekty sú uložené v stromových štruktúrach hierarchické štruktúry, ktorého prvkami sú objekty vetvy (adresáre) a objekty listov (súbory). Pre objekty súborového systému je táto schéma vzťahov priamym odrazom hierarchie adresárov a súborov. Pre objekty iných typov má hierarchický diagram vzťahov svoj vlastný obsah, napríklad pre procesy odráža vzťahy rodič-dieťa a pre zariadenia odzrkadľuje príslušnosť k určitému typu zariadenia a prepojenie zariadenia s inými zariadeniami, napr. napríklad radič SCSI s diskami.

Kontrola prístupových práv pre objekty akéhokoľvek typu sa vykonáva centrálne pomocou Security Reference Monitor spusteného v privilegovanom režime.

Pre systém Zabezpečenie systému Windows NT sa vyznačuje prítomnosťou veľkého počtu rôznych preddefinovaných (zabudovaných) prístupových subjektov – individuálnych používateľov aj skupín. Systém má teda vždy takých používateľov, ako je správca, systém a hosť, ako aj skupiny používateľov, správcovia, prevádzkovatelia účtov, prevádzkovatelia serverov, všetci a ďalší. Zmyslom týchto vstavaných používateľov a skupín je, že sú obdarení určitými právami, čo správcovi uľahčuje vytvorenie efektívneho systému kontroly prístupu. Pri pridávaní nového používateľa môže administrátor iba rozhodnúť, do ktorej skupiny alebo skupín tohto používateľa priradí. Samozrejme, správca môže vytvárať nové skupiny, ako aj pridávať práva do vstavaných skupín na implementáciu vlastnej bezpečnostnej politiky, ale v mnohých prípadoch sú vstavané skupiny úplne postačujúce.

Windows NT podporuje tri triedy prístupových operácií, ktoré sa líšia typom subjektov a objektov zapojených do týchto operácií.

□ Oprávnenia sú množinou operácií, ktoré možno definovať pre subjekty všetkých typov vo vzťahu k objektom akéhokoľvek typu: súbory, adresáre, tlačiarne, pamäťové sekcie atď. Oprávnenia svojím účelom zodpovedajú prístupovým právam k súborom a adresárom v systéme QC UNIX .

□ Práva (používateľské práva) - sú definované pre subjekty typu skupiny na vykonávanie určitých systémových operácií: nastavenie systémového času, archivácia súborov, vypnutie počítača atď. Tieto operácie zahŕňajú špeciálny prístupový objekt - operačný systém ako celok .

Sú to predovšetkým práva, nie povolenia, ktoré odlišujú jednu vstavanú skupinu používateľov od druhej. Niektoré práva pre vstavanú skupinu sú tiež vstavané - nemožno ich z tejto skupiny odstrániť. Ostatné práva vstavanej skupiny je možné vymazať (alebo pridať zo všeobecného zoznamu práv).

□ Používateľské schopnosti sú určené pre jednotlivých používateľov na vykonávanie akcií súvisiacich s tvorbou ich operačného prostredia, napríklad zmena zloženia hlavnej ponuky programu, možnosť používať položku ponuky Spustiť atď. Znížením množiny možností ( ktoré sú používateľovi štandardne dostupné), môže správca prinútiť používateľa pracovať s operačným prostredím, ktoré správca považuje za najvhodnejšie a chráni používateľa pred prípadnými chybami.

Práva a povolenia udelené skupine sú automaticky udelené jej členom, čo umožňuje správcovi zaobchádzať s veľkým počtom používateľov ako s jednotkou účtovných informácií a minimalizovať ich činnosti.

Keď sa používateľ prihlási do systému, vytvorí sa mu takzvaný prístupový token, ktorý obsahuje ID používateľa a ID všetkých skupín, do ktorých používateľ patrí. Token tiež obsahuje: predvolený zoznam riadenia prístupu (ACL), ktorý pozostáva z povolení a vzťahuje sa na objekty vytvorené procesom; zoznam používateľských práv na vykonávanie systémových akcií.

Všetky objekty, vrátane súborov, vlákien, udalostí, dokonca aj prístupových tokenov, sú pri vytváraní vybavené popisovačom zabezpečenia. Popisovač zabezpečenia obsahuje zoznam riadenia prístupu - ACL.

Deskriptor súboru- nezáporné celé číslo priradené OS k súboru otvorenému procesom.

ACL(Angličtina) Zoznam riadenia prístupu- zoznam kontroly prístupu, v angličtine vyslovované ako „ekl“) – určuje, kto alebo čo môže pristupovať ku konkrétnemu objektu a aké operácie má tento subjekt na objekte povolené alebo zakázané.

Zoznamy kontroly prístupu sú základom systémov selektívnej kontroly prístupu. ( Wiki)

Vlastník objektu, zvyčajne užívateľ, ktorý ho vytvoril, má selektívnu kontrolu nad prístupom k objektu a môže zmeniť ACL objektu tak, aby umožnil alebo zabránil ostatným v prístupe k objektu. Vstavaný správca systému Windows NT, na rozdiel od superužívateľa UNIX, nemusí mať nejaké povolenia na prístup k objektu. Na implementáciu tejto funkcie môžu byť ID administrátorov a skupín administrátorov zahrnuté do ACL, rovnako ako bežné ID užívateľov. Správca má však stále možnosť vykonávať akékoľvek operácie s akýmikoľvek objektmi, pretože sa môže kedykoľvek stať vlastníkom objektu a potom ako vlastník získať celý súbor povolení. Správca však nemôže vrátiť vlastníctvo predchádzajúcemu vlastníkovi objektu, takže používateľ môže kedykoľvek zistiť, že správca pracoval s jeho súborom alebo tlačiarňou.

Keď proces požaduje operáciu na prístup k objektu vo Windows NT, riadenie vždy prechádza na bezpečnostný monitor, ktorý porovnáva identifikátory užívateľa a skupiny užívateľov z prístupového tokenu s identifikátormi uloženými v prvkoch ACL objektu. Na rozdiel od UNIXu môžu prvky Windows NT ACL obsahovať zoznamy povolených aj zoznamy operácií zakázaných pre používateľa.

Windows NT jasne definuje pravidlá, podľa ktorých sa ACL priraďuje k novovytvorenému objektu. Ak volací kód pri vytváraní objektu explicitne špecifikuje všetky prístupové práva k novovytvorenému objektu, potom bezpečnostný systém pridelí tento ACL objektu.

Ak volací kód nedodá objektu ACL a objekt má názov, potom platí princíp dedenia povolení. Bezpečnostný systém sa pozrie na ACL adresára objektov, v ktorom je uložený názov nového objektu. Niektoré položky ACL adresára objektov môžu byť označené ako dedičné. To znamená, že môžu byť priradené k novým objektom vytvoreným v tomto adresári.

V prípade, že proces explicitne nešpecifikoval ACL pre vytváraný objekt a objekt adresára nemá dedičné položky ACL, použije sa predvolený ACL z prístupového tokenu procesu.


29. Programovací jazyk Java. Java Virtual Machine. technológia Java.

Java je objektovo orientovaný programovací jazyk vyvinutý spoločnosťou Sun Microsystems. Aplikácie Java sú zvyčajne kompilované do vlastného bajtového kódu, takže môžu bežať na akomkoľvek virtuálnom stroji Java (JVM) bez ohľadu na architektúru počítača. Java programy sú preložené do bajtkódu, ktorý sa spustí virtuálny prístroj Java ( JVM) - program, ktorý spracováva bajtový kód a prenáša pokyny do zariadenia ako interpret, ale s tým rozdielom, že bajtový kód sa na rozdiel od textu spracováva oveľa rýchlejšie.

Výhodou tohto spôsobu vykonávania programov je úplná nezávislosť bajtkódu od operačný systém a hardvér, čo vám umožňuje spúšťať aplikácie Java na akomkoľvek zariadení, pre ktoré existuje zodpovedajúci virtuálny stroj. Ďalšou dôležitou vlastnosťou technológie Java je jej flexibilný bezpečnostný systém vďaka tomu, že vykonávanie programu je plne riadené virtuálnym strojom. Akákoľvek operácia, ktorá prekročí stanovené oprávnenia programu (napríklad pokus o neoprávnený prístup k údajom alebo pripojenie k inému počítaču), spôsobí okamžité prerušenie.

Medzi nevýhody konceptu virtuálneho stroja často patrí skutočnosť, že vykonávanie bajtkódu virtuálnym strojom môže znížiť výkon programov a algoritmov implementovaných v jazyku Java.

Java Virtual Machine(skrátene Java VM, JVM) - virtuálny stroj Java je hlavnou súčasťou runtime systému Java, takzvaného Java Runtime Environment (JRE). Java Virtual Machine interpretuje a spúšťa bajtový kód Java vopred vygenerovaný zo zdrojového kódu programu Java kompilátorom Java (javac). JVM možno použiť aj na spúšťanie programov napísaných v iných programovacích jazykoch. Napríklad zdrojový kód Ada možno skompilovať do bajtkódu Java, ktorý potom môže JVM spustiť.

JVM je kľúčovým komponentom platformy Java. Keďže virtuálne stroje Java sú dostupné pre veľa hardvéru a softvérové ​​platformy, Java môže byť považovaná za middleware aj ako platformu sama o sebe, preto platí zásada „zapíš raz, spusti kdekoľvek“. Použitie jedného bajtového kódu na viacerých platformách umožňuje Javu opísať ako „raz skompilovať, spustiť kdekoľvek“.

Runtime prostredie

Programy určené na spustenie na JVM musia byť skompilované v štandardizovanom prenosnom binárnom formáte, ktorý je zvyčajne reprezentovaný ako súbory .class. Program môže pozostávať z mnohých tried umiestnených v rôznych súboroch. Na uľahčenie hosťovania veľkých programov je možné niektoré súbory .class zbaliť do takzvaného súboru .jar (skratka pre Java Archive).

JVM spúšťa súbory .class alebo .jar emuláciou inštrukcií napísaných pre JVM interpretáciou alebo použitím kompilátora just-in-time (JIT), akým je napríklad HotSpot od Sun microsystems. V súčasnosti sa kompilácia JIT používa vo väčšine JVM na dosiahnutie vyššej rýchlosti.

Ako väčšina virtuálnych strojov, aj Java Virtual Machine má architektúru orientovanú na zásobník podobnú mikrokontrolérom a mikroprocesorom.

JVM, ktorý je inštanciou prostredia JRE (Java Runtime Environment), vstupuje do hry pri spúšťaní programov Java. Po dokončení vykonávania túto inštanciu vymaže zberač odpadu. JIT je časť Java Virtual Machine, ktorá sa používa na zrýchlenie času vykonávania aplikácií. JIT súčasne kompiluje časti bajtkódu, ktoré majú podobnú funkčnosť, a preto znižuje množstvo času potrebného na kompiláciu.

j2se (štandardné vydanie Java 2) – štandardná knižnica obsahuje:

GUI, NET, databáza...


30. Platforma .NET. Hlavné myšlienky a ustanovenia. .NET programovacie jazyky.

.Internetová sieť - softvérová technológia od spoločnosti Microsoft, určený na vytváranie bežných programov a webových aplikácií.

Jednou z hlavných myšlienok Microsoft .NET je interoperabilita rôznych služieb napísaných v rôznych jazykoch. Napríklad služba napísaná v C++ pre Microsoft .NET môže volať metódu triedy z knižnice napísanej v Delphi; v C# môžete napísať triedu zdedenú z triedy napísanej v Visual Basic.NET a výnimku vyvolanú metódou napísanou v C# možno zachytiť a spracovať v Delphi. Každá knižnica (zostava) v .NET má informácie o svojej verzii, čo umožňuje eliminovať prípadné konflikty medzi rôzne verzie zhromaždenia.

Aplikácie je možné vyvíjať aj v textovom editore a používať konzolový kompilátor.

Podobne ako technológia Java, aj vývojové prostredie .NET vytvára bajtový kód na spustenie virtuálnym strojom. Vstupný jazyk tohto stroja v .NET sa nazýva MSIL (Microsoft Intermediate Language) alebo CIL (Common Intermediate Language, novšia verzia), alebo jednoducho IL.

Použitie bajtkódu vám umožňuje dosiahnuť funkčnosť naprieč platformami na úrovni skompilovaného projektu (v podmienkach .NET: zhromaždenie), a to nielen na úrovni zdrojového textu, ako napríklad v C. Pred spustením zostavy v CLR runtime je bajtkód konvertovaný kompilátorom JIT zabudovaným do prostredia (just in time, on-the-fly kompilácia) do strojových kódov cieľového procesora. Zostavenie je tiež možné skompilovať do natívneho kódu pre zvolenú platformu pomocou utility NGen.exe dodávanej s .NET Framework.

Počas procesu prekladu je zdrojový kód programu (napísaný v SML, C#, Visual Basic, C++ alebo akomkoľvek inom programovacom jazyku, ktorý podporuje .NET) kompilátorom skonvertovaný na tzv. assembler a uložený ako dynamicky súbor prepojenej knižnice (Dynamically Linked).Knižnica, DLL) príp spustiteľný súbor(Spustiteľný súbor, EXE).

Prirodzene, pre každý kompilátor (či už je to kompilátor jazyka C#, csc.exe alebo Visual Basic, vbc.exe) vykoná runtime prostredie potrebné mapovanie použitých typov na typy CTS a programový kód do kódu „ abstraktný stroj” .NET - MSIL (Microsoft Intermediate Language).

Nakoniec softvérový projekt je tvorený vo forme zostavy - sebestačnej zložky pre nasadenie, replikáciu a opätovné použitie. Zostava je identifikovaná digitálny podpis autora a jedinečné číslo verzie.

Vstavané programovacie jazyky ​​(súčasť .NET Framework):

C#; J#; VB.NET; JScript .NET; C++/CLI - novú verziu C++ (spravované).


31. Funkčné komponenty OS. Správa súborov

Funkčné komponenty OS:

Funkcie operačného systému samostatného počítača sú zvyčajne zoskupené buď podľa typov miestnych zdrojov, ktoré operačný systém spravuje, alebo podľa špecifických úloh, ktoré sa vzťahujú na všetky zdroje. Niekedy sa takéto skupiny funkcií nazývajú podsystémy. Najdôležitejšie podsystémy správy prostriedkov sú podsystémy správy procesov, pamäte, súborov a externých zariadení a podsystémy spoločné pre všetky prostriedky sú podsystémy používateľské rozhranie, ochrana a správa údajov.

Správa súborov:

Schopnosť operačného systému „chrániť“ zložitosť skutočného hardvéru sa veľmi jasne prejavuje v jednom z hlavných podsystémov OS - súborovom systéme.

Súborový systém spája pamäťové médiá na jednej strane a API (aplikačné programovacie rozhranie) na prístup k súborom na druhej strane. Keď aplikačný program pristupuje k súboru, netuší, ako sa informácie v konkrétnom súbore nachádzajú, ani na akom type fyzického média (CD, pevný disk, magnetická páska alebo pamäťová jednotka flash) sú zaznamenané. Všetko, čo program pozná, je názov súboru, jeho veľkosť a atribúty. Tieto údaje prijíma z ovládača súborového systému. Je to súborový systém, ktorý určuje, kde a ako bude súbor zapísaný na fyzické médium (napríklad pevný disk).

Z pohľadu operačného systému je celý disk kolekciou klastrov s veľkosťou od 512 bajtov a viac. Ovládače súborového systému organizujú klastre do súborov a adresárov (čo sú vlastne súbory obsahujúce zoznam súborov v danom adresári). Tie isté ovládače sledujú, ktoré klastre sa práve používajú, ktoré sú voľné a ktoré sú označené ako chybné.

Súborový systém však nie je nevyhnutne priamo spojený s fyzickým pamäťovým médiom. Existujú virtuálne súborové systémy, ako aj sieťové súborové systémy, ktoré sú len spôsobom prístupu k súborom umiestneným na vzdialenom počítači.

V najjednoduchšom prípade sú všetky súbory na danom disku uložené v jednom adresári. Táto jednoúrovňová schéma bola použitá v CP/M a prvej verzii MS-DOS 1.0. Hierarchický súborový systém s vnorenými adresármi sa prvýkrát objavil v Multics, potom v UNIXe.

Katalógy pre rôzne pohony môže vytvoriť niekoľko samostatných stromov, ako v DOS/Windows, alebo sa zlúčiť do jedného stromu spoločného pre všetky disky, ako napr Systémy podobné UNIXu Oh.

V skutočnosti v systémoch DOS/Windows, ako aj v systémoch podobných UNIX, existuje jeden koreňový adresár s podadresármi s názvom „c:“, „d:“ atď. V týchto adresároch sú pripojené oddiely pevného disku. To znamená, že c:\ je len odkaz na file:///c:/. Na rozdiel od súborových systémov podobných UNIXu je však v systéme Windows zapisovanie do koreňového adresára zakázané, rovnako ako prezeranie jeho obsahu.

V systéme UNIX existuje iba jeden koreňový adresár a všetky ostatné súbory a adresáre sú vnorené pod ním. Ak chcete získať prístup k súborom a adresárom na disku, musíte disk pripojiť pomocou príkazu mount. Ak chcete napríklad otvoriť súbory na disku CD, musíte jednoducho povedať operačnému systému: „vezmite systém súborov na tomto disku CD a ukážte ho v adresári /mnt/cdrom. Všetky súbory a adresáre umiestnené na CD sa objavia v tomto adresári /mnt/cdrom, ktorý sa nazýva bod pripojenia. Na väčšine systémov podobných UNIX vymeniteľné disky(diskety a CD), flash disky a iné externé úložné zariadenia sú pripojené v adresári /mnt, /mount alebo /media. Operačné systémy Unix a UNIXu tiež umožňujú automatické pripojenie diskov pri zavádzaní operačného systému.

Všimnite si prosím použitie lomítok v súbore systémy Windows, UNIX a operačné systémy podobné UNIX (vo Windows sa používa spätná lomka „\“ a v operačných systémoch UNIX a UNIX-u sa používa jednoduchá lomka „/“)

Okrem toho je potrebné poznamenať, že vyššie uvedený systém umožňuje pripojiť nielen súborové systémy fyzických zariadení, ale aj jednotlivé adresáre (parameter --bind) alebo napr. ISO obraz(možnosť slučky). Doplnky ako FUSE tiež umožňujú pripojiť napríklad celý adresár na FTP a veľmi veľké množstvo rôznych zdrojov.

V NTFS a HFS sa používa ešte zložitejšia štruktúra. V týchto súborové systémy každý súbor je súbor atribútov. Medzi atribúty patrí nielen tradičný systém len na čítanie, ale aj názov súboru, veľkosť a dokonca aj obsah. Takže pre NTFS a HFS je to, čo je uložené v súbore, len jedným z jeho atribútov.

Podľa tejto logiky môže jeden súbor obsahovať niekoľko variácií obsahu. V jednom súbore tak môže byť uložených niekoľko verzií toho istého dokumentu, ako aj ďalšie údaje (ikona súboru, program priradený k súboru). Táto organizácia je typická pre HFS na počítačoch Macintosh.


32. Funkčné komponenty OS. Riadenie procesov.

Riadenie procesov:

Najdôležitejšou časťou operačného systému, ktorá priamo ovplyvňuje fungovanie počítača, je podsystém riadenia procesov. Proces (alebo inými slovami úloha) je abstrakcia, ktorá popisuje bežiaci program. Pre operačný systém je proces jednotkou práce, požiadavkou na spotrebu systémových prostriedkov.

V multitaskingovom (viacprocesovom) systéme môže byť proces v jednom z troch hlavných stavov:

RUNNING - aktívny stav procesu, počas ktorého má proces všetky potrebné zdroje a je priamo vykonávaný procesorom;

WAITING - pasívny stav procesu, proces je zablokovaný, nemôže byť vykonaný z vlastných vnútorných dôvodov, čaká na výskyt nejakej udalosti, napríklad na dokončenie I/O operácie, prijatie správy od iného proces alebo uvoľnenie nejakého zdroja, ktorý potrebuje;

READY je tiež pasívny stav procesu, ale v tomto prípade je proces zablokovaný v dôsledku vonkajších okolností: proces má všetky potrebné zdroje, je pripravený na vykonanie, ale procesor je zaneprázdnený vykonávaním iného procesu.

Počas životný cyklus každý proces sa pohybuje z jedného stavu do druhého v súlade s algoritmom plánovania procesov implementovaným v danom operačnom systéme.

CP/M štandard

Tvorba operačných systémov pre mikropočítače sa začala OS SR/M. Bol vyvinutý v roku 1974, potom bol nainštalovaný na mnohých 8-bitových strojoch. V rámci tohto operačného systému vzniklo značné množstvo softvéru vrátane prekladačov z BASIC, Pascal, C, Fortran, Cobol, Lisp, Ada a mnohých ďalších, textových jazykov. Umožňujú pripravovať dokumenty oveľa rýchlejšie a pohodlnejšie ako pomocou písacieho stroja.

štandard MSX

Tento štandard určoval nielen OS, ale aj vlastnosti hardvéru pre školské počítače. Podľa normy MSX auto muselo mať RAM hlasitosť minimálne 16 K, trvalá pamäť 32 K so zabudovaným tlmočníkom jazyka BASIC, farebný grafický displej s rozlíšením 256 x 192 pixelov a 16 farbami, trojkanálový 8-oktávový generátor zvuku, paralelný port na pripojenie tlačiarne a ovládača na ovládanie externe pripojeného externého disku .

Operačný systém takéhoto stroja musel mať tieto vlastnosti: požadovaná pamäť - nie viac ako 16 K, kompatibilita s CP/M na úrovni systémových volaní, kompatibilita s DOS vo formátoch súborov na externé disky na báze diskiet magnetických diskov, podpora prekladačov jazykov BASIC, C, Fortran a Lisp.

Pi - systém

Počas počiatočného obdobia vývoja osobné počítače Bol vytvorený operačný systém USD p-system. Základom tohto systému bol takzvaný P-machine – program emulujúci hypotetický univerzál počítač. P-stroj simuluje činnosť procesora, pamäte a externých zariadení vykonávaním špeciálnych inštrukcií nazývaných P-kód. Softvérové ​​komponenty Pi systémy (vrátane kompilátorov) sú kompilované v P kóde, aplikačné programy sú tiež kompilované do P kódu. Teda hlavné charakteristický znak Systém mal minimálnu závislosť od vlastností PC výbavy. To zabezpečilo prenosnosť systému Pi Rôzne druhy autá Kompaktnosť P-kódu a vhodne implementovaný mechanizmus stránkovania umožnili spúšťať relatívne veľké programy na PC s malou RAM.

I/O ovládanie.

I/O zariadenia sú rozdelené do dvoch typov: blokovo orientované zariadenia a bajtovo orientovaný zariadení. Blokovo orientované zariadenia ukladajú informácie do blokov pevnej veľkosti, z ktorých každý má svoju vlastnú adresu. Najbežnejším blokovo orientovaným zariadením je disk. Zariadenia orientované na bajty nie sú adresovateľné a neumožňujú operácie vyhľadávania, generujú alebo spotrebúvajú sekvenciu bajtov. Príkladmi sú terminály, riadkové tlačiarne, sieťové adaptéry. Elektronický komponent sa nazýva ovládač zariadenia alebo adaptér. Operačný systém sa zaoberá ovládačom. Regulátor vykonáva jednoduché funkcie, monitoruje a opravuje chyby. Každý radič má niekoľko registrov, ktoré slúžia na komunikáciu s centrálnym procesorom. OS vykonáva I/O zápisom príkazov do registrov radiča. Disketový radič IBM PC akceptuje 15 príkazov ako READ, WRITE, SEEK, FORMAT atď. Keď je príkaz prijatý, procesor opustí radič a vykoná inú prácu. Po dokončení príkazu radič vydá prerušenie na prenos kontroly nad procesorom na operačný systém, ktorý musí skontrolovať výsledky operácie. Procesor získava výsledky a stav zariadenia čítaním informácií z registrov regulátora.

Hlavná myšlienka organizácia I/O softvéru spočíva v jeho rozdelení do niekoľkých úrovní, pričom spodné úrovne zabezpečujú tienenie prvkov výbavy od horných a tie poskytujú užívateľsky prívetivé rozhranie pre používateľov.

kľúč princíp je taký nezávislosť zariadenia. Typ programu by nemal závisieť od toho, či načítava dáta z diskety alebo z diskety pevný disk. Ďalšou dôležitou otázkou pre softvér I/O je spracovanie chýb. Vo všeobecnosti by sa chyby mali riešiť čo najbližšie k hardvéru. Ak riadiaca jednotka zistí chybu čítania, musí sa ju pokúsiť opraviť. Ak zlyhá, ovládač zariadenia musí opraviť chyby. A až keď si spodná úroveň nevie poradiť s chybou, nahlási chybu vyššej úrovni.

Ďalšou kľúčovou otázkou je použitie blokujúcich (synchrónnych) a neblokujúcich (asynchrónnych) prenosov. Väčšina fyzických I/O operácií sa vykonáva asynchrónne – procesor spustí prenos a prejde na inú prácu, kým nedôjde k prerušeniu. Je potrebné, aby I/O operácie boli blokované - po príkaze READ sa program automaticky pozastaví, kým sa dáta nedostanú do vyrovnávacej pamäte programu.

Posledným problémom je, že niektoré zariadenia sú zdieľané (disky: nie je problém pristupovať na disk viac používateľov súčasne), zatiaľ čo iné sú vyhradené (tlačiarne: riadky vytlačené rôznymi používateľmi nemožno miešať).

Na vyriešenie týchto problémov je vhodné rozdeliť I/O softvér do štyroch vrstiev (obrázok 2.30):

· Prerušiť manipuláciu,

· Ovládače zariadení,

· Vrstva operačného systému nezávislá od zariadenia,

· Vlastná softvérová vrstva.

Koncept hardvérového prerušenia a jeho spracovanie.

Asynchrónne alebo externé (hardvérové) prerušenia sú udalosti, ktoré pochádzajú z externých zdrojov (napr. periférne zariadenia) a môže sa vyskytnúť v ľubovoľnom okamihu: signál z časovača, internetová karta alebo disková jednotka, stláčanie kláves na klávesnici, pohyb myši; Vyžadujú okamžitú reakciu (spracovanie).

Takmer všetky vstupno-výstupné systémy v počítači fungujú pomocou prerušení. Konkrétne, keď stlačíte klávesy alebo kliknete myšou, hardvér generuje prerušenia. V reakcii na ne systém podľa toho prečíta kód stlačeného klávesu alebo si pamätá súradnice kurzora myši. Prerušenia generuje radič disku, adaptér lokálna sieť, sériové porty, audio adaptér a ďalšie zariadenia.