Differences

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

Link to this comparison view

so:laboratoare:laborator-03 [2020/03/03 08:00]
razvan.pricope [BONUS]
so:laboratoare:laborator-03 [2022/03/02 09:31] (current)
teodor_stefan.dutu [Exercițiul -1 - GSOC] Replace with Stagii pe bune
Line 2: Line 2:
 ===== Materiale ajutătoare ===== ===== Materiale ajutătoare =====
  
-  * [[http://​elf.cs.pub.ro/​so/​res/​laboratoare/​lab03-slides.pdf | lab03-slides.pdf]] 
-  * [[http://​elf.cs.pub.ro/​so/​res/​laboratoare/​lab03-refcard.pdf | lab03-refcard.pdf]] 
   * [[http://​elf.cs.pub.ro/​so/​res/​tutorial/​lab-03-procese/​|Video Procese]]   * [[http://​elf.cs.pub.ro/​so/​res/​tutorial/​lab-03-procese/​|Video Procese]]
  
Line 864: Line 862:
 </​spoiler>​ </​spoiler>​
  
 +===== Sumar =====
  
-===== Exerciții =====+^  **Operație**  ^  **Linux** ​ ^  **Windows** ​ ^ 
 +|  Crearea unui proces ​ |  [[#​crearea_unui_proces_in_linux | fork() ​ ]]  |  [[#​crearea_unui_proces_in_windows| CreateProcess() ]]  | 
 +|  Așteptarea terminării unui proces ​ |  [[#​asteptarea_terminarii_unui_proces_in_linux| wait()]], [[#​asteptarea_terminarii_unui_proces_in_linux| waitpid()]] ​ |  [[#​asteptarea_terminarii_unui_proces_in_windows | WaitForSingleObject()]] ​ | 
 +|  Înlocuirea imaginii unui process ​ |  [[#​inlocuirea_imaginii_unui_proces_in_linux | exec() ]]  |  -  | 
 +|  Terminarea unui process ​ |  [[#​terminarea_unui_proces_in_linux| exit()]] ​ |  [[#​terminarea_unui_proces_in_windows| ExitProcess() ]]  | 
 +|  Moștenirea descriptorilor de fișier ​ |  [[#​mostenirea_descriptorilor_de_fisier_dupa_operatii_forkexec | dup() + exec() ]]   ​| ​ [[#​mostenirea_handle-urilor_la_createprocess | CreateProcess() ]], care are câmpul ''​bInheritHandle''​ al structurii ''​SECURITY_ATTRIBUTES''​ setat pe ''​TRUE'' ​ | 
 +|  Variabile de mediu  |  [[#​variabile_de_mediu_in_linux | getenv()]], [[#​variabile_de_mediu_in_linux | setenv()]] ​ |   ​[[#​variabile_de_mediu_in_windows |GetEnvironmentVariable() ]], [[#​variabile_de_mediu_in_windows | SetEnvironmentVariable() ]]  |  
 +|  Pipe anonim ​ |  [[#​pipe-uri_anonime_in_linux | pipe()]] ​ |  [[#​pipe-uri_anonime_in_windows | CreatePipe() ]]  | 
 +|  Pipe cu nume  |  [[#​pipe-uri_cu_nume_in_linux | mkfifo()]] ​ |  [[#​pipe-uri_cu_nume_in_windows | CreateNamedPipe() ]]  |
  
-În rezolvarea laboratorului folosiți arhiva de sarcini [[http://​elf.cs.pub.ro/​so/​res/​laboratoare/​lab03-tasks.zip | lab03-tasks.zip]] 
  
-<note tip>​Pentru a vă ajuta la implementarea exercițiilor din laborator, în directorul ''​utils''​ din arhivă există un fișier ''​utils.h''​ cu funcții utile.</​note>​ 
  
-==== Exercițiul -1 - GSOC ==== 
-Google Summer of Code este un program de vară în care studenții 
-(indiferent de anul de studiu) sunt implicați în proiecte Open Source 
-pentru a își dezvolta skill-urile de programare, fiind răsplătiți cu o 
-bursă a cărei valoare [[https://​developers.google.com/​open-source/​gsoc/​help/​student-stipends|depinde de țară]] 
-([[https://​developers.google.com/​open-source/​gsoc|pagină principală GSOC]]). 
  
-UPB se află în top ca număr de studenți acceptați; în fiecare an fiind 
-undeva la aprox. 30-40 de studenți acceptați. 
-Vă încurajăm să aplicați! Există și un grup de fb cu foști 
-participanți unde puteti să îi contactați pentru sfaturi 
-[[https://​www.facebook.com/​groups/​240794072931431/​|facebook page]] 
  
  
-==== Exercițiul 0 - Joc interactiv ==== 
  
-  * Detalii desfășurare [[http://​ocw.cs.pub.ro/​courses/​so/​meta/​notare#​joc_interactiv|joc]]. 
  
 +
 +
 +
 +
 +
 +
 +===== Exerciții =====
 +
 +<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}''​.
 +
 +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>​
 +
 +Pentru mai multe informații despre folosirea utilitarului git, urmați ghidul de la https://​gitimmersion.com.
 +</​note>​
 +
 +<note tip>​Pentru a vă ajuta la implementarea exercițiilor din laborator, în directorul ''​utils''​ din arhivă există un fișier ''​utils.h''​ cu funcții utile.</​note>​
 +
 +==== Exercițiul 0 - Stagii pe bune ====
 +
 +[[https://​stagiipebune.ro/​students/​jobs/​|Stagii pe bune]] este o platformă de internshipuri care vrea să ușureze și să uniformizeze procesul prin care puteți aplica la companii din România (București,​ Iași, Cluj și Timișoara). Facultatea de Automatică și Calculatoare are un parteneriat cu Stagii pe bune și vă încurajăm să le folosiți platforma pentru a aplica la internshipuri! ​
 +
 +Stagii pe bune organizează și evenimente de prezentare a celor mai mari companii din România. Pentru a fi la curent cu acestea, urmăriți și anunțurile postate de Stagii pe bune pe [[https://​www.facebook.com/​stagiipebune|Facebook]].
  
 ===== Linux ===== ===== Linux =====
Line 987: Line 1007:
 Ne propunem să continuăm implementarea de **Tiny-Shell**. Ne propunem să continuăm implementarea de **Tiny-Shell**.
  
-<note important>​ Compilarea se va realiza din Visual Studio sau din command-prompt-ul de Visual Studio, iar rularea executabilului ''​./​2-tiny.exe''​ se va realiza din **Cygwin**. +<note important>​ Compilarea se va realiza din Visual Studio sau din command-prompt-ul de Visual Studio ​(folosind utilitarul ''​nmake''​), iar rularea executabilului ''​./​2-tiny.exe''​ se va realiza din **Cygwin**. 
-     ​Pentru a ajunge ​din Cygwin pe Desktop (atenție la folosirea apostrofurilor):<​code bash> +   ​Dacă alegeți compilarea folosind Visual Studio, executabilul se numește ''​2-tiny.exe''​ și se găsește în calea ''​so/​labs/​lab03/​skel/​win/​Debug'';​  
-$ cd 'C:​\Users\Student\Desktop+   * Dacă alegeți compilarea folosind fișierul ''​Makefile'' ​din calea ''​so/​labs/​lab03/​skel/​win/​2-tiny'',​ executabilul se numește ''​tiny.exe''​ și se află în aceași locație ca fișierul ​''​Makefile''​. 
-</​code>​+ 
 </​note>​ </​note>​
  
Line 1009: Line 1030:
   * Urmăriți în cod comentariile cu TODO 1.   * Urmăriți în cod comentariile cu TODO 1.
   * Revedeți secțiunea [[#​mostenirea handle-urilor la createprocess|Moștenirea handle-urilor]].   * Revedeți secțiunea [[#​mostenirea handle-urilor la createprocess|Moștenirea handle-urilor]].
-  * Atenție la metoda de moștenire a handle-relor ​+  * Atenție la metoda de moștenire a handle-relor 
 + 
 +<​spoiler>​ 
 +După un apel [[http://​msdn.microsoft.com/​en-us/​library/​ms682425%28VS.85%29.aspx | CreateProcess]],​ handle-urile din procesul părinte pot fi **moștenite** în procesul copil.  
 + 
 +Pentru ca un handle să poată fi moștenit în procesul creat, trebuie îndeplinite 2 condiții:​ 
 +    * membrul ''​bInheritHandle'',​ al structurii ''​SECURITY_ATTRIBUTES'',​ transmise lui [[http://​msdn.microsoft.com/​en-us/​library/​aa363858%28VS.85%29.aspx | CreateFile]],​ trebuie să fie ''​TRUE''​ 
 +   * parametrul ''​bInheritHandles'',​ al lui [[http://​msdn.microsoft.com/​en-us/​library/​ms682425%28VS.85%29.aspx | CreateProcess]],​ trebuie să fie ''​TRUE''​.  
 +   * atunci când se doreşte moştenierea handler-elor în procesul copil, trebuie să ne asigurăm că acestea sunt valide deorece în procesul copil nu se fac validări suplimentare. Transmiterea unor handlere invalide poate duce la un comportament nedefinit în procesul copil. 
 + 
 +Pentru **redirectarea** handle-urilor standard în procesul copil: 
 +   ​* ​ folosiți membrii ''​hStdInput'',​ ''​hStdOutput'',​ ''​hStdError''​ ai structurii [[http://​msdn.microsoft.com/​en-us/​library/​ms686331(v=VS.85).aspx | STARTUPINFO]],​ transmise lui [[http://​msdn.microsoft.com/​en-us/​library/​ms682425%28VS.85%29.aspx | CreateProcess]] 
 +   * membrul ''​dwFlags''​ al aceleiași structuri trebuie setat la ''​STARTF_USESTDHANDLES''​ 
 +   * dacă se dorește ca anumite handle-uri să rămână implicite, li se poate atribui handle-ul întors de [[http://​msdn.microsoft.com/​en-us/​library/​ms683231(VS.85).aspx | GetStdHandle]]. 
 + 
 +</​spoiler>​ 
  
 Pentru testare puteți folosi comenzile: <code bash> ./​2-tiny.exe ​ Pentru testare puteți folosi comenzile: <code bash> ./​2-tiny.exe ​
Line 1023: Line 1060:
    * Completați funcția ''​PipeCommands''​.    * Completați funcția ''​PipeCommands''​.
    * zeroizaţi structura ''​SECURITY_ATTRIBUTES sa'',​ respectiv structurile ''​PROCESS_INFO pi1, pi2'';​    * zeroizaţi structura ''​SECURITY_ATTRIBUTES sa'',​ respectiv structurile ''​PROCESS_INFO pi1, pi2'';​
-   * **Atenție! ** În procesul părinte, trebuie închise capetele pipe-urilor.+   * **Atenție! ** În procesul părinte, trebuie închise capetele pipe-urilor ​după ce nu mai sunt folosite. 
 +   * **Atenție! ** membrul ''​bInheritHandle''​ al structurii ''​SECURITY_ATTRIBUTES'',​ transmise lui ''​CreatePipe'',​ trebuie să fie ''​TRUE''​.
    * Pentru redirectari,​ folosiți-vă de funcția ''​RedirectHandle''​.    * Pentru redirectari,​ folosiți-vă de funcția ''​RedirectHandle''​.
    * Revedeți secțiunea despre [[#pipe-uri anonime in windows|Pipe-uri anonime în Windows]].    * Revedeți secțiunea despre [[#pipe-uri anonime in windows|Pipe-uri anonime în Windows]].
Line 1073: Line 1111:
 </​code>​ </​code>​
  
- 
-===== Soluții ===== 
- 
-[[http://​elf.cs.pub.ro/​so/​res/​laboratoare/​lab03-sol.zip | lab03-sol.zip]] 
  
  
so/laboratoare/laborator-03.1583215245.txt.gz · Last modified: 2020/03/03 08:00 by razvan.pricope
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