.dsy:it. Pages (39): [1] 2 3 4 5 » ... Last »
Show 150 posts per page

.dsy:it. (http://www.dsy.it/forum/)
- Sistemi operativi I (http://www.dsy.it/forum/forumdisplay.php?forumid=269)
-- Esame di laboratorio (Giugno 2007) - Domande (http://www.dsy.it/forum/showthread.php?threadid=31182)


Posted by Bennyk on 19-06-2007 16:05:

Esame di laboratorio (Giugno 2007) - Domande

Ciao a tutti,
elenco alcune domande raccolte oggi durante la prova.

Shell:

- trovare il file più "grosso" sul sistema
- archiviare i files più grandi di 5k e più piccoli di 100k
- copiare files da una cartella all'altra mantenendo inalterati permessi
- trovare tutti i files eseguibili > 5k e evidenziando i 5 più grandi
- archiviare i files modificati nell'ultima settimana
- spostare tutti i files che iniziano per m da una directory (e sottodirectory) ad un'altra
- trovare i tre files più grossi per ogni utente
- trovare il processo che occcupa più memoria ram
- archiviare tutti i files che contengono la parola "login"
- calcolare lo spazio occupato da un utente (dai suoi files)
- trovare il file più "grosso" per ogni utente


Kernel:

- modificare il kernel in modo che alla pressione di F8 appaia una scritta sulla shell
- stampare un messaggio ogni volta che si esce da un processo, in qualsiasi modo (eg: kill, term, ...)


Sul kernel sono un pò pochine perchè pochi ci sono arrivati, chiunque abbia altre informazioni o dritte aggiunga...

Non sarebbe male anche avere qualche soluzione fatta con MINIX 3.


Posted by n3o on 19-06-2007 19:55:

1) Specificare l'occupazione totale di un utente in un sistema (somma delle dimensioni dei suoi file...)

code:
#!/bin/sh if [ $# -ne 1 ]; then echo "syntax: user_size <user_name>" exit 1 fi ID="$(grep "^$1" /etc/passwd | cut -f 3 -d :)" if [ "$ID" = "" ]; then echo "User "${1}" not found" exit 1 fi echo "calculating..." SUM=0 for ITEM in $(find / -user "$ID" -type f | xargs du | cut -f 1); do SUM=$(expr ${SUM} + ${ITEM}) done echo "User "${1}" takes ${SUM} KB into the system" exit 0

Molte righe di codice sono controlli che potete saltare all'esame...

2) Per ogni utente del sistema specificare qual è il suo file di dimensioni maggiori
code:
#!/bin/sh # Per ogni utente trovare il suo file di dimensione maggiore for UID in $(cut /etc/passwd -d : -f 3 | sort -n | uniq); do FILE=$(find / -type f -user $UID | xargs du | sort -nr | head -1) if [ "$FILE" != "" ]; then DIM=$(echo "$FILE" | cut -f 1) NOME=$(echo "$FILE" | cut -f 2) echo "UID: $UID => File: $NOME ($DIM KB)" else echo "UID: $UID => Nessun file trovato" fi done

Anche qui i controlli e le chicche per stampare meglio l'output sono opzionali

3) Stampare "MUOIO!" ogni volta che un processo termina
Personalmente ho solo aggiunto questa riga:

kprintf ("MUOIO!\n");

Nei file:

/usr/src/kernel/system/do_exit.c
/usr/src/kernel/system/do_kill.c

nelle funzioni con il rispettivo nome [do_exit() e do_kill()]

C'era una postilla ovvero di far stampare ance il PID del processo.
Era un problema perchè all'interno del kernel il proc_nr non è il PID della tabella dei processi di PM ma il numero del processo della tabella del Kernel che non sono lo stesso numero quindi pescare quello giusto era comlicato e l'ora si faceva tarda...
quindi il prof mi ha detto che se non lo facevo non era importante e non mi ha penalizzato. (ma questo rimanga tra me e voi...)

__________________
The answer is blowing in the wind...


Posted by darkman13 on 19-06-2007 20:16:

Grandi ragazzi, grazie 10000000000 ;-)


Posted by maxj8 on 20-06-2007 14:13:

La domanda di Shell di copiare tutti i file da una cartella ad una nuova mantenendo inalterati gli attributi prevede anche di prendere file che iniziano per una lettera specifica (banale) e di copiare anche tutto il path dei file nella nuova cartella (meno banale).

Per il Kernel io avevo da far comparire 'chiuso' ogni volta che un file viene chiuso. Ho preso da stdio il riferimento alla funzione fclose.c e l'ho modificata.
A dire la verità non ha funzionato alla fine ma perchè la macchina anche dopo la ricompilazione continuava a partire col vecchio kernel. Cmq alla fine al docente andava bene lo stesso perchè la cosa importante è far vedere di sapere dove mettere mano e ragionarci sopra, anche se poi il risultato non è esatto non fa nulla.

E ora...speriamo che all'orale non succedano follie...


Posted by drakess81 on 20-06-2007 15:08:

Usciti i risultati di laboratorio... che strage!!! Ora restano solo l'appello di luglio e settembre... poi chi non passa ripete tutto??? Mi sembr assurdo... Ho fatto i due compitini prendendo B e 2 punti, magari faccio un buon orale e se sbaglio l'appello LAB di settembre perdo tutto? Mi sembra assurdo... Sono ignorante sui comandi scell di Minix, non ho potuto seguire il LAB e sulle slide c'è poco... videolezioni niente... non è giusto...datemi un buon libro che me lo studio!!!


Posted by darkman13 on 20-06-2007 15:09:

a chi lo dici


Posted by n3o on 20-06-2007 15:23:

Originally posted by drakess81
Sono ignorante sui comandi scell di Minix, non ho potuto seguire il LAB e sulle slide c'è poco... videolezioni niente... non è giusto...datemi un buon libro che me lo studio!!!

Per l'esercizio del partizionamento trovi un thread apposta.
Esercizi sulla shell ne trovi sulla wiki di sis lab con anche delle spiegazioni sui comandi base.
Per la parte kernel c'è una spiegazione di un esercizio sempre nelle pagine della wiki di sis lab.
C'è poi questo thread che spero sia ampliato...

Non è molto ma per chi non ha seguito il corso credo non ci sia altro.

PS: puoi leggerti "advanced bash scripting" che lo trovi su google controllando però quello che fai su Minix perchè la guida è fatta per bash+linux non sh+minix

PS2: per conoscere meglio i comandi in Minix batti:
man <comando> e ti dice tutte le varie opzioni che non sei tenuto a sapere
La lista dei comandi dispinibili la trovi facendo
ls /usr/bin

__________________
The answer is blowing in the wind...


Posted by bog86 on 20-06-2007 16:59:

Esempio la prima: - trovare il file più "grosso" sul sistema
Potrebbe andare bene così?
find / -name "*.*" | xargs du -s | sort -n | tail -n 1


Posted by n3o on 20-06-2007 18:59:

Io userei:
find / -type f | xargs du | sort -n | tail -1

__________________
The answer is blowing in the wind...


Posted by amari on 20-06-2007 21:41:

Modifica al kernel richiesta:

impedire che vengano creati file il cui nome cominci con la lettera m.

Intervento individuato: nei sorgenti del pm, nel file open.c c'è una funzione do_creat() (sì senza la e :)).

Uno dei parametri sembra essere il nome. Basterebbe quindi inserire un if alla inizio della funzione che controlla il nome e se quest'ultimo comincia con m, terminare con errore. In realtà il Prof. Monga ha detto che quello non è proprio il nome del file ma una stringa che lo rappresenta (una specie di codifica interna di Minix). Ma la risposta andava bene ugualmente.

Ciao a tutti
A.


Posted by n3o on 21-06-2007 00:45:

Ricordo che la tua domanda è stata fatta a lezione...
Il nome di un file lo si trovava passando per:
/usr/src/servers/fs/open.c -> do_creat() -> common_open() -> new_node()
In questa funzione nella variabile string c'è il nome del file e basta aggiungere dopo la riga:
*ldirp = parse_path(path, string, opaque ? LAST_DIR : LAST_DIR_EATSYM);
Il seguente pezzo di codice:

code:
if (*string == 'M' || *string == 'm') { printf ("Niente nomi che iniziano con emme!!!\n"); return (NIL_INODE); }

Il side-effect è che il sistema non è ovviamente più in grado di aprire file che inizino con emme!!!

Ottimo che il thread si allarga!!!
è possibile chiedere di evidenziare il post mettendolo in sticky?

__________________
The answer is blowing in the wind...


Posted by amari on 21-06-2007 09:18:

Ciao,

in effetti avevo scritto male... ovviamente il server in questione era il fs e non il pm.

Tieni conto però della nota di Monga... io non ho provato ma mi fido :)

Ciao
A.


Posted by bog86 on 21-06-2007 14:31:

Altra domanda: - archiviare i files più grandi di 5k e più piccoli di 100k?
con "find / -type f -size -100 | xargs tar cvf archivio.tar" archivio solo i file piu piccoli di 100k, ma come faccio a fare entrambi contemporaneamente?


Posted by n3o on 21-06-2007 15:15:

Prova con
find / -type f -size +5 -a -size -100 | xargs tar cvf archivio.tar

__________________
The answer is blowing in the wind...


Posted by bog86 on 21-06-2007 16:14:

Grazie n30...
poi ho provato a far girare il tuo script x trovare il file maggiore di ogni utente ma mi stampa sempre nessun file trovato fino a UID 9999.
Altra cosa x risp alla domanda -spostare(ho copiato...) tutti i files che iniziano per m da una directory (e sottodirectory) ad un'altra. ho usato "cp -r $(find / -name "m*.*") cartella"


All times are GMT. The time now is 22:07. Pages (39): [1] 2 3 4 5 » ... Last »
Show all 571 posts from this thread on one page

Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.