Windows ConfidentialIl paradosso del file system

Raymond Chen

Se si esamina il contenuto del disco rigido, probabilmente si noterà che un certo numero di file del sistema operativo si trova nella directory principale dell'unità di avvio. A uno sguardo ravvicinato, si potrebbe notare un tema: boot.ini, NTLDR e NTDETECT.COM sono file di avvio critici e hiberfil.sys è il file di sospensione. Tutti questi file sono coinvolti nelle prime fasi cruciali di avvio del sistema operativo oppure, nel caso di hiberfil.sys, nella riattivazione dalla sospensione e devono trovarsi nella directory principale dell'unità di avvio. Perché non è possibile spostarli altrove?

Adrian Oney, collega di Chen, ha spiegato: per leggere i file di avvio dal disco, è necessario il driver del file system. Ma quest'ultimo si trova sul disco, che non è leggibile se prima non viene caricato il driver del file system. Oh no, è un vicolo cieco!

Niente paura: la soluzione consiste nell'integrare un driver del file system in miniatura nei file di avvio critici. Questo driver in miniatura riesce appena a individuare i file nella directory principale e a caricarli in memoria. I file, a loro volta, possono iniziare ad avviare il sistema operativo, dopo di che subentra il vero driver del file system che cerca i file necessari in posizioni più appropriate, come le sottodirectory.

  

La sospensione segue un modello simile. Sospendere il sistema operativo significa eseguire il dump dell'intero contenuto della memoria nel file di sospensione. Il ripristino dalla sospensione consiste nel recuperare tale file nella memoria facendo finta che non sia successo niente. Di nuovo, è come chiedersi se sia nato prima l'uovo o la gallina: per caricare il file di sospensione è necessario il driver del file system, ma quest'ultimo è incluso nel file di sospensione. Se il file di sospensione viene conservato nella directory principale dell'unità di avvio, al suo posto è possibile utilizzare il driver del file system in miniatura.

Chi ha utilizzato versioni precedenti di MS-DOS® è ben consapevole di questo limite relativo alla posizione dei file di avvio del sistema operativo. Il vecchio comando SYS ha trasformato il tradizionale, noioso disco floppy in un magico supporto avviabile. Tuttavia, se tale comando veniva eseguito su un disco floppy già contenente dei dati, era probabile che la conversione non riuscisse, in quanto nelle prime versioni di MS-DOS i file di avvio dovevano occupare posizioni specifiche del fisco floppy, affinché il settore di avvio potesse individuarli. Con le versioni successive di MS-DOS questi requisiti sono diventati più flessibili, grazie ai miglioramenti apportati al caricatore di avvio. Comunque, anche con la versione migliorata, i file di sistema devono risiedere nella directory principale.

Un cliente ha chiesto: "Posso spostare il file di sospensione in una sottodirectory?" Dopotutto, che importanza ha la posizione del file? Gli ACL sul file rimangono invariati, indipendentemente dalla posizione del file. Ma per il cliente era importante che il file risiedesse in un'unità diversa da quella di avvio, nonostante fosse stato avvertito del fatto che ciò non era possibile. Non avendo capito effettivamente il motivo di questa restrizione, il cliente ha tentato un'esecuzione finale, pensando: "Beh, se posso spostarlo in una sottodirectory, posso anche creare una directory che funga da giunzione per il percorso dove desidero che risieda realmente il file di sospensione. Ecco fatto: sono riuscito a trasferire il file di sospensione!".

Naturalmente, il driver del file system in miniatura non riconosce i punti di montaggio, che implicano il dialogo con il servizio di gestione disco. Al momento dell'avvio del sistema, il computer non ha ancora caricato il sistema operativo, tantomeno un servizio elaborato avanzato che sa come mappare le lettere di unità in riferimento ai percorsi ARC. Inoltre, se in qualche modo si riuscisse ad avviare il servizio, sarebbe comunque necessario individuare i driver di periferica per le altre unità disco e caricare i driver del file system corrispondenti.

È solo una questione di tempo, prima che qualcuno chieda come posizionare il file di sospensione su una giunzione DFS.

Raymond Chen, The Old New Thing, così come nel suo libro che porta lo stesso titolo (Addison-Wesley, 2007), vengono illustrate la storia di Windows e la programmazione in Win32. Il suo nome Web 2.0 è Raymond, o forse Chenster.

© 2008 Microsoft Corporation e CMP Media, LLC. Tutti i diritti riservati. È vietata la riproduzione completa o parziale senza autorizzazione.