Differences

This shows you the differences between two versions of the page.

Link to this comparison view

so:laboratoare:laborator-10 [2019/05/02 22:04]
bogdan.purcareata [Crearea unui completion port]
so:laboratoare:laborator-10 [2022/05/10 17:40] (current)
teodor_stefan.dutu [Zero-copy I/O] Replace broken link.
Line 1: Line 1:
 ====== Laborator 10 - Operații IO avansate - Windows ====== ====== Laborator 10 - Operații IO avansate - Windows ======
  
-==== Materiale ajutătoare ==== 
  
-  *[[http://​elf.cs.pub.ro/​so/​res/​laboratoare/​lab10-slides.pdf | lab10-slides.pdf]] ​ 
-  *[[http://​elf.cs.pub.ro/​so/​res/​laboratoare/​lab10-refcard.pdf | lab10-refcard.pdf]] 
  
 ==== Nice to read ==== ==== Nice to read ====
Line 345: Line 342:
 {{ so:​laboratoare-2013:​zero_copy.gif | }} {{ so:​laboratoare-2013:​zero_copy.gif | }}
  
-Mai multe detalii, inclusiv explicarea mai pe larg a contextului,​ puteți găsi [[http://www.ibm.com/developerworks/​library/​j-zerocopy/​ | aici]].+Mai multe detalii, inclusiv explicarea mai pe larg a contextului,​ puteți găsi [[https://developer.ibm.com/articles/​j-zerocopy/​ | aici]]. **Atentie:​** articolul folosește greșit termenul //context switch//. De fapt, este vorba de o //schimbare de privilegiu//,​ deoarece se face o trecere din user mode în kernel mode.
 ==== TransmitFile ==== ==== TransmitFile ====
  
Line 381: Line 378:
 O funcție similară este funcția ''​[[http://​msdn.microsoft.com/​en-us/​library/​ms740566%28v=vs.85%29.aspx |TransmitPackets]]''​ care transmite date stocate în memorie pe un socket folosind cache-ul intern al sistemului de operare. Datele sunt reprezentate de o structură ''​TRANSMIT_PACKETS_ELEMENT''​. O funcție similară este funcția ''​[[http://​msdn.microsoft.com/​en-us/​library/​ms740566%28v=vs.85%29.aspx |TransmitPackets]]''​ care transmite date stocate în memorie pe un socket folosind cache-ul intern al sistemului de operare. Datele sunt reprezentate de o structură ''​TRANSMIT_PACKETS_ELEMENT''​.
  
-====== Exerciții ​de laborator ​====== +====== Exerciții ======
-===== Exercițiul 0 - Joc interactiv (2p) =====+
  
-  * Detalii desfășurare [[http://ocw.cs.pub.ro/courses/so/meta/notare#​joc_interactiv|joc]].+<note important>​ 
 +În cadrul laboratoarelor vom folosi repository-ul de git al materiei SO - https://github.com/​systems-cs-pub-ro/so. Va trebui sa clonați repository-ul pe masinile virtuale folosind comanda: ''​git clone https://​github.com/​systems-cs-pub-ro/so''​. Dacă doriți să descărcați repositoryul în altă locație, folosiți comanda ''​git clone https://github.com/​systems-cs-pub-ro/​so ${target}''​.
  
-===== Windows (9p) =====+Pentru a actualiza repository-ul,​ folosiți comanda ''​git pull origin master''​ din interiorul directorului în care se află repository-ul. Recomandarea este să îl actualizați cât mai frecvent, înainte să începeți lucrul, pentru a vă asigura că aveți versiunea cea mai recentă. În cazul în care gitul detectează conflicte la nivelul vreunui fişier, folosiți următoarele comenzi pentru a vă păstra modificările:​ 
 +<​code>​ 
 +git stash 
 +git pull origin master 
 +git stash pop 
 +</​code>​
  
-<note important>​Înainte de a folosi o structură specifică Async I/O Win32 APIasigurați-vă că ați zero-izat-o.</​note>​+Pentru mai multe informații despre folosirea utilitarului giturmați ghidul de la https://​gitimmersion.com. 
 +</​note>​
  
-În rezolvarea laboratorului ​folosiți ​arhiva de sarcini [[http://​elf.cs.pub.ro/​so/​res/​laboratoare/​lab10-tasks.zip | lab10-tasks.zip]]+===== Windows ===== 
 + 
 +<note important>​ 
 +Înainte de a folosi ​o structură specifică Async I/O Win32 API, asigurați-vă că ați zero-izat-o. 
 +</​note>​
  
-==== Exercițiul 1 - Test operații asincrone ​(1p) ====+==== Exercițiul 1 - Test operații asincrone ====
  
 Setați proiectul ''​1-test_overlapp''​ ca default ([[http://​ocw.cs.pub.ro/​courses/​so/​laboratoare/​resurse/​vs_tips#​setarea_unui_subproiect_ca_default | detalii aici]]). Setați proiectul ''​1-test_overlapp''​ ca default ([[http://​ocw.cs.pub.ro/​courses/​so/​laboratoare/​resurse/​vs_tips#​setarea_unui_subproiect_ca_default | detalii aici]]).
Line 402: Line 409:
 </​code>​ </​code>​
  
-==== Exercițiul 2 - Zero-copy/​TransmitFile ​ ​(2p) ​====+==== Exercițiul 2 - Zero-copy/​TransmitFile ====
  
 Un client dorește să trimită serverului un fișier folosind operații [[#​zero-copy io | zero-copy IO]]. Un client dorește să trimită serverului un fișier folosind operații [[#​zero-copy io | zero-copy IO]].
Line 424: Line 431:
 </​code>​ </​code>​
 Comanda vă va preciza dacă cele două fișiere sunt identice sau nu. Comanda vă va preciza dacă cele două fișiere sunt identice sau nu.
-==== Exercițiul 3 - Operații sincrone/​asincrone ​(3p) ====+==== Exercițiul 3 - Operații sincrone/​asincrone ====
  
 Ne propunem să realizăm implementarea unor operații IO asincrone pentru popularea unor fișiere cu conținut. Ne propunem să realizăm implementarea unor operații IO asincrone pentru popularea unor fișiere cu conținut.
Line 438: Line 445:
 </​code>​ </​code>​
 Dacă ați lucrat corect, în urma rulării comenzii de mai sus se vor genera în directorul curent 4 fișiere text (cu extensia ''​.txt''​) de dimensiune ''​BUFSIZ'',​ conținând caractere random. Dacă ați lucrat corect, în urma rulării comenzii de mai sus se vor genera în directorul curent 4 fișiere text (cu extensia ''​.txt''​) de dimensiune ''​BUFSIZ'',​ conținând caractere random.
-==== Exercițiul 4 - I/O completion ports (3p) ====+==== Exercițiul 4 - I/O completion ports ====
  
 Vom folosi API-ul de I/O completion ports. Vom folosi API-ul de I/O completion ports.
  
-=== Crearea unui completion ports (1p) ===+=== Crearea unui completion ports ===
  
 Intrați în proiectul ''​4-iocp''​ și analizați conținutul fișierelor ''​iocp.h''​ și ''​iocp.c''​. Completați cele 4 funcții definite în fișierul ''​iocp.c''​ (revedeți secțiunea despre [[#crearea unui completion port| IO completion ports]]). Intrați în proiectul ''​4-iocp''​ și analizați conținutul fișierelor ''​iocp.h''​ și ''​iocp.c''​. Completați cele 4 funcții definite în fișierul ''​iocp.c''​ (revedeți secțiunea despre [[#crearea unui completion port| IO completion ports]]).
  
-=== Operații I/O asincrone cu I/O completion ports (2p) ===+=== Operații I/O asincrone cu I/O completion ports ===
  
 Analizați conținutul fișierului ''​aio.c''​. Scopul exercițiului este folosirea I/O completion ports pentru așteptarea încheierii operațiilor I/O asincrone (overlapped I/O). Analizați conținutul fișierului ''​aio.c''​. Scopul exercițiului este folosirea I/O completion ports pentru așteptarea încheierii operațiilor I/O asincrone (overlapped I/O).
Line 453: Line 460:
  
 Compilați și rulați programul. ​ Compilați și rulați programul. ​
-===== Soluții ===== 
  
-[[http://​elf.cs.pub.ro/​so/​res/​laboratoare/​lab10-sol.zip | Soluţii laborator 10]] 
so/laboratoare/laborator-10.1556823889.txt.gz · Last modified: 2019/05/02 22:04 by bogdan.purcareata
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0