Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32...

19
Gestione File System e I/O in Windows 2000 •Implementazione del File System •FAT-12, FAT-16, FAT-32 • NTFS •API relative al File System •Gestione dei dispositivi di I/O

Transcript of Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32...

Page 1: Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi.

Gestione File System e I/O in Windows 2000

•Implementazione del File System

•FAT-12, FAT-16, FAT-32

• NTFS

•API relative al File System

•Gestione dei dispositivi di I/O

Page 2: Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi.

Il File System MS-DOS

• Rappresentazione di una directory in MS-DOS

• Attributi : file nascosto, file di sistema, ecc.

Page 3: Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi.

Il File System DOS in Windows 95/98

• massima ampiezza delle partizioni per diverse ampiezze dei blocchi • FAT32 utilizza in realtà 28 bit e permette una minore frammentazione• Si ha una File Allocation Table mantenuta in memoria (solo in parte per FAT32).

Page 4: Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi.

Il File System di Windows 98 (FAT32)

La rappresentazione estesa di una directory MS-DOS utilizzata in Windows 98

Bytes

Page 5: Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi.

Il File System di Windows 98 (2)

La rappresentazione di (parte di) un nome di file “lungo” in Windows 98

Bytes

Checksum

Page 6: Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi.

NTFS (Windows NT/2000)

•Indirizzi a 64 bit

•Nomi dei file in codifica Unicode

• Case-sensitive

•Stream multipli e attibuti associati ad un file

•I blocchi vanno da 512 bytes a 64K (standard 4 Kb)

•Supporta compressione e crittografia dei file

Page 7: Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi.

Struttura del File System NTFS

La master file table di NTFS (1024 record da 1K)

Page 8: Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi.

Struttura del File System NTFS

Gli attributi usati nei record MFT

partizioni

Page 9: Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi.

Struttura del File System NTFS

Un record MFT per un file di 3 run e 9 blocchi

Page 10: Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi.

Struttura del File System NTFS

Un file che richiede 3 MFT record per memorizzare i suoi run

Page 11: Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi.

File System API in Windows 2000

• Principali chiamate della Win32 API relative ai file con il loro equivalente Unix più vicino

Page 12: Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi.

Creazione di un File

CreateFile ( nome, // nome del file accesso , // modo accesso (lettura, scrittura o entrambi)condivisione, // condivisione del file (0 nessuna condivisione)security, // attributi di sicurezzacreazione, // creare il file o no se non esisteAttributi, // attributi vari (compressione, nascosto, ecc..)oldFile // handle di un file da cui copiare gli attributi (NULL

indica nessun file));

Page 13: Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi.

System Call per la gestione dei file accesso: GENERIC_READ GENERIC_WRITE

condivis.: FILE_SHARE_READ FILE_SHARE_WRITE 0

creazione: CREATE_NEW CREATE_ALWAYS OPEN_EXISTING OPEN_ALWAYS

INVALID_HANDLE_VALUE indica fallimento nella create

Esempio:

Handle hfile;

hfile = CreateFile (“pippo”, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);

If (hfile==INVALID_HANDLE_VALUE)

printf (“errore nella creazione file \n”);

Page 14: Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi.

System Call per la gestione dei file S= WriteFile (handle, buffer, lung, &bytescritti,NULL);

S= ReadFile (handle, buffer, lung, &byteletti,NULL);

S vale 1 in caso di successo

Esempio:

{HANDLE hfile; DWORD bytescritti; int s;

char buffer[]=“buonasera”;

hfile = CreateFile (“pippo”, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);

s = WriteFile (hfile, buffer, 9,&bytescritti,NULL);

CloseHandle (hfile);

}

Page 15: Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi.

System Call per la gestione dei file pos=SetFilePointer (handle, offset, offsetAlto, puntoPartenza);

puntoPartenza:FILE_BEGIN inizio fileFILE_CURRENT posizione correnteFILE_END fine filepos = posizione dall’inizio del file.Esempio:hfile=CreateFile(“topo”,…);pos=SetFilePointer(hfile, 12, NULL,FILE_BEGIN);/* si sposta nella posizione 12 del file topo */

Page 16: Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi.

System Call per la gestione dei file s=LockFile (handle, offset, offsetAlto, lung, lungAlto);

s=UnLockFile (handle, offset, offsetAlto, lung, lungAlto);

Lock non permette a nessun altro processo di accedere alla porzione di file a partire dalla posizione offset fino alla posizione offset+lung.

Unlock rilascia l’accesso.

Page 17: Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi.

Scriviamo 5 interi su file e li leggiamoHANDLE hfile; DWORD bytescritti,byteletti; int s,i;int buffer[]={5,7,12,8,9};int bufferLett[5];

hfile = CreateFile ("pippo", GENERIC_WRITE|GENERIC_READ, 0, NULL, CREATE_ALWAYS, 0, NULL);

s = WriteFile (hfile, buffer, 5*sizeof(int),&bytescritti,NULL);

SetFilePointer(hfile,0,NULL,FILE_BEGIN);s = ReadFile (hfile, bufferLett, 5*sizeof(int),&byteletti,NULL);for (i=0;i<5;i++) printf ("%d\n",bufferLett[i]);CloseHandle (hfile);

Page 18: Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi.

Driver dei dispositivi di I/O

Un driver deve essere conforme al Windows Driver Model, cioè deve, fra l’altro:

•Gestire le richieste di I/O standard (I/O Request Packet)

•Essere basato su oggetti

•Essere rientrante nel caso di sistemi multiprocessore

•Essere compatibile fra Windows 98 e 2000

Page 19: Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi.

Gestione dell’I/O (es. di utilizzo di porta seriale)

#include <windows.h>

#include <stdio.h>

#include <conio.h>

int main() {

HANDLE handle;

char buffer[40] = “……………..";

DWORD bytescritti;

handle = CreateFile("COM1", GENERIC_READ, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

SetCommState(….); // setta alcuni parametri della porta

SetCommTimeouts (…); / setta i timeout della porta

WriteFile(handle, buffer, 40, &bytescritti, 0);

CloseHandle (handle); }// fine main