Asinhroni vnos datoteke izhod c. Izrazi: Vhodno-izhodni podatki sinhroni in asinhroni. Primer: uporaba časovnika čakanja

Programerju aplikacij ni treba razmišljati o stvareh, na primer o tem, kako sistemski programi delujejo z registri naprav. Sistem pred aplikacijami skrije podrobnosti dela na nizki ravni z napravami. Razlika med organiziranjem V/I s pozivanjem in prekinitvami pa se odraža tudi na ravni sistemskih funkcij, v obliki funkcij za sinhroni in asinhroni V/I.

Izvedite funkcijo sinhroni V/I vključuje zagon V/I operacije in čakanje, da se ta operacija zaključi. Šele ko je I/O končan, funkcija vrne nadzor klicnemu programu.

Sinhroni V/I je programerjem najbolj poznan način dela z napravami. Standardne vhodno/izhodne rutine programskega jezika delujejo na ta način.

Klicanje funkcije asinhroni V/I pomeni samo začetek ustrezne operacije. Po tem funkcija takoj vrne nadzor klicnemu programu, ne da bi čakala na dokončanje operacije.

Razmislite na primer o asinhronem vnosu podatkov. Jasno je, da program ne more dostopati do podatkov, dokler ni prepričan, da je njihov vnos končan. Vendar je povsem možno, da lahko program za zdaj opravlja drugo delo, namesto da miruje in čaka.

Prej ali slej mora program vseeno začeti delati z vnesenimi podatki, vendar se najprej prepričajte, da je asinhrona operacija že končana. V ta namen različni operacijski sistemi ponujajo orodja, ki jih lahko razdelimo v tri skupine.

· Čakanje na dokončanje operacije. To je kot "druga polovica sinhronega delovanja." Program je najprej zagnal operacijo, nato izvedel nekaj tujih dejanj in zdaj čaka na dokončanje operacije, kot pri sinhronem vhodu/izhodu.

· Preverjanje zaključka operacije. V tem primeru program ne čaka, ampak samo preveri stanje asinhrone operacije. Če vnos/izhod še ni končan, ima program možnost nekaj časa hoditi.

· Dodelitev postopka dokončanja. V tem primeru uporabniški program ob zagonu asinhrone operacije sistemu nakaže naslov uporabniške procedure ali funkcije, ki naj jo sistem pokliče po zaključku operacije. Programa samega morda ne bo več zanimal potek vnosa/izpisa, sistem ga bo na to ob pravem času opozoril s klicem določeno funkcijo. Ta metoda je najbolj prilagodljiva, saj lahko uporabnik zagotovi poljubna dejanja v postopku dokončanja.

V aplikaciji Windows so na voljo vsi trije načini za dokončanje asinhronih operacij. UNIX nima asinhronih V/I funkcij, vendar je mogoče enak asinhroni učinek doseči drugače, z izvajanjem dodatnega procesa.

Asinhroni V/I lahko v nekaterih primerih izboljša zmogljivost in zagotovi dodatne funkcionalnost. Brez takega najpreprostejša oblika asinhroni vnos, kot je "vnos s tipkovnico brez čakanja", številni računalniške igre in simulatorji. Hkrati je logika programa, ki uporablja asinhrone operacije, bolj zapletena kot pri sinhronih operacijah.

Kakšna je zgoraj omenjena povezava med sinhronimi/asinhronimi operacijami in metodami organiziranja vhoda/izhoda, obravnavanimi v prejšnjem odstavku? Na to vprašanje si odgovorite sami.

Asinhroni V/I z uporabo več niti

Prekrivajoči se in razširjeni V/I omogočajo, da se V/I izvaja asinhrono znotraj ene niti, čeprav OS ustvari lastne niti za podporo te funkcije. V takšni ali drugačni obliki se metode te vrste pogosto uporabljajo v mnogih zgodnjih operacijskih sistemih za podporo omejenim oblikam izvajanja asinhronih operacij v enonitnih sistemih.

Vendar Windows zagotavlja podporo za večnitnost, tako da je mogoče doseči enak učinek z izvajanjem sinhronih V/I operacij na več, neodvisno delujočih nitih. Te zmožnosti so bile predhodno prikazane z uporabo večnitnih strežnikov in programa grepMT (7. poglavje). Poleg tega niti zagotavljajo konceptualno dosleden in domnevno veliko enostavnejši način za izvajanje asinhronih V/I operacij. Alternativa metodam, uporabljenim v programih 14.1 in 14.2, bi bila, da bi vsaki niti dali svoj deskriptor datoteke, tako da bi lahko vsaka nit sinhrono obdelala vsak četrti zapis.

Ta način uporabe niti je prikazan v programu atouMT, ki ni naveden v knjigi, je pa vključen v gradivo, objavljeno na spletni strani. Program atouMT ne more delovati le pod nadzorom katerega koli Windows različice, vendar tudi enostavnejši od katere koli od obeh različic asinhronih V/I programov, saj je obračunavanje uporabe virov v tem primeru manj zapleteno. Vsaka nit preprosto vzdržuje svoje lastne vmesne pomnilnike na lastnem skladu in kroži skozi zaporedje sinhronih operacij branja, pretvorbe in pisanja. Hkrati ostaja učinkovitost programa na dokaj visoki ravni.

Opomba

Program atouMT.c, ki se nahaja na spletnem mestu, vsebuje komentarje o več možnih pasteh, ki vas lahko čakajo, ko omogočite več nitim dostop do iste datoteke hkrati. Predvsem morajo biti vsi posamezni ročaji datotek ustvarjeni s funkcijo CreateHandle in ne s funkcijo DuplicateHandle.

Osebno raje uporabljam večnitno obdelavo datotek kot asinhroni V/I. Niti je lažje programirati in v večini primerov zagotavljajo boljšo zmogljivost.

Obstajata dve izjemi od tega splošnega pravila. Prva od teh, kot je bilo prikazano prej v tem poglavju, zadeva situacije, v katerih je lahko le ena odprta operacija in se deskriptor datoteke lahko uporabi za namene sinhronizacije. Druga, pomembnejša izjema se pojavi v primeru asinhronih vrat za dokončanje V/I, o katerih bomo razpravljali na koncu tega poglavja.

Iz knjige Izdelajmo prevajalnik! avtorja Crenshaw Jack

Iz knjige Programiranje v Prologu avtor Kloksin U.

Iz knjige Programski jezik C# 2005 in platforma .NET 2.0. avtorja Troelsen Andrew

Iz knjige Informix Database Administrator's Guide. avtor Kustov Viktor

Iz knjige Microsoft Visual C++ in MFC. Programiranje za Windows 95 in Windows NT avtor Frolov Aleksander Vjačeslavovič

2.2.3.2 Asinhroni V/I Za pospešitev V/I operacij strežnik uporablja lasten paket Asinhroni V/I (AIO) ali paket Kernel Asynchronous I/O (KAIO), če je na voljo. Uporabniške V/I zahteve se obdelujejo asinhrono,

Iz knjige Osnove objektno orientiranega programiranja avtorja Meyer Bertrand

I/O Kot veste, operaterji<< и >> opravi premik številčna vrednost levo in desno za določeno število bitov. Programi v naši knjigi prav tako uporabljajo te izjave za vnos informacij s tipkovnice in njihov prikaz na zaslonu.Če na levi strani

Iz knjige Sistemsko programiranje v okolje Windows avtor Hart Johnson M

Vhod in izhod Dva razreda knjižnice KERNEL zagotavljata osnovne vhodne in izhodne zmogljivosti: FILE in STD_FILES Med operacijami, definiranimi na objektu f tipa FILE, so naslednje: create f.make ("ime") -- Povezuje f z datoteko z imenom f.open_write -- Odpri f za pisanje f.open_read -- Odpri f za

Iz knjige Programiranje v Rubyju [Ideologija jezika, teorija in praksa uporabe] avtorja Fulton Hal

POGLAVJE 14 Asinhroni V/I in zaključna vrata V/I operacije so same po sebi počasnejše od drugih vrst obdelave. Razlogi za to upočasnitev so naslednji dejavniki: Zamude zaradi časa, porabljenega za iskanje

Iz knjige Programiranje v Prologu za umetno inteligenco avtor Bratko Ivan

10.1.7. Enostaven I/O Nekatere metode I/O iz modula Kernel ste že seznanjeni; poklicali smo jih, ne da bi navedli klicatelja. Ti vključujejo funkciji gets in puts ter print, printf in p (slednji pokliče metodo inspect objekta, da ga natisne na način, ki ga razumemo).

Iz knjige Programski jezik C za osebni računalnik avtor Bočkov S. O.

Iz knjige Programiranje v Linuxu s primeri avtor Robbins Arnold

Poglavje 6 Vnos in izhod V tem poglavju si bomo ogledali nekaj vgrajenih pripomočkov za zapisovanje podatkov v datoteko in branje podatkov iz nje. Takšna orodja lahko uporabimo tudi za formatiranje programskih podatkovnih objektov, da dobimo želeno obliko njihove zunanje predstavitve.

Iz knjige Osnove programiranja v Javi avtor Sukhov S. A.

Vhod in izhod Vhodne in izhodne funkcije v standardni knjižnici C vam omogočajo branje podatkov iz datotek ali njihovo sprejemanje iz vhodnih naprav (kot je tipkovnica) in pisanje podatkov v datoteke ali izpis razne naprave(na primer na tiskalnik) Vhodno/izhodne funkcije

Iz knjige QT 4: Programiranje GUI v C++ avtorja Blanchette Jasmine

4.4. Vhod in izhod Vse V/I operacije Linuxa se izvajajo prek deskriptorjev datotek. Ta razdelek predstavlja deskriptorje datotek, opisuje, kako jih pridobiti in osvoboditi, ter razlaga, kako jih izvajati.

Iz knjige Idealni programer. Kako postati strokovnjak za razvoj programske opreme avtor Martin Robert S.

Iz avtorjeve knjige

Poglavje 12: V/I Skoraj vsaka aplikacija zahteva branje ali pisanje datotek ali izvajanje drugih V/I operacij. Qt zagotavlja odlično V/I podporo s QIODevice, zmogljivo abstrakcijo "naprav", ki lahko berejo in pišejo.

Iz avtorjeve knjige

Vložek in izhod Zelo pomembno se mi zdi tudi, da moje rezultate spodbuja ustrezen »vnos«. Pisanje programsko kodo- ustvarjalno delo. Moja ustvarjalnost je običajno najboljša, ko se soočim z ustvarjalnim izzivom.

Nalogo, ki je izdala zahtevo za V/I operacijo, nadzornik postavi v stanje čakanja na zaključek odrejene operacije. Ko nadzornik prejme sporočilo iz zaključnega odseka, da je operacija zaključena, nalogo postavi v stanje pripravljenosti in nadaljuje z delom. Ta situacija ustreza sinhronemu V/I. Sinhroni V/I je standard v večini operacijskih sistemov. Za povečanje hitrosti izvajanja aplikacij je bilo predlagano, da se po potrebi uporabi asinhroni V/I.

Najenostavnejša različica asinhronega izhoda je tako imenovani buffered izhod v zunanjo napravo, pri katerem se podatki iz aplikacije ne prenašajo neposredno na V/I napravo, temveč v poseben sistemski medpomnilnik. V tem primeru se logično šteje, da je izhodna operacija za aplikacijo takoj zaključena in naloga morda ne bo čakala na dokončanje dejanskega postopka prenosa podatkov v napravo. Proces realni izhod Podatke iz sistemskega medpomnilnika obravnava I/O nadzornik. Seveda je poseben sistemski proces po navodilih V/I nadzornika odgovoren za dodelitev medpomnilnika iz področja sistemskega pomnilnika. Torej bo za obravnavani primer izhod asinhron, če je, prvič, V/I zahteva nakazala potrebo po medpomnjenju podatkov, in drugič, če V/I naprava omogoča takšne asinhrone operacije in je to zabeleženo v UCB. Organizirate lahko tudi asinhroni vnos podatkov. Vendar pa je za to potrebno ne samo dodeliti pomnilniško območje za začasno shranjevanje podatkov, prebranih iz naprave, in povezati dodeljeni medpomnilnik z nalogo, ki je ukazala operacijo, ampak tudi razdeliti zahtevo za V/I delovanje na dva dela (na dve zahtevi). Prva zahteva podaja operacijo za branje podatkov, podobno kot pri sinhronem V/I. Vendar je vrsta (koda) zahteve drugačna in zahteva določa vsaj en dodaten parameter - ime (kodo) sistemskega objekta, ki ga naloga prejme kot odgovor na zahtevo in ki identificira dodeljeni medpomnilnik. Po prejemu imena vmesnega pomnilnika (tako bomo običajno imenovali ta sistemski objekt, čeprav različni operacijski sistemi za njegovo označevanje uporabljajo tudi druge izraze, na primer razred), naloga nadaljuje svoje delo. Pri tem je zelo pomembno poudariti, da kot rezultat asinhrone zahteve za vnos podatkov naloga V/I nadzornik ne postavi v stanje čakanja na zaključek V/I operacije, temveč ostane v teku oz. stanje pripravljenosti za izvedbo. Čez nekaj časa, po izvedbi potrebne kode, ki jo je določil programer, naloga izda drugo zahtevo za dokončanje V/I operacije. V tej drugi zahtevi isti napravi, ki ima seveda drugačno kodo (ali ime zahteve), naloga določi ime sistemskega objekta (medpomnilnik za asinhroni vnos podatkov) in, če je operacija branja podatkov uspešna, takoj prejme iz sistemskega medpomnilnika. Če podatki še niso v celoti preneseni iz zunanje naprave v sistemski medpomnilnik, V/I nadzornik preklopi opravilo v stanje čakanja na zaključek V/I operacije, nato pa vse spominja na običajni sinhroni vnos podatkov.

Običajno je asinhroni V/I na voljo v večini operacijskih sistemov z več programi, zlasti če OS podpira večopravilnost z uporabo mehanizma niti. Če pa ni eksplicitnega asinhronega vhoda/izhoda, lahko njegove zamisli implementirate sami, tako da organizirate neodvisno nit za izhod podatkov.

V/I strojno opremo lahko obravnavamo kot zbirko procesorji strojne opreme, ki lahko delujejo vzporedno med seboj, pa tudi glede na centralni procesor (procesorje). Na takšnih "procesorjih" se uporablja t.i zunanji procesi. Na primer, za zunanjo napravo (vhodno/izhodno napravo) je lahko zunanji proces niz operacij, ki prevedejo tiskalno glavo, premaknejo papir za en položaj, spremenijo barvo črnila ali natisnejo nekatere znake. Zunanji procesi, ki uporabljajo vhodno/izhodno strojno opremo, medsebojno delujejo tako med seboj kot z običajnimi procesi "programske opreme", ki se izvajajo na osrednjem procesorju. Pomembno dejstvo je, da se bo hitrost izvajanja zunanjih procesov bistveno (včasih za red velikosti ali več) razlikovala od hitrosti izvajanja običajnih (“ notranji«) procesov. Za njihovo normalno delovanje morajo biti zunanji in notranji procesi sinhronizirani. Za izravnavo učinka velikega neskladja hitrosti med notranjimi in zunanjimi procesi se uporablja zgoraj omenjeno medpomnjenje. Tako lahko govorimo o sistemu vzporednih medsebojno delujočih procesov (glej 6. poglavje).

Medpomnilniki so kritičen vir v odnosu do notranjih (programska oprema) in zunanjih procesov, ki med svojim vzporednim razvojem informacijsko medsebojno delujejo. Skozi vmesni pomnilnik(-e) se podatki pošljejo iz nekega procesa naslovljivemu zunanjemu (operacija izpisa podatkov na zunanjo napravo) ali pa se iz zunanjega procesa prenesejo v nek programski proces (operacija branja podatkov). Uvedba medpomnilnika kot sredstva informacijske interakcije odpira problem upravljanja teh sistemskih medpomnilnikov, ki ga rešuje nadzorni del OS. V tem primeru je nadzornik zadolžen ne le za dodeljevanje in sproščanje medpomnilnikov v območju sistemskega pomnilnika, temveč tudi za sinhronizacijo procesov v skladu s stanjem operacij za polnjenje ali sproščanje medpomnilnikov ter čakanje nanje, če ni prostih medpomnilniki so na voljo in vhodna zahteva/izhod zahteva medpomnilnik. Običajno V/I nadzornik za reševanje navedenih nalog uporablja standardna orodja za sinhronizacijo, sprejeta v danem OS. Torej, če ima OS razvita orodja za reševanje problemov vzporednega izvajanja medsebojno delujočih aplikacij in nalog, potem praviloma izvaja tudi asinhroni vhod / izhod.

sinhroni model vhod/izhod. Sistemski klici read(2) , write(2) in njihovi analogi vrnejo nadzor šele, ko so bili podatki že prebrani ali zapisani. To pogosto povzroči blokado niti.

Opomba

V resnici pa ni tako preprosto. read(2) mora počakati, da se podatki fizično preberejo iz naprave, vendar write(2) privzeto deluje v lenem načinu za pisanje: vrne se, ko so bili podatki preneseni v sistemski medpomnilnik, vendar na splošno pred podatki se fizično prenesejo v napravo. To običajno znatno izboljša opazovano delovanje programa in omogoči uporabo pomnilnika podatkov za druge namene takoj po vrnitvi write(2). Toda zakasnjeno snemanje ima tudi precejšnje pomanjkljivosti. Glavna je, da o rezultatu fizične operacije ne boste izvedeli takoj s povratno kodo write(2), ampak šele nekaj časa po vrnitvi, običajno s povratno kodo naslednjega klica write(2). Za nekatere aplikacije - monitorje transakcij, številne programe v realnem času itd. - je to nesprejemljivo in so prisiljene izklopiti leno snemanje. To naredi zastavica O_SYNC, ki jo je mogoče nastaviti, ko se datoteka odpre in spremeni Odpri datoteko s klicem fcntl(2) .

Sinhronizacijo posameznih zapisov je mogoče zagotoviti s klicem fsync(2). Za številne aplikacije, ki vključujejo več naprav in/ali omrežnih povezav sinhroni model neprijetno. Tudi delo v načinu glasovanja ni vedno sprejemljivo. Dejstvo je, da select(3C) in poll(2) menita, da je deskriptor datoteke pripravljen za branje šele potem, ko se podatki fizično pojavijo v njegovem medpomnilniku. Toda nekatere naprave začnejo pošiljati podatke šele, ko so za to izrecno pozvane.

Prav tako je za nekatere aplikacije, zlasti aplikacije v realnem času, pomembno vedeti točen trenutek, ko začnejo prihajati podatki. Za takšne aplikacije je lahko tudi nesprejemljivo, da upoštevata select(3C) in poll(2). redne datoteke vedno pripravljen na branje in pisanje. res, datotečni sistem bere z diska in čeprav deluje veliko hitreje kot večina omrežne povezave, vendar je še vedno dostop do njega povezan z nekaj zamudami. Za trde aplikacije v realnem času so lahko te zamude nesprejemljive – vendar brez izrecne zahteve za branje datotečni sistem ne daje podatkov!

Za trde aplikacije v realnem času je lahko pomemben še en vidik težave z V/I. Dejstvo je, da imajo trde aplikacije RT višjo prioriteto kot jedro, zato izvajajo sistemske klice – tudi tiste, ki ne blokirajo! - lahko vodi do prednostna inverzija.

Rešitev teh težav je znana že dolgo in se imenuje asinhroni vhod/izhod. V tem načinu V/I sistemski klici vrnejo nadzor takoj po vložitvi zahteve gonilniku naprave, običajno še preden so bili podatki prekopirani v sistemski medpomnilnik. Oblikovanje zahteve je sestavljeno iz postavitve vnosa (IRP, Input/Output Request Packet, input/output request packet) v čakalno vrsto. Če želite to narediti, morate le na kratko zajeti mutex, ki ščiti "rep" čakalne vrste, tako da je težavo prednostne inverzije mogoče zlahka premagati. Da bi ugotovili, ali se je klic končal in če se je končal, kako natančno in ali je mogoče uporabiti pomnilnik, v katerem so bili shranjeni podatki, je na voljo poseben API (glej sliko 8.1).


riž. 8.1.

Asinhroni model je bil glavni I/O model v operacijskih sistemih, kot so DEC RT-11, DEC RSX-11, VAX/VMS, OpenVMS. Skoraj vsi podpirajo ta model v takšni ali drugačni obliki. OS v realnem času. Sistemi Unix so od poznih 1980-ih uporabljali več nezdružljivih API-jev za asinhroni V/I. Leta 1993 je ANSI/IEEE sprejel POSIX 1003.1b, ki opisuje standardiziran API, ki ga bomo raziskali kasneje v tem razdelku.

V Solarisu 10 je asinhrona V/I funkcionalnost vključena v knjižnico libaio.so. Če želite zgraditi programe, ki uporabljajo te funkcije, morate uporabiti stikalo -laio. Za ustvarjanje zahtev za asinhroni V/I se uporabljajo funkcije aio_read(3AIO), aio_write(3AIO) in lio_listio(3AIO).

Funkciji aio_read(3AIO) in aio_write(3AIO) imata en sam parameter, structaiocb *aiocbp. Struktura aiocb je definirana v datoteki< aio.h> in vsebuje naslednja polja:

  • int aio_fildes - deskriptor datoteke
  • off_t aio_offset - odmik v datoteki, od katere se začne pisanje ali branje
  • volatile void* aio_buf - vmesni pomnilnik, v katerega je treba prebrati podatke ali v katerega so podatki zapisani.
  • size_t aio_nbytes - velikost medpomnilnika. Tako kot tradicionalni read(2) lahko tudi aio_read(3AIO) prebere manj podatkov, kot je bilo zahtevanih, nikoli pa ne bo prebral več.
  • int aio_reqprio - zahteva prednost
  • struct sigevent aio_sigevent - metoda obveščanja, da je bila zahteva dokončana (o tem kasneje v tem razdelku)
  • int aio_lio_opcode - ne uporablja se za aio_read(3AIO) in aio_write(3AIO), uporablja ga samo funkcija lio_listio.

Funkcija lio_listio(3AIO) vam omogoča ustvarjanje več V/I zahtev z enim sistemskim klicem. Ta funkcija ima štiri parametre:

  • način int - lahko sprejme vrednosti LIO_WAIT (funkcija čaka na dokončanje vseh zahtev) in LIO_NOWAIT (funkcija vrne nadzor takoj po generiranju vseh zahtev).
  • struct aiocb *list - seznam kazalcev na strukture aiocb z opisi zahtev.

    Zahteve je mogoče brati ali pisati, to določa polje aio_lio_opcode. Zahteve za posamezen deskriptor se izvajajo v vrstnem redu, v katerem so navedene v matriki seznama.

  • int nent - število vnosov v matriki seznama.
  • struct sigevent *sig - način za obveščanje, da so bile vse zahteve dokončane. Če je način ==LIO_WAIT, je ta parameter prezrt.

Knjižnica POSIX AIO ponuja dva načina za obveščanje programa, da je bila zahteva dokončana, sinhrono in asinhrono. Najprej si poglejmo sinhrono metodo. Funkcija aio_return(3AIO) vrne status zahteve. Če je zahteva že zaključena in uspešno zaključena, vrne velikost prebranih ali zapisanih podatkov v bajtih. Tako kot tradicionalni read(2) vrne aio_return(3AIO) 0 bajtov v primeru konca datoteke. Če zahteva ni uspela ali še ni dokončana, se vrne -1 in nastavi se errno. Če zahteva še ni dokončana, je koda napake EINPROGRESS.

Funkcija aio_return(3AIO) je destruktivna; če je poklican na dokončano zahtevo, bo uničil sistemski objekt, ki hrani informacije o statusu zahteve. Klicanje aio_return(3AIO) večkrat na isto zahtevo zato ni mogoče.

Funkcija aio_error(3AIO) vrne kodo napake, povezano z zahtevo. Če se zahteva uspešno zaključi, se vrne 0, če pride do napake - koda napake, za nepopolne zahteve - EINPROGRESS.

Funkcija aio_suspend(3AIO) blokira nit, dokler se ena od njenih navedenih asinhronih V/I zahtev ne zaključi ali za določeno časovno obdobje. Ta funkcija ima tri parametre:

  • const struct aiocb *const seznam- niz kazalcev na deskriptorje poizvedbe.
  • int nent - število elementov v matriki seznama.
  • const struct timespec *timeout- časovna omejitev, natančna do nanosekund (pravzaprav točna do ločljivosti sistemski časovnik).

Funkcija vrne 0, če je vsaj ena od operacij, navedenih na seznamu, dokončana. Če funkcija ne uspe, vrne -1 in nastavi errno. Če je funkcija potekla, vrne tudi -1 in errno==EINPROGRESS.

Primer uporabe asinhronega V/I s preverjanjem statusa sinhrone zahteve je podan v primeru 8.3.

Const char req="GET / HTTP/1.0\r\n\r\n"; int main() ( int s; static struct aiocb readrq; static const struct aiocb *readrqv=(&readrq, NULL); /* Odpri vtičnico […] */ 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("branje iz vtičnice"); ) ) ) 8.3. Asinhroni V/I s sinhronim preverjanjem stanja zahteve. Koda je skrajšana, iz nje je izključeno odpiranje vtičnic in obravnavanje napak.

Asinhrono obveščanje aplikacije o zaključku operacij je sestavljeno iz ustvarjanje signala ko je operacija končana. Če želite to narediti, morate narediti ustrezne nastavitve v polju aio_sigevent deskriptorja zahteve. Polje aio_sigevent je tipa struct sigevent. Ta struktura je opredeljena v in vsebuje naslednja polja:

  • int sigev_notify - način obveščanja. Veljavne vrednosti so SIGEV_NONE (ne pošiljaj potrditev), SIGEV_SIGNAL (generiraj signal, ko je zahteva končana) in SIGEV_THREAD (zaženi določeno funkcijo v ločeni niti, ko je zahteva končana). Solaris 10 podpira tudi tip opozorila SIGEV_PORT, ki je obravnavan v dodatku k temu poglavju.
  • int sigev_signo - številka signala, ki bo ustvarjen pri uporabi SIGEV_SIGNAL.
  • union sigval sigev_value - parameter, ki bo posredovan upravljalniku signalov ali funkciji obdelave. Ko se uporablja za asinhroni V/I, je to običajno kazalec na zahtevo.

    Pri uporabi SIGEV_PORT mora biti to struktura kazalca port_event_t, ki vsebuje številko vrat in morda dodatne podatke.

  • void (*sigev_notify_function)(union sigval) je funkcija, ki bo poklicana, ko je uporabljen SIGEV_THREAD.
  • pthread_attr_t *sigev_notify_attributes- atributi niti, v kateri bo zagnan
  • sigev_notify_function pri uporabi SIGEV_THREAD.

Vse izvedbe libaio ne podpirajo obvestila SIGEV_THREAD. Nekateri sistemi Unix namesto tega uporabljajo nestandardno opozorilo SIGEV_CALLBACK. Kasneje v tem predavanju bomo obravnavali samo signalno obveščanje.

Nekatere aplikacije uporabljajo SIGIO ali SIGPOLL kot številko signala (v Unix SVR4 sta to isti signal). Pogosto se uporabljata tudi SIGUSR1 ali SIGUSR2; To je priročno, ker zagotavlja, da se podoben signal ne bo pojavil iz drugega razloga.

Aplikacije v realnem času uporabljajo tudi številke signalov v razponu od SIGRTMIN do SIGRTMAX. Nekatere izvedbe za ta namen dodelijo posebno signalno številko SIGAIO ali SIGASYNCIO, vendar v Solarisu 10 takega signala ni.

Seveda morate pred izvajanjem asinhronih zahtev, obveščenih s signalom, namestiti upravljalnik za ta signal. Za obveščanje morate uporabiti signale, obdelane v načinu SA_SIGINFO. Takšnega upravljalnika ni mogoče namestiti s sistemskimi klici signal(2) in sigset(2); uporabiti morate sigaction(2). Namestitev upravljavcev z uporabo sigaction

V/I nadzor.

blokovsko usmerjena naprave in bajtno usmerjen

glavna ideja

Ključ načelo je neodvisnost naprave

· Upravljanje prekinitev,

· Gonilniki naprav,

Zdi se jasno, da so možne najrazličnejše prekinitve iz različnih razlogov. Zato je število povezano s prekinitvijo - tako imenovano prekinitveno število.

Ta številka edinstveno ustreza določenemu dogodku. Sistem lahko prepozna prekinitve in, ko se pojavijo, sproži proceduro, ki ustreza številki prekinitve.

Nekatere prekinitve (prvih pet v številčnem vrstnem redu) so rezervirane za uporabo centralni procesor v primeru kakršnih koli posebnih dogodkov, kot je poskus deljenja z ničlo, prelivanje itd. (to so prave interne prekinitve J).

Prekinitve strojne opreme se vedno zgodijo asinhrono glede na zagnane programe. Poleg tega lahko pride do več prekinitev hkrati!

Za zagotovitev, da se sistem ne zmede pri odločanju, katero prekinitev naj najprej servisira, obstaja posebna prednostna shema. Vsaki prekinitvi je dodeljena lastna prioriteta. Če pride do več prekinitev hkrati, sistem da prednost tisti z najvišjo prioriteto, obdelavo preostalih prekinitev pa za nekaj časa odloži.

Prioritetni sistem je implementiran na dveh čipih Intel 8259 (ali podobnih). Vsak čip je krmilnik prekinitev in služi do osmim prioritetam. Čipe je mogoče kombinirati (kaskadno) za povečanje števila prioritetnih ravni v sistemu.

Stopnje prioritete so okrajšane IRQ0 - IRQ15.


24. V/I nadzor. Sinhroni in asinhroni I/O.

Ena od glavnih funkcij OS je upravljanje vseh vhodno/izhodnih naprav računalnika. OS mora pošiljati ukaze napravam, prestrezati prekinitve in obravnavati napake; zagotoviti mora tudi vmesnik med napravami in ostalim sistemom. Za razvojne namene mora biti vmesnik enak za vse vrste naprav (neodvisnost od naprav). Več informacij o IV kontroli, vprašanje 23.

Načela zaščite

Ker je bil OS UNIX že od samega začetka zamišljen kot večuporabniški operacijski sistem, je bil problem avtorizacije dostopa različnih uporabnikov do datotek v datotečnem sistemu vedno aktualen. Z avtorizacijo dostopa mislimo sistemska dejanja, ki dovoljujejo ali zavračajo dostop danega uporabnika Za ta datoteka odvisno od uporabnikovih pravic dostopa in omejitev dostopa, nastavljenih za datoteko. Shema avtorizacije dostopa, ki se uporablja v OS UNIX, je tako preprosta in priročna ter hkrati tako močna, da je postala de facto standard sodobnih operacijskih sistemov (ki se ne pretvarjajo, da so sistemi z večnivojsko varnostjo).

Zaščita datotek

Kot je običajno v operacijskem sistemu z več uporabniki, UNIX vzdržuje enoten mehanizem nadzora dostopa do datotek in imenikov datotečnega sistema. Vsak proces lahko dostopa do datoteke, če in samo če se pravice dostopa, določene za datoteko, ujemajo z zmogljivostmi procesa.

Zaščita datotek pred nepooblaščenim dostopom v sistemu UNIX temelji na treh dejstvih. Prvič, vsak proces, ki ustvari datoteko (ali imenik), je povezan z nekim identifikatorjem uporabnika, edinstvenim v sistemu (UID - Identifikator uporabnika), kar si lahko nadalje razlagamo kot identifikator lastnika novo ustvarjene datoteke. Drugič, vsak proces, ki poskuša pridobiti nekaj dostopa do datoteke, ima z njim povezan par identifikatorjev – identifikator trenutnega uporabnika in skupine. Tretjič, vsaka datoteka je edinstveno povezana s svojim deskriptorjem - i-node.

Zadnje dejstvo je vredno podrobneje obravnavati. Pomembno je razumeti, da imena datotek in datoteke kot take niso isto. Še posebej, ko obstaja več trdih povezav do iste datoteke, več imen datotek dejansko predstavlja isto datoteko in je povezanih z istim i-vozliščem. Vsako i-vozlišče, ki se uporablja v datotečnem sistemu, vedno edinstveno ustreza eni in samo eni datoteki. I-vozlišče vsebuje veliko različnih informacij (večina jih je uporabnikom na voljo prek sistemskih klicev stat in fstat), med temi informacijami pa je del, ki omogoča datotečnemu sistemu oceniti pravico danega procesa do dostopa do dano datoteko v zahtevanem načinu.

Splošna načela zaščite so enake za vse obstoječe različice sistema: Informacije o vozlišču i-node vključujejo UID in GID trenutnega lastnika datoteke (takoj po ustvarjanju datoteke se identifikatorji njenega trenutnega lastnika nastavijo na ustrezen veljaven identifikator procesa ustvarjalca, vendar ga je mogoče pozneje spremeniti s sistemskima klicema chown in chgrp). Poleg tega je v i-vozlišču datoteke shranjena lestvica, ki kaže, kaj lahko uporabnik - njen lastnik - naredi z datoteko, kaj lahko z datoteko naredijo uporabniki, ki pripadajo isti skupini uporabnikov kot lastnik, in kaj lahko storijo drugi. z datoteko Uporabniki. Majhne izvedbene podrobnosti v različne možnosti sistemi se razlikujejo.

28. Upravljanje dostopa do datotek v sistemu Windows NT. Seznami pravic dostopa.

Za sistem za nadzor dostopa v sistemu Windows NT je značilna visoka stopnja prilagodljivosti, ki je dosežena zaradi široke palete dostopnih subjektov in objektov ter razdrobljenosti dostopovnih operacij.

Nadzor dostopa do datotek

Za vire v skupni rabi v sistemu Windows NT se uporablja skupni objektni model, ki vsebuje varnostne značilnosti, kot je niz dovoljenih operacij, identifikator lastnika in seznam za nadzor dostopa.

Objekti v sistemu Windows NT so ustvarjeni za vse vire, ko so ali postanejo v skupni rabi - datoteke, imeniki, naprave, odseki pomnilnika, procesi. Značilnosti objektov v sistemu Windows NT so razdeljene na dva dela - na splošni del, katerega sestava ni odvisna od vrste objekta, in na posamezen del, ki ga določa vrsta objekta.
Vsi objekti so shranjeni v drevesnih strukturah hierarhične strukture, katerega elementi so vejni objekti (imeniki) in listni objekti (datoteke). Za objekte datotečnega sistema je ta shema razmerja neposreden odraz hierarhije imenikov in datotek. Za objekte drugih tipov ima diagram hierarhičnih odnosov svojo vsebino, na primer za procese odraža razmerja starš-otrok, za naprave pa članstvo v določenem tipu naprave in povezavo naprave z drugimi napravami, za na primer krmilnik SCSI z diski.

Preverjanje pravic dostopa za objekte katere koli vrste se izvaja centralno z uporabo Security Reference Monitorja, ki teče v privilegiranem načinu.

Za sistem Windows varnost Za NT je značilna prisotnost velikega števila različnih vnaprej določenih (vgrajenih) subjektov dostopa - tako posameznih uporabnikov kot skupin. Tako ima sistem vedno uporabnike, kot so Adininistrator, System in Guest, pa tudi skupine Uporabniki, Adiniiiistratorji, Operaterji računov, Operaterji strežnikov, Vsi in drugi. Bistvo teh vgrajenih uporabnikov in skupin je, da so obdarjeni z določenimi pravicami, kar administratorju olajša ustvarjanje učinkovitega sistema za nadzor dostopa. Pri dodajanju novega uporabnika lahko skrbnik samo odloči, kateri skupini ali skupinam bo tega uporabnika dodelil. Seveda lahko skrbnik ustvarja nove skupine, pa tudi dodaja pravice vgrajenim skupinam za izvajanje lastne varnostne politike, vendar v mnogih primerih povsem zadostujejo vgrajene skupine.

Windows NT podpira tri razrede operacij dostopa, ki se razlikujejo po vrsti subjektov in objektov, vključenih v te operacije.

□ Dovoljenja so nabor operacij, ki jih je mogoče definirati za subjekte vseh vrst v zvezi z objekti katere koli vrste: datoteke, imeniki, tiskalniki, pomnilniški odseki itd. Dovoljenja po svojem namenu ustrezajo pravicam dostopa do datotek in imenikov v QC UNIX .

□ Pravice (uporabniške pravice) - so določene za subjekte vrste skupine za izvajanje določenih sistemskih operacij: nastavitev sistemskega časa, arhiviranje datotek, izklop računalnika itd. Te operacije vključujejo poseben objekt dostopa - operacijski sistem kot celoto .

Eno vgrajeno skupino uporabnikov razlikujejo predvsem pravice, ne dovoljenja. Nekatere pravice za vgrajeno skupino so prav tako vgrajene - iz te skupine jih ni mogoče odstraniti. Druge pravice vgrajene skupine lahko izbrišete (ali dodate s splošnega seznama pravic).

□ Uporabniške zmožnosti so določene za posamezne uporabnike, da izvajajo dejanja, povezana z oblikovanjem njihovega operacijskega okolja, na primer spreminjanje sestave glavnega programskega menija, možnost uporabe elementa menija Zaženi itd. Z zmanjšanjem nabora zmogljivosti ( ki so uporabniku privzeto na voljo), lahko skrbnik uporabnika prisili, da dela z operacijskim okoljem, za katerega meni, da je najprimernejše in ga zaščiti pred morebitnimi napakami.

Pravice in dovoljenja, podeljena skupini, se samodejno dodelijo njenim članom, kar administratorju omogoča, da obravnava veliko število uporabnikov kot enoto računovodskih informacij in minimizira njihova dejanja.

Ko se uporabnik prijavi v sistem, se zanj ustvari tako imenovani žeton za dostop, ki vključuje ID uporabnika in ID-je vseh skupin, ki jim uporabnik pripada. Žeton vsebuje tudi: privzeti seznam za nadzor dostopa (ACL), ki je sestavljen iz dovoljenj in velja za objekte, ki jih ustvari proces; seznam uporabniških pravic za izvajanje sistemskih dejanj.

Vsi objekti, vključno z datotekami, nitmi, dogodki, celo žetoni za dostop, dobijo varnostni deskriptor, ko so ustvarjeni. Varnostni deskriptor vsebuje seznam za nadzor dostopa - ACL.

Deskriptor datoteke- nenegativno celo število, ki ga OS dodeli datoteki, ki jo odpre proces.

ACL(Angleščina) Seznam za nadzor dostopa- seznam za nadzor dostopa (v angleščini se izgovori "ekl") - določa, kdo ali kaj lahko dostopa do določenega objekta in katere operacije sme ali prepoveduje ta subjekt izvajati na objektu.

Seznami nadzora dostopa so osnova sistemov selektivne kontrole dostopa. ( Wiki)

Lastnik predmeta, običajno uporabnik, ki ga je ustvaril, ima selektiven nadzor nad dostopom do predmeta in lahko spremeni ACL objekta, da dovoli ali prepreči drugim dostop do predmeta. Vgradna Windows skrbnik NT, za razliko od superuporabnika UNIX, morda nima nekaterih dovoljenj za dostop do objekta. Za izvedbo te funkcije lahko ID-je skrbnika in skupine skrbnikov vključite v ACL, tako kot običajne ID-je uporabnikov. Vendar ima skrbnik še vedno možnost izvajanja kakršnih koli operacij s katerim koli predmetom, saj lahko vedno postane lastnik predmeta in nato kot lastnik prejme celoten nabor dovoljenj. Vendar skrbnik ne more vrniti lastništva prejšnjemu lastniku objekta, zato lahko uporabnik vedno ugotovi, da je skrbnik delal z njegovo datoteko ali tiskalnikom.

Ko proces zahteva operacijo za dostop do predmeta v sistemu Windows NT, nadzor vedno preide na varnostni nadzornik, ki primerja identifikatorje uporabnika in uporabniške skupine iz žetona za dostop z identifikatorji, shranjenimi v elementih ACL objekta. Za razliko od UNIX lahko elementi ACL sistema Windows NT vsebujejo sezname dovoljenih in sezname prepovedanih operacij za uporabnika.

Windows NT jasno določa pravila, po katerih se ACL dodeli novo ustvarjenemu objektu. Če klicna koda pri ustvarjanju objekta izrecno določa vse pravice dostopa do novo ustvarjenega objekta, potem varnostni sistem objektu dodeli ta ACL.

Če klicna koda objektu ne priskrbi ACL in ima objekt ime, potem velja načelo dedovanja dovoljenj. Varnostni sistem pogleda ACL imenika objektov, v katerem je shranjeno ime novega objekta. Nekatere vnose ACL imenika objektov je mogoče označiti kot podedljive. To pomeni, da jih je mogoče dodeliti novim objektom, ustvarjenim v tem imeniku.

V primeru, da proces ni izrecno določil ACL za predmet, ki se ustvarja, in imeniški objekt nima dednih vnosov ACL, se uporabi privzeti ACL iz žetona dostopa procesa.


29. Programski jezik Java. Java Virtual Machine. Java tehnologija.

Java je objektno usmerjen programski jezik, ki ga je razvil Sun Microsystems. Aplikacije Java so običajno prevedene v bajtno kodo po meri, tako da se lahko izvajajo na katerem koli virtualnem stroju Java (JVM), ne glede na arhitekturo računalnika. Programi Java so prevedeni v bajtno kodo, ki se izvede navidezni stroj Java ( JVM) - program, ki obdeluje bajtno kodo in posreduje navodila opremi kot tolmač, vendar s to razliko, da se bajtna koda za razliko od besedila obdela veliko hitreje.

Prednost tega načina izvajanja programov je popolna neodvisnost bajtne kode od operacijski sistem in strojno opremo, kar vam omogoča izvajanje aplikacij Java na kateri koli napravi, za katero obstaja ustrezen virtualni stroj. Druga pomembna značilnost tehnologije Java je njen prilagodljiv varnostni sistem zaradi dejstva, da izvajanje programa popolnoma nadzoruje virtualni stroj. Vsaka operacija, ki presega uveljavljena dovoljenja programa (na primer poskus nepooblaščenega dostopa do podatkov ali povezave z drugim računalnikom), povzroči takojšnjo prekinitev.

Pomanjkljivosti koncepta virtualnega stroja pogosto vključujejo dejstvo, da lahko izvajanje bajtne kode s strani virtualnega stroja zmanjša zmogljivost programov in algoritmov, implementiranih v jeziku Java.

Java Virtual Machine(skrajšano kot Java VM, JVM) - navidezni stroj Java je glavni del izvajalnega sistema Java, tako imenovanega Java Runtime Environment (JRE). Navidezni stroj Java interpretira in izvaja bajtno kodo Java, ki jo prevajalnik Java (javac) vnaprej ustvari iz izvorne kode programa Java. JVM se lahko uporablja tudi za izvajanje programov, napisanih v drugih programskih jezikih. Na primer, izvorno kodo Ada je mogoče prevesti v bajtno kodo Java, ki jo lahko nato izvede JVM.

JVM je ključna komponenta platforme Java. Ker so virtualni stroji Java na voljo za veliko strojne opreme in programske platforme, je Javo mogoče obravnavati kot vmesno programsko opremo in kot samostojno platformo, od tod tudi načelo »napiši enkrat, zaženi kjer koli«. Uporaba ene bajtne kode na več platformah omogoča, da se Java opiše kot "prevedi enkrat, zaženi kjer koli."

Izvajalno okolje

Programi, namenjeni izvajanju na JVM, morajo biti prevedeni v standardiziran prenosni binarni format, ki je običajno predstavljen kot datoteke .class. Program je lahko sestavljen iz številnih razredov, ki se nahajajo v različnih datotekah. Za lažje gostovanje velikih programov je mogoče nekatere datoteke .class zapakirati skupaj v tako imenovano datoteko .jar (okrajšava za Java Archive).

JVM izvaja datoteke .class ali .jar tako, da posnema navodila, napisana za JVM, z interpretacijo ali uporabo prevajalnika prav ob pravem času (JIT), kot je HotSpot podjetja Sun microsystems. Danes se prevajanje JIT uporablja v večini JVM za doseganje večje hitrosti.

Kot večina navideznih strojev ima navidezni stroj Java na sklad usmerjeno arhitekturo, podobno kot mikrokrmilniki in mikroprocesorji.

JVM, ki je primerek JRE (Java Runtime Environment), pride v poštev, ko se izvajajo programi Java. Ko je izvajanje končano, ta primerek izbriše zbiralnik smeti. JIT je del navideznega stroja Java, ki se uporablja za pospešitev časa izvajanja aplikacij. JIT hkrati prevaja dele bajtne kode, ki imajo podobno funkcionalnost, in tako skrajša čas, potreben za prevajanje.

j2se (standardna izdaja java 2) – standardna knjižnica vključuje:

GUI, NET, zbirka podatkov ...


30. Platforma .NET. Glavne ideje in določbe. .NET programski jeziki.

.NET Framework - programska tehnologija od Microsofta, zasnovan za ustvarjanje navadnih programov in spletnih aplikacij.

Ena od glavnih idej Microsoft .NET je interoperabilnost različnih storitev, napisanih v različnih jezikih. Na primer, storitev, napisana v C++ za Microsoft .NET, lahko kliče metodo razreda iz knjižnice, napisane v Delphiju; v C# lahko napišete razred, podedovan od razreda, v katerem je napisan Visual basic.NET in izjemo, ki jo vrže metoda, napisana v C#, je mogoče ujeti in obravnavati v Delphiju. Vsaka knjižnica (sestav) v .NET ima informacije o svoji različici, kar vam omogoča, da odpravite morebitna nasprotja med različne različice sklopov.

Aplikacije je mogoče razviti tudi v urejevalniku besedil in uporabiti prevajalnik konzole.

Tako kot tehnologija Java tudi razvojno okolje .NET ustvari bajtno kodo, ki jo izvaja virtualni stroj. Vhodni jezik tega računalnika v .NET se imenuje MSIL (Microsoft Intermediate Language) ali CIL (Common Intermediate Language, novejša različica) ali preprosto IL.

Uporaba bajtne kode vam omogoča, da dosežete funkcionalnost med platformami na ravni prevedenega projekta (v smislu .NET: montaža), in ne samo na ravni izvornega besedila, kot je na primer v C. Pred začetkom sestavljanja v izvajalnem okolju CLR bajtno kodo pretvori prevajalnik JIT, vgrajen v okolje (pravočasno, sproti prevajanje) v strojne kode ciljnega procesorja. Možno je tudi prevesti sestav v izvorno kodo za izbrano platformo z uporabo pripomočka NGen.exe, ki je priložen .NET Framework.

Med postopkom prevajanja izvorno kodo programa (napisano v SML, C#, Visual Basic, C++ ali katerem koli drugem programskem jeziku, ki ga podpira .NET) prevajalnik pretvori v tako imenovani sklop in shrani kot dinamično povezana knjižnična datoteka (Dynamically Linked).Knjižnica, DLL) oz izvršljiva datoteka(Izvedljiva datoteka, EXE).

Seveda za vsak prevajalnik (naj bo to prevajalnik jezika C#, csc.exe ali Visual Basic, vbc.exe), izvajalno okolje izvede potrebno preslikavo uporabljenih tipov v tipe CTS in programsko kodo v kodo " abstraktni stroj” .NET - MSIL (Microsoft Intermediate Language).

Sčasoma projekt programske opreme je oblikovan v obliki sklopa – samozadostne komponente za postavitev, replikacijo in ponovno uporabo. Sklop je identificiran digitalni podpis avtorja in edinstveno številko različice.

Vgrajeni programski jeziki (vključeni v .NET Framework):

C#; J#; VB.NET; JScript .NET; C++/CLI - nova različica C++ (upravljano).


31. Funkcionalne komponente OS. Upravljanje datotek

Funkcionalne komponente OS:

Funkcije operacijskega sistema samostojnega računalnika so običajno razvrščene glede na vrste lokalnih virov, ki jih OS upravlja, ali glede na posebne naloge, ki veljajo za vse vire. Včasih se takšne skupine funkcij imenujejo podsistemi. Najpomembnejši podsistemi za upravljanje virov so podsistemi za upravljanje procesov, pomnilnika, datotek in zunanjih naprav, podsistemi, ki so skupni vsem virom, pa so podsistemi Uporabniški vmesnik, varstvo podatkov in administracija.

Upravljanje datotek:

Sposobnost OS, da "zaščiti" zapletenost prave strojne opreme, se zelo jasno kaže v enem od glavnih podsistemov OS - datotečnem sistemu.

Datotečni sistem povezuje medije za shranjevanje na eni strani in API (aplikacijski programski vmesnik) za dostop do datotek na drugi strani. Ko aplikacijski program dostopa do datoteke, nima pojma, kako se informacije v določeni datoteki nahajajo, niti na kateri tip fizičnega medija (CD, trdi disk, magnetni trak ali bliskovni pomnilnik) so posnete. Vse, kar program pozna, je ime datoteke, njena velikost in atributi. Te podatke prejme od gonilnika datotečnega sistema. Datotečni sistem je tisti, ki določa, kje in kako bo datoteka zapisana na fizični medij (na primer trdi disk).

Z vidika operacijskega sistema je celoten disk zbirka gruč v velikosti od 512 bajtov in več. Gonilniki datotečnega sistema organizirajo gruče v datoteke in imenike (ki so pravzaprav datoteke, ki vsebujejo seznam datotek v tem imeniku). Ti isti gonilniki spremljajo, katere gruče so trenutno v uporabi, katere so proste in katere so označene kot napačne.

Vendar datotečni sistem ni nujno neposredno povezan s fizičnim pomnilniškim medijem. Obstajajo navidezni datotečni sistemi, pa tudi omrežni datotečni sistemi, ki so le način za dostop do datotek, ki se nahajajo na oddaljenem računalniku.

V najpreprostejšem primeru so vse datoteke na določenem disku shranjene v enem imeniku. Ta enonivojska shema je bila uporabljena v CP/M in prvi različici MS-DOS 1.0. Hierarhični datotečni sistem z ugnezdenimi imeniki se je najprej pojavil v Multicsu, nato v UNIX-u.

Katalogi za različne pogone lahko tvori več ločenih dreves, kot v DOS/Windows, ali pa se združi v eno drevo, ki je skupno vsem diskom, kot v UNIX-u podobni sistemi Oh.

Pravzaprav obstaja v sistemih DOS/Windows, pa tudi v sistemih, podobnih UNIX-u, en korenski imenik s podimeniki z imenom »c:«, »d:« itd. Particije trdega diska so nameščene v te imenike. To pomeni, da je c:\ samo povezava do file:///c:/. Vendar je za razliko od datotečnih sistemov, podobnih UNIX-u, v sistemu Windows pisanje v korenski imenik prepovedano, prav tako ogled njegove vsebine.

V UNIX-u obstaja samo en korenski imenik, vse druge datoteke in imeniki pa so ugnezdeni pod njim. Za dostop do datotek in imenikov na disku morate disk priklopiti z ukazom mount. Na primer, če želite odpreti datoteke na CD-ju, morate preprosto povedano povedati operacijskemu sistemu: "vzemite datotečni sistem na tem CD-ju in ga pokažite v imeniku /mnt/cdrom." Vse datoteke in imeniki na CD-ju bodo prikazani v tem imeniku /mnt/cdrom, ki se imenuje točka priklopa. V večini sistemov, podobnih UNIX-u izmenljivi diski(diskete in CD-ji), bliskovni pogoni in druge zunanje pomnilniške naprave so nameščene v imeniku /mnt, /mount ali /media. Unix in UNIX-u podobni operacijski sistemi omogočajo tudi samodejno namestitev diskov ob zagonu operacijskega sistema.

Upoštevajte uporabo poševnic v datoteki Windows sistemi, operacijski sistemi UNIX in UNIX podobni (v sistemu Windows se uporablja poševnica nazaj »\«, v operacijskih sistemih UNIX in UNIX podobnih pa preprosta poševnica »/«)

Poleg tega je treba opozoriti, da zgornji sistem omogoča namestitev ne samo datotečnih sistemov fizičnih naprav, ampak tudi posameznih imenikov (parameter --bind) ali npr. ISO slika(možnost zanke). Dodatki, kot je FUSE, vam prav tako omogočajo priklop na primer celotnega imenika na FTP in zelo velikega števila različnih virov.

Še bolj zapletena struktura se uporablja v NTFS in HFS. V teh datotečni sistemi vsaka datoteka je niz atributov. Atributi ne vključujejo le tradicionalnih atributov samo za branje, sistema, temveč tudi ime datoteke, velikost in celo vsebino. Torej je za NTFS in HFS tisto, kar je shranjeno v datoteki, le eden od njenih atributov.

Po tej logiki lahko ena datoteka vsebuje več različic vsebine. Tako je lahko v eni datoteki shranjenih več različic istega dokumenta in dodatni podatki (ikona datoteke, program, povezan z datoteko). Ta organizacija je značilna za HFS na Macintosh.


32. Funkcionalne komponente OS. Upravljanje procesov.

Upravljanje procesa:

Najpomembnejši del operacijskega sistema, ki neposredno vpliva na delovanje računalnika, je podsistem za vodenje procesov. Proces (ali z drugimi besedami naloga) je abstrakcija, ki opisuje delujoč program. Za operacijski sistem je proces enota dela, zahteva za porabo sistemskih virov.

V večopravilnem (večprocesnem) sistemu je proces lahko v enem od treh glavnih stanj:

RUNNING - aktivno stanje procesa, med katerim ima proces vsa potrebna sredstva in ga neposredno izvaja procesor;

ČAKANJE - pasivno stanje procesa, proces je blokiran, ne more se izvesti zaradi lastnih notranjih razlogov, čaka na nek dogodek, na primer zaključek I/O operacije, prejem sporočila od drugega proces ali sprostitev nekega vira, ki ga potrebuje;

READY je tudi pasivno stanje procesa, vendar je v tem primeru proces blokiran zaradi zunanjih okoliščin: proces ima vse potrebne vire za to, pripravljen je za izvajanje, vendar je procesor zaposlen z izvajanjem drugega procesa.

Med življenski krog vsak proces se premakne iz enega stanja v drugo v skladu z algoritmom za načrtovanje procesa, implementiranim v danem operacijskem sistemu.

standard CP/M

Ustvarjanje operacijskih sistemov za mikroračunalnike se je začelo z OS SR/M. Razvit je bil leta 1974, nato pa je bil nameščen na številnih 8-bitnih strojih. V okviru tega operacijskega sistema je bila ustvarjena precejšnja količina programske opreme, vključno s prevajalniki iz BASIC, Pascal, C, Fortran, Cobol, Lisp, Ada in mnogih drugih besedilnih jezikov. Omogočajo vam pripravo dokumentov veliko hitreje in bolj priročno kot uporaba pisalnega stroja.

MSX standard

Ta standard ni določal le operacijskega sistema, temveč tudi značilnosti strojne opreme za šolske osebne računalnike. Po standardu MSX je moral avto imeti Oven glasnost najmanj 16 K, trajni pomnilnik 32 K z vgrajenim jezikovnim tolmačem BASIC, barvni grafični zaslon ločljivosti 256 x 192 slikovnih točk in 16 barv, trikanalni 8-oktavni generator zvoka, vzporedna vrata za priklop tiskalnika in krmilnika za krmiljenje zunanjega pogona, ki je povezan od zunaj.

Operacijski sistem takega stroja je moral imeti naslednje lastnosti: potreben pomnilnik - največ 16 K, združljivost s CP/M na ravni sistemskih klicev, združljivost z DOS v formatih datotek na zunanji diski na osnovi disket, podpora za prevajalce jezikov BASIC, C, Fortran in Lisp.

Pi - sistem

V začetnem obdobju razvoja osebni računalniki Ustvarjen je bil operacijski sistem USCD p-system. Osnova tega sistema je bil tako imenovani P-stroj - program, ki posnema hipotetični univerzal računalnik. P-stroj simulira delovanje procesorja, pomnilnika in zunanjih naprav z izvajanjem posebnih navodil, imenovanih P-koda. Programske komponente Sistemi Pi (vključno s prevajalniki) so prevedeni v kodo P, aplikacijski programi so prav tako prevedeni v kodo P. Tako glavni posebnost Sistem je bil minimalno odvisen od lastnosti računalniške opreme. To je tisto, kar je zagotovilo prenosljivost Pi-sistema na Različne vrste avtomobili Kompaktnost P-kode in priročno implementiran ostranjevalni mehanizem sta omogočila izvajanje razmeroma velikih programov na osebnih računalnikih z majhnim RAM-om.

V/I nadzor.

V/I naprave delimo na dve vrsti: blokovsko usmerjena naprave in bajtno usmerjen naprave. Bločno usmerjene naprave shranjujejo informacije v blokih fiksne velikosti, od katerih ima vsak svoj naslov. Najpogostejša blokovno usmerjena naprava je disk. Bajtno orientirane naprave niso naslovljive in ne dovoljujejo iskalnih operacij; generirajo ali porabijo zaporedje bajtov. Primeri so terminali, linijski tiskalniki, omrežni adapterji. Elektronska komponenta se imenuje krmilnik naprave ali adapter. Operacijski sistem se ukvarja s krmilnikom. Krmilnik izvaja preproste funkcije, spremlja in odpravlja napake. Vsak krmilnik ima več registrov, ki se uporabljajo za komunikacijo s centralnim procesorjem. OS izvaja I/O s pisanjem ukazov v registre krmilnika. Krmilnik disket IBM PC sprejema 15 ukazov, kot so READ, WRITE, SEEK, FORMAT, itd. Ko je ukaz sprejet, procesor zapusti krmilnik in opravi drugo delo. Ko je ukaz končan, krmilnik izda prekinitev za prenos nadzora nad procesorjem na operacijski sistem, ki mora preveriti rezultate operacije. Procesor pridobi rezultate in stanje naprave z branjem informacij iz registrov krmilnika.

glavna ideja organizacija V/I programske opreme sestoji iz razdelitve na več nivojev, pri čemer spodnji nivoji zagotavljajo zaščito funkcij opreme pred zgornjimi, ti pa zagotavljajo uporabniku prijazen vmesnik za uporabnike.

Ključ načelo je neodvisnost naprave. Vrsta programa naj ne bo odvisna od tega, ali bere podatke z diskete ali iz trdi disk. Drugo pomembno vprašanje za V/I programsko opremo je obravnava napak. Na splošno je treba napake obravnavati čim bližje strojni opremi. Če krmilnik zazna napako pri branju, jo mora poskusiti popraviti. Če ne uspe, mora gonilnik naprave popraviti napake. In le če nižji nivo ne more obvladati napake, sporoči napako zgornjemu nivoju.

Drugo ključno vprašanje je uporaba blokirajočih (sinhronih) in neblokirnih (asinhronih) prenosov. Večina fizičnih V/I operacij se izvede asinhrono - procesor začne prenos in nadaljuje z drugim delom, dokler ne pride do prekinitve. Nujno je, da so I/O operacije blokirane - po ukazu READ se program samodejno ustavi, dokler podatki ne dosežejo programskega medpomnilnika.

Zadnja težava je, da so nekatere naprave v skupni rabi (diski: dostop več uporabnikov hkrati do diska ni problem), druge pa namenske (tiskalniki: vrstic, ki jih natisnejo različni uporabniki, ni mogoče mešati).

Za rešitev teh težav je priporočljivo programsko opremo V/I razdeliti na štiri plasti (slika 2.30):

· Upravljanje prekinitev,

· Gonilniki naprav,

· Od naprave neodvisna plast operacijskega sistema,

· Plast programske opreme po meri.

Pojem strojne prekinitve in njena obdelava.

Asinhrone ali zunanje (strojne) prekinitve so dogodki, ki prihajajo iz zunanjih virov (npr. periferne naprave) in se lahko pojavi v katerem koli poljubnem trenutku: signal časovnika, omrežno kartico ali diskovni pogon, pritiskanje tipk na tipkovnici, premikanje miške; Zahtevajo takojšnjo reakcijo (obdelavo).

Skoraj vsi vhodno/izhodni sistemi v računalniku delujejo s pomočjo prekinitev. Natančneje, ko pritisnete tipke ali kliknete miško, strojna oprema ustvari prekinitve. V odgovor nanje sistem ustrezno prebere kodo pritisnjene tipke ali si zapomni koordinate kazalca miške. Prekinitve generira krmilnik diska, adapter lokalno omrežje, serijska vrata, zvočni adapter in druge naprave.