Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Robot tagliaerba Navimow i105E in prova: GPS e videocamera per un prato perfetto
Robot tagliaerba Navimow i105E in prova: GPS e videocamera per un prato perfetto
Abbiamo testato per alcune settimane il Navimow i105E, un robot tagliaerba che unisce il segnale RTK alla visione con videocamera intelligente, per un posizionamento preciso e un taglio impeccabile
Xiaomi 14 e Xiaomi 14 Ultra: sono davvero macchine fotografiche 5G?
Xiaomi 14 e Xiaomi 14 Ultra: sono davvero macchine fotografiche 5G?
Xiaomi 14 e Xiaomi 14 Ultra sono due dei più performanti cameraphone del 2024. Li abbiamo messi sotto torchio con tutte le prove che effettuiamo solitamente per le recensioni delle fotocamere, per saggiarne il comportamento e avere tutti i dati tecnici per un confronto ragionato
Corsair One i500: un PC gaming potente che può stare anche in salotto
Corsair One i500: un PC gaming potente che può stare anche in salotto
Corsair One i500 è un PC completo molto potente ma che occupa poco spazio e lo fa con stile. Un sistema che può servire tanto per lavorare quanto per giocare, con molti spunti interessanti ma anche qualche neo. Il prezzo è da capogiro.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 27-04-2016, 17:07   #1
domenico88
Senior Member
 
L'Avatar di domenico88
 
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"
domenico88 è offline   Rispondi citando il messaggio o parte di esso
Old 29-04-2016, 08:25   #2
sottovento
Senior Member
 
L'Avatar di sottovento
 
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.
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 29-04-2016, 19:32   #3
domenico88
Senior Member
 
L'Avatar di domenico88
 
Iscritto dal: Dec 2009
Messaggi: 1056
Quote:
Originariamente inviato da sottovento Guarda i messaggi
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)...
Ciao
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"
domenico88 è offline   Rispondi citando il messaggio o parte di esso
Old 04-05-2016, 16:44   #4
domenico88
Senior Member
 
L'Avatar di domenico88
 
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
in byte per I blocchi allocati

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
Il disco ha quindi una partizione definita da

[ 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];
}
Mi sa che non ne vengo fuori facilmente , anche perche dopo mi perdo un po` con le spiegazioni

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"
domenico88 è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2016, 09:28   #5
sottovento
Senior Member
 
L'Avatar di sottovento
 
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
sottovento è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Xiaomi 14 e Xiaomi 14 Ultra: sono davvero macchine fotografiche 5G? Xiaomi 14 e Xiaomi 14 Ultra: sono davvero macchi...
Corsair One i500: un PC gaming potente che può stare anche in salotto Corsair One i500: un PC gaming potente che pu&og...
realme 12X 5G: ottimo compromesso a meno di 200 euro realme 12X 5G: ottimo compromesso a meno di 200 ...
Recensione Apple iPad Pro M4: è più potente di un MacBook Air M3 Recensione Apple iPad Pro M4: è più...
Recensione Kobo Clara Colour: il primo eReader a colori. Che spettacolo!  Recensione Kobo Clara Colour: il primo eReader a...
3 hard disk esterni USB 3.2 Gen2 da 10 (...
Un Apple AirTag costa 29€: spendendo men...
STMicroelectronics: a Catania il primo i...
World of Warcraft è adesso giocab...
Belli e possibili: in offerta Nothing Ph...
Recensione realme 12 5G: il medio gamma ...
Comprare Google Pixel 8a dà dirit...
Cooler Master conferma il data breach: i...
God of War Ragnarok per PC annunciato co...
Trapano avvitatore con doppia batteria 2...
AMD: fino a 30.000 dollari di ricompensa...
Il TV LG OLED EVO 55'' Serie C3 2023 &eg...
Il portatile totale: in offerta ASUS Viv...
Il mini PC Teclast con CPU Intel, 16GB ...
Per IBM l'IA dev'essere aperta. Le novit...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 11:00.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Served by www1v