Differences

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

Link to this comparison view

so:cursuri:curs-10 [2014/04/21 10:27]
razvan.deaconescu [Utilitate disk cache]
so:cursuri:curs-10 [2019/04/20 20:24] (current)
razvan.deaconescu
Line 1: Line 1:
 ====== Curs 10 - Dispozitive de intrare/​ieșire ====== ====== Curs 10 - Dispozitive de intrare/​ieșire ======
  
-<​html>​ +  ​* [[http://​prezi.com/​z_hkmewcaqm_/?​utm_campaign=share&utm_medium=copy&rc=ex0share|Curs 10 -  Dispozitive de Intrare/​Iesire (Prezi)]]
-<iframe src="​http://​prezi.com/​embed/​z_hkmewcaqm_/?​bgcolor=ffffff&​amp;​lock_to_path=0&​amp;​autoplay=0&​amp;​autohide_ctrls=0&​amp;​features=undefined&​amp;​disabled_features=undefined"​ width="​550"​ height="​400"​ frameBorder="​0"></​iframe>​ +
-</​html>​ +
- +
-  ​* [[http://​prezi.com/​z_hkmewcaqm_/present/?auth_key=qr031kg&follow=n6sg-tqs2wm6&​kw=present-z_hkmewcaqm_&rc=ref-37087337|Curs 10 -  Dispozitive de Intrare/​Iesire (Prezi)]]+
   * [[http://​elf.cs.pub.ro/​so/​res/​cursuri/​SO_Curs-10.pdf|Curs 10 - Dispozitive de Intrare/​Iesire (PDF)]]   * [[http://​elf.cs.pub.ro/​so/​res/​cursuri/​SO_Curs-10.pdf|Curs 10 - Dispozitive de Intrare/​Iesire (PDF)]]
 +
 +  * [[https://​docs.google.com/​document/​d/​1dc5Kaamjo6WPy7LABkBGTcxjVwgl3JbnlHnE0iREmwM/​edit?​usp=sharing|Notițe de curs]]
  
   * Suport curs   * Suport curs
-    * Operating Systems Concepts +    * Operating Systems Concepts ​Essentials 
-    * Capitolul ​13 -- I/O Systems +      * Capitolul ​11 -- Mass Storage Structure 
-    * Capitolul 12 -- Mass Storage Structure +        * Secțiunile ​11.2, 11.4, 11.7 
-      * Secțiunile ​12.2, 12.4, 12.7+      * Capitolul 12 -- I/O Systems
     * Modern Operating Systems     * Modern Operating Systems
       * Capitolul 5 -- Input/​Output       * Capitolul 5 -- Input/​Output
         * Secțiunile 5.1, 5.2, 5.3         * Secțiunile 5.1, 5.2, 5.3
         * Subsecțiunile 5.4.1, 5.4.3         * Subsecțiunile 5.4.1, 5.4.3
 +
 +<​html>​
 +  <​center>​
 +    <iframe src="​https://​prezi.com/​embed/​z_hkmewcaqm_/?​bgcolor=ffffff&​amp;​lock_to_path=0&​amp;​autoplay=0&​amp;​autohide_ctrls=0&​amp;​features=undefined&​amp;​disabled_features=undefined"​ width="​550"​ height="​400"​ frameBorder="​0"></​iframe>​
 +  </​center>​
 +</​html>​
  
 ===== Demo-uri ===== ===== Demo-uri =====
Line 130: Line 134:
  [...]  [...]
 </​code>​ </​code>​
-Observăm că acum operația durează semnificativ mai mult (2 minute). De asemenea încărcarea pe procesor este mai mică (''​11%''​ față de ''​100%''​ pentru că acum procesorul așteaptă după disc. Observăm diferența mare de schimbări de context voluntare (procesul se blochează) și numărul diferit de zero de citiri din sistemul de fișiere: acum întreg fișierul de intrare este citit de pe disc, nu mai este cache-uit în memorie.+Observăm că acum operația durează semnificativ mai mult (2 secunde). De asemenea încărcarea pe procesor este mai mică (''​11%''​ față de ''​100%''​ pentru că acum procesorul așteaptă după disc. Observăm diferența mare de schimbări de context voluntare (procesul se blochează) și numărul diferit de zero de citiri din sistemul de fișiere: acum întreg fișierul de intrare este citit de pe disc, nu mai este cache-uit în memorie.
  
 Cache-ul de disk este esențial pentru funcționarea eficientă a sistemului. În absența acestuia procesorul ar trebui să solicite informații de pe disc, dispozitiv foarte lent comparativ cu memoria și procesor. Trebuie avut grijă la flush-ul/​sincronizarea periodică a informațiilor din memorie pe disc pentru ca acestea să nu se piardă la o închidere bruscă a sistemului, memoria fiind volatilă. Cache-ul de disk este esențial pentru funcționarea eficientă a sistemului. În absența acestuia procesorul ar trebui să solicite informații de pe disc, dispozitiv foarte lent comparativ cu memoria și procesor. Trebuie avut grijă la flush-ul/​sincronizarea periodică a informațiilor din memorie pe disc pentru ca acestea să nu se piardă la o închidere bruscă a sistemului, memoria fiind volatilă.
 ==== Copiere conținut CD/DVD în fișier .iso ==== ==== Copiere conținut CD/DVD în fișier .iso ====
  
-Dorim să urmărim ce se întâmplă în cazul în care avem date partajate într-un mediu multithread. Pentru aceasta ​accesăm subdirectorul ''​list-excl/'';​ urmărim conținutul fișierelor ​''​thread-list-app.c'' ​și ''​list.c''​. Este vorba de o aplicație care lucrează cu liste înlănțuite într-un mediu multithreaded. Vom observa că există riscul ca datele să fie corupte, fiind necesară sincronizare.+Dorim să creăm facil un fișier format .iso conținând imaginea unui CD/DVD. Pentru aceasta ​comanda de creare este una foarte simplă ce folosește ''​dd''​:<code bash> 
 +$ dd if=/​dev/​cdrom of=file.iso bs=1M 
 +</​code>​
  
-Compilăfișierele folosind ​''​make''​. ​Rezultă două fișiere în format executabil: ​''​thread-list-app''​ și ''​thread-list-app-mutex''​.+Comanda copiază octet cu octet conținutul CD-ului/​DVD-ului,​ indicat de dispozitivul ''/​dev/​cdrom''​ și îl scrie în fișierul ''​file.iso''​. ​Întrucât comanda ​''​dd'' ​acționează ​și pe dispozitive,​ va reieși un fișier în format ​''​.iso''​, copia sector cu sector a discului.
  
-Programul ''​thread-list-app-mutex''​ folosește intern un mutex pentru sincronizare. ​Pentru ​aceasta folosim macro-ul ''​USE_MUTEX''​ pe care îl definim în fișierul ''​Makefile''​. +Pentru ​urmări evoluția comenziidintr-un alt terminal putem rula comanda:<code bash> 
- +$ kill -USR1 $(pidof dd)
-Ca să urmărim ce se întâmplă cu o aplicație multithreaded cu date partajaterulăm de mai multe ori programul ''​thread-list-app'',​ până la obținerea unei erori:<code bash> +
-./​thread-list-app+
 </​code>​ </​code>​
 +Livrarea semnalului ''​USR1''​ procesului ''​dd''​ înseamnă afișarea unui raport de stare din partea comenzii ''​dd''​ (adică în primul terminal).
  
 ==== Folosire operație de control (ioctl) ==== ==== Folosire operație de control (ioctl) ====
  
-Dorim să urmărim ​ce se întâmplă în cazul în care avem date partajate într-un mediu multithreadPentru aceasta accesăm subdirectorul ''​list-excl/'';​ urmărim conținutul fișierelor ''​thread-list-app.c'' ​și ''​list.c''​. Este vorba de o aplicație care lucrează cu liste înlănțuite într-un mediu multithreadedVom observa că există riscul ca datele să fie corupte, fiind necesară sincronizare.+Dorim să urmărim ​câteva cazuri de folosire a funcției [[http://​man7.org/​linux/​man-pages/man2/​ioctl.2.html|ioctl]]. Funcția este utilizată pentru operații de control a unui dispozitiv sau de citire a unei stări sau a configurații,​ acolo unde funcțiile [[http://​man7.org/​linux/​man-pages/​man2/​read.2.html|read]] sau [[http://​man7.org/​linux/​man-pages/​man2/​write.2.html|write]] nu pot fi folosite. Apelurile ​''​ioctl'' ​sunt folosite în special pe fișiere speciale (dispozitive,​ sockeți, terminale etc.); dezavantajul este că nu există o formă standard a operațiilor aferente și în general nu sunt portabileO listă **incompletă** de operații se găsește în [[http://​man7.org/​linux/​man-pages/​man2/​ioctl_list.2.html|pagina de manual ioctl_list]].
  
-Compilăm fișierele folosind ​''​make''​. Rezultă două fișiere în format executabil: ​''​thread-list-app''​ și ''​thread-list-app-mutex''​.+Pentru a urmări folosirea apelului ''​ioctl''​ accesăm subdirectorul ​''​ioctl/''​; urmărim conținutul ​fișierelor ​''​cdrom-ioctl.c''​ și ''​hwaddr-ioctl.c''​. Fișierele implementează,​ respectiv, operații pe CD-ROM drive și pe socket pentru aflarea adresei hardware (MAC).
  
-Programul ​''​thread-list-app-mutex'' ​folosește intern un mutex pentru sincronizare. Pentru aceasta folosim ​macro-ul ''​USE_MUTEX'' ​pe care îl definim ​în fișierul ''​Makefile''​.+Pentru fișierul sursă ​''​cdrom-ioctl.c'' ​înlocuim valoarea ​macro-ului ''​CDROM_DEV_PATH'' ​cu șirul ce reprezintă calea către CD-ROM. La fel, în fișierul ''​hwaddr-ioctl.c'' ​înlocuim valoarea macro-ului ''​IFNAME''​ cu șirul ce reprezintă numele interfeței a cărei adresă hardware dorim să o determinăm.
  
-Ca să urmărim ce se întâmplă cu o aplicație multithreaded cu date partajate, rulăm de mai multe ori programul ​''​thread-list-app''​, până la obținerea unei erori:<​code ​bash+Compilăm fișierele folosind ''​make''​. Rezultă două fișiere în format executabil: ​''​cdrom-ioctl''​ și ''​hwaddr-ioctl''​
-./thread-list-app+ 
 +Cu ajutorul executabilului ''​cdrom-ioctl''​ putem executa trei tipuri de operații pe CD-ROM așa cum este indicat prin rularea sa fără argumente:<​code>​ 
 +./cdrom-ioctl  
 +You must provide exactly one argument. 
 + 
 +Usage: ./​cdrom-ioctl e|l|u 
 + e - eject CD-ROM 
 + l - lock CD-ROM drive 
 +unlock CD-ROM drive
 </​code>​ </​code>​
 +
 +În continuare putem rula comanda ''​cdrom-ioctl''​ cu exact unul dintre argumentele ''​e'',​ ''​l'',​ ''​u''​ pentru a deschide trapa CD-ROM drive-ului saua bloca/​debloca deschiderea manuală a acestuia (din buton). După cum vedem din codul sursă, aceste trei operații sunt realizate cu un apel ''​ioctl''​ și cu parametrii aferenți (documentați în [[http://​lxr.free-electrons.com/​source/​Documentation/​ioctl/​cdrom.txt?​v=3.13|sursele nucleului Linux]]): ''​CDROMEJECT''​ și ''​CDROM_LOCKDOOR''​.
 +
 +Cu ajutorul executabilului ''​hwaddr-ioctl''​ putem determina adresa hardware (MAC) a unei interfețe de rețea așa cum se întâmplă mai jos:<​code>​
 +$ ./​hwaddr-ioctl ​
 +Hardware address for interface eth0 is 00:​21:​cc:​68:​d0:​53
 +</​code>​
 +
 +Adresa hardware a fost obținută într-o structură [[http://​lxr.free-electrons.com/​source/​include/​uapi/​linux/​if.h?​v=3.13#​L170|struct ifreq]] cu ajutorul unui apel ''​ioctl''​ aplicat pe un descriptor de socket. Parametrul ''​ioctl''​ a fost ''​SIOCGIFHWADDR''​.
so/cursuri/curs-10.1398065233.txt.gz · Last modified: 2014/04/21 10:27 by razvan.deaconescu
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