Asinhroni unos datoteke izlaz c. Pojmovi: Ulaz-izlaz podataka sinhroni i asinhroni. Primjer: Korištenje tajmera čekanja

Aplikacioni programer ne mora da razmišlja o stvarima kao što je to kako sistemski programi rade sa registrima uređaja. Sistem skriva detalje niskog nivoa rada sa uređajima od aplikacija. Međutim, razlika između organiziranja I/O-a putem prozivanja i prekida se također odražava na nivou sistemskih funkcija, u obliku funkcija za sinhroni i asinhroni I/O.

Izvršiti funkciju sinhroni I/O uključuje pokretanje I/O operacije i čekanje da se ta operacija završi. Tek nakon što je I/O završen, funkcija vraća kontrolu pozivnom programu.

Sinhroni I/O je najpoznatiji način da programeri rade sa uređajima. Standardne rutine unosa/izlaza programskog jezika rade na ovaj način.

Pozivanje funkcije asinhroni I/O znači samo pokretanje odgovarajuće operacije. Nakon toga, funkcija odmah vraća kontrolu pozivajućem programu bez čekanja da se operacija završi.

Razmotrite, na primjer, asinhroni unos podataka. Jasno je da program ne može pristupiti podacima dok nije siguran da je njegov unos završen. Ali sasvim je moguće da program za sada može raditi drugi posao, umjesto da čeka u mirovanju.

Prije ili kasnije, program ipak mora početi raditi s unesenim podacima, ali prvo se uvjerite da je asinhrona operacija već završena. U tu svrhu različiti operativni sistemi pružaju alate koji se mogu podijeliti u tri grupe.

· Čeka se završetak operacije. Ovo je kao "druga polovina sinhrone operacije." Program je prvo pokrenuo operaciju, zatim izvršio neke vanjske radnje i sada čeka da se operacija završi, kao kod sinhronog ulaza/izlaza.

· Provjera završetka operacije. U tom slučaju program ne čeka, već samo provjerava status asinkrone operacije. Ako ulaz/izlaz još nije završen, tada program ima mogućnost hodanja neko vrijeme.

· Dodjela procedure završetka. U ovom slučaju, prilikom pokretanja asinkrone operacije, korisnički program ukazuje sistemu na adresu korisničke procedure ili funkcije koju bi sistem trebao pozvati nakon završetka operacije. Sam program možda više neće biti zainteresiran za napredak unosa/izlaza; sistem će ga podsjetiti na to u pravo vrijeme pozivanjem specificirana funkcija. Ova metoda je najfleksibilnija, jer korisnik može izvršiti bilo koju radnju u postupku dovršetka.

U Windows aplikaciji dostupna su sva tri načina za dovršenje asinhronih operacija. UNIX nema asinhrone I/O funkcije, ali isti asinhroni efekat se može postići na drugi način, pokretanjem dodatnog procesa.

Asinhroni I/O može poboljšati performanse u nekim slučajevima i pružiti dodatne funkcionalnost. Bez takvih najjednostavniji oblik asinhroni unos, poput "unosa sa tastature bez čekanja", brojni kompjuterske igrice i simulatori. Istovremeno, logika programa koji koristi asinkrone operacije je složenija nego kod sinhronih operacija.

Koja je gore spomenuta veza između sinhronih/asinhronih operacija i metoda organiziranja ulaza/izlaza o kojima se raspravljalo u prethodnom paragrafu? Odgovorite na ovo pitanje sami.

Asinhroni I/O koji koristi više niti

Preklapanje i prošireni I/O omogućavaju da se I/O izvodi asinhrono unutar jedne niti, iako OS kreira svoje vlastite niti da podrži ovu funkcionalnost. U ovom ili onom obliku, metode ovog tipa se često koriste u mnogim ranim operativnim sistemima kako bi podržale ograničene oblike izvođenja asinhronih operacija na jednonitnim sistemima.

Međutim, Windows pruža podršku za više niti, tako da je moguće postići isti efekat izvođenjem sinhronih I/O operacija na više, nezavisno pokrenutih niti. Ove mogućnosti su prethodno demonstrirane korišćenjem višenitnih servera i programa grepMT (poglavlje 7). Dodatno, niti pružaju konceptualno dosljedan i vjerovatno mnogo jednostavniji način za izvođenje asinhronih I/O operacija. Alternativa metodama koje se koriste u programima 14.1 i 14.2 bila bi da se svakoj niti da svoj deskriptor datoteke, tako da svaka nit može sinhrono obraditi svaki četvrti zapis.

Ovakav način korišćenja niti je demonstriran u programu atouMT, koji nije dat u knjizi, ali je uključen u materijal objavljen na web stranici. Program atouMT nije samo sposoban da radi pod bilo kojom kontrolom Windows verzije, ali i jednostavnije od bilo koje od dvije verzije asinhronih I/O programa, budući da je obračun upotrebe resursa u ovom slučaju manje komplikovan. Svaka nit jednostavno održava vlastite bafere na vlastitom steku i petlja kroz niz sinhronih operacija čitanja, pretvaranja i pisanja. Istovremeno, programski učinak ostaje na prilično visokom nivou.

Bilješka

Program atouMT.c, koji se nalazi na web stranici, sadrži komentare o nekoliko mogućih zamki koje vas mogu sačekati kada dozvolite da više niti istovremeno pristupa istoj datoteci. Konkretno, svi pojedinačni rukohvati datoteka moraju biti kreirani korištenjem funkcije CreateHandle umjesto funkcije DuplicateHandle.

Lično, više volim da koristim višenitnu obradu datoteka nego asinhroni I/O. Niti se lakše programiraju i pružaju bolje performanse u većini slučajeva.

Postoje dva izuzetka od ovog opšteg pravila. Prvi od njih, kao što je pokazano ranije u ovom poglavlju, odnosi se na situacije u kojima može postojati samo jedna neriješena operacija, a deskriptor datoteke se može koristiti u svrhu sinhronizacije. Drugi, važniji izuzetak javlja se u slučaju asinhronih I/O dovršenih portova, o čemu će biti riječi na kraju ovog poglavlja.

Iz knjige Hajde da napravimo kompajler! od Crenshaw Jacka

Iz knjige Programiranje u Prologu autor Kloksin U.

Iz knjige Programski jezik C# 2005 i .NET 2.0 platforma. od Troelsen Andrew

Iz knjige Vodič za administratora baze podataka Informix. autor Kustov Viktor

Iz knjige Microsoft Visual C++ i MFC. Programiranje za Windows 95 i Windows NT autor Frolov Aleksandar Vjačeslavovič

2.2.3.2 Asinhroni I/O Da bi ubrzao I/O operacije, server koristi svoj vlastiti Asinhroni I/O (AIO) paket ili Kernel Asynchronous I/O (KAIO) paket, ako je dostupan. Korisnički I/O zahtjevi se obrađuju asinhrono,

Iz knjige Osnove objektno orijentiranog programiranja autora Meyera Bertranda

I/O Kao što znate, operateri<< и >>izvršite smjenu numerička vrijednost lijevo i desno za određeni broj bitova. Programi u našoj knjizi također koriste ove iskaze za unos informacija s tastature i prikazivanje na ekranu. Ako je na lijevoj strani

Iz knjige Sistemsko programiranje u Windows okruženje autor Hart Johnson M

Ulaz i izlaz Dvije KERNEL bibliotečke klase pružaju osnovne ulazne i izlazne mogućnosti: FILE i STD_FILES Među operacijama definiranim na objektu f tipa FILE su sljedeće: kreiranje f.make ("name") -- Povezuje f s datotekom pod nazivom f.open_write -- Otvori f za pisanje f.open_read -- Otvori f za

Iz knjige Programiranje u Rubyju [Jezična ideologija, teorija i praksa primjene] od Fulton Hala

POGLAVLJE 14 Asinhroni I/O i portovi za završetak I/O operacije su inherentno sporije od drugih tipova obrade. Razlozi za ovo usporavanje su sljedeći faktori: Kašnjenja zbog vremena provedenog u potrazi

Iz knjige Programiranje u Prologu za umjetnu inteligenciju autor Bratko Ivan

10.1.7. Jednostavan I/O Već ste upoznati sa nekim od I/O metoda iz Kernel modula; pozvali smo ih bez navođenja pozivaoca. To uključuje get i puts funkcije, kao i print, printf i p (potonji poziva metod inspect objekta da ga ispiše na način koji možemo razumjeti).

Iz knjige C programski jezik za lični računar autor Bochkov S. O.

Iz knjige Linux programiranje s primjerima autor Robbins Arnold

Poglavlje 6 Ulaz i izlaz U ovom poglavlju ćemo pogledati neke ugrađene mogućnosti za upisivanje podataka i čitanje podataka iz datoteke. Takvi alati se također mogu koristiti za formatiranje objekata podataka programa kako bi se dobio željeni oblik njihove eksterne reprezentacije.

Iz knjige Osnove Java programiranja autor Sukhov S. A.

Ulaz i izlaz Funkcije ulaza i izlaza u standardnoj C biblioteci omogućavaju vam da čitate podatke iz datoteka ili ih primate sa ulaznih uređaja (kao što je tastatura) i pišete podatke u datoteke ili ih šaljete na razni uređaji(na primjer, na pisač) Funkcije ulaza/izlaza

Iz knjige QT 4: GUI programiranje u C++ od Blanchette Jasmine

4.4. Ulaz i izlaz Sve Linux I/O operacije se izvode preko deskriptora datoteka. Ovaj odjeljak uvodi deskriptore datoteka, opisuje kako ih dobiti i osloboditi i objašnjava kako se izvršavaju s njima.

Iz knjige Idealni programer. Kako postati profesionalac za razvoj softvera autor Martin Robert S.

Iz autorove knjige

Poglavlje 12: I/O Gotovo svaka aplikacija zahtijeva čitanje ili pisanje datoteka ili izvođenje drugih I/O operacija. Qt pruža odličnu I/O podršku uz QIODevice, moćnu apstrakciju "uređaja" koji mogu čitati i pisati.

Iz autorove knjige

Ulaz i izlaz Takođe smatram da je veoma važno da moji rezultati budu podstaknuti odgovarajućim „inputima“. Pisanje programski kod- kreativni rad. Moja kreativnost je obično najbolja kada sam suočen sa kreativnim izazovom.

Zadatak koji je izdao zahtjev za I/O operaciju supervizor stavlja u stanje čekanja na završetak naručene operacije. Kada supervizor dobije poruku od sekcije o završetku da je operacija završena, on stavlja zadatak u stanje spremnosti i nastavlja sa radom. Ova situacija odgovara sinkronom I/O. Sinhroni I/O je standard na većini operativnih sistema. Da bi se povećala brzina izvršavanja aplikacije, predloženo je korištenje asinhronog I/O-a kada je to potrebno.

Najjednostavnija verzija asinhronog izlaza je takozvani baferirani izlaz na vanjski uređaj, u kojem se podaci iz aplikacije ne prenose direktno na I/O uređaj, već u poseban sistemski bafer. U ovom slučaju, logično, izlazna operacija za aplikaciju se smatra završenom odmah, a zadatak možda neće čekati da se završi stvarni proces prijenosa podataka na uređaj. Proces stvarni izlaz Podacima iz sistemskog bafera rukuje I/O supervizor. Naravno, poseban sistemski proces po nalogu I/O supervizora je odgovoran za dodeljivanje bafera iz oblasti sistemske memorije. Dakle, za razmatrani slučaj, izlaz će biti asinhroni ako je, prvo, I/O zahtjev ukazao na potrebu za baferovanjem podataka, i drugo, ako I/O uređaj dozvoljava takve asinkrone operacije i to je zabilježeno u UCB-u. Također možete organizirati asinhroni unos podataka. Međutim, da biste to učinili, potrebno je ne samo dodijeliti memorijsku oblast za privremeno skladištenje podataka pročitanih s uređaja i povezati dodijeljeni bafer sa zadatkom koji je naložio operaciju, već i podijeliti zahtjev za I/O rad na dva dijela (na dva zahtjeva). Prvi zahtjev specificira operaciju za čitanje podataka, slično onome što se radi sa sinhronim I/O. Međutim, tip (šifra) zahtjeva je drugačiji, a zahtjev specificira najmanje jedan dodatni parametar - ime (šifra) sistemskog objekta koji zadatak prima kao odgovor na zahtjev i koji identificira dodijeljeni bafer. Nakon što je dobio ime bafera (konvencionalno ćemo ovaj sistemski objekat nazvati na ovaj način, iako različiti operativni sistemi koriste i druge termine za označavanje, na primjer, klasa), zadatak nastavlja svoj posao. Ovdje je vrlo važno naglasiti da kao rezultat zahtjeva za asinkroni unos podataka, zadatak se ne stavlja u stanje od strane I/O supervizora da čeka da se I/O operacija završi, već ostaje u toku ili stanje spremno za izvršenje. Nakon nekog vremena, nakon što je izvršio potreban kod koji je definirao programer, zadatak izdaje drugi zahtjev za dovršetak I/O operacije. U ovom drugom zahtjevu prema istom uređaju, koji, naravno, ima drugačiji kod (ili ime zahtjeva), zadatak specificira ime sistemskog objekta (bafer za asinhroni unos podataka) i, ako je operacija čitanja podataka uspješna, odmah ga prima iz sistemskog bafera. Ako podaci još nisu u potpunosti prebačeni sa eksternog uređaja u sistemski bafer, I/O supervizor prebacuje zadatak u stanje čekanja na završetak I/O operacije i tada sve liči na normalan sinhroni unos podataka.

Tipično, asinhroni I/O je obezbeđen u većini operativnih sistema sa više programa, posebno ako OS podržava multitasking koristeći mehanizam niti. Međutim, ako ne postoji eksplicitni asinhroni ulaz/izlaz, možete sami implementirati njegove ideje organiziranjem nezavisne niti za izlaz podataka.

I/O hardver se može smatrati kolekcijom hardverski procesori, koji su sposobni da rade paralelno jedan u odnosu na drugi, kao i u odnosu na centralni procesor (procesore). Na takvim “procesorima” tzv eksternih procesa. Na primjer, za vanjski uređaj (ulazno/izlazni uređaj), vanjski proces može biti skup operacija koje prevode glavu za štampanje, pomeraju papir za jednu poziciju, menjaju boju mastila ili štampaju neke znakove. Eksterni procesi, koristeći ulazno/izlazni hardver, interaguju i jedni s drugima i sa običnim “softverskim” procesima koji rade na centralnom procesoru. Važna činjenica je da će se brzina izvršavanja eksternih procesa značajno (ponekad za red veličine ili više) razlikovati od brzine izvršavanja konvencionalnih (“ interni") procesi. Za njihov normalan rad, eksterni i unutrašnji procesi moraju biti sinhronizovani. Da bi se izgladio efekat snažne neusklađenosti brzine između unutrašnjih i eksternih procesa, koristi se gore pomenuto baferovanje. Dakle, možemo govoriti o sistemu paralelnih procesa u interakciji (vidi Poglavlje 6).

Baferi su kritični resurs u odnosu na interne (softverske) i eksterne procese, koji tokom svog paralelnog razvoja komuniciraju informaciono. Kroz bafer(e), podaci se ili šalju iz nekog procesa u adresabilni eksterni (operacija izlaza podataka na eksterni uređaj), ili se iz eksternog procesa prenose u neki softverski proces (operacija čitanja podataka). Uvođenje baferovanja kao sredstva informacione interakcije otvara problem upravljanja ovim sistemskim baferima, koji se rešava pomoću nadzornog dela OS-a. U ovom slučaju, supervizor ima zadatak ne samo da dodijeli i oslobodi bafere u području sistemske memorije, već i da sinhronizuje procese u skladu sa stanjem operacija za popunjavanje ili oslobađanje bafera, kao i čekanje na njih ako nema slobodnih dostupni su baferi i ulazni zahtjev/izlaz zahtijeva baferovanje. Tipično, I/O supervizor koristi standardne alate za sinhronizaciju usvojene u datom OS-u za rješavanje navedenih zadataka. Stoga, ako je OS razvio alate za rješavanje problema paralelnog izvršavanja interakcijskih aplikacija i zadataka, onda, po pravilu, implementira i asinhroni ulaz/izlaz.

sinhroni model ulaz/izlaz. Sistemski pozivi read(2), write(2) i njihovi analozi vraćaju kontrolu samo nakon što su podaci već pročitani ili upisani. To često rezultira blokiranjem niti.

Bilješka

U stvarnosti, to nije tako jednostavno. read(2) mora čekati da se podaci fizički pročitaju sa uređaja, ali write(2) radi u režimu odloženog pisanja prema zadanim postavkama: vraća se nakon što su podaci prebačeni u sistemski bafer, ali općenito prije podaci se fizički prenose na uređaj. Ovo obično značajno poboljšava uočene performanse programa i omogućava da se memorija iz podataka koristi u druge svrhe odmah nakon vraćanja write(2). Ali odloženo snimanje ima i značajne nedostatke. Glavni je da ćete saznati o rezultatu fizičke operacije ne odmah po povratnom kodu write(2) , već tek neko vrijeme nakon povratka, obično putem povratnog koda sljedećeg write(2) poziva. Za neke aplikacije - monitore transakcija, mnoge programe u realnom vremenu, itd. - to je neprihvatljivo i oni su primorani da isključe lijeno snimanje. Ovo se radi pomoću oznake O_SYNC, koja se može postaviti kada se datoteka otvori i promijeni na otvori datoteku pozivanjem fcntl(2) .

Sinhronizacija pojedinačnih upisa može se osigurati pozivom fsync(2) . Za mnoge aplikacije koje uključuju više uređaja i/ili mrežnih veza sinhroni model nezgodno. Rad u režimu anketiranja također nije uvijek prihvatljiv. Činjenica je da select(3C) i poll(2) smatraju da je deskriptor datoteke spreman za čitanje tek nakon što se podaci fizički pojave u njegovom baferu. Ali neki uređaji počinju slati podatke tek nakon što se od njih izričito traži da to učine.

Također, za neke aplikacije, posebno aplikacije u realnom vremenu, važno je znati tačan trenutak kada podaci počinju pristizati. Za takve aplikacije takođe može biti neprihvatljivo da uzmu u obzir select(3C) i poll(2). obični fajlovi uvek spreman za čitanje i pisanje. stvarno, sistem podatakačita sa diska i iako radi mnogo brže od većine mrežne veze, ali pristup mu je i dalje povezan s određenim kašnjenjima. Za teške aplikacije u realnom vremenu, ova kašnjenja mogu biti neprihvatljiva - ali bez eksplicitnog zahtjeva za čitanje sistem podataka ne daje podatke!

Za teške aplikacije u realnom vremenu, drugi aspekt I/O problema može biti značajan. Činjenica je da tvrde RT aplikacije imaju veći prioritet od kernela, pa izvršavaju sistemske pozive - čak i one koje ne blokiraju! - može dovesti do inverzija prioriteta.

Rješenje ovih problema je odavno poznato i naziva se asinhroni ulaz/izlaz. U ovom načinu, I/O sistemski pozivi vraćaju kontrolu odmah nakon što je zahtjev upućen upravljačkom programu uređaja, obično čak i prije nego što su podaci kopirani u sistemski međuspremnik. Formiranje zahtjeva se sastoji od stavljanja unosa (IRP, Input/Output Request Packet, Input/Output Request packet) u red čekanja. Da biste to učinili, trebate samo nakratko uhvatiti mutex koji štiti “rep” reda, tako da se problem inverzije prioriteta može lako prevazići. Da biste saznali da li je poziv završen, i ako je završio, kako tačno i da li se može koristiti memorija u kojoj su podaci pohranjeni, obezbeđen je poseban API (vidi sliku 8.1)


Rice. 8.1.

Asinhroni model bio je glavni I/O model u operativnim sistemima kao što su DEC RT-11, DEC RSX-11, VAX/VMS, OpenVMS. Gotovo svi podržavaju ovaj model u ovom ili onom obliku. OS u realnom vremenu. Unix sistemi su koristili nekoliko nekompatibilnih API-ja za asinhroni I/O od kasnih 1980-ih. Godine 1993. ANSI/IEEE je usvojio POSIX 1003.1b, koji opisuje standardizovani API koji ćemo istražiti kasnije u ovom odeljku.

U Solarisu 10, asinhrona I/O funkcionalnost je uključena u biblioteku libaio.so. Da biste napravili programe koji koriste ove funkcije, morate koristiti prekidač -laio. Za generiranje zahtjeva za asinkroni I/O, koriste se funkcije aio_read(3AIO), aio_write(3AIO) i lio_listio(3AIO).

Funkcije aio_read(3AIO) i aio_write(3AIO) imaju jedan parametar, structaiocb *aiocbp. Aiocb struktura je definirana u datoteci< aio.h> i sadrži sljedeća polja:

  • int aio_fildes - deskriptor datoteke
  • off_t aio_offset - pomak u datoteci počevši od koje će započeti pisanje ili čitanje
  • volatile void* aio_buf - bafer u koji treba čitati podatke ili u koji leže podaci.
  • size_t aio_nbytes - veličina bafera. Poput tradicionalnog read(2) , aio_read(3AIO) može pročitati manje podataka nego što je traženo, ali nikada neće čitati više.
  • int aio_reqprio - prioritet zahtjeva
  • struct sigevent aio_sigevent - metoda obavještavanja da je zahtjev završen (o čemu se govori kasnije u ovom odjeljku)
  • int aio_lio_opcode - ne koristi se za aio_read(3AIO) i aio_write(3AIO), koristi samo funkcija lio_listio.

Funkcija lio_listio(3AIO) vam omogućava da generirate više I/O zahtjeva s jednim sistemskim pozivom. Ova funkcija ima četiri parametra:

  • int mod - može uzeti vrijednosti LIO_WAIT (funkcija čeka da se svi zahtjevi dovrše) i LIO_NOWAIT (funkcija vraća kontrolu odmah nakon generiranja svih zahtjeva).
  • struct aiocb *list - lista pokazivača na aiocb strukture sa opisima zahtjeva.

    Zahtjevi se mogu čitati ili pisati, to je određeno poljem aio_lio_opcode. Zahtjevi za jedan deskriptor se izvršavaju redoslijedom kojim su navedeni u nizu liste.

  • int nent - broj unosa u nizu liste.
  • struct sigevent *sig - način da se obavijesti da su svi zahtjevi završeni. Ako je mode==LIO_WAIT ovaj parametar se ignorira.

POSIX AIO biblioteka pruža dva načina za obavještavanje programa da je zahtjev završen, sinhroni i asinhroni. Pogledajmo prvo sinhroni metod. Funkcija aio_return(3AIO) vraća status zahtjeva. Ako je zahtjev već završen i uspješno dovršen, vraća veličinu podataka pročitanih ili zapisanih u bajtovima. Kao tradicionalno read(2), aio_return(3AIO) vraća 0 bajtova u slučaju kraja datoteke. Ako zahtjev nije uspio ili još nije dovršen, vraća se -1 i postavlja se errno. Ako zahtjev još nije dovršen, šifra greške je EINPROGRESS.

Funkcija aio_return(3AIO) je destruktivna; ako se pozove po završenom zahtjevu, uništit će sistemski objekt koji pohranjuje informacije o statusu zahtjeva. Pozivanje aio_return(3AIO) više puta na isti zahtjev stoga nije moguće.

Funkcija aio_error(3AIO) vraća kod greške povezan sa zahtjevom. Ako se zahtjev uspješno završi, vraća se 0, ako dođe do greške - šifra greške, za nepotpune zahtjeve - EINPROGRESS.

Funkcija aio_suspend(3AIO) blokira nit dok se jedan od njenih specificiranih asinkronih I/O zahtjeva ne dovrši ili za određeni vremenski period. Ova funkcija ima tri parametra:

  • const struct aiocb *const lista- niz pokazivača na deskriptore upita.
  • int nent - broj elemenata u nizu liste.
  • const struct timespec *timeout- vremensko ograničenje tačno u nanosekundama (u stvari, tačno do rezolucije sistemski tajmer).

Funkcija vraća 0 ako je barem jedna od operacija navedenih na listi dovršena. Ako funkcija ne uspije, vraća -1 i postavlja errno. Ako je funkcija istekla, ona također vraća -1 i errno==EINPROGRESS .

Primjer korištenja asinhronog I/O-a sa sinhronim provjerom statusa zahtjeva dat je u Primjeru 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); /* Otvori socket […] */ 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("čitanje iz socketa"); ) ) ) 8.3. Asinhroni I/O sa sinhronom provjerom statusa zahtjeva. Kod je skraćen, otvaranje socketa i rukovanje greškama su isključeni iz njega.

Asinkrono obaveštenje aplikacije o završetku operacija sastoji se od generisanje signala kada je operacija završena. Da biste to učinili, morate izvršiti odgovarajuća podešavanja u polju aio_sigevent deskriptora zahtjeva. Polje aio_sigevent je tipa struct sigevent. Ova struktura je definisana u i sadrži sljedeća polja:

  • int sigev_notify - način obavještenja. Važeće vrijednosti su SIGEV_NONE (ne šalji potvrde), SIGEV_SIGNAL (generira signal kada se zahtjev završi) i SIGEV_THREAD (pokreni navedenu funkciju u zasebnoj niti kada se zahtjev završi). Solaris 10 također podržava tip upozorenja SIGEV_PORT, o čemu se govori u dodatku ovom poglavlju.
  • int sigev_signo - broj signala koji će biti generisan kada se koristi SIGEV_SIGNAL.
  • union sigval sigev_value - parametar koji će biti proslijeđen rukovatelju signala ili funkciji obrade. Kada se koristi za asinhroni I/O, ovo je obično pokazivač na zahtjev.

    Kada koristite SIGEV_PORT, ovo bi trebala biti struktura pokazivača port_event_t koja sadrži broj porta i moguće dodatne podatke.

  • void (*sigev_notify_function)(unija sigval) je funkcija koja će biti pozvana kada se koristi SIGEV_THREAD.
  • pthread_attr_t *sigev_notify_attributes- atributi niti u kojoj će se pokrenuti
  • sigev_notify_function kada koristite SIGEV_THREAD .

Ne podržavaju sve libaio implementacije SIGEV_THREAD obavještenje. Neki Unix sistemi umjesto toga koriste nestandardno upozorenje SIGEV_CALLBACK. Kasnije ćemo u ovom predavanju raspravljati samo o obavijesti o signalima.

Neke aplikacije koriste SIGIO ili SIGPOLL kao broj signala (u Unix SVR4 to su isti signali). SIGUSR1 ili SIGUSR2 se takođe često koriste; Ovo je zgodno jer osigurava da se sličan signal neće pojaviti iz nekog drugog razloga.

Aplikacije u realnom vremenu također koriste brojeve signala u rasponu od SIGRTMIN do SIGRTMAX. Neke implementacije dodjeljuju poseban broj signala SIGAIO ili SIGASYNCIO za ovu svrhu, ali takav signal ne postoji u Solarisu 10.

Naravno, prije izvršavanja asinhronih zahtjeva koji su obaviješteni signalom, trebali biste instalirati rukovalac za ovaj signal. Za obavještavanje morate koristiti signale obrađene u SA_SIGINFO modu. Nije moguće instalirati takav rukovalac koristeći signal(2) i sigset(2) sistemske pozive; morate koristiti sigaction(2) . Instaliranje rukovalaca pomoću sigakcije

I/O kontrola.

blokovski orijentisan uređaja i bajt orijentisan

glavna ideja

Ključ princip je nezavisnost uređaja

· rukovanje prekidima,

· Upravljački programi,

Čini se jasnim da su mogući različiti prekidi iz raznih razloga. Dakle, broj je povezan s prekidom - takozvani broj prekida.

Ovaj broj jedinstveno odgovara određenom događaju. Sistem može prepoznati prekide i, kada se dogode, pokreće proceduru koja odgovara broju prekida.

Neki prekidi (prvih pet numeričkim redom) su rezervisani za upotrebu centralni procesor u slučaju bilo kakvih posebnih događaja kao što je pokušaj dijeljenja sa nulom, prelivanje, itd. (ovo su pravi interni prekidi J).

Hardverski prekidi se uvijek javljaju asinhrono u odnosu na pokrenute programe. Osim toga, može doći do nekoliko prekida istovremeno!

Kako bi se osiguralo da se sistem ne zbuni prilikom odlučivanja koji će prekid prvi servisirati, postoji posebna šema prioriteta. Svakom prekidu se dodjeljuje vlastiti prioritet. Ako se istovremeno dogodi više prekida, sistem daje prioritet onome s najvećim prioritetom, odgađajući obradu preostalih prekida na neko vrijeme.

Sistem prioriteta je implementiran na dva Intel 8259 (ili slična) čipa. Svaki čip je kontroler prekida i služi do osam prioriteta. Čipovi se mogu kombinovati (kaskadno) kako bi se povećao broj nivoa prioriteta u sistemu.

Nivoi prioriteta su skraćeno IRQ0 - IRQ15.


24. I/O kontrola. Sinhroni i asinhroni I/O.

Jedna od glavnih funkcija OS-a je upravljanje svim ulazno/izlaznim uređajima računara. OS mora slati komande uređajima, presresti prekide i rukovati greškama; takođe mora da obezbedi interfejs između uređaja i ostatka sistema. Za potrebe razvoja, interfejs bi trebao biti isti za sve tipove uređaja (nezavisnost uređaja). Više informacija o IV kontroli, pitanje 23.

Principi zaštite

Budući da je UNIX OS od samog početka zamišljen kao višekorisnički operativni sistem, problem autorizacije pristupa različitim korisnicima datotekama u sistemu datoteka uvijek je bio relevantan. Pod autorizacijom pristupa podrazumijevamo sistemske radnje koje dozvoljavaju ili odbijaju pristup datog korisnika To ovaj fajl ovisno o pravima pristupa korisnika i ograničenjima pristupa postavljenim za datoteku. Šema autorizacije pristupa koja se koristi u UNIX OS-u je toliko jednostavna i zgodna i istovremeno toliko moćna da je postala de facto standard modernih operativnih sistema (koji ne pretenduju da budu sistemi sa višerazinskom sigurnošću).

Zaštita datoteka

Kao što je uobičajeno u višekorisničkom operativnom sistemu, UNIX održava jedinstveni mehanizam kontrole pristupa datotekama i direktorijumima sistema datoteka. Svaki proces može pristupiti datoteci ako i samo ako prava pristupa specificirana za datoteku odgovaraju mogućnostima procesa.

Zaštita datoteka od neovlaštenog pristupa u UNIX-u zasniva se na tri činjenice. Prvo, svaki proces koji kreira datoteku (ili direktorij) povezan je s nekim korisničkim identifikatorom jedinstvenim u sistemu (UID - Korisnički identifikator), što se dalje može tumačiti kao identifikator vlasnika novokreirane datoteke. Drugo, svaki proces koji pokušava da dobije neki pristup datoteci ima par identifikatora povezanih sa njim - identifikator trenutnog korisnika i grupe. Treće, svaka datoteka je jedinstveno povezana sa svojim deskriptorom - i-čvorom.

Na posljednjoj činjenici vrijedi se detaljnije zadržati. Važno je shvatiti da nazivi datoteka i fajlovi kao takvi nisu ista stvar. Konkretno, kada postoji više tvrdih veza na istu datoteku, višestruka imena datoteka zapravo predstavljaju istu datoteku i povezana su s istim i-čvorom. Svaki i-čvor koji se koristi u sistemu datoteka uvijek jedinstveno odgovara jednoj i samo jednoj datoteci. I-čvor sadrži mnogo različitih informacija (većina je dostupna korisnicima kroz sistemske pozive stat i fstat), a među tim informacijama postoji dio koji omogućava sistemu datoteka da procijeni pravo datog procesa na pristup datu datoteku u traženom režimu.

Opšti principi zaštite su iste za sve postojeće verzije sistema: informacije o i-čvoru uključuju UID i GID trenutnog vlasnika datoteke (odmah nakon kreiranja datoteke, identifikatori njenog trenutnog vlasnika se postavljaju na odgovarajući važeći identifikator procesa kreatora, ali se kasnije može promijeniti sistemskim pozivima chown i chgrp). Osim toga, i-čvor datoteke pohranjuje skalu koja pokazuje šta korisnik - njegov vlasnik - može učiniti sa datotekom, šta korisnici koji pripadaju istoj korisničkoj grupi kao i vlasnik mogu učiniti s datotekom i šta drugi mogu učiniti sa fajlom korisnika. Mali detalji implementacije u različite opcije sistemi variraju.

28. Upravljanje pristupom datotekama u Windows NT. Liste prava pristupa.

Sistem kontrole pristupa u Windows NT-u karakteriše visok stepen fleksibilnosti, što se postiže zahvaljujući velikom broju subjekata i objekata pristupa, kao i granularnosti operacija pristupa.

Kontrola pristupa fajlovima

Za dijeljene resurse u Windows NT-u koristi se zajednički objektni model, koji sadrži takve sigurnosne karakteristike kao što su skup dozvoljenih operacija, identifikator vlasnika i lista kontrole pristupa.

Objekti u Windows NT-u se kreiraju za sve resurse kada su ili postanu zajednički - datoteke, direktorije, uređaji, memorijski dijelovi, procesi. Karakteristike objekata u Windows NT-u podijeljene su na dva dijela - opći dio, čiji sastav ne ovisi o vrsti objekta, i pojedinačni dio, određen tipom objekta.
Svi objekti su pohranjeni u strukturama stabla hijerarhijske strukture, čiji su elementi granani objekti (direktoriji) i lisni objekti (datoteke). Za objekte sistema datoteka, ova šema odnosa je direktan odraz hijerarhije direktorija i datoteka. Za objekte drugih tipova, dijagram hijerarhijskih odnosa ima svoj sadržaj, na primjer, za procese odražava odnose roditelj-dijete, a za uređaje odražava pripadnost određenoj vrsti uređaja i povezanost uređaja s drugim uređajima, tj. na primjer, SCSI kontroler sa diskovima.

Provjera prava pristupa za objekte bilo kojeg tipa se izvodi centralno koristeći Security Reference Monitor koji radi u privilegovanom načinu.

Za sistem Windows sigurnost NT karakteriše prisustvo velikog broja različitih unapred definisanih (ugrađenih) pristupnih subjekata – kako pojedinačnih korisnika tako i grupa. Dakle, sistem uvijek ima takve korisnike kao što su Adininistrator, System i Guest, kao i grupe Korisnici, Adiniiiistratori, Operatori naloga, Operatori servera, Svi i drugi. Poenta ovih ugrađenih korisnika i grupa je u tome što su oni obdareni određenim pravima, što administratoru olakšava kreiranje efikasnog sistema kontrole pristupa. Prilikom dodavanja novog korisnika, administrator može samo odlučiti kojoj grupi ili grupama će dodijeliti ovog korisnika. Naravno, administrator može kreirati nove grupe, kao i dodati prava ugrađenim grupama za implementaciju vlastite sigurnosne politike, ali u mnogim slučajevima ugrađene grupe su sasvim dovoljne.

Windows NT podržava tri klase operacija pristupa, koje se razlikuju po tipu subjekata i objekata uključenih u ove operacije.

□ Dozvole su skup operacija koje se mogu definisati za subjekte svih tipova u odnosu na objekte bilo koje vrste: fajlove, direktorijume, štampače, memorijske sekcije, itd. Dozvole po svojoj svrsi odgovaraju pravima pristupa datotekama i direktorijumima u QC UNIX-u .

□ Prava (korisnička prava) - definisana su za subjekte tipa grupe za obavljanje određenih sistemskih operacija: podešavanje sistemskog vremena, arhiviranje fajlova, isključivanje računara, itd. Ove operacije uključuju poseban objekt pristupa - operativni sistem u celini .

Prije svega prava, a ne dozvole, razlikuju jednu ugrađenu korisničku grupu od druge. Neka prava za ugrađenu grupu su također ugrađena - ne mogu se ukloniti iz ove grupe. Ostala prava ugrađene grupe mogu se izbrisati (ili dodati sa opšte liste prava).

□ Korisničke sposobnosti se određuju pojedinačnim korisnicima za obavljanje radnji koje se odnose na formiranje svog operativnog okruženja, na primjer, promjenu sastava glavnog menija programa, mogućnost korištenja stavke menija Run, itd. Smanjenjem skupa mogućnosti ( koji su podrazumevano dostupni korisniku), administrator može naterati korisnika da radi sa operativnim okruženjem koje administrator smatra najprikladnijim i štiti korisnika od mogućih grešaka.

Prava i dozvole date grupi se automatski dodeljuju njenim članovima, omogućavajući administratoru da tretira veliki broj korisnika kao jedinicu računovodstvenih informacija i minimizira njihove radnje.

Kada se korisnik prijavi u sistem, za njega se kreira tzv. pristupni token koji uključuje korisnički ID i ID-ove svih grupa kojima korisnik pripada. Token takođe sadrži: podrazumevanu listu kontrole pristupa (ACL), koja se sastoji od dozvola i primenjuje se na objekte kreirane procesom; lista korisničkih prava za izvođenje sistemskih radnji.

Svi objekti, uključujući datoteke, niti, događaje, čak i pristupne tokene, imaju sigurnosni deskriptor kada se kreiraju. Sigurnosni deskriptor sadrži listu kontrole pristupa - ACL.

Deskriptor fajla- nenegativan cijeli broj koji je OS dodijelio datoteci koju je otvorio proces.

ACL(engleski) Lista kontrole pristupa- lista kontrole pristupa, na engleskom se izgovara "ekl") - određuje ko ili šta može pristupiti određenom objektu i koje operacije je ovom subjektu dozvoljeno ili zabranjeno da izvodi na objektu.

Liste kontrole pristupa su osnova selektivnih sistema kontrole pristupa. ( Wiki)

Vlasnik objekta, obično korisnik koji ga je kreirao, ima selektivnu kontrolu nad pristupom objektu i može promijeniti ACL objekta kako bi dozvolio ili spriječio druge da pristupe objektu. Ugrađeni Windows administrator NT, za razliku od UNIX superkorisnika, možda nema neke dozvole za pristup objektu. Za implementaciju ove funkcije, ID-ovi administratora i administratorske grupe mogu biti uključeni u ACL, baš kao i obični ID-ovi korisnika. Međutim, administrator i dalje ima mogućnost obavljanja bilo kakvih operacija sa bilo kojim objektom, jer uvijek može postati vlasnik objekta, a zatim, kao vlasnik, dobiti puni skup dozvola. Međutim, administrator ne može vratiti vlasništvo prethodnom vlasniku objekta, tako da korisnik uvijek može saznati da je administrator radio sa njegovom datotekom ili štampačem.

Kada proces zatraži operaciju za pristup objektu u Windows NT-u, kontrola uvijek prelazi na sigurnosni monitor, koji upoređuje identifikatore korisnika i grupe korisnika iz tokena pristupa sa identifikatorima pohranjenim u ACL elementima objekta. Za razliku od UNIX-a, Windows NT ACL elementi mogu sadržati i liste dozvoljenih i liste operacija zabranjenih za korisnika.

Windows NT jasno definira pravila po kojima se ACL dodjeljuje novokreiranom objektu. Ako pozivni kod, prilikom kreiranja objekta, eksplicitno specificira sva prava pristupa novokreiranom objektu, tada sigurnosni sistem dodjeljuje ovaj ACL objektu.

Ako pozivni kod ne daje objektu ACL, a objekt ima ime, tada se primjenjuje princip nasljeđivanja dozvole. Sigurnosni sistem gleda ACL direktorija objekata u kojem je pohranjeno ime novog objekta. Neki od ACL unosa direktorija objekata mogu biti označeni kao nasljedni. To znači da se mogu dodijeliti novim objektima kreiranim u ovom direktoriju.

U slučaju kada proces nije eksplicitno specificirao ACL za objekt koji se kreira, a objekt direktorija nema nasljedne ACL unose, koristi se default ACL iz pristupnog tokena procesa.


29. Programski jezik Java. Java virtuelna mašina. Java tehnologija.

Java je objektno orijentisani programski jezik koji je razvio Sun Microsystems. Java aplikacije se obično kompajliraju u prilagođeni bajt kod kako bi se mogle pokrenuti na bilo kojoj Java virtuelnoj mašini (JVM), bez obzira na arhitekturu računara. Java programi se prevode u bajtkod koji se izvršava virtuelna mašina Java ( JVM) - program koji obrađuje bajt kod i kao interpreter prenosi instrukcije opremi, ali s tom razlikom što se bajt kod, za razliku od teksta, obrađuje mnogo brže.

Prednost ove metode izvršavanja programa je potpuna nezavisnost bajtkoda od operativni sistem i hardver, koji vam omogućava da pokrenete Java aplikacije na bilo kom uređaju za koji postoji odgovarajuća virtuelna mašina. Još jedna važna karakteristika Java tehnologije je njen fleksibilan sigurnosni sistem zbog činjenice da Izvršenje programa u potpunosti kontroliše virtuelna mašina. Svaka operacija koja premašuje utvrđene dozvole programa (na primjer, pokušaj neovlaštenog pristupa podacima ili povezivanje s drugim računarom) uzrokuje trenutni prekid.

Često, nedostaci koncepta virtuelne mašine uključuju činjenicu da izvršavanje bajtkoda od strane virtuelne mašine može smanjiti performanse programa i algoritama implementiranih u jeziku Java.

Java virtuelna mašina(skraćeno kao Java VM, JVM) - Java virtuelna mašina je glavni deo Java runtime sistema, takozvanog Java Runtime Environment (JRE). Java virtuelna mašina tumači i izvršava Java bajt-kod unapred generisan iz izvornog koda Java programa od strane Java kompajlera (javac). JVM se također može koristiti za pokretanje programa napisanih na drugim programskim jezicima. Na primjer, izvorni kod Ada može se kompajlirati u Java bajt kod, koji zatim može izvršiti JVM.

JVM je ključna komponenta Java platforme. Budući da su Java virtuelne mašine dostupne za mnogo hardvera i softverske platforme, Java se može smatrati i kao međuprogram i kao platforma za sebe, otuda i princip „napiši jednom, pokreni bilo gdje“. Korištenje jednog bajtkoda na više platformi omogućava da se Java opiše kao "kompajliraj jednom, pokreni bilo gdje".

Runtime okruženje

Programi namijenjeni za rad na JVM-u moraju biti kompajlirani u standardiziranom prijenosnom binarnom formatu, koji je obično predstavljen kao .class datoteke. Program se može sastojati od mnogo klasa smještenih u različitim datotekama. Da bi se olakšalo hostovanje velikih programa, neke .class datoteke se mogu upakovati zajedno u takozvanu .jar datoteku (skraćeno od Java Archive).

JVM izvršava .class ili .jar datoteke emulirajući instrukcije napisane za JVM tumačenjem ili korištenjem kompajlera za pravo na vrijeme (JIT) kao što je HotSpot iz Sun mikrosistema. Ovih dana, JIT kompilacija se koristi u većini JVM-ova za postizanje veće brzine.

Kao i većina virtuelnih mašina, Java virtuelna mašina ima arhitekturu orijentisanu na stog sličnu mikrokontrolerima i mikroprocesorima.

JVM, koji je instanca JRE (Java Runtime Environment), dolazi u igru ​​kada se izvršavaju Java programi. Nakon što se izvršavanje završi, ovu instancu briše sakupljač smeća. JIT je dio Java virtuelne mašine koja se koristi za ubrzavanje vremena izvršavanja aplikacija. JIT istovremeno kompajlira dijelove bajtkoda koji imaju sličnu funkcionalnost i stoga smanjuje količinu vremena potrebnog za kompilaciju.

j2se (java 2 standardno izdanje) – standardna biblioteka uključuje:

GUI, NET, baza podataka...


30. .NET platforma. Glavne ideje i odredbe. .NET programski jezici.

.NET Framework - softverska tehnologija iz Microsofta, dizajniran za kreiranje redovnih programa i web aplikacija.

Jedna od glavnih ideja Microsoft .NET-a je interoperabilnost različitih usluga napisanih na različitim jezicima. Na primjer, usluga napisana u C++ za Microsoft .NET može pozvati metodu klase iz biblioteke napisane u Delphiju; u C# možete napisati klasu naslijeđenu od klase upisane u Visual basic.NET, a izuzetak koji je izbacila metoda napisana u C# može se uhvatiti i obrađivati ​​u Delphiju. Svaka biblioteka (sklop) u .NET-u ima informacije o svojoj verziji, što vam omogućava da eliminišete moguće sukobe između različite verzije skupštine.

Aplikacije se također mogu razvijati u uređivaču teksta i koristiti kompajler konzole.

Kao i Java tehnologija, .NET razvojno okruženje kreira bajt kod za izvršavanje od strane virtuelne mašine. Ulazni jezik ove mašine u .NET-u se zove MSIL (Microsoft Intermediate Language), ili CIL (Common Intermediate Language, kasnija verzija), ili jednostavno IL.

Upotreba bajtkoda omogućava vam da postignete funkcionalnost na više platformi na nivou kompajliranog projekta (u .NET terminima: montaža), a ne samo na nivou izvornog teksta, kao što je, na primjer, u C. Prije pokretanja asemblera u CLR runtime-u, bajt kod se konvertuje od strane JIT kompajlera ugrađenog u okruženje (baš na vrijeme, on-the-fly kompilacija) u mašinske kodove ciljnog procesora. Također je moguće kompajlirati sklop u izvorni kod za odabranu platformu pomoću uslužnog programa NGen.exe koji se isporučuje s .NET Framework-om.

Tokom postupka prevođenja, izvorni kod programa (napisan u SML, C#, Visual Basic, C++ ili bilo kom drugom programskom jeziku koji podržava .NET) prevodilac konvertuje u tzv. povezana datoteka biblioteke (Dinamički povezana). Biblioteka, DLL) ili izvršnu datoteku(Izvršni, EXE).

Naravno, za svaki kompajler (bilo da se radi o kompajleru jezika C#, csc.exe ili Visual Basic, vbc.exe), okruženje za izvršavanje izvršava neophodno mapiranje tipova koji se koriste u CTS tipove, a programski kod u kod " apstraktna mašina” .NET - MSIL (Microsoft Intermediate Language).

Na kraju softverski projekat formira se u obliku sklopa - samodovoljne komponente za primenu, replikaciju i ponovnu upotrebu. Skup je identifikovan digitalni potpis autora i jedinstveni broj verzije.

Ugrađeni programski jezici (uključeni u .NET Framework):

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


31. Funkcionalne komponente OS-a. Upravljanje fajlovima

Funkcionalne komponente OS-a:

Funkcije operativnog sistema samostalnog računara obično su grupisane ili prema tipovima lokalnih resursa kojima OS upravlja ili prema specifičnim zadacima koji se primenjuju na sve resurse. Ponekad se takve grupe funkcija nazivaju podsistemi. Najvažniji podsistemi upravljanja resursima su podsistemi za upravljanje procesima, memorijom, datotekama i vanjskim uređajima, a podsistemi zajednički za sve resurse su podsistemi korisnički interfejs, zaštita podataka i administracija.

Upravljanje fajlovima:

Sposobnost OS-a da "zaštiti" složenost stvarnog hardvera vrlo se jasno manifestira u jednom od glavnih podsistema OS - sistemu datoteka.

Sistem datoteka povezuje medij za skladištenje s jedne strane i API (interfejs za programiranje aplikacije) za pristup datotekama s druge strane. Kada aplikacijski program pristupi datoteci, nema pojma kako se informacije u određenoj datoteci nalaze, niti na koju vrstu fizičkog medija (CD, tvrdi disk, magnetna traka ili fleš memorijska jedinica) su snimljene. Sve što program zna je ime datoteke, njena veličina i atributi. On prima ove podatke od drajvera sistema datoteka. Sistem datoteka je taj koji određuje gdje i kako će datoteka biti zapisana na fizički medij (na primjer, tvrdi disk).

Sa tačke gledišta operativnog sistema, ceo disk je kolekcija klastera veličine od 512 bajtova i više. Upravljački programi sistema datoteka organiziraju klastere u datoteke i direktorije (koji su zapravo datoteke koje sadrže listu datoteka u tom direktoriju). Ti isti drajveri prate koji su klasteri trenutno u upotrebi, koji su besplatni, a koji su označeni kao neispravni.

Međutim, sistem datoteka nije nužno direktno povezan s fizičkim medijem za pohranu. Postoje virtuelni sistemi datoteka, kao i mrežni sistemi datoteka, koji su samo način pristupa datotekama koje se nalaze na udaljenom računaru.

U najjednostavnijem slučaju, sve datoteke na datom disku su pohranjene u jednom direktoriju. Ova jednorazinska šema je korištena u CP/M i prvoj verziji MS-DOS-a 1.0. Hijerarhijski sistem datoteka sa ugniježđenim direktorijima prvo se pojavio u Multics-u, zatim u UNIX-u.

Katalozi za različiti pogoni može formirati nekoliko odvojenih stabala, kao u DOS/Windows, ili se spojiti u jedno stablo zajedničko za sve diskove, kao u Sistemi slični UNIX-u Oh.

U stvari, u DOS/Windows sistemima, kao iu sistemima sličnim UNIX-u, postoji jedan korijenski direktorij sa poddirektorijumima koji se zovu “c:”, “d:” itd. Particije tvrdog diska se montiraju u ove direktorije. To jest, c:\ je samo veza do file:///c:/. Međutim, za razliku od sistema datoteka sličnih UNIX-u, u Windows-u je zabranjeno pisanje u korijenski direktorij, kao i gledanje njegovog sadržaja.

U UNIX-u postoji samo jedan korijenski direktorij, a svi ostali fajlovi i direktoriji su ugniježđeni u njemu. Da biste pristupili datotekama i direktorijima na disku, trebate montirati disk pomoću naredbe mount. Na primjer, da biste otvorili datoteke na CD-u, morate jednostavno reći operativnom sistemu: „uzmi sistem datoteka na ovom CD-u i prikaži ga u direktoriju /mnt/cdrom. Svi fajlovi i direktorijumi koji se nalaze na CD-u će se pojaviti u ovom /mnt/cdrom direktorijumu, koji se zove tačka montiranja. Na većini sistema sličnih UNIX-u uklonjivi diskovi(floppy diskovi i CD-ovi), fleš diskovi i drugi eksterni uređaji za skladištenje se montiraju u /mnt, /mount ili /media direktorijum. Unix i operativni sistemi slični UNIX-u takođe dozvoljavaju da se diskovi automatski montiraju kada se operativni sistem pokrene.

Obratite pažnju na upotrebu kosih crta u datoteci Windows sistemi, UNIX-u i operativnim sistemima sličnim UNIX-u (U Windows-u se koristi obrnuta kosa crta “\”, a u UNIX-u i operativnim sistemima sličnim UNIX-u obična kosa crta “/”)

Osim toga, treba napomenuti da vam gornji sistem omogućava montiranje ne samo sistema datoteka fizičkih uređaja, već i pojedinačnih direktorija (parametar --bind) ili, na primjer, ISO slika(opcija petlje). Dodaci kao što je FUSE također vam omogućavaju da montirate, na primjer, cijeli direktorij na FTP i vrlo veliki broj različitih resursa.

Još složenija struktura se koristi u NTFS i HFS. U ovim sistem datoteka svaka datoteka je skup atributa. Atributi uključuju ne samo tradicionalni sistem samo za čitanje, već i naziv datoteke, veličinu, pa čak i sadržaj. Dakle, za NTFS i HFS, ono što je pohranjeno u datoteci je samo jedan od njenih atributa.

Slijedeći ovu logiku, jedan fajl može sadržavati nekoliko varijacija sadržaja. Tako se u jednoj datoteci može pohraniti više verzija istog dokumenta, kao i dodatni podaci (ikona datoteke, program povezan s datotekom). Ova organizacija je tipična za HFS na Macintosh-u.


32. Funkcionalne komponente OS-a. Upravljanje procesima.

Upravljanje procesima:

Najvažniji dio operativnog sistema, koji direktno utiče na funkcionisanje računara, je podsistem upravljanja procesima. Proces (ili drugim riječima, zadatak) je apstrakcija koja opisuje pokrenuti program. Za operativni sistem, proces je jedinica rada, zahtjev za potrošnjom sistemskih resursa.

U multitasking (višeprocesnom) sistemu, proces može biti u jednom od tri glavna stanja:

RUNNING - aktivno stanje procesa, tokom kojeg proces ima sve potrebne resurse i direktno ga izvršava procesor;

ČEKANJE - pasivno stanje procesa, proces je blokiran, ne može se izvršiti iz svojih internih razloga, čeka da se dogodi neki događaj, na primjer, završetak I/O operacije, primanje poruke od drugog proces, ili oslobađanje nekog resursa koji mu je potreban;

READY je također pasivno stanje procesa, ali je u ovom slučaju proces blokiran zbog okolnosti koje su van njega: proces ima sve resurse potrebne za njega, spreman je za izvršenje, ali procesor je zauzet izvršavanjem drugog procesa.

Tokom životni ciklus svaki proces se kreće iz jednog stanja u drugo u skladu sa algoritmom planiranja procesa implementiranim u datom operativnom sistemu.

CP/M standard

Kreiranje operativnih sistema za mikroračunare počelo je sa OS SR/M. Razvijen je 1974. godine, nakon čega je instaliran na mnoge 8-bitne mašine. U okviru ovog operativnog sistema kreirana je značajna količina softvera, uključujući prevodioce sa BASIC, Pascal, C, Fortran, Cobol, Lisp, Ada i mnogih drugih, tekstualnih jezika. Omogućavaju vam da pripremite dokumente mnogo brže i praktičnije od upotrebe pisaće mašine.

MSX standard

Ovaj standard je odredio ne samo OS, već i karakteristike hardvera za školske računare. Prema MSX standardu, auto je morao imati RAM zapremina od najmanje 16 K, trajna memorija od 32 K sa ugrađenim prevodiocem za BASIC jezik, grafički displej u boji rezolucije 256x192 piksela i 16 boja, trokanalni generator zvuka od 8 oktava, paralelni port za povezivanje štampača i kontrolera za upravljanje eksternim diskom povezanim eksterno.

Operativni sistem takve mašine je morao da ima sledeća svojstva: potrebna memorija - ne više od 16 K, kompatibilnost sa CP/M na nivou sistemskih poziva, kompatibilnost sa DOS-om u formatima datoteka na eksterni diskovi baziran na floppy magnetnim diskovima, podrška za prevodioce BASIC, C, Fortran i Lisp jezika.

Pi - sistem

U početnom periodu razvoja personalni računari Napravljen je operativni sistem USCD p-system. Osnova ovog sistema bila je takozvana P-mašina - program koji emulira hipotetički univerzalni kompjuter. P-mašina simulira rad procesora, memorije i eksternih uređaja izvršavanjem posebnih instrukcija zvanih P-kod. Softverske komponente Pi sistemi (uključujući kompajlere) se kompajliraju u P kodu, aplikacioni programi se takođe kompajliraju u P kod. Dakle, glavni karakteristična karakteristika Sistem je imao minimalnu zavisnost od karakteristika PC opreme. To je ono što je osiguralo prenosivost Pi-sistema na Razne vrste automobili Kompaktnost P-koda i zgodno implementirani mehanizam straničenja omogućili su izvršavanje relativno velikih programa na računarima sa malim RAM-om.

I/O kontrola.

I/O uređaji se dijele na dvije vrste: blokovski orijentisan uređaja i bajt orijentisan uređaja. Blokovski orijentisani uređaji pohranjuju informacije u blokovima fiksne veličine, od kojih svaki ima svoju adresu. Najčešći blok orijentirani uređaj je disk. Bajt-orijentisani uređaji se ne mogu adresirati i ne dozvoljavaju operacije pretraživanja; oni generišu ili konzumiraju niz bajtova. Primjeri su terminali, linijski štampači, mrežni adapteri. Elektronska komponenta se naziva kontroler uređaja ili adapter. Operativni sistem se bavi kontrolerom. Kontroler obavlja jednostavne funkcije, prati i ispravlja greške. Svaki kontroler ima nekoliko registara koji se koriste za komunikaciju sa centralnim procesorom. OS izvodi I/O pisanjem komandi u registre kontrolera. IBM PC floppy disk kontroler prihvaća 15 naredbi kao što su READ, WRITE, SEEK, FORMAT, itd. Kada je naredba prihvaćena, procesor napušta kontroler i obavlja druge poslove. Kada se naredba završi, kontroler izdaje prekid za prijenos kontrole nad procesorom na operativni sistem, koji mora provjeriti rezultate operacije. Procesor dobija rezultate i status uređaja čitajući informacije iz registara kontrolera.

glavna ideja organizacija I/O softvera sastoji se od podjele na nekoliko nivoa, pri čemu donji nivoi obezbeđuju zaštitu karakteristika opreme od gornjih, a oni obezbeđuju korisničko sučelje za korisnike.

Ključ princip je nezavisnost uređaja. Tip programa ne treba da zavisi od toga da li čita podatke sa diskete ili sa diskete tvrdi disk. Još jedno važno pitanje za I/O softver je rukovanje greškama. Uopšteno govoreći, greške treba tretirati što bliže hardveru. Ako kontroler otkrije grešku čitanja, mora pokušati da je ispravi. Ako ne uspije, upravljački program uređaja mora popraviti greške. I samo ako niži nivo ne može da se nosi sa greškom, on prijavljuje grešku gornjem nivou.

Još jedno ključno pitanje je korištenje blokirajućih (sinhronih) i neblokirajućih (asinhronih) prijenosa. Većina fizičkih I/O operacija se izvodi asinhrono - procesor započinje prijenos i prelazi na drugi posao sve dok se ne dogodi prekid. Neophodno je da I/O operacije budu blokirane - nakon naredbe READ program automatski pauzira dok podaci ne stignu u programski bafer.

Poslednji problem je što su neki uređaji zajednički (diskovi: više korisnika koji istovremeno pristupaju disku nije problem), dok su drugi namenski (štampači: linije koje štampaju različiti korisnici ne mogu se mešati).

Da biste riješili ove probleme, preporučljivo je podijeliti I/O softver na četiri sloja (slika 2.30):

· rukovanje prekidima,

· drajveri uređaja,

· Sloj operativnog sistema nezavisan od uređaja,

· Prilagođeni softverski sloj.

Koncept hardverskog prekida i njegova obrada.

Asinhroni ili eksterni (hardverski) prekidi su događaji koji dolaze iz vanjskih izvora (na primjer, perifernih uređaja) i može se dogoditi u bilo kojem proizvoljnom trenutku: signal sa tajmera, mrežna kartica ili disk drajv, pritiskanje tastera na tastaturi, pomeranje miša; Oni zahtijevaju hitnu reakciju (obradu).

Gotovo svi ulazno/izlazni sistemi u računaru rade koristeći prekide. Konkretno, kada pritisnete tipke ili kliknete mišem, hardver generiše prekide. Kao odgovor na njih, sistem, shodno tome, čita kod pritisnute tipke ili pamti koordinate kursora miša. Prekide generira disk kontroler, adapter lokalna mreža, serijski portovi, audio adapter i drugi uređaji.