Asinhronā faila ievades izvade c. Termini: datu ievade-izvade sinhrona un asinhrona. Piemērs: Gaidīšanas taimera izmantošana

Lietojumprogrammu programmētājam nav jādomā par to, kā sistēmas programmas darbojas ar ierīču reģistriem. Sistēma slēpj no lietojumprogrammām informāciju par zema līmeņa darbu ar ierīcēm. Tomēr atšķirība starp ievades/izvades organizēšanu, izmantojot aptaujas un pārtraukumus, tiek atspoguļota arī sistēmas funkciju līmenī, sinhronās un asinhronās I/O funkciju veidā.

Izpildīt funkciju sinhronā I/O ietver I/O darbības sākšanu un gaidīšanu, līdz šī darbība tiks pabeigta. Tikai pēc I/O pabeigšanas funkcija atgriež vadību izsaucējai programmai.

Sinhronā I/O ir programmētāju vispazīstamākais veids, kā strādāt ar ierīcēm. Šādā veidā darbojas standarta programmēšanas valodas ievades/izvades rutīnas.

Funkcijas izsaukšana asinhronā I/O nozīmē tikai attiecīgās darbības sākšanu. Pēc tam funkcija nekavējoties atgriež vadību izsaucējai programmai, negaidot, līdz darbība tiks pabeigta.

Apsveriet, piemēram, asinhrono datu ievadi. Ir skaidrs, ka programma nevar piekļūt datiem, kamēr tā nav pārliecināta, ka tās ievade ir pabeigta. Taču ir pilnīgi iespējams, ka programma pagaidām var veikt citus darbus, nevis stāvēt dīkstāvē.

Agri vai vēlu programmai tomēr jāsāk strādāt ar ievadītajiem datiem, taču vispirms jāpārliecinās, vai asinhronā darbība jau ir pabeigta. Šim nolūkam dažādas operētājsistēmas nodrošina rīkus, kurus var iedalīt trīs grupās.

· Gaida operācijas pabeigšanu. Tas ir kā "sinhronās darbības otrā puse". Programma vispirms sāka darbību, pēc tam veica dažas ārējas darbības un tagad gaida, līdz darbība tiks pabeigta, tāpat kā ar sinhrono ievadi/izvadi.

· Operācijas pabeigšanas pārbaude. Šajā gadījumā programma negaida, bet tikai pārbauda asinhronās darbības statusu. Ja ievade/izvade vēl nav pabeigta, tad programmai ir iespēja kādu laiku staigāt.

· Aizpildīšanas procedūras norīkošana. Šajā gadījumā, uzsākot asinhrono darbību, lietotāja programma norāda sistēmai lietotāja procedūras vai funkcijas adresi, kas sistēmai jāizsauc pēc operācijas pabeigšanas. Programma pati par sevi var vairs neinteresēties par ievades/izvades gaitu, sistēma par to tai atgādinās īstajā laikā, zvanot pa tālr. norādītā funkcija. Šī metode ir viselastīgākā, jo lietotājs var veikt jebkādas darbības pabeigšanas procedūrā.

Windows lietojumprogrammā ir pieejami visi trīs veidi, kā pabeigt asinhronās darbības. UNIX nav asinhrono I/O funkciju, taču to pašu asinhrono efektu var panākt citā veidā, palaižot papildu procesu.

Asinhronā I/O dažos gadījumos var uzlabot veiktspēju un nodrošināt papildu funkcionalitāte. Bez tādiem vienkāršākā forma asinhrona ievade, piemēram, "tastatūras ievade bez gaidīšanas", daudzas Datorspēles un simulatori. Tajā pašā laikā programmas loģika, kas izmanto asinhronās darbības, ir sarežģītāka nekā ar sinhronām darbībām.

Kāda ir iepriekš minētā saikne starp sinhronajām/asinhronajām operācijām un ievades/izvades organizēšanas metodēm, kas tika aplūkotas iepriekšējā punktā? Atbildi uz šo jautājumu pats.

Asinhronā I/O, izmantojot vairākus pavedienus

Pārklāšanās un paplašināta I/O ļauj asinhroni veikt ievadi/izvadi vienā pavedienā, lai gan OS izveido savus pavedienus, lai atbalstītu šo funkcionalitāti. Vienā vai otrā veidā šāda veida metodes bieži tiek izmantotas daudzās agrīnās operētājsistēmās, lai atbalstītu ierobežotas asinhrono darbību veikšanas formas viena pavediena sistēmās.

Tomēr Windows nodrošina vairāku pavedienu atbalstu, tāpēc ir iespējams sasniegt tādu pašu efektu, veicot sinhronas ievades/izvades darbības vairākiem neatkarīgi darbojošiem pavedieniem. Šīs iespējas iepriekš tika demonstrētas, izmantojot daudzpavedienu serverus un programmu grepMT (7. nodaļa). Turklāt pavedieni nodrošina konceptuāli konsekventu un, iespējams, daudz vienkāršāku veidu, kā veikt asinhronās I/O darbības. Alternatīva programmās 14.1 un 14.2 izmantotajām metodēm būtu katram pavedienam piešķirt savu faila deskriptoru, lai katrs pavediens varētu sinhroni apstrādāt katru ceturto ierakstu.

Šis pavedienu izmantošanas veids ir demonstrēts programmā atouMT, kas grāmatā nav dota, bet ir iekļauta tīmekļa vietnē ievietotajā materiālā. Programma atouMT ne tikai spēj darboties jebkuras kontroles vadībā Windows versijas, bet arī vienkāršāka nekā jebkura no divām asinhrono I/O programmu versijām, jo ​​resursu izmantošanas uzskaite šajā gadījumā nav tik sarežģīta. Katrs pavediens vienkārši uztur savus buferus savā kaudzē un veic cilpas, izmantojot sinhronas lasīšanas, konvertēšanas un rakstīšanas darbību secību. Tajā pašā laikā programmas veiktspēja saglabājas diezgan augstā līmenī.

Piezīme

Programma atouMT.c, kas atrodas vietnē, satur komentārus par vairākām iespējamām kļūmēm, kas var jūs sagaidīt, atļaujot vairākiem pavedieniem vienlaikus piekļūt vienam failam. Jo īpaši visi atsevišķie failu rokturi ir jāizveido, izmantojot funkciju CreateHandle, nevis funkciju DuplicateHandle.

Personīgi es dodu priekšroku vairāku pavedienu failu apstrādei, nevis asinhronai I/O. Pavedienus ir vieglāk programmēt un vairumā gadījumu tie nodrošina labāku veiktspēju.

Šim vispārīgajam noteikumam ir divi izņēmumi. Pirmais no tiem, kā parādīts iepriekš šajā nodaļā, attiecas uz situācijām, kurās var būt tikai viena neizpildīta darbība, un sinhronizācijas nolūkos var izmantot faila deskriptoru. Otrs, svarīgāks izņēmums ir asinhrono I/O pabeigšanas portu gadījumā, kas tiks apspriests šīs nodaļas beigās.

No grāmatas Veidosim kompilatoru! autors Krenšovs Džeks

No grāmatas Programmēšana Prologā autors Kloksins U.

No grāmatas C# 2005 programmēšanas valoda un .NET 2.0 platforma. autors Troelsens Endrjū

No grāmatas Informix datu bāzes administratora rokasgrāmata. autors Kustovs Viktors

No grāmatas Microsoft Visual C++ un MFC. Programmēšana operētājsistēmām Windows 95 un Windows NT autors Frolovs Aleksandrs Vjačeslavovičs

2.2.3.2. Asinhronā I/O Lai paātrinātu I/O darbības, serveris izmanto savu asinhronās ievades/izvades (AIO) pakotni vai kodola asinhronās ievades/izvades (KAIO) pakotni, ja tāda ir pieejama. Lietotāju I/O pieprasījumi tiek apstrādāti asinhroni,

No grāmatas Objektorientētas programmēšanas pamati Autors Meyer Bertrand

I/O Kā zināms, operatori<< и >> veikt maiņu skaitliskā vērtība pa kreisi un pa labi par noteiktu bitu skaitu. Mūsu grāmatas programmas arī izmanto šos paziņojumus, lai ievadītu informāciju no tastatūras un parādītu to ekrānā. Ja kreisajā pusē

No grāmatas System Programming in Windows vide autors Hārts Džonsons M

Ievade un izvade Divas KODULA bibliotēku klases nodrošina pamata ievades un izvades iespējas: FILE un STD_FILES. Operācijas, kas definētas ar objektu f, kuras tips ir FILE, ir šādas: create f.make ("nosaukums") — saista f ar failu ar nosaukumu. nosaukums. f.open_write — Atvērt f rakstīšanai f.open_read — Open f for

No grāmatas Programmēšana rubīnā [Valodas ideoloģija, pielietojuma teorija un prakse] autors Fultons Hals

14. NODAĻA Asinhronās I/O un pabeigšanas porti I/O darbības pēc būtības ir lēnākas nekā cita veida apstrāde. Šīs palēnināšanās iemesli ir šādi: Kavēšanās meklēšanai pavadītā laika dēļ

No grāmatas Programmēšana prologā mākslīgajam intelektam autors Bratko Ivans

10.1.7. Vienkārša I/O Jūs jau esat iepazinies ar dažām I/O metodēm no Kernel moduļa; mēs viņiem piezvanījām, nenorādot zvanītāju. Tie ietver funkcijas get un puts, kā arī print, printf un p (pēdējā izsauc objekta pārbaudes metodi, lai to izdrukātu mums saprotamā veidā).

No grāmatas C programmēšanas valoda personālajam datoram autors Bočkovs S. O.

No grāmatas Linux programmēšana ar piemēriem autors Robins Arnolds

6. nodaļa Ievade un izvade Šajā nodaļā mēs apskatīsim dažas iebūvētās iespējas datu ierakstīšanai failā un datu nolasīšanai no tā. Šādus rīkus var izmantot arī programmu datu objektu formatēšanai, lai iegūtu vēlamo to ārējās attēlojuma formu.

No grāmatas Java programmēšanas pamati autors Suhovs S.A.

Ievade un izvade Ievades un izvades funkcijas standarta C bibliotēkā ļauj nolasīt datus no failiem vai saņemt tos no ievades ierīcēm (piemēram, tastatūras) un ierakstīt datus failos vai izvadīt tos dažādas ierīces(piemēram, uz printeri) Ievades/izvades funkcijas

No grāmatas QT 4: GUI programmēšana C++ valodā autors Blanšeta Jasmīna

4.4. Ievade un izvade Visas Linux I/O darbības tiek veiktas, izmantojot failu deskriptorus. Šajā sadaļā ir aprakstīti failu deskriptori, aprakstīts, kā tos iegūt un atbrīvot, un paskaidrots, kā ar tiem izpildīt.

No grāmatas Ideāls programmētājs. Kā kļūt par programmatūras izstrādes profesionāli autors Mārtiņš Roberts S.

No autora grāmatas

12. nodaļa: I/O Gandrīz katrai lietojumprogrammai ir jālasa vai jāraksta faili vai jāveic citas I/O darbības. Qt nodrošina izcilu I/O atbalstu ar QIODevice, jaudīgu "ierīču" abstrakciju, kas spēj lasīt un rakstīt.

No autora grāmatas

Ievade un izvade Man arī šķiet ļoti svarīgi, lai manus rezultātus veicinātu atbilstoša “ievade”. Rakstīšana programmas kods- radošs darbs. Mans radošums parasti ir vislabākajā līmenī, kad saskaros ar radošu izaicinājumu.

Uzdevumu, kas izdevis I/O operācijas pieprasījumu, vadītājs novieto stāvoklī, kurā tiek gaidīta pasūtītās darbības pabeigšana. Kad vadītājs saņem ziņojumu no pabeigšanas sadaļas, ka darbība ir pabeigta, tas novieto uzdevumu gatavības stāvoklī un turpina darbu. Šī situācija atbilst sinhronajai I/O. Sinhronā I/O ir standartaprīkojums lielākajā daļā operētājsistēmu. Lai palielinātu lietojumprogrammu izpildes ātrumu, tika ierosināts nepieciešamības gadījumā izmantot asinhrono I/O.

Vienkāršākā asinhronās izvades versija ir tā sauktā buferizvade uz ārējo ierīci, kurā dati no aplikācijas netiek pārsūtīti tieši uz I/O ierīci, bet gan uz speciālu sistēmas buferi. Šajā gadījumā loģiski, ka lietojumprogrammas izvades darbība tiek uzskatīta par pabeigtu nekavējoties, un uzdevums var negaidīt, līdz tiks pabeigts faktiskais datu pārsūtīšanas process uz ierīci. Process reāla produkcija Datus no sistēmas bufera apstrādā I/O uzraugs. Protams, īpašs sistēmas process I/O uzrauga vadībā ir atbildīgs par bufera piešķiršanu no sistēmas atmiņas apgabala. Tātad aplūkotajā gadījumā izvade būs asinhrona, ja, pirmkārt, I/O pieprasījums norādīja uz datu buferizācijas nepieciešamību, otrkārt, ja I/O ierīce pieļauj šādas asinhronas darbības un tas ir atzīmēts UCB. Varat arī organizēt asinhrono datu ievadi. Tomēr, lai to izdarītu, ir nepieciešams ne tikai piešķirt atmiņas apgabalu no ierīces nolasīto datu pagaidu glabāšanai un saistīt piešķirto buferi ar uzdevumu, kas pasūtīja darbību, bet arī sadalīt I/O pieprasījumu. darbību divās daļās (divos pieprasījumos). Pirmajā pieprasījumā ir norādīta datu nolasīšanas darbība, līdzīgi kā tas tiek darīts ar sinhrono I/O. Taču pieprasījuma veids (kods) ir atšķirīgs, un pieprasījumā ir norādīts vismaz viens papildu parametrs - sistēmas objekta nosaukums (kods), ko uzdevums saņem, atbildot uz pieprasījumu un kas identificē piešķirto buferi. Saņemot bufera nosaukumu (šo sistēmas objektu mēs parasti tā sauksim, lai gan dažādās operētājsistēmās tā apzīmēšanai izmanto arī citus terminus, piemēram, klase), uzdevums turpina savu darbu. Šeit ir ļoti svarīgi uzsvērt, ka asinhronas datu ievades pieprasījuma rezultātā I/O uzraugs uzdevumu nenostāda stāvoklī, lai gaidītu I/O darbības pabeigšanu, bet gan paliek darba vai izpildei gatavs stāvoklis. Pēc kāda laika, izpildot nepieciešamo kodu, ko definējis programmētājs, uzdevums izdod otru pieprasījumu pabeigt I/O darbību. Šajā otrajā pieprasījumā tai pašai ierīcei, kurai, protams, ir cits kods (vai pieprasījuma nosaukums), uzdevums norāda sistēmas objekta nosaukumu (buferis asinhronai datu ievadei) un, ja datu nolasīšanas darbība ir veiksmīga, nekavējoties saņem to no sistēmas bufera. Ja dati vēl nav pilnībā pārsūtīti no ārējās ierīces uz sistēmas buferi, I/O uzraugs pārslēdz uzdevumu stāvoklī, kurā gaida I/O darbības pabeigšanu, un tad viss atgādina parasto sinhrono datu ievadi.

Parasti asinhronā I/O tiek nodrošināta lielākajā daļā vairāku programmēšanas operētājsistēmu, it īpaši, ja OS atbalsta vairākuzdevumu veikšanu, izmantojot pavedienu mehānismu. Tomēr, ja nav skaidras asinhronas ievades/izvades, tās idejas varat īstenot pats, organizējot neatkarīgu pavedienu datu izvadei.

I/O aparatūru var uzskatīt par kolekciju aparatūras procesori, kas spēj darboties paralēli viens pret otru, kā arī attiecībā pret centrālo procesoru (procesoriem). Uz šādiem “procesoriem” t.s ārējie procesi. Piemēram, ārējai ierīcei (ievades/izvades ierīcei) ārējais process var būt darbību kopums, kas pārvērš drukas galviņu, pavirza papīru par vienu pozīciju, maina tintes krāsu vai izdrukā dažas rakstzīmes. Ārējie procesi, izmantojot ievades/izvades aparatūru, mijiedarbojas gan savā starpā, gan ar parastajiem “programmatūras” procesiem, kas darbojas centrālajā procesorā. Svarīgs fakts ir tas, ka ārējo procesu izpildes ātrums būtiski atšķirsies (dažreiz par lielumu vai vairāk) no parasto procesu izpildes ātruma (“ iekšējais") procesi. To normālai darbībai ārējie un iekšējie procesi ir jāsinhronizē. Lai izlīdzinātu spēcīgas ātruma neatbilstības efektu starp iekšējiem un ārējiem procesiem, tiek izmantota iepriekš minētā buferizācija. Tādējādi var runāt par paralēlu mijiedarbības procesu sistēmu (skat. 6. nodaļu).

Buferi ir būtisks resurss attiecībā uz iekšējiem (programmatūras) un ārējiem procesiem, kuri paralēli to izstrādes laikā informatīvi mijiedarbojas. Caur buferi(-iem) dati tiek vai nu nosūtīti no kāda procesa uz adresējamu ārējo (datu izvades darbība uz ārēju ierīci), vai no ārēja procesa tiek pārsūtīti uz kādu programmatūras procesu (datu lasīšanas darbība). Buferizācijas kā informācijas mijiedarbības līdzekļa ieviešana rada šo sistēmas buferu pārvaldības problēmu, kas tiek atrisināta ar OS uzraudzības daļas palīdzību. Šajā gadījumā uzrauga uzdevums ir ne tikai piešķirt un atbrīvot buferus sistēmas atmiņas zonā, bet arī sinhronizēt procesus atbilstoši darbības stāvoklim, lai aizpildītu vai atbrīvotu buferus, kā arī gaidīt tos, ja brīvu nav. ir pieejami buferi, un ievades pieprasījumam/izvadei ir nepieciešama buferizācija. Parasti I/O vadītājs izmanto standarta sinhronizācijas rīkus, kas pieņemti noteiktā OS, lai atrisinātu uzskaitītos uzdevumus. Tāpēc, ja operētājsistēmā ir izstrādāti rīki mijiedarbojošo lietojumprogrammu un uzdevumu paralēlas izpildes problēmu risināšanai, tad, kā likums, tā realizē arī asinhrono ievadi/izvadi.

sinhronais modelis ieejas izejas. Read(2) , write(2) sistēmas izsaukumi un to analogi atgriež kontroli tikai pēc tam, kad dati jau ir nolasīti vai ierakstīti. Tā rezultātā pavediens bieži tiek bloķēts.

Piezīme

Patiesībā tas nav tik vienkārši. Read(2) ir jāgaida, līdz dati tiks fiziski nolasīti no ierīces, bet write(2) pēc noklusējuma darbojas rakstīšanas slinkuma režīmā: tas atgriežas pēc datu pārsūtīšanas uz sistēmas buferi, bet parasti pirms dati tiek fiziski pārsūtīti uz ierīci. Tas parasti ievērojami uzlabo programmas novēroto veiktspēju un ļauj atmiņu no datiem izmantot citiem mērķiem tūlīt pēc rakstīšanas(2) atgriešanās. Bet aizkavētai ierakstīšanai ir arī būtiski trūkumi. Galvenais ir tas, ka par fiziskas darbības rezultātu jūs uzzināsit nevis uzreiz pēc atgriešanas koda write(2) , bet tikai kādu laiku pēc atgriešanas, parasti ar nākamā write(2) izsaukuma atgriešanas kodu. Dažām lietojumprogrammām - darījumu monitoriem, daudzām reāllaika programmām utt. - tas ir nepieņemami, un tie ir spiesti izslēgt slinko ierakstīšanu. To veic ar karogu O_SYNC, ko var iestatīt, kad fails tiek atvērts un mainīts plkst atver failu izsaucot fcntl(2) .

Atsevišķu ierakstu sinhronizāciju var nodrošināt, izsaucot fsync(2) . Daudzām lietojumprogrammām, kas saistītas ar vairākām ierīcēm un/vai tīkla savienojumiem sinhronais modelis neērti. Darbs aptaujas režīmā arī ne vienmēr ir pieņemams. Fakts ir tāds, ka select(3C) un poll(2) uzskata, ka faila deskriptors ir gatavs lasīšanai tikai pēc tam, kad dati ir fiziski parādījušies tā buferī. Taču dažas ierīces sāk sūtīt datus tikai pēc tam, kad tām tas ir skaidri lūgts.

Turklāt dažām lietojumprogrammām, īpaši reāllaika lietojumprogrammām, ir svarīgi zināt precīzu brīdi, kad sāk ienākt dati. Šādām lietojumprogrammām var būt nepieņemami arī atlases (3C) un aptaujas (2) apsvēršana regulāri faili vienmēr gatavs lasīt un rakstīt. Tiešām, failu sistēma lasīt no diska un, lai gan tas darbojas daudz ātrāk nekā lielākā daļa tīkla savienojumi, taču piekļuve tai joprojām ir saistīta ar zināmu kavēšanos. Stingrām reāllaika lietojumprogrammām šīs aizkaves var būt nepieņemamas, taču bez skaidra lasīšanas pieprasījuma failu sistēma nesniedz datus!

Grūtām reāllaika lietojumprogrammām nozīmīgs var būt cits I/O problēmas aspekts. Fakts ir tāds, ka cietajām RT lietojumprogrammām ir augstāka prioritāte nekā kodolam, tāpēc tās izpilda sistēmas izsaukumus - pat nebloķējošos! - var novest pie prioritātes inversija.

Šo problēmu risinājums ir zināms jau ilgu laiku, un to sauc par asinhrono ievadi/izvadi. Šajā režīmā I/O sistēma izsauc atgriešanas vadību tūlīt pēc pieprasījuma saņemšanas ierīces draiverim, parasti pat pirms datu kopēšanas sistēmas buferī. Pieprasījuma veidošana sastāv no ieraksta (IRP, ievades/izvades pieprasījuma paketes, ievades/izvades pieprasījuma paketes) ievietošanas rindā. Lai to izdarītu, jums tikai īsi jātver mutex, kas aizsargā rindas “asti”, tāpēc prioritātes inversijas problēmu var viegli pārvarēt. Lai noskaidrotu, vai zvans ir beidzies, un, ja tas ir beidzies, tad kā tieši, un vai var izmantot atmiņu, kurā tika glabāti dati, tiek nodrošināts īpašs API (sk. 8.1. att.)


Rīsi. 8.1.

Asinhronais modelis bija galvenais I/O modelis tādās operētājsistēmās kā DEC RT-11, DEC RSX-11, VAX/VMS, OpenVMS. Gandrīz visi atbalsta šo modeli vienā vai otrā veidā. Reāllaika OS. Kopš 80. gadu beigām Unix sistēmas ir izmantojušas vairākas nesaderīgas API asinhronai ievadei/izvadei. 1993. gadā ANSI/IEEE pieņēma POSIX 1003.1b, kas apraksta standartizētu API, ko mēs izpētīsim vēlāk šajā sadaļā.

Programmā Solaris 10 asinhronā I/O funkcionalitāte ir iekļauta bibliotēkā libaio.so. Lai izveidotu programmas, kas izmanto šīs funkcijas, ir jāizmanto slēdzis -laio. Lai ģenerētu asinhronās I/O pieprasījumus, tiek izmantotas funkcijas aio_read(3AIO), aio_write(3AIO) un lio_listio(3AIO).

Funkcijām aio_read(3AIO) un aio_write(3AIO) ir viens parametrs structaiocb *aiocbp. Aiocb struktūra ir definēta failā< aio.h> un satur šādus laukus:

  • int aio_fildes — faila deskriptors
  • off_t aio_offset - nobīde failā, no kuras sāksies rakstīšana vai lasīšana
  • volatile void* aio_buf - buferis, kurā jālasa dati vai kurā atrodas ierakstāmie dati.
  • size_t aio_nbytes — bufera lielums. Tāpat kā tradicionālā lasīšana(2), aio_read(3AIO) var nolasīt mazāk datu, nekā tika pieprasīts, taču nekad nelasīs vairāk.
  • int aio_reqprio — pieprasīt prioritāti
  • struct sigevent aio_sigevent — metode, kā paziņot, ka pieprasījums ir izpildīts (apskatīts vēlāk šajā sadaļā)
  • int aio_lio_opcode — netiek izmantots aio_read(3AIO) un aio_write(3AIO), ko izmanto tikai funkcijai lio_listio.

Funkcija lio_listio(3AIO) ļauj ģenerēt vairākus I/O pieprasījumus ar vienu sistēmas zvanu. Šai funkcijai ir četri parametri:

  • int režīms - var izmantot vērtības LIO_WAIT (funkcija gaida, līdz visi pieprasījumi tiks pabeigti) un LIO_NOWAIT (funkcija atgriež kontroli tūlīt pēc visu pieprasījumu ģenerēšanas).
  • struct aiocb *list - norāžu saraksts uz aiocb struktūrām ar pieprasījumu aprakstiem.

    Pieprasījumus var lasīt vai rakstīt, to nosaka lauks aio_lio_opcode. Pieprasījumi vienam deskriptoram tiek izpildīti tādā secībā, kādā tie ir uzskaitīti saraksta masīvā.

  • int nent — ierakstu skaits saraksta masīvā.
  • struct sigevent *sig - veids, kā paziņot, ka visi pieprasījumi ir izpildīti. Ja mode==LIO_WAIT šis parametrs tiek ignorēts.

POSIX AIO bibliotēka nodrošina divus veidus, kā paziņot programmai, ka pieprasījums ir izpildīts: sinhroni un asinhroni. Vispirms apskatīsim sinhrono metodi. Funkcija aio_return(3AIO) atgriež pieprasījuma statusu. Ja pieprasījums jau ir pabeigts un veiksmīgi izpildīts, tas atgriež nolasīto vai rakstīto datu lielumu baitos. Tāpat kā tradicionālais read(2), aio_return(3AIO) faila beigu gadījumā atgriež 0 baitus. Ja pieprasījums neizdevās vai vēl nav pabeigts, tiek atgriezts -1 un tiek iestatīta kļūda. Ja pieprasījums vēl nav pabeigts, kļūdas kods ir EINPROGRESS.

Funkcija aio_return(3AIO) ir destruktīva; ja tiek izsaukts pēc aizpildīta pieprasījuma, tas iznīcinās sistēmas objektu, kas glabā informāciju par pieprasījuma statusu. Tāpēc aio_return(3AIO) izsaukšana vairākas reizes pēc viena pieprasījuma nav iespējama.

Funkcija aio_error(3AIO) atgriež ar pieprasījumu saistīto kļūdas kodu. Ja pieprasījums ir veiksmīgi pabeigts, tiek atgriezts 0, ja rodas kļūda - kļūdas kods, nepilnīgiem pieprasījumiem - EINPROGRESS.

Funkcija aio_suspend(3AIO) bloķē pavedienu, līdz tiek pabeigts viens no tajā norādītajiem asinhronajiem ievades/izvades pieprasījumiem vai uz noteiktu laiku. Šai funkcijai ir trīs parametri:

  • const struct aiocb *const saraksts- norāžu masīvs vaicājuma deskriptoriem.
  • int nent — elementu skaits saraksta masīvā.
  • const struct timespec *taimauts- taimauts ar precizitāti līdz nanosekundēm (faktiski precīzi līdz izšķirtspējai sistēmas taimeris).

Funkcija atgriež 0, ja ir pabeigta vismaz viena no sarakstā norādītajām darbībām. Ja funkcija neizdodas, tā atgriež -1 un iestata kļūdu. Ja funkcijai iestājās noildze, tā arī atgriež -1 un errno==EINPROGRESS .

Asinhronās I/O izmantošanas piemērs ar sinhronā pieprasījuma statusa pārbaudi ir sniegts 8.3. piemērā.

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); /* Atvērt ligzdu […] */ memset(&readrq, 0, sizeof readrq); readrq.aio_fildes=s ; lasītājs (lasīt if ( errno!=EINPROGRESS) ( kļūda("lasīšana no ligzdas"); ) ) ) 8.3. Asinhronā I/O ar pieprasījuma statusa sinhronu pārbaudi. Kods ir saīsināts, ligzdas atvēršana un kļūdu apstrāde no tā tiek izslēgta.

Pieteikuma asinhronais paziņojums par darbību pabeigšanu sastāv no signāla ģenerēšana kad operācija ir pabeigta. Lai to izdarītu, pieprasījuma deskriptora laukā aio_sigevent ir jāveic atbilstoši iestatījumi. Laukam aio_sigevent ir struct sigevent tips. Šī struktūra ir definēta un satur šādus laukus:

  • int sigev_notify — paziņojumu režīms. Derīgās vērtības ir SIGEV_NONE (nesūtīt apstiprinājumus), SIGEV_SIGNAL (ģenerēt signālu, kad pieprasījums ir pabeigts) un SIGEV_THREAD (palaist norādīto funkciju atsevišķā pavedienā, kad pieprasījums ir pabeigts). Solaris 10 atbalsta arī SIGEV_PORT brīdinājuma veidu, kas ir apskatīts šīs nodaļas pielikumā.
  • int sigev_signo - signāla numurs, kas tiks ģenerēts, izmantojot SIGEV_SIGNAL.
  • union sigval sigev_value - parametrs, kas tiks nodots signāla apstrādātājam vai apstrādes funkcijai. Ja to izmanto asinhronai ievadei/izvadei, tas parasti ir pieprasījuma rādītājs.

    Izmantojot SIGEV_PORT, tai ir jābūt port_event_t rādītāja struktūrai, kas satur porta numuru un, iespējams, papildu datus.

  • spēkā neesošs (*sigev_notify_function) (arodbiedrības sigval) ir funkcija, kas tiks izsaukta, kad tiek izmantots SIGEV_THREAD.
  • pthread_attr_t *sigev_notify_attributes- pavediena atribūti, kurā tas tiks palaists
  • sigev_notify_function, izmantojot SIGEV_THREAD.

Ne visas libaio implementācijas atbalsta SIGEV_THREAD paziņojumu. Dažas Unix sistēmas tā vietā izmanto nestandarta SIGEV_CALLBACK brīdinājumu. Vēlāk šajā lekcijā mēs runāsim tikai par signālu paziņošanu.

Dažas lietojumprogrammas izmanto SIGIO vai SIGPOLL kā signāla numuru (Unix SVR4 tie ir viens un tas pats signāls). Bieži tiek izmantoti arī SIGUSR1 vai SIGUSR2; Tas ir ērti, jo nodrošina, ka līdzīgs signāls neradīsies cita iemesla dēļ.

Reāllaika lietojumprogrammas izmanto arī signālu numurus no SIGRTMIN līdz SIGRTMAX. Dažas implementācijas šim nolūkam piešķir īpašu signāla numuru SIGAIO vai SIGASYNCIO, taču Solaris 10 šāda signāla nav.

Protams, pirms asinhrono pieprasījumu izpildes, par kuriem tiek paziņots ar signālu, jums ir jāinstalē šī signāla apstrādātājs. Paziņošanai jāizmanto signāli, kas apstrādāti SA_SIGINFO režīmā. Nav iespējams instalēt šādu apdarinātāju, izmantojot signāla(2) un sigset(2) sistēmas izsaukumus; jums ir jāizmanto sigaction(2) . Apdarinātāju uzstādīšana, izmantojot sigaction

I/O vadība.

uz bloku orientēts ierīces un baitiem orientēts

galvenā doma

Atslēga princips ir ierīces neatkarība

· Pārtraukt apstrādi,

· Ierīču draiveri,

Šķiet skaidrs, ka dažādu iemeslu dēļ ir iespējami dažādi pārtraukumi. Tāpēc skaitlis ir saistīts ar pārtraukumu - tā saukto pārtraukuma numuru.

Šis skaitlis unikāli atbilst konkrētam notikumam. Sistēma var atpazīt pārtraukumus un, kad tie notiek, uzsāk procedūru, kas atbilst pārtraukuma numuram.

Daži pārtraukumi (pirmie pieci skaitļu secībā) ir rezervēti lietošanai centrālais procesors ja ir kādi īpaši notikumi, piemēram, mēģinājums dalīt ar nulli, pārplūde utt. (tie ir patiesi iekšējie pārtraukumi J).

Aparatūras pārtraukumi vienmēr notiek asinhroni attiecībā uz palaistām programmām. Turklāt vienlaikus var rasties vairāki pārtraukumi!

Lai sistēma neapjuktu, lemjot par pakalpojuma pārtraukšanu vispirms, ir izveidota īpaša prioritāšu shēma. Katram pārtraukumam tiek piešķirta sava prioritāte. Ja vienlaikus notiek vairāki pārtraukumi, sistēma piešķir prioritāti tam, kuram ir visaugstākā prioritāte, uz laiku atliekot atlikušo pārtraukumu apstrādi.

Prioritātes sistēma ir ieviesta divās Intel 8259 (vai līdzīgās) mikroshēmās. Katra mikroshēma ir pārtraukumu kontrolieris un apkalpo līdz astoņām prioritātēm. Mikroshēmas var kombinēt (kaskādes), lai palielinātu prioritātes līmeņu skaitu sistēmā.

Prioritātes līmeņi ir saīsināti IRQ0 - IRQ15.


24. I/O vadība. Sinhronā un asinhronā I/O.

Viena no galvenajām OS funkcijām ir visu datora ievades/izvades ierīču pārvaldība. OS ir jānosūta komandas ierīcēm, jāpārtver pārtraukumi un jāapstrādā kļūdas; tai arī jānodrošina saskarne starp ierīcēm un pārējo sistēmu. Izstrādes nolūkos saskarnei jābūt vienādai visiem ierīču veidiem (ierīces neatkarība). Plašāka informācija par IV kontroli, 23. jautājums.

Aizsardzības principi

Tā kā UNIX OS jau no pašiem pirmsākumiem tika iecerēta kā vairāku lietotāju operētājsistēma, problēma, kas ļauj atļaut dažādu lietotāju piekļuvi failiem failu sistēmā, vienmēr ir bijusi aktuāla. Ar piekļuves atļauju mēs saprotam sistēmas darbības, kas atļauj vai liedz piekļuvi dotajam lietotājam Uz šo failu atkarībā no lietotāja piekļuves tiesībām un failam iestatītajiem piekļuves ierobežojumiem. UNIX OS izmantotā piekļuves autorizācijas shēma ir tik vienkārša un ērta un tajā pašā laikā tik jaudīga, ka kļuvusi par de facto mūsdienu operētājsistēmu standartu (kas nepretendē uz sistēmām ar daudzlīmeņu drošību).

Failu aizsardzība

Kā tas ir ierasts daudzlietotāju operētājsistēmā, UNIX saglabā vienotu piekļuves kontroles mehānismu failiem un failu sistēmas direktorijiem. Jebkurš process var piekļūt failam tikai tad, ja failam norādītās piekļuves tiesības atbilst procesa iespējām.

Failu aizsardzība pret nesankcionētu piekļuvi UNIX ir balstīta uz trim faktiem. Pirmkārt, jebkurš process, kas izveido failu (vai direktoriju), ir saistīts ar kādu sistēmā unikālu lietotāja identifikatoru (UID - Lietotāja identifikators), ko turpmāk var interpretēt kā jaunizveidotā faila īpašnieka identifikatoru. Otrkārt, katram procesam, kas mēģina iegūt zināmu piekļuvi failam, ir ar to saistīts identifikatoru pāris - pašreizējā lietotāja un grupas identifikatori. Treškārt, katrs fails ir unikāli saistīts ar tā deskriptoru – i-node.

Pie pēdējā fakta ir vērts pakavēties sīkāk. Ir svarīgi saprast, ka failu nosaukumi un faili kā tādi nav viens un tas pats. Jo īpaši, ja uz vienu un to pašu failu ir vairākas cietās saites, vairāki failu nosaukumi faktiski apzīmē vienu un to pašu failu un ir saistīti ar vienu un to pašu i-node. Jebkurš failu sistēmā izmantotais i-node vienmēr unikāli atbilst vienam un tikai vienam failam. I-mezgls satur daudz dažādas informācijas (lielākā daļa no tās ir pieejama lietotājiem, izmantojot stat un fstat sistēmas izsaukumus), un starp šo informāciju ir daļa, kas ļauj failu sistēmai novērtēt konkrēta procesa tiesības piekļūt failam. dotajā failā vajadzīgajā režīmā.

Visparīgie principi aizsardzība ir vienāda visām esošajām sistēmas versijām: i-node informācija ietver faila pašreizējā īpašnieka UID un GID (tūlīt pēc faila izveidošanas tā pašreizējā īpašnieka identifikatori tiek iestatīti uz atbilstošo derīgo identifikatoru veidotāja procesa, bet vēlāk to var mainīt ar chown un chgrp sistēmas izsaukumiem). Turklāt faila i-mezgls saglabā mērogu, kas norāda, ko lietotājs - tā īpašnieks - var darīt ar failu, ko lietotāji, kas pieder tai pašai lietotāju grupai kā īpašnieks, var darīt ar failu un ko citi var darīt. ar failu. lietotāji. Neliela ieviešanas informācija dažādas iespējas sistēmas atšķiras.

28. Piekļuves failiem pārvaldība sistēmā Windows NT. Piekļuves tiesību saraksti.

Piekļuves kontroles sistēmai operētājsistēmā Windows NT ir raksturīga augsta elastības pakāpe, kas tiek panākta, pateicoties plašajam piekļuves subjektu un objektu daudzveidībai, kā arī piekļuves operāciju precizitātei.

Failu piekļuves kontrole

Koplietojamiem resursiem operētājsistēmā Windows NT tiek izmantots kopīgs objekta modelis, kas satur tādus drošības raksturlielumus kā atļauto darbību kopa, īpašnieka identifikators un piekļuves kontroles saraksts.

Objekti operētājsistēmā Windows NT tiek izveidoti jebkuriem resursiem, kad tie tiek koplietoti vai kļūst par koplietotiem — failiem, direktorijiem, ierīcēm, atmiņas sadaļām, procesiem. Objektu raksturlielumi operētājsistēmā Windows NT ir sadalīti divās daļās - vispārējā daļā, kuras sastāvs nav atkarīgs no objekta veida, un atsevišķā daļā, ko nosaka objekta tips.
Visi objekti tiek glabāti koku konstrukcijās hierarhiskās struktūras, kura elementi ir zaru objekti (direktorijas) un lapu objekti (faili). Failu sistēmas objektiem šī attiecību shēma ir tiešs direktoriju un failu hierarhijas atspoguļojums. Citu veidu objektiem hierarhisko attiecību diagrammai ir savs saturs, piemēram, procesiem tā atspoguļo vecāku un bērnu attiecības, bet ierīcēm tā atspoguļo piederību noteikta veida ierīcēm un ierīces savienojumu ar citām ierīcēm, piemēram, SCSI kontrolleris ar diskiem.

Jebkura veida objektu piekļuves tiesību pārbaude tiek veikta centralizēti, izmantojot drošības uzziņu monitoru, kas darbojas priviliģētajā režīmā.

Sistēmai Windows drošība NT raksturo liels skaits dažādu iepriekš definētu (iebūvētu) piekļuves subjektu - gan atsevišķu lietotāju, gan grupu. Tādējādi sistēmā vienmēr ir tādi lietotāji kā Adinistrator, Sistēma un Viesis, kā arī grupas Lietotāji, Adiniiiistratori, Kontu operatori, Serveru operatori, Ikviens un citi. Šo iebūvēto lietotāju un grupu būtība ir tāda, ka viņiem ir piešķirtas noteiktas tiesības, tādējādi administratoram ir vieglāk izveidot efektīvu piekļuves kontroles sistēmu. Pievienojot jaunu lietotāju, administrators var tikai izlemt, kurai grupai vai grupām piešķirt šo lietotāju. Protams, administrators var izveidot jaunas grupas, kā arī pievienot tiesības iebūvētajām grupām, lai īstenotu savu drošības politiku, taču daudzos gadījumos ar iebūvētajām grupām pilnīgi pietiek.

Windows NT atbalsta trīs piekļuves darbību klases, kas atšķiras pēc šajās darbībās iesaistīto priekšmetu un objektu veida.

□ Atļaujas ir darbību kopums, ko var definēt visu veidu subjektiem saistībā ar jebkura veida objektiem: failiem, direktorijiem, printeriem, atmiņas sadaļām utt. Atļaujas pēc to mērķa atbilst piekļuves tiesībām failiem un direktorijiem QC UNIX. .

□ Tiesības (lietotāja tiesības) - tiek noteiktas grupas tipa subjektiem, lai veiktu noteiktas sistēmas darbības: sistēmas laika iestatīšana, failu arhivēšana, datora izslēgšana utt. Šīs darbības ietver īpašu piekļuves objektu - operētājsistēmu kopumā .

Vienu iebūvēto lietotāju grupu no citas atšķir galvenokārt tiesības, nevis atļaujas. Dažas tiesības uz iebūvēto grupu ir arī iebūvētas — tās nevar noņemt no šīs grupas. Citas iebūvētās grupas tiesības var dzēst (vai pievienot no vispārējā tiesību saraksta).

□ Atsevišķiem lietotājiem tiek noteiktas lietotāja spējas veikt darbības, kas saistītas ar savas darbības vides veidošanu, piemēram, mainīt programmas galvenās izvēlnes sastāvu, spēju izmantot izvēlnes vienumu Palaist u.c. Samazinot iespēju kopu ( kuras lietotājam ir pieejamas pēc noklusējuma), administrators var piespiest lietotāju strādāt ar to darbības vidi, kuru administrators uzskata par vispiemērotāko, un pasargā lietotāju no iespējamām kļūdām.

Grupai piešķirtās tiesības un atļaujas tiek automātiski piešķirtas tās dalībniekiem, ļaujot administratoram lielu lietotāju skaitu uzskatīt par grāmatvedības informācijas vienību un samazināt viņu darbības.

Lietotājam piesakoties sistēmā, viņam tiek izveidots tā sauktais piekļuves marķieris, kas ietver lietotāja ID un visu grupu, kurām lietotājs pieder, ID. Tokenā ir arī: noklusējuma piekļuves kontroles saraksts (ACL), kas sastāv no atļaujām un attiecas uz procesa radītajiem objektiem; lietotāju tiesību saraksts sistēmas darbību veikšanai.

Visiem objektiem, ieskaitot failus, pavedienus, notikumus, pat piekļuves pilnvaras, to izveides laikā tiek nodrošināts drošības deskriptors. Drošības deskriptors satur piekļuves kontroles sarakstu — ACL.

Faila deskriptors- nenegatīvs vesels skaitlis, ko OS piešķīrusi procesa atvērtam failam.

ACL(Angļu) Piekļuves kontroles saraksts- piekļuves kontroles saraksts, angļu valodā izrunā "ekl") - nosaka, kas vai kas var piekļūt konkrētam objektam un kādas darbības šim subjektam ir atļauts vai aizliegts veikt ar objektu.

Piekļuves kontroles saraksti ir selektīvās piekļuves kontroles sistēmu pamatā. ( Wiki)

Objekta īpašnieks, parasti lietotājs, kurš to izveidoja, selektīvi kontrolē piekļuvi objektam un var mainīt objekta ACL, lai atļautu vai neļautu citiem piekļūt objektam. Iebūvēts Windows administrators NT, atšķirībā no UNIX superlietotāja, var nebūt dažu atļauju piekļūt objektam. Lai ieviestu šo funkciju, ACL var iekļaut administratora un administratora grupu ID, tāpat kā parastos lietotāju ID. Tomēr administratoram joprojām ir iespēja veikt jebkādas darbības ar jebkuriem objektiem, jo ​​viņš vienmēr var kļūt par objekta īpašnieku un pēc tam kā īpašnieks saņemt pilnu atļauju komplektu. Taču administrators nevar atdot īpašumtiesības objekta iepriekšējam īpašniekam, tāpēc lietotājs vienmēr var uzzināt, ka administrators ir strādājis ar viņa failu vai printeri.

Kad process pieprasa operāciju, lai piekļūtu objektam operētājsistēmā Windows NT, vadība vienmēr tiek nodota drošības monitoram, kas salīdzina lietotāja un lietotāju grupu identifikatorus no piekļuves pilnvaras ar identifikatoriem, kas saglabāti objekta ACL elementos. Atšķirībā no UNIX, Windows NT ACL elementi var saturēt gan atļauto, gan lietotājam aizliegto darbību sarakstus.

Windows NT skaidri definē noteikumus, saskaņā ar kuriem jaunizveidotajam objektam tiek piešķirts ACL. Ja izsaukuma kods, veidojot objektu, skaidri norāda visas piekļuves tiesības jaunizveidotajam objektam, tad drošības sistēma piešķir objektam šo ACL.

Ja izsaucošais kods nepiegādā objektam ACL un objektam ir nosaukums, tiek piemērots atļauju mantošanas princips. Drošības sistēma aplūko tā objektu direktorija ACL, kurā tiek saglabāts jaunā objekta nosaukums. Dažus objektu direktoriju ACL ierakstus var atzīmēt kā pārmantojamus. Tas nozīmē, ka tos var piešķirt jauniem objektiem, kas izveidoti šajā direktorijā.

Gadījumā, ja process nav skaidri norādījis ACL izveidotajam objektam un direktorija objektam nav mantojamu ACL ierakstu, tiek izmantots noklusējuma ACL no procesa piekļuves pilnvaras.


29. Java programmēšanas valoda. Java virtuālā mašīna. Java tehnoloģija.

Java ir Sun Microsystems izstrādāta objektorientēta programmēšanas valoda. Java lietojumprogrammas parasti tiek kompilētas pielāgotā baitkodā, lai tās varētu darboties jebkurā Java virtuālajā mašīnā (JVM) neatkarīgi no datora arhitektūras. Java programmas tiek tulkotas izpildītā baitkodā virtuālā iekārta Java ( JVM) - programma, kas apstrādā baitu kodu un pārsūta instrukcijas aparatūrai kā tulks, bet ar atšķirību, ka baita kods, atšķirībā no teksta, tiek apstrādāts daudz ātrāk.

Šīs programmu izpildes metodes priekšrocība ir pilnīga baitkoda neatkarība no operētājsistēma un aparatūru, kas ļauj palaist Java lietojumprogrammas jebkurā ierīcē, kurai ir atbilstoša virtuālā mašīna. Vēl viena svarīga Java tehnoloģijas iezīme ir tās elastīgā drošības sistēma, jo programmas izpildi pilnībā kontrolē virtuālā mašīna. Jebkura darbība, kas pārsniedz programmas noteiktās atļaujas (piemēram, mēģinājums nesankcionēti piekļūt datiem vai izveidot savienojumu ar citu datoru), izraisa tūlītēju pārtraukumu.

Bieži vien virtuālās mašīnas koncepcijas trūkumi ietver faktu, ka virtuālās mašīnas baitkoda izpilde var samazināt Java valodā ieviesto programmu un algoritmu veiktspēju.

Java virtuālā mašīna(saīsināti kā Java VM, JVM) — Java virtuālā mašīna ir galvenā Java izpildlaika sistēmas daļa, tā sauktā Java Runtime Environment (JRE). Java virtuālā mašīna interpretē un izpilda Java baitkodu, ko Java kompilators (javac) iepriekš ģenerējis no Java programmas pirmkoda. JVM var izmantot arī, lai palaistu programmas, kas rakstītas citās programmēšanas valodās. Piemēram, Ada avota kodu var apkopot Java baitkodā, ko pēc tam var izpildīt JVM.

JVM ir galvenā Java platformas sastāvdaļa. Tā kā Java virtuālās mašīnas ir pieejamas daudzām aparatūrām un programmatūras platformas, Java var uzskatīt gan par starpprogrammatūru, gan par patstāvīgu platformu, līdz ar to princips “rakstīt vienreiz, palaist jebkur”. Izmantojot vienu baitu kodu vairākās platformās, Java var raksturot kā "kompilējiet vienreiz, palaist jebkurā vietā".

Izpildes vide

Programmas, kas paredzētas darbam ar JVM, ir jāapkopo standartizētā pārnēsājamā binārā formātā, kas parasti tiek attēlots kā .class faili. Programma var sastāvēt no daudzām klasēm, kas atrodas dažādos failos. Lai atvieglotu lielu programmu mitināšanu, dažus .class failus var iesaiņot kopā tā sauktajā .jar failā (saīsinājums no Java Archive).

JVM izpilda .class vai .jar failus, emulējot JVM rakstītās instrukcijas, interpretējot vai izmantojot tieši-in-time (JIT) kompilatoru, piemēram, HotSpot no Sun mikrosistēmām. Mūsdienās JIT kompilācija tiek izmantota lielākajā daļā JVM, lai sasniegtu lielāku ātrumu.

Tāpat kā lielākajai daļai virtuālo mašīnu, arī Java virtuālajai mašīnai ir uz steku orientēta arhitektūra, kas līdzīga mikrokontrolleriem un mikroprocesoriem.

JVM, kas ir JRE (Java Runtime Environment) gadījums, tiek izmantots, kad tiek izpildītas Java programmas. Pēc izpildes pabeigšanas atkritumu savācējs izdzēš šo gadījumu. JIT ir Java virtuālās mašīnas daļa, ko izmanto, lai paātrinātu lietojumprogrammu izpildes laiku. JIT vienlaikus apkopo baitkoda daļas, kurām ir līdzīga funkcionalitāte, un tādējādi samazina kompilēšanai nepieciešamo laiku.

j2se (java 2 standarta izdevums) – standarta bibliotēkā ietilpst:

GUI, NET, datu bāze...


30. .NET platforma. Galvenās idejas un noteikumi. .NET programmēšanas valodas.

.NET Framework - programmatūras tehnoloģija no Microsoft, kas paredzēts regulāru programmu un tīmekļa lietojumprogrammu izveidei.

Viena no Microsoft .NET galvenajām idejām ir dažādu servisu savietojamība dažādās valodās. Piemēram, pakalpojums, kas rakstīts C++ valodā Microsoft .NET, var izsaukt klases metodi no Delphi rakstītas bibliotēkas; valodā C# jūs varat uzrakstīt klasi, kas mantota no klases, kas rakstīta Visual Basic.NET, un izņēmumu, kas izmests ar C# rakstītu metodi, var noķert un apstrādāt Delphi. Katrai bibliotēkai (asamblejai) .NET ir informācija par tās versiju, kas ļauj novērst iespējamos konfliktus starp dažādas versijas montāžas.

Lietojumprogrammas var izstrādāt arī teksta redaktorā un izmantot konsoles kompilatoru.

Tāpat kā Java tehnoloģija, arī .NET izstrādes vide izveido baitkodu, lai to izpildītu virtuālā mašīna. Šīs mašīnas ievades valoda .NET tiek saukta par MSIL (Microsoft Intermediate Language) vai CIL (Common Intermediate Language, jaunāka versija) vai vienkārši IL.

Baitkoda izmantošana ļauj sasniegt starpplatformu funkcionalitāti apkopotā projekta līmenī (.NET izteiksmē: montāža), un ne tikai avota teksta līmenī, kā, piemēram, C. Pirms montāžas uzsākšanas CLR izpildlaikā baitu kodu pārveido vidē iebūvētais JIT kompilators (tieši laikā, lidojumā). kompilācija) mērķa procesora mašīnkodos. Ir iespējams arī apkopot komplektāciju vietējā kodā atlasītajai platformai, izmantojot utilītu NGen.exe, kas tiek piegādāts kopā ar .NET Framework.

Tulkošanas procedūras laikā programmas avota kodu (rakstīts SML, C#, Visual Basic, C++ vai jebkurā citā programmēšanas valodā, kuru atbalsta .NET) kompilators pārvērš tā sauktajā montāžā un saglabā kā dinamiski saistītās bibliotēkas fails (dinamiski saistīts). Bibliotēka, DLL) vai izpildāmais fails(Izpildāms, EXE).

Protams, katram kompilatoram (vai tas būtu C# valodas kompilators, csc.exe vai Visual Basic, vbc.exe) izpildlaika vide veic nepieciešamo izmantoto tipu kartēšanu CTS tipos un programmas kodu "" kodā. abstract machine” .NET - MSIL (Microsoft Intermediate Language).

Galu galā programmatūras projekts tiek veidota montāžas veidā - pašpietiekama sastāvdaļa izvietošanai, replikācijai un atkārtotai izmantošanai. Montāža ir identificēta Digitālais paraksts autors un unikāls versijas numurs.

Iebūvētās programmēšanas valodas (iekļautas .NET Framework):

C#; J#; VB.NET; JScript .NET; C++/CLI - jauna versija C++ (pārvaldīts).


31. OS funkcionālās sastāvdaļas. Failu pārvaldība

Funkcionālie OS komponenti:

Atsevišķa datora operētājsistēmas funkcijas parasti tiek grupētas vai nu pēc vietējo resursu veidiem, ko pārvalda OS, vai atbilstoši konkrētiem uzdevumiem, kas attiecas uz visiem resursiem. Dažreiz šādas funkciju grupas sauc par apakšsistēmām. Vissvarīgākās resursu pārvaldības apakšsistēmas ir procesu, atmiņas, failu un ārējo ierīču pārvaldības apakšsistēmas, un visiem resursiem kopīgās apakšsistēmas ir apakšsistēmas. lietotāja interfeiss, datu aizsardzība un administrēšana.

Failu pārvaldība:

OS spēja “aizsargāt” reālās aparatūras sarežģītību ļoti skaidri izpaužas vienā no galvenajām OS apakšsistēmām - failu sistēmā.

Failu sistēma saista datu nesēju vienā pusē un API (lietojumprogrammu programmēšanas interfeisu), lai piekļūtu failiem, no otras puses. Kad lietojumprogramma piekļūst failam, tai nav ne jausmas, kā konkrētā failā atrodas informācija, ne arī uz kāda veida fiziskajiem datu nesējiem (CD, cietais disks, magnētiskā lente vai zibatmiņas ierīce) tā ir ierakstīta. Viss, ko programma zina, ir faila nosaukums, tā lielums un atribūti. Tā saņem šos datus no failu sistēmas draivera. Tā ir failu sistēma, kas nosaka, kur un kā fails tiks ierakstīts fiziskajā datu nesējā (piemēram, cietajā diskā).

No operētājsistēmas viedokļa viss disks ir kopu kolekcija, kuras izmērs svārstās no 512 baitiem un lielākiem. Failu sistēmas draiveri organizē kopas failos un direktorijos (kas faktiski ir faili, kas satur šajā direktorijā esošo failu sarakstu). Šie paši draiveri seko līdzi, kuras kopas pašlaik tiek izmantotas, kuras ir bezmaksas un kuras ir atzīmētas kā bojātas.

Tomēr failu sistēma ne vienmēr ir tieši saistīta ar fizisko datu nesēju. Ir virtuālās failu sistēmas, kā arī tīkla failu sistēmas, kas ir tikai veids, kā piekļūt failiem, kas atrodas attālajā datorā.

Vienkāršākajā gadījumā visi faili dotajā diskā tiek glabāti vienā direktorijā. Šī viena līmeņa shēma tika izmantota CP/M un pirmajā MS-DOS 1.0 versijā. Hierarhiskā failu sistēma ar ligzdotiem direktorijiem vispirms parādījās Multics, pēc tam UNIX.

Katalogi priekš dažādi diskdziņi var veidot vairākus atsevišķus kokus, piemēram, DOS/Windows, vai apvienot vienā kokā, kas kopīgs visiem diskiem, kā UNIX līdzīgas sistēmas Ak.

Faktiski DOS/Windows sistēmās, kā arī UNIX līdzīgās sistēmās ir viens saknes direktorijs ar apakšdirektorijiem “c:”, “d:” utt. Šajos direktorijos ir montētas cietā diska nodalījumi. Tas ir, c:\ ir tikai saite uz failu:///c:/. Tomēr atšķirībā no UNIX līdzīgām failu sistēmām operētājsistēmā Windows ir aizliegts rakstīt saknes direktorijā, kā arī skatīt tā saturu.

UNIX sistēmā ir tikai viens saknes direktorijs, un visi pārējie faili un direktoriji ir ligzdoti zem tā. Lai piekļūtu failiem un direktorijiem diskā, disks jāmontē, izmantojot mount komandu. Piemēram, lai atvērtu failus kompaktdiskā, operētājsistēmai vienkāršā izteiksmē ir jāpasaka: "paņemiet failu sistēmu šajā kompaktdiskā un parādiet to /mnt/cdrom direktorijā." Visi faili un direktoriji, kas atrodas kompaktdiskā, parādīsies šajā /mnt/cdrom direktorijā, ko sauc par pievienošanas punktu. Lielākajā daļā UNIX līdzīgu sistēmu noņemamie diski(disketes un kompaktdiski), zibatmiņas diski un citas ārējās atmiņas ierīces ir uzstādītas direktorijā /mnt, /mount vai /media. Unix un UNIX līdzīgas operētājsistēmas arī ļauj automātiski uzstādīt diskus operētājsistēmas sāknēšanas laikā.

Lūdzu, ņemiet vērā, ka failā tiek izmantotas slīpsvītras Windows sistēmas, UNIX un UNIX līdzīgas operētājsistēmas (sistēmā Windows tiek izmantota atpakaļvērstā slīpsvītra “\”, bet UNIX un UNIX līdzīgās operētājsistēmās – vienkārša slīpsvītra “/”)

Turklāt jāņem vērā, ka iepriekš minētā sistēma ļauj montēt ne tikai fizisko ierīču failu sistēmas, bet arī atsevišķus direktorijus (parametrs --bind) vai, piemēram, ISO attēls(cilpas iespēja). Papildinājumi, piemēram, FUSE, arī ļauj pievienot, piemēram, veselu direktoriju uz FTP un ļoti lielu skaitu dažādu resursu.

NTFS un HFS tiek izmantota vēl sarežģītāka struktūra. Šajos failu sistēmas katrs fails ir atribūtu kopa. Atribūti ietver ne tikai tradicionālo tikai lasāmo sistēmu, bet arī faila nosaukumu, lielumu un pat saturu. Tātad NTFS un HFS failā saglabātais ir tikai viens no tā atribūtiem.

Ievērojot šo loģiku, vienā failā var būt vairākas satura variācijas. Tādējādi vienā failā var tikt saglabātas vairākas viena dokumenta versijas, kā arī papildu dati (faila ikona, programma, kas saistīta ar failu). Šī organizācija ir raksturīga HFS operētājsistēmā Macintosh.


32. OS funkcionālās sastāvdaļas. Procesu vadība.

Procesu vadība:

Operētājsistēmas svarīgākā daļa, kas tieši ietekmē datora darbību, ir procesa vadības apakšsistēma. Process (vai citiem vārdiem sakot, uzdevums) ir abstrakcija, kas apraksta darbojošos programmu. Operētājsistēmai process ir darba vienība, pieprasījums patērēt sistēmas resursus.

Daudzuzdevumu (daudzprocesu) sistēmā process var būt vienā no trim galvenajiem stāvokļiem:

RUNING - procesa aktīvais stāvoklis, kura laikā procesam ir visi nepieciešamie resursi un to tieši izpilda procesors;

GAIDA - procesa pasīvais stāvoklis, process ir bloķēts, to nevar izpildīt savu iekšējo iemeslu dēļ, tas gaida, kad notiks kāds notikums, piemēram, I/O operācijas pabeigšana, saņemot ziņojumu no cita process vai kāda tai nepieciešamā resursa atbrīvošana;

READY ir arī procesa pasīvs stāvoklis, taču šajā gadījumā process tiek bloķēts no tā ārēju apstākļu dēļ: procesam ir visi tam nepieciešamie resursi, tas ir gatavs izpildei, bet procesors ir aizņemts ar cita procesa izpildi.

Laikā dzīves cikls katrs process pāriet no viena stāvokļa uz otru saskaņā ar procesa plānošanas algoritmu, kas ieviests konkrētajā operētājsistēmā.

CP/M standarts

Operētājsistēmu izveide mikrodatoriem sākās ar OS SR/M. Tas tika izstrādāts 1974. gadā, pēc tam tas tika instalēts daudzās 8 bitu iekārtās. Šīs operētājsistēmas ietvaros tika izveidots ievērojams daudzums programmatūras, tostarp tulki no BASIC, Pascal, C, Fortran, Cobol, Lisp, Ada un daudzām citām, teksta valodām. Tie ļauj sagatavot dokumentus daudz ātrāk un ērtāk nekā izmantojot rakstāmmašīnu.

MSX standarts

Šis standarts noteica ne tikai OS, bet arī skolas datoru aparatūras īpašības. Saskaņā ar MSX standartu automašīnai bija jābūt RAM apjoms vismaz 16 K, pastāvīgā atmiņa 32 K ar iebūvētu BASIC valodas tulku, krāsu grafiskais displejs ar izšķirtspēju 256x192 pikseļi un 16 krāsas, trīs kanālu 8 oktāvu skaņas ģenerators, paralēlais ports printera un kontrollera pievienošanai ārēji pievienota ārējā diskdziņa vadīšanai.

Šādas mašīnas operētājsistēmai bija jābūt šādām īpašībām: nepieciešamā atmiņa - ne vairāk kā 16 K, saderība ar CP/M sistēmas izsaukumu līmenī, saderība ar DOS failu formātos ārējie diskdziņi pamatojoties uz disketēm, magnētiskajiem diskiem, atbalsts BASIC, C, Fortran un Lisp valodu tulkotājiem.

Pi - sistēma

Sākotnējā attīstības periodā personālajiem datoriem Tika izveidota USCD p-sistēmas operētājsistēma. Šīs sistēmas pamatā bija tā sauktā P-mašīna - programma, kas atdarina hipotētisku universālu dators. P-mašīna simulē procesora, atmiņas un ārējo ierīču darbību, izpildot īpašas instrukcijas, ko sauc par P-kodu. Programmatūras komponenti Pi sistēmas (ieskaitot kompilatorus) tiek kompilētas P kodā, lietojumprogrammas arī tiek kompilētas P kodā. Tādējādi galvenais atšķirīga iezīme Sistēmai bija minimāla atkarība no datora aprīkojuma funkcijām. Tas nodrošināja Pi sistēmas pārnesamību uz Dažādi veidi automašīnas P-koda kompaktums un ērti ieviestais peidžeru mehānisms ļāva izpildīt salīdzinoši lielas programmas personālajos datoros ar nelielu RAM.

I/O vadība.

I/O ierīces ir sadalītas divos veidos: uz bloku orientēts ierīces un baitiem orientēts ierīces. Uz blokiem orientētas ierīces informāciju glabā fiksēta izmēra blokos, no kuriem katram ir sava adrese. Visizplatītākā uz bloku orientētā ierīce ir disks. Uz baitiem orientētas ierīces nav adresējamas un neļauj veikt meklēšanas darbības; tās ģenerē vai patērē baitu secību. Piemēri ir termināļi, līniju printeri, tīkla adapteri. Elektronisko komponentu sauc par ierīces kontrolieri vai adapteri. Operētājsistēma nodarbojas ar kontrolieri. Kontrolieris veic vienkāršas funkcijas, uzrauga un labo kļūdas. Katram kontrollerim ir vairāki reģistri, kas tiek izmantoti saziņai ar centrālo procesoru. OS veic I/O, ierakstot komandas kontrollera reģistros. IBM PC diskešu kontrolleris pieņem 15 komandas, piemēram, READ, WRITE, SEEK, FORMAT utt. Kad komanda tiek pieņemta, procesors atstāj kontrolieri un veic citus darbus. Kad komanda ir pabeigta, kontrolieris izdod pārtraukumu, lai nodotu procesora vadību operētājsistēmai, kurai jāpārbauda darbības rezultāti. Procesors iegūst ierīces rezultātus un statusu, nolasot informāciju no kontrollera reģistriem.

galvenā doma I/O programmatūras organizēšana sastāv no tā sadalīšanas vairākos līmeņos, un apakšējie līmeņi nodrošina aprīkojuma funkciju aizsegšanu no augšējiem, bet tie nodrošina lietotājam draudzīgs interfeiss lietotājiem.

Atslēga princips ir ierīces neatkarība. Programmas veids nedrīkst būt atkarīgs no tā, vai tā nolasa datus no disketes vai no disketes cietais disks. Vēl viena svarīga I/O programmatūras problēma ir kļūdu apstrāde. Vispārīgi runājot, kļūdas jārisina pēc iespējas tuvāk aparatūrai. Ja kontrolleris konstatē lasīšanas kļūdu, tam jāmēģina tā labot. Ja tas neizdodas, ierīces draiverim ir jānovērš kļūdas. Un tikai tad, ja zemākais līmenis nevar tikt galā ar kļūdu, tas ziņo par kļūdu augšējam līmenim.

Vēl viena būtiska problēma ir bloķējošu (sinhronu) un nebloķējošu (asinhronu) pārsūtīšanu izmantošana. Lielākā daļa fizisko I/O operāciju tiek veiktas asinhroni – procesors sāk pārsūtīšanu un pāriet uz citu darbu, līdz notiek pārtraukums. Ir nepieciešams, lai I/O darbības būtu bloķējošas – pēc komandas READ programma automātiski apstājas, līdz dati sasniedz programmas buferi.

Pēdējā problēma ir tā, ka dažas ierīces tiek koplietotas (diski: vairāki lietotāji vienlaikus piekļūst diskam, nav problēma), bet citas ir veltītas (printeri: dažādu lietotāju drukātās līnijas nevar sajaukt).

Lai atrisinātu šīs problēmas, ieteicams I/O programmatūru sadalīt četros slāņos (2.30. attēls):

· Pārtraukt apstrādi,

· Ierīču draiveri,

· No ierīces neatkarīgs operētājsistēmas slānis,

· Pielāgots programmatūras slānis.

Aparatūras pārtraukuma jēdziens un tā apstrāde.

Asinhronie vai ārējie (aparatūras) pārtraukumi ir notikumi, kas nāk no ārējiem avotiem (piemēram, perifērijas ierīces) un var rasties jebkurā patvaļīgā brīdī: signāls no taimera, tīkla karte vai diskdzini, nospiežot tastatūras taustiņus, pārvietojot peli; Tiem nepieciešama tūlītēja reakcija (apstrāde).

Gandrīz visas ievades/izvades sistēmas datorā darbojas, izmantojot pārtraukumus. Konkrēti, nospiežot taustiņus vai noklikšķinot uz peles, aparatūra ģenerē pārtraukumus. Atbildot uz tiem, sistēma attiecīgi nolasa nospiestā taustiņa kodu vai atceras peles kursora koordinātas. Pārtraukumus ģenerē diska kontrolleris, adapteris lokālais tīkls, seriālie porti, audio adapteris un citas ierīces.