ESERCIZI per il LABORATORIO di SISTEMI OPERATIVI

Programmazione della Shell

Gli esercizi proposti nel seguito devono essere realizzati utilizzando la bash shell di Linux, eventualmente nella forma ridotta di Bourne shell sh, il cui manuale è disponibile in formato PDF oppure in modalità ipertestuale

Gli esercizi proposti devono essere accompagnati ciascuno da una breve relazione che ne spieghi le caratteristiche implementative rilevanti e da una traccia della loro esecuzione con un input di prova.

  1. Minishell che registra i comandi già eseguiti

    Mediante il comando predefinito read e la variabile di shell REPLY, utilizzata per registrare l'ultima riga digitata, si costruisca una minishell che esegue i comandi così come sono introdotti, amenochè la riga non inizi col carattere !. In questo caso la minishell deve effettuare le azioni descritte di seguito che, in relazione al carattere successivo, sono


    Si utilizzi la variabile di supporto STORIA per memorizzare la sequenza di comandi che deve essere salvata su un file quando la minishell termina. Il comando di terminazione deve essere q<CR>, ossia il singolo carattere q.

    Inoltre, il comando rm di cancellazione dei file va eseguito in modo tale che i file e le directory cancellate devono essere spostate nel cestino, identificato dalla directory .CESTINO posizionata nella home directory.

  2. BBS Repositary

    Si consideri il problema di gestire gli avvisi in bacheca con un server remoto il cui accesso è reso possibile mediante l'utilizzo di browser. Per semplicità si supponga che il server sia raggiungibile con la pagina bbs.html. In essa un'opportuna form acquisisce le informazioni rilevanti riguardanti l'utente, la sua mail, il colore, l'argomento e il messaggio.

    Le informazioni così acquisite sono gestite localmente al server per mezzo dello shell script bbs.cgi, che si interfaccia con la pagina HTML attraverso il noto protocollo CGI. In particolare, il colore definisce il livello di priorità che va selezionato da un'insieme predefinito e in corrispondenza del quale il server deve avere una directory contenente i file di messaggi, uno per ogni argomento, un record distinto per ogni utente che usa lo stesso argomento.

    Si utilizzi un file toc.db, contenente una riga per ogni argomento, che indirizza il file appropriato. In questo modo si ottiene una tabella associativa che ad argomenti diversi fa corrispondere file diversi. Si implementi un adeguato meccanismo di generazione automatica dei nomi dei file.

    Le azioni consentite sono postIT per l'inserzione di un nuovo annuncio in bacheca e consult per ottenere tutte le informazioni relative ad un certo argomento di una data importanza. Eventualmente si può fornire il nome di un utente. Si tenga presente che le informazioni sono registrate su file e si consideri, a questo proposito, la possibilità che il client riceva le notizie richieste via mail.

Programmazione di Sistema in C

Gli esercizi proposti nel seguito devono essere realizzati nel linguaggio C impiegando, laddove è necessario, le chiamate di sistema e le funzioni di libreria del caso. A tal fine vanno aggiunte le opportune righe di include, contenenti i riferimenti ai file di intestazione (estensione .h) con le relative dichiarazioni di tipo e di funzione, ed inoltre compilare i sorgenti con le opzioni per il linker in modo ad ottenere la risoluzione dei nomi con le funzioni di libreria richieste.

  1. Implementazione in C dei comandi di shell

    Utilizzando i paramentri argc e argv se realizzi il comando di shell bblsort il cui parametro di input è una lista di numeri interi per produrre in uscita la stessa lista ordinata con l'algoritmo del bubblesort.

  2. Lancio dei Dadi

    Facendo riferimento al meccanismo di creazione dei thread ed utilizzando i canali di comunicazione già visti a lezione, si realizzi un programma con thread, il primo che funge da server che lancia i dadi mentre il secondo, interfacciato con l'input/output, riceve le richieste da tastiera e produce su video il risultato dei dadi lanciati. Si utilizzi, per il trasferimento dei dati fra i due thread, i canali Port e Reply, il primo per trasferire la richiesta al server ed il secondo per ricevere da quest'ultimo i risultati. Si strutturi adeguatamente il singolo dato trasmesso attraverso il buffer definendo, eventualmente, un appropriato record.

  3. Protocollo TELNET

    Supponendo di impiegare un client telnet si implementi il server bsort in grado di rispondere alle richieste del client sulla porta 9000 col comando di shell telnet host 9000, dove host definisce il nome simbolico dell'elaboratore su cui il server è in esecuzione.

    Si realizzi il server utilizzando le socket appropriate allo scopo in modo che il server risponda con un banner di benvenuto al momento della connessione e si predisponga a produrre come risultato l'ordinamento di una sequenza di interi (con l'algoritmo bubblesort) fino a quando il client non invia un comando di connessione terminata. Si noti che il server deve essere in grado di gestire più richieste allo stesso tempo.

  4. Battaglia Navale

    Facendo riferimento alle connessioni non connesse con protocollo di trasporto UDP, si realizzi una coppia di processi client-server in grado di giocare la battaglia navale. Si tenga presente, grazie alla simmetria della comunicazione, della perfetta intercambiabilità dei ruoli client e server di ciascun processo. L'implementazione deve essere ottenuta utilizzando le socket appropriate al caso, con relativa assegnazione dei necessari parametri. Si consideri la possibilità che possano avvenire più connessioni contemporaneamente.

Piattaforma RoboCup

Avendo come riferimento la piattaforma RoboCup si implementi un client asincrono , seguendo le direttive viste a lezione, in modo da controllare l'avatar messo a disposizione dalla piattaforma. La realizzazione deve permettere la clonazione di N processi clienti (fino a un massimo di 11) per ottenere una squadra capace di giocare una partita simulata. Si veda la discussione nelle lezioni della terza tranche.