|
|
|
|
Strumenti |
27-04-2016, 17:07 | #1 |
Senior Member
Iscritto dal: Dec 2009
Messaggi: 1056
|
[JAVA] File System
Ciao a tutti
Dovrei sostenere a breve l esame di sistemi operativi all uni, frequento ingegneria informatica Per la parte pratica mi e` stato assegnato un progetto per simulare diciamo un file system con operazioni di base, tipo creazione , lettura cancellazione e altre operazioni semplici di questo tipo Ora sto studiando il file system per capire diciamo la parte logica e come viene implementata , cioe` le strutture dati utilizzate, linkedList oppure hashmaps con tabella file allocation table per l indirizzamento dei blocchi su disco. Premetto che ho comunque delle basi di programmazione sia in c che in java, il fatto e` che la stesura di un programma di questo tipo richiede diverse linee di codice, e sinceramente non saprei da dove cominciare a lavorare.. Volevo chiedere se qualcuno magari piu` esperto potesse avere qualche risorsa utile su questo argomento e magari prendere spunto da documentazione ecc Grazie in anticipo a tutti per l attenzione
__________________
Alimentatore corsair RM650W-AMD ryzen 5 5600x - 16GB RAM DDR4 3600mhz- Dissipatore be quite dark rock 4- AMD RX6800XT - SSD Samsung 980PRO 1TB - CASE corsair ICUE 220T Asus rog strix 35" |
29-04-2016, 08:25 | #2 |
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Ciao
scrivere o simulare un file system e' un lavoro piuttosto grosso, che va certamente oltre ad un semplice progetto per un esame. Immagino quindi che ci siano limitazioni o ipotesi aggiuntive per limitare il lavoro da fare, giusto? Io mi terrei sul semplice. Visto che si tratta di costruire una simulazione, farei la simulazione di un file system all'interno di un file. Fra l'altro, potrebbe anche essere utile 1 - scriverei un programmino (chiamato per esempio, DiskSpace) che crea un file delle dimensioni passate in ingresso. E' molto semplice e potrebbe anche non necessitare di un'interfaccia utente: gli si passa solo il nome del file da creare e la dimensione desiderata. Si tratta di poche linee di codice. All'interno di questo file eseguirei poi le mie simulazioni; 2- scriverei un programmino (chiamato per esempio Format) che "formatta" il file creato al punto #1. Per formattare intendo creare le strutture dati che decido di utilizzare e che metterei in una posizione fissata (all'inizio del file, per esempio). 3 - scriverei un programma di utility per visualizzare lo stato del mio file: cosa c'e' nelle mie strutture dati, etc. Mi prenderei del tempo per fare in modo che questo programmino sia il piu' completo possibile, perche' sara' l'unico in grado di aiutarmi a trovare gli errori che inevitabilmente compirei nell'implementare i miei algoritmi; 4 - scriverei un programmino (chiamato per esempio Copy) che copia un file dal mio computer al mio nuovo file system. Userei l'utility fatta al passo #3 per verificare come stanno andando le cose; 5 - estenderei il programmino al passo #4 per fare la copia in direzione opposta, sempre verificando tutto con il programma al passo #3 6 - procederei allo stesso modo per spostamento, cancellazione, creazione directory, ecc. Per quanto riguarda gli algoritmi e le strutture, mi terrei sul semplice anche in questo caso. Partirei addirittura a fare il primo file system senza directory (quindi potendo inserire solo file)...
__________________
In God we trust; all others bring data Ultima modifica di sottovento : 29-04-2016 alle 08:33. |
29-04-2016, 19:32 | #3 | |
Senior Member
Iscritto dal: Dec 2009
Messaggi: 1056
|
Quote:
innanzitutto grazie mille per aver risposto Riguardo ai vincoli del progetto c era appunto una scrittura semplificata del file system con operazioni di read/write sui file , apertura e chiusura e poco altro..mi sembra pero` che le directory vengono richieste per un organizzazione gerarchica La soluzione da te proposta riguardo all implementazione in un filesystem all interno di un file(suppongo si intende dello spazio su disco non allocato).. mi cogli impreparato...cioe` da quello che ho studiato un file system viene implementato in una partizione del disco dove vi e` un sottoinsieme di blocchi riservato al boot , al block0 superblock, ai descrittori dei file e ai bit di controllo e ai file e alle directory appunto Le classi che avevo pensato di implementare sarebbero Una classe Disco dove simulare il nostro spazio per lo storage con operazioni di ricerca, lettura o scrittura Una classe per modellare un descrittore del file, come ad esempio un inode, contenente le info del file, il puntatore ai blocchi sul disco, il tipo del file ecc Comunque ho trovato un risorsa utile di un progetto dove ce` qualche spiegazione sull implementazione proprio in java Cerco di fare una piccola sintesi con il codice allegato e postarla entro stasera Grazie ancora dell attenzione
__________________
Alimentatore corsair RM650W-AMD ryzen 5 5600x - 16GB RAM DDR4 3600mhz- Dissipatore be quite dark rock 4- AMD RX6800XT - SSD Samsung 980PRO 1TB - CASE corsair ICUE 220T Asus rog strix 35" |
|
04-05-2016, 16:44 | #4 |
Senior Member
Iscritto dal: Dec 2009
Messaggi: 1056
|
Ciao
Scrivo un po` la sintesi di quello che sono riuscito a recuperare.. Allora le direttive del progetto sono "Si realizzi, a grandi linee, un file system proprietario in grado di eseguire le operazioni minimali: creazione/distruzione/modifica files, permessi di accesso, link" Questo e` tutto quello che ho a disposizione per scrivere il programma Ho recuperato del materiale su internet di un libro americano `Operating system concepts` Faccio un po` una sintesi del capito sul file system dove ce' qualche riga di codice Dice di progettare un file system su un disco simulato basato su un format Unix, con struttura dati per memorizzare il file, i-Node, che elenca un insieme di attributi e I puntatori ai blocchi su disco per un dato file La classe Disco Disk.java , usando un file chiamato Disk Codice:
NUM_BLOCCHI e DIM_BLOCCO contiene i metodi Codice:
void read(int ind_blocco, byte[] buffer) //Legge da un numero indice di blocco specificato i dati e li memorizza nel buffer void write (int ind_blocco, byte[] buffer) // scrive il contenuto del buffer nei blocchi specificati da ind_blocco Codice:
la classe Disco public class Disk { public void read(int blocknum, byte[] buffer) {} public void read(int blocknum, SuperBlock block) {} public void read(int blocknum, InodeBlock block) {} public void read(int blocknum, IndirectBlock block) {} public void write(int blocknum, byte[] buffer) {} public void write(int blocknum, SuperBlock block) {} public void write(int blocknum, InodeBlock block) {} public void write(int blocknum, IndirectBlock block) {} public void stop() {} } //stop(), ferma il disco e riporta il conteggio delle operazioni di lettura e scrittura effettuate [ SuperBlocco - Blocchi Inode - Blocchi dei dati ] Dovrei creare una classe per ogni parte Cioe Classe Superblocco Contenente Numero di blocchi del file system --- int size (esempio) Numero di blocchi iNodes int iSize Primo blocco della Lista int freeList I puntatori ai blocchi su disco sono interi con range tra [1 - Disk.NUM_BLOCCHI -1] Questa invece la classe iNode Codice:
class Inode { // size of an inode in bytes public final static int SIZE = 64; int flags; int owner; int fileSize; public int pointer[] = new int[13]; } Esempio come dovrei implementare le funzioni della classe Disk? Grazie in anticipo dell attenzione
__________________
Alimentatore corsair RM650W-AMD ryzen 5 5600x - 16GB RAM DDR4 3600mhz- Dissipatore be quite dark rock 4- AMD RX6800XT - SSD Samsung 980PRO 1TB - CASE corsair ICUE 220T Asus rog strix 35" |
06-05-2016, 09:28 | #5 |
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Java non mette a disposizione classi o metodi per l'indirizzamento di blocchi sul disco. Queste operazioni possono essere implementate con altri linguaggi in librerie esterne e poi chiamate da Java, ma a questo punto non e' piu' programmazione java, no?
Alcuni sistemi operativi (Linux, Windows) mettono a disposizione dei "file speciali" che rappresentano il disco. Quindi, a patto di avere i permessi necessari, e' possibile aprire quel file come se fosse un file qualsiasi, tenendo pero' in mente che si andra' ad indirizzare dei blocchi sull'intera partizione. Per questo motivo, l'idea originaria di aprire un file regolare, preallocarlo e considerarlo come se fosse il file system che si vuole creare non e' proprio campata per aria, ma e' una simulazione realistica che potrebbe poi essere effettivamente utilizzata sul file speciale. Per quanto riguarda il file system da creare, ho visto che ti sei informato; tuttavia non devi realizzare tutto quanto! Il mio consiglio e' di semplificare. Come ti dicevo, dovresti crearti una tabella iniziale con i parametri che hai fissato (dimensione del blocco, ecc.). Subito dopo potresti mettere la tabella che rappresenta la directory ROOT, nella quale ogni entry e' un file (ed eventualmente una directory) contenente nome, dimensione, data... ed il numero del primo blocco allocato. In realta', simulando gli i-node, il numero del primo blocco non sara' effettivamente quello allocato per i tuoi dati, ma il blocco contenente i puntatori ai dati da te allocati. Non dovrebbe essere difficile, no? Certo, non e' una passeggiata ma definendo le tue strutture e gestendole bene dovresti riuscire a cavartela
__________________
In God we trust; all others bring data |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:00.