User Tools

Site Tools


os:lab05
Return to Home page

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
os:lab05 [2019/10/23 23:17]
zioskenz
os:lab05 [2019/11/18 17:34] (current)
zioskenz [Exercise 02: Concurrent exchange-sort on files]
Line 5: Line 5:
  
  
-==== Exercise 01: Comandi di shell per processi e ridirezione ​====+==== Exercise 01: Shell commands for processes and redirection ​====
  
 === A. === === A. ===
-Scrivere un programma ​C in grado di leggere dei valori interi e stampare su standard output (''​stdout''​)+Write a program that reads integer numbers and prints ​in standard output (''​stdout''​)
 <code c> <code c>
 fprintf (stdout, ...); fprintf (stdout, ...);
 </​code>​ </​code>​
-i numeri pari e su standard error (''​stderr''​)+the even numbers and in standard error (''​stderr''​)
 <code c> <code c>
 fprintf (stderr, ...); fprintf (stderr, ...);
 </​code>​ </​code>​
-i numeri dispariIl programma termini una volta introdotto il valore nullo.+the odd numbersThe program must terminate after the introduction of the value ''​0''​.
  
-Si utilizzi la ridirezione per+Make use of redirection for
-  * leggere gli interi dal file "''​inFile.txt''", ​invece che da standard input +  * read integer numbers from the file "''​inFile.txt''", ​instead of from standard input 
-  * scrivere i valori pari su file "''​pariFile.txt''", ​invece che su standard output +  * write even numbers to the file "''​evenFile.txt''", ​instead of standard output 
-  * scrivere i valori dispari su file "''​dispariFile.txt''", ​invece che su standard error.+  * write the odd numbers to the file "''​oddFile.txt''", ​instead of standard error.
  
 === B. === === B. ===
-Utilizzare ​pipe e ridirezione su comandi di shell per effettuare le seguenti operazioni+Use pipe and redirection on shell command to perform the following operations
-  * contare il numero di file/direttori nell'​albero di direttori con radice la propria ​"''​home''"​ +  * count the number of files/directories in the directory tree with root your "''​home''" ​directory 
-  * una volta scaricati i testi del laboratorio in un qualsiasi direttorio, visualizzare il numero totale di stringhe nei file ''​lab01.txt'',​ ''​lab02.txt''​e ''​lab03.txt''​ +  * after downloading the file [[https://​www.skenz.it/​listing/​os/​lab/​lab01e01in.txt|lab01e01in.txt]] in a directoryprint the total number of strings in the file
-  * contare il numero di processi attivi sul sistema che hanno come proprietario l'​utente ​"''​root''"​.+  * count the number of active processes in the system who are owned by the user "''​root''"​.
  
  
-==== Exercise 02: Exchange-sort concorrente su file ====+==== Exercise 02: Concurrent exchange-sort on files ====
  
-=== Premessa numero ​1. === +=== Premise number ​1. === 
-L'​algoritmo di ordinamento per scambio ​(exchange-sort ​+The sorting algorithms by exchange ​(exchange-sort ​or bubble-sort) ​sort a vector comparing adjacent elements
-bubble-sort) ​ordina un vettore mediante il confronto di +The following is a possible implementation ​(with sorting of the vector ​of elements):
-elementi contigui+
-La seguente e' una possibile implementazione ​(con ordinamento +
-del vettore ​di elementi):+
 <code c> <code c>
 for (i=0; i<n-1; i++) { for (i=0; i<n-1; i++) {
Line 50: Line 47:
 </​code>​ </​code>​
  
-=== Premessa numero ​2. === +=== Premise number ​2. === 
-Un  ​file binario puo' essere scritto ​(funzione ​UNIX write) ​e letto (funzione unix read) in maniera casuale utilizzando la funzione ​''​lseek''​.+A binary ​file can be write (UNIX function ''​write''​or read (UNIX function ''​read''​using a random access by means of the function ​''​lseek''​.
  
-Ad esempioil programma +For examplethe program [[https://​www.skenz.it/​listing/​os/​lab/​lab05ex02.c|lab05ex02.c]],​ after receiving the name of a file from command line
-lab05ex02.c +  * it writes in the file the vector ''​vet''​ with 12 elements 
-una volta ricevuto il nome di un file sulla riga di comando+  * it reads the file starting from the last line.
-  * scrive nel file il vettore ​vet di 12 elementi +
-  * rilegge il file a partire dall'​ultima riga.+
  
-Specifiche dell'​esercizio. +=== Exercise specifications === 
-Si implementi ​in maniera ​*concorrente*multi-processo* +Implement ​in **concurrent** and **multi-process** way the bubble-sort ​algorithm.
-l'​algortimo di bubble-sort+
-L'​algoritmo,​ utilizzando le system call fork e wait e +
-condividendo dati su file (i.e., leggendo e scrivendo dati sullo +
-stesso file) deve effettuare l'​ordinamento del file stesso.+
  
-Il programma (il padre): +The algorithm, by using the system calls ''​fork''​ and ''​wait'',​ and sharing data in the file (i.e., by reading and writing data in the same file), must order the file itself.
-- riceve sulla riga di comando il nome di un file contenente +
-  un numero predefinito n di interi. +
-- a ogni iterazione del ciclo esterno "​simula"​ l'azione +
-  del ciclo interno generando ​(n-1-i) processi figlio.+
  
-Ognuno dei figli +The program ​(i.e., ​the parent): 
-  - legge due elementi adiacenti nel file +  * receives on the command line the name of a file containing a predefined number ''​n''​ of integer numbers. 
-  - ne effettua lo scambio qualora necessario +  ​* at each iteration of the external cycle, it "​simulates"​ the action of the internal cycle by using ''​n-1-i''​ child processes
-  - li riscrive su file +
-  - si sincronizza con gli altri processi figli per +
-    generare l'​effetto globale di ordinamento ​(i.e., +
-    ogni iterazione del ciclo esterno il valore +
-    maggiore tra quelli rimanenti, viene spostato in +
-    fondo al file) +
-  - termina.+
  
-Osservazioni +Each of its children: 
-------------+  * reads two adjacent elements from the file 
 +  * swaps them if it is necessary 
 +  * writes them in the file 
 +  * it synchronizes with the other children processes to generate the overall sorting effect (i.e., at each iteration in the external cycle the highest value among the remaining numbers is moved at the end of the file) 
 +  * terminates
  
-1. Operare su file e' indispensabile in quanto un processo padre +=== Observations === 
-   e uno figlio non condividono lo spazio di indirizzamento ​(quindi +  - Working on file is indispensable since a parent process and a child do not share the address space (in factordering a vector would actually order different vectors). 
-   ​ordinando un vettoreordinerebbero di fatto vettori diversi). +  - The program can be generalized by considering the first integer number stored ​in the file as indicator of the actual number of the integer numbers saved in the file. 
-2. Il programma puo' essere generalizzato facendo ​in modo che +  - Managing a binary ​file simplifies the positioning on a specific data ''​i''​.\\ In factin the case of a ASCII filethe number of character occupied is not constantas in the case of binary ​file, but it depends on the value of the number
-   il primo degli interi memorizzati su file indichi il numero +    * number ​5 
-   di interi successivi presenti nel file. +      * ASCII coding ​= 1 character 
-3. Gestire un file binario semplifica il posizionamento +      * binary coding ​''​sizeof(int)''​ bytes
-   sul dato di posizione ​i. +    * number ​12345 
-   ​Infattinel caso di file ASCII, ​il numero di caratteri occupati +      * ASCII coding ​= 5 characters 
-   da un intero non sarebbe costantecome nel caso di file binari, +      * binary coding ​''​sizeof(int)''​ bytes, 
-   ma dipenderebbe dal suo valore+    * In addition, in the first case of ASCII coding, it would also be necessary to count "additional" ​characterssuch as the ''​\n'​' character of end of line.
-   - -> codifica ​ASCII = 1 carattere +
-       -> codifica binaria ​= sizeof (int) byte+
-   - 12345 -> codifica ​ASCII = 5 caratteri +
-           -> codifica binaria ​= sizeof (int) byte +
-   Inoltre nel primo caso occorrerebbe contare anche caratteri  +
-   "aggiuntivi", ​quali il '​\n' ​di fine riga.+
  
  
 +==== Exercise 03: Use of signals ====
 +Write a program that, using signals, synchronize two processes (a parent and it child) in a way that they print alternatively a specific message.
  
-Esercizio 03 +The following is an example of output: 
-Utilizzo di segnali +<code bash>
-------------------- +
- +
-Scrivere un programma che mediante l'​utilizzo di segnali +
-sincronizzi due processi (un padre e un figlio) in modo che +
-stampino alternativamente uno specifico messaggio. +
-Il seguente e' un esempio di output: +
 Child Woke-up Child Woke-up
 Father Woke-up Father Woke-up
Line 124: Line 97:
 Father Woke-up Father Woke-up
 ... ...
 +</​code>​
  
-Inserire ​sleep opportune per evitare corse critiche. +Insert appropriate ''​sleep''​ to avoid //race conditions//​.
  
  
-Esercizio ​04 +==== Exercise ​04: Use of signals and communication through files ==== 
-Segnali e comunicazione mediante file +Implement a C program that generates two children, a producer and a consumer. 
--------------------------------------+The producer child reads from the keyboard some strings, and it transfers them to the consumer. 
 +The consumer child converts the strings into uppercase characters, and it visualizes the strings in standard output.
  
-Implementare un programma C che crea due figli, un produttore +The introduction of the string ​"​end" ​terminates both children'​s processes and then, in sequence, it terminates the parent process
-e un consumatore. +The transfer of the strings has to take place through a file.
-Il figlio produttore legge da tastiera delle stringhe e le +
-trasferisce al consumatore. +
-Il figlio consumatore converte le stringhe in caratteri maiuscoli +
-e le visualizza su standard output. +
-L'​introduzione della stringa ​"​end" ​termina entrambi i processi +
-figli e quindi il processo padre, in sequenza+
-Il trasferimento delle stringhe avvenga attraverso ​file.+
  
-Suggerimenti +Suggestions:​ 
-1) Derivare la soluzione da quella dell'​esercizio precedente +  - Derive the solution from that of the previous exercise 
-2) I processi che comunicano non sono padre e figlio ma due +  - Communicating processes are not a parent and a child, but two "siblings"; ​as a consequence,​ you have to make sure that each child knows the PID of the "brother"
-   "fratelli"; ​quindi occorre fare in modo che ciascun +
-   ​figlio conosca il PID del processo ​"fratello".+
  
  

If you found any error, or if you want to partecipate to the editing of this wiki, please contact: admin [at] skenz.it

You can reuse, distribute or modify the content of this page, but you must cite in any document (or webpage) this url: https://www.skenz.it/os/lab05?rev=1571865425&do=diff
/web/htdocs/www.skenz.it/home/data/attic/os/lab05.1571865425.txt.gz · Last modified: 2019/10/23 23:17 by zioskenz

Privacy Policy