Record fisici e record logici

I dati di un archivio informatico vengono memorizzati all’interno di file che risiedono sulle memorie di massa (dette anche memorie secondarie o ausiliarie in quanto costituiscono un’estensione della memoria centrale) e questo perché le memorie di massa sono permanenti, ossia consentono di conservare i dati nel tempo dopo lo spegnimento del computer, al contrario della RAM che invece è volatile. Pertanto, quando un’applicazione software deve effettuare degli accessi ai dati contenuti in un file di archivio, necessariamente bisogna fare i conti con il fatto che il tempo di accesso (access time) delle memorie di massa, ossia il tempo medio necessario per ritrovare i dati e metterli a disposizione, è estremamente grande rispetto alla velocità di lavoro della CPU. L’access time delle memorie di massa, infatti, è dell’ordine dei millisecondi (10-3s) che è un’eternità rispetto alla velocità di elaborazione delle moderne CPU. Esse lavorano a frequenze del clock dell’ordine dei GHz e, quindi, se non si vuole introdurre nel sistema un collo di bottiglia, richiedono dei tempi di accesso ai dati che siano dell’ordine dei nanosecondi (10-9s) . E’ questo il motivo per cui i byte di un file di archivio sui quali un’applicazione deve compiere delle elaborazioni, prima che possano essere utilizzati dalla CPU, transitano attraverso la memoria centrale RAM, che è in grado di assicurare un access time dell’ordine dei nanosecondi, trasferendo in essa le varie porzioni (blocchi) del file che di volta in volta sono coinvolti nel processo di elaborazione. Questo meccanismo viene gestito dal Sistema Operativo e, più nello specifico, dal File System che svolge tutte le funzioni di gestione dei file, consentendo alle applicazioni di utilizzare gli archivi senza preoccuparsi delle operazioni più a basso livello necessarie per gli accessi di Input/Output (I/O) sui file.

I blocchi in cui un file viene suddiviso e che, in corrispondenza di accessi di I/O su di esso, vengono trasferiti dalla memoria di massa verso quella centrale RAM e viceversa, sono detti record fisici. Essi hanno una dimensione prefissata, che dipende dalle caratteristiche del sistema software/hardware e che comunque è dell’ordine di qualche decina di Kilobyte. Si faccia attenzione a non confondere i record fisici con il concetto di RECORD inteso come struttura dati utilizzata all’interno delle applicazioni. Proprio per distinguerli, questi ultimi record vengono chiamati record logici.

Ricapitolando, possiamo dare le seguenti definizioni:

Un record fisico è il numero prefissato di byte, dipendente dalla sistema di elaborazione, che viene trasferito ad opera del File System dalla memoria di massa alla memoria centrale RAM o viceversa, in corrispondenza di un accesso di I/O ad un file.

Un record logico è costituito dai byte di una struttura dati adoperata all’interno di un’applicazione per memorizzare le informazioni. Un record logico viene definito da chi progetta l’archivio che può scegliere di definirlo in modo che tutti i record logici di quel tipo abbiano una lunghezza in byte costante oppure variabile, a seconda delle esigenze dell’applicazione che dovrà utilizzarli.

buffer

Ma entriamo un po’ di più nel merito del meccanismo che viene gestito dal File System quando un applicazione si rivolge ad esso per avere accesso ai dati di un file di archivio. L’applicazione innanzitutto deve chiedere al File System di aprire il file. L’apertura di un file corrisponde allo stabilire un canale di comunicazione (in inglese stream) tra la memoria RAM e il file residente sulla memoria di massa. Questo collegamento viene fisicamente realizzato predisponendo nella RAM una porzione di memoria, detta buffer, che viene dedicata ai trasferimenti dei record fisici di quel particolare file, da e verso la memoria di massa. Da quel momento il File System si incaricherà di stabilire la corrispondenza tra i record fisici del file da caricare nel buffer e i record logici dei dati di volta in volta richiesti dall’applicazione, gestendo tutte le operazioni di I/O sul file che saranno necessarie per soddisfare le richieste del processo applicativo. Si tenga presente che il trasferimento dei dati dalla memoria di massa verso la memoria centrale è un’operazione di INPUT (o LETTURA), mentre l’operazione inversa (dalla memoria centrale verso quella di massa) è un’operazione di OUTPUT (SCRITTURA).

Un record fisico in generale può contenere un certo numero di record logici e in particolare il numero di record logici presenti in un record fisico è detto fattore di bloccaggio o fattore di blocco e si ha che:

  • se un record fisico contiene più record logici, quei record si dicono bloccati e il fattore di blocco è maggiore di 1;
  • se un record fisico contiene un solo record logico, quei record si dicono sbloccati e il fattore di blocco è 1;
  • se per memorizzare un record logico sono necessari più record fisici, quei record si dicono multiblocco e il fattore di blocco è minore di 1.

buffer2Nel caso dell’esempio della figura precedente, il fattore di blocco è tre, il che vuol dire che in corrispondenza di ciascun accesso alla memoria di massa in I/O su quel file, i record logici che vengono trasferiti dalla memoria di massa verso il buffer o viceversa sono tre.

Grazie a questo meccanismo, un’istruzione di LETTURA di un record logico da parte di un’applicazione comporta un accesso in Input alla memoria di massa solo quando il record logico richiesto non è già presente nel buffer, altrimenti essa comporta solo un trasferimento interno alla memoria centrale, dal buffer verso l’area di lavoro assegnata all’applicazione. Un’istruzione di SCRITTURA di un record logico, invece, comporta un accesso in Output alla memoria di massa quando il buffer è pieno o non contiene il record fisico in cui è inserito il record logico in cui si deve scrivere. In caso contrario si tratta nuovamente di un trasferimento interno alla memoria centrale, dall’area di lavoro assegnata all’applicazione verso il buffer.

Poiché gli accessi alla memoria di massa richiedono tempi decisamente più lunghi rispetto agli accessi alla memoria RAM (trasferimenti interni), questo meccanismo può essere sfruttato per tentare di minimizzare il più possibile il numero di accessi di I/O alla memoria di massa, tenendo presente che mediamente essi diminuiscono al crescere del fattore di bloccaggio. All’aumentare del fattore di bloccaggio, infatti, aumenta il numero di record logici che un record fisico trasferisce da e verso la memoria RAM con un solo accesso alla memoria di massa. In generale, quindi, nel caso di record bloccati e qualora la CPU debba lavorare, come di solito avviene, con record logici contigui, il meccanismo di accesso ai file appena descritto ha l’effetto positivo di minimizzare il numero di accessi di I/O alle memorie di massa, a vantaggio della velocità del sistema.