Condividi tramite


[Archivio newsletter ^] [< Volume 3, Numero 1] [Volume 4, Numero 1 >]

Newsletter Systems Internals Volume 3, Numero 2

http://www.sysinternals.com
Copyright (C) 2001 Mark Russinovich


20 agosto 2001 - In questo numero:

  1. EDITORIALE

  2. NOVITÀ DI SYSINTERNALS

    • Process Explorer v5.1
    • Handle v2.0
    • PsInfo v1.1
    • PsExec v1.24
    • PsLogList v2.07
    • Layout del codice sorgente di Windows XP
    • DebugView v4.13
    • PageDefrag v2.1, Contig v1.41
    • Sysinternals in Microsoft
  3. INFORMAZIONI SU INTERNALS

    • Inside Windows 2000, il DVD interattivo
    • Segna la data: Russinovich e Solomon insegnano insieme ad Austin
    • Gestione del disco da riga di comando
    • Diapositive di WINHEC 2001 online
    • Nuove interfacce del driver di filtro del file system in XP
    • Arresto anomalo di Windows con una sequenza di tasti
    • Prelettura in Windows XP
    • Windows .NET Connections
  4. SVILUPPI FUTURI

    • Le mie esperienze con Itanium

SPONSOR: WINTERNALS SOFTWARE

La newsletter Sysinternals è sponsorizzata da Winternals Software, disponibile sul Web all'indirizzo http://www.winternals.com. Winternals Software è il principale sviluppatore e provider di strumenti avanzati di sistemi per Windows NT/2K/XP. I prodotti Winternals Software includono FAT32 per Windows NT 4.0, NTFSDOS Professional Edition (driver NTFS di lettura/scrittura per DOS) e Remote Recover.

Winternals è orgogliosa di annunciare Defrag Commander versione 1.31, l'utilità di deframmentazione aziendale più veloce e completa disponibile. È ora possibile gestire le pianificazioni della deframmentazione nell'intera azienda Windows da un semplice snap-in MMC, senza dover installare alcun software client nei sistemi NT o Windows 2000. Una licenza per 10 sistemi è disponibile per l'acquisto online a soli $ 169 e sono disponibili sconti per grandi quantità. Visitare http://www.winternals.com/39 per altre informazioni o per il download e l'uso gratuito per 30 giorni.

Ciao a tutti.

Newsletter di Sysinternals. La newsletter conta attualmente 33.000 abbonati.

Uso i computer per diverse funzioni: come sviluppatore di software, come utente e come amministratore di sistemi (per la mia rete di sistemi di sviluppo e test). Dato che voglio raggiungere il pubblico più ampio possibile per gli strumenti freeware Sysinternals e i prodotti commerciali Winternals, la maggior parte delle utilità è destinata almeno a Windows NT 4 fino a Windows XP e molte vengono eseguite anche in Windows 95 tramite Windows Me. La maggior parte degli strumenti che scrivo sono a livello di sistema, vale a dire che spesso contengono codice per casi speciali per una o più delle diverse varianti di Windows. Sfortunatamente, esistono differenze significative tra l'interfaccia utente e il kernel tra la riga di Windows NT e di Windows 9x e anche differenze tra diverse versioni della stessa riga.

Per eseguire i test ho usato diversi sistemi di debug, tutti configurati per eseguire l'avvio multiplo delle versioni di Windows enumerate e l'avvio in una versione, il test e quindi il riavvio nella successiva. Oltre alla lentezza, i test potevano essere a volte distorti da eliminazioni di build intermedie di test di utilità che interferiscono perché non avevo eseguito correttamente la pulizia. Anche se ho ancora una raccolta di sistemi di avvio multiplo per i problemi di debug, un prodotto innovativo denominato VMWare (www.vmware.com) ha reso i cicli di test più veloci e facili.

VMWare è un ambiente di macchine virtuali usato per creare computer virtuali (guest) eseguiti su installazioni di Windows NT, Windows 2000 o Linux (host). Un guest può eseguire la maggior parte delle varianti di Windows, DOS e Linux. È sconcertante vedere una versione di un sistema operativo eseguita sopra un'altra, soprattutto portando a schermo intero una macchina virtuale: non è praticamente possibile capire che non si è seduti davanti allo schermo di un computer Linux, ma davanti alla visualizzazione virtuale di un computer Linux in esecuzione su Windows 2000, ad esempio. Una macchina virtuale è un contenitore imposto dal software che incapsula il sistema operativo e le applicazioni in esecuzione nella macchina virtuale, in modo che, quando provano a interagire con l'hardware credono che sia presente, il software della macchina virtuale intercetta gli accessi. Il software della macchina virtuale crea dispositivi virtuali che fungono da surrogati controllati con attenzione di hardware reale o hardware virtuale. Ad esempio, quando un'applicazione in esecuzione in una macchina virtuale visualizzata in una finestra scrive nella memoria di visualizzazione della macchina virtuale, il software della macchina virtuale aggiorna il contenuto della finestra che rappresenta la visualizzazione della macchina virtuale anziché consentire agli accessi di attingere alla memoria video reale. Se la macchina virtuale fosse in esecuzione in modalità schermo intero, il software della macchina virtuale consentirebbe a tali accessi di manipolare direttamente la memoria video.

Anche solo la funzionalità della macchina virtuale rende utile VMWare, poiché è possibile avere un numero qualsiasi di "sistemi di test" nel disco rigido. Ciò che rende VMWare ancora più potente è il fatto che è possibile "sospendere" un computer virtuale, salvarne lo stato su disco e quindi riprenderlo in pochi secondi, ripristinando lo stato attivo al momento della sospensione. Ma non è tutto. Uso tantissimo una funzionalità denominata "dischi non persistenti", con la quale VMWare avvia un computer virtuale con i dischi virtuali contenenti il contenuto definito (ad esempio, con solo un'installazione del sistema operativo di base) e quindi tiene traccia delle modifiche in modo che sia possibile annullarle e ripristinare lo stato iniziale. Se si installano versioni di test di un'utilità e quindi è necessario assicurarsi di tornare a uno stato pulito che non riflette alcuna delle modifiche apportate dell'utilità, è sufficiente annullare le modifiche. Trovo VMWare utile anche per i miei ruoli di amministratore di utenti e sistemi. Ogni volta che scarico un'applicazione che non sono certo di voler tenere, piuttosto che compromettere il sistema di sviluppo o riempirlo con i detriti che rimangono quando disinstallo un'applicazione, prima di tutto la provo semplicemente in una macchina virtuale con un disco non persistente.

Ci sono alcuni svantaggi relativamente minori della versione corrente che mi hanno impedito di usare i miei computer di debug reali tanto quanto vorrei. Il primo è che, poiché le macchine virtuali non supportano DirectX, non è possibile eseguire il debugger SoftICE di Numega, se non con una macchina virtuale con risoluzione dello schermo di 640x480. Il secondo è che la virtualizzazione delle porte seriali di VMWare è limitata in un modo che impedisce il debug del kernel usando Windbg o Kd tra l'host e un guest o tra guest. Quest'ultimo problema dovrebbe essere comunque risolto nella prossima versione principale di VMWare.

Ciò che è particolarmente interessante di VMWare è che, fino a quando VMWare non ha dimostrato il contrario, gli scienziati informatici erano perlopiù convinti che fosse impossibile virtualizzare l'architettura x86 nel software abbastanza bene da eseguire un sistema operativo non modificato senza compromettere in modo proibitivo le prestazioni. Le sfide sono significative, in particolare nell'ambito della virtualizzazione dei dispositivi hardware e il successo di VMWare è visto come una svolta, tanto che VMWare ha recentemente pubblicato un documento "best of conference" su come hanno implementato la virtualizzazione dei dispositivi all'annuale USENIX Technical Conference. È possibile leggere il documento all'indirizzo http://vmware1.m0.net/m/s.asp?HB4162878203X1075673X73339X.

Parlando della USENIX Technical Conference, ho anche collaborato alla redazione di un documento pubblicato in quell'occasione: "High-Performance Memory-Based Web Servers: Kernel and User-Space Performance" (http://www.sysinternals.com/files/webserver.pdf). Il documento descrive alcune delle ricerche innovative a cui ho partecipato mentre lavoravo in IBM Research. I contributi del lavoro sono nell'area dell'accelerazione Web-server in modalità kernel, e oltre a contribuire all'architettura, sono stato responsabile di gran parte dell'implementazione in Windows NT e Windows 2000. Il progetto è stato così efficace che abbiamo mantenuto costantemente i record mondiali SPECWeb per le prestazioni di server Web, è stato rilasciato come prodotto IBM in continua evoluzione denominato IBM Netfinity Web Server Accelerator, e sia Microsoft che la community Linux hanno incorporato diverse idee chiave nei propri prodotti (ad esempio IIS per Windows 2000 e Tux in Linux).

Inoltrate la newsletter ai vostri amici che pensate potrebbero essere interessati a questi contenuti.

Grazie.

- Mark

NOVITÀ DI SYSINTERNALS

PROCESS EXPLORER V5.1

Process Explorer è il nuovo nome di HandleEx, un'utilità multiuso che mostra informazioni dettagliate sui processi, le DLL caricate e gli handle per le risorse del sistema operativo aperti. Oltre al nuovo nome, le versioni più recenti di Process Explorer introducono un sacco di nuove funzionalità, tra cui un aggiornamento automatico efficiente, una colonna di utilizzo della CPU, la possibilità di modificare le priorità del processo e la creazione di report degli ID sessione di processo se il sistema è un server terminal. Inoltre, mostra molte più informazioni sui processi. Ad esempio, è possibile visualizzare l'elenco dei servizi in esecuzione all'interno di un processo (se applicabile), esaminare le variabili di ambiente di un processo e visualizzare le righe di comando del processo. Usando una nuova opzione di ordinamento denominata "albero dei processi", è possibile visualizzare graficamente le relazioni padre-figlio dei processi, un elemento che consente di identificare lo scopo di un processo. Process Explorer può essere eseguito in tutte le versioni di Windows 9x e anche in Windows NT 4 tramite Windows XP.

Qualcosa che potrebbe non essere immediatamente ovvio dall'interfaccia di Process Explorer è la sua capacità di mostrare quali processi hanno determinati file o directory aperti. Puoi passare alla modalità handle e immettere il nome del file o della directory in questione nella finestra di dialogo di ricerca. La funzionalità di ricerca viene spesso usata per tenere traccia del processo che impedisce di eliminare o rinominare un file o una directory, ma è possibile usarla per elencare anche processi con DLL specifiche caricate.

Process Explorer v5.1 è disponibile per il download all'indirizzo http://www.sysinternals.com/ntw2k/freeware/procexp.shtml.

HANDLE V2.0

Handle è la versione della riga di comando della funzionalità di visualizzazione degli handle di Process Explorer che consente di visualizzare gli handle per le risorse del sistema operativo, ad esempio i file, aperti dai processi. In alcuni casi l'uso di Handle è un modo più rapido per identificare un processo con un file o una directory aperta rispetto all'uso della funzionalità di ricerca di Process Explorer, perché è sufficiente immettere una parte del nome del file o della directory nella riga di comando di Handle. Oltre a una ricerca più efficiente dei nomi di handle, Handle 2.0 ora funziona in Windows 95/98/Me.

Handle v2.0 è disponibile per il download all'indirizzo http://www.sysinternals.com/ntw2k/freeware/handle.shtml.

PSINFO V1.1

L'ultima aggiunta alla famiglia di strumenti di amministrazione PsTools è PsInfo. PsInfo è uno strumento da riga di comando che restituisce le caratteristiche hardware e del sistema operativo di un computer. Ad esempio, indica il sistema operativo in esecuzione, incluso il numero del Service Pack, la data di installazione e scadenza (se applicabile) e la configurazione (ad esempio, controller di dominio, server membro). Elenca anche il tipo, la velocità e il numero di CPU nel computer e la quantità di memoria fisica installata. Queste informazioni rendono PsInfo utile per l'identificazione o l'inventario del sistema. Come tutti gli strumenti della famiglia di prodotti PsTools, PsInfo può essere eseguito in un computer locale o remoto Windows NT, 2000 o XP.

PsInfo v1.1 è disponibile per il download all'indirizzo http://www.sysinternals.com/ntw2k/freeware/psinfo.shtml.

PSEXEC V1.24

PsExec consente di avviare processi in sistemi remoti senza dover installare manualmente alcun software nel sistema remoto, purché il sistema si trovi in Network Neighborhood. La forza di PsExec sta nel supporto dell'I/O di un programma console reindirizzato, in cui gestisce l'input da tastiera e l'output di testo di un programma console remoto come se fosse in esecuzione nel sistema locale.

La versione più recente di PsExec supporta più processi in esecuzione nello stesso sistema remoto, consentendo ad esempio di aprire in remoto diversi prompt dei comandi in un altro sistema. Include anche una nuova opzione "force copy" che consente di specificare che si vuole che PsExec copi un file in un computer remoto per l'esecuzione, sostituendo qualsiasi versione esistente.

PsExec v1.24 è disponibile per il download all'indirizzo http://www.sysinternals.com/ntw2k/freeware/psexec.shtml.

PSLOGLIST V2.07

PsLogList, un'altra utilità PsTools, esegue il dump dei log eventi dal sistema locale o remoto. A differenza di eloglist, lo strumento di Windows 2000 Resource Kit con lo stesso scopo, PsLogList visualizza la stringa di evento completa di un record e quando esegue il dump dei log remoti usa i file di risorse stringa del log eventi dal sistema remoto anziché da quello locale.

La versione 2.07 di PsLogList include un'opzione della riga di comando in modo che sia possibile indirizzarla per creare un dump delle informazioni estese sui record del log eventi estesi (le informazioni aggiuntive che possono essere associate a un record) e una nuova opzione che consente di visualizzare i record solo degli ultimi giorni specificati.

PsLogList v2.07 è disponibile per il download all'indirizzo http://www.sysinternals.com/ntw2k/freeware/psloglist.shtml.

LAYOUT DEL CODICE SORGENTE DI WINDOWS XP

Vi siete mai chiesti come Microsoft organizza il codice sorgente che costituisce il kernel Windows NT/2000/XP? Anche io e ho scoperto che le informazioni sono disponibili pubblicamente. Ogni volta che Microsoft rilascia una nuova build di Windows 2000/XP, rilascia diverse versioni:

  • una versione "libera" uniprocessore
  • una versione "libera" uiniprocessore che supporta più di 4 GB di memoria fisica
  • una versione "libera" multiprocessore
  • una versione "libera" multiprocessore che supporta più di 4 GB di memoria fisica
  • una versione multiprocessore "controllata"
  • una versione multiprocessore "controllata" che supporta più di 4 GB di memoria fisica

Per un totale di 6 versioni. Ciò che distingue la versione "libera" da quella "controllata" non è il fatto che la versione sia gratis (non lo è), ma che la versione "controllata", inclusa nel set di CD MSDN, include codice e dati che aiutano con il debug del sistema operativo e dei driver di dispositivo. La versione "libera" è semplicemente compilata senza il codice aggiuntivo incluso nelle istruzioni di compilazione condizionale.

Esempi del codice controllato aggiuntivo includono le istruzioni di stampa di debug che segnalano le operazioni eseguite dal sistema operativo, un controllo di coerenza più rigoroso sui parametri passati nelle funzioni in modalità kernel dai driver di dispositivo e le istruzioni di "asserzione". Un'istruzione assert convalida il presupposto di uno sviluppatore sulle condizioni applicabili a un'area del codice. Ad esempio, se un puntatore deve puntare a una struttura di dati con una firma di identificazione, uno sviluppatore potrebbe inserire un'asserzione a tale scopo. Cosa accade quando viene violato il presupposto dell'asserzione? Dipende dall'asserzione, ma nel caso di quelle incluse nelle build controllate viene stampato un messaggio di output di debug e quindi viene attivato un punto di interruzione del debugger in modo che il debugger del kernel venga attivato (o, se non è attivo alcun debugger, si verifica un arresto anomalo che sperabilmente genera un file di dump che può essere esaminato successivamente).

Per semplificare l'identificazione dei problemi intercettati dalle asserzioni, le asserzioni usate nella build controllata stampano il file, la funzione e il numero di riga della posizione dell'asserzione. Posso visualizzare il layout dell'albero di origine estraendo queste stringhe con l'utilità di estrazione di stringhe "strings" e organizzandole in una visualizzazione ad albero Java.

Potete visualizzare il layout del codice sorgente di Windows XP e altre informazioni sulle asserzioni in http://www.sysinternals.com/ntw2k/info/xpsrctree.shtml (notare che Internet Explorer visualizzerà un avviso sul caricamento lento della pagina. Basta chiuderlo per visualizzare l'albero).

DEBUGVIEW V4.13

DebugView è un'utilità per sviluppatori che consente di acquisire l'output di debug dalle applicazioni o dai driver nel sistema locale o da uno remoto, anche da più sistemi contemporaneamente. Quest'ultima versione aggiunge la compatibilità con Windows XP RC 1. DebugView funziona in Windows 9x, Windows Me, Windows NT, Windows 2000 e Windows XP.

DebugView v4.13 è disponibile per il download all'indirizzo http://www.sysinternals.com/ntw2k/freeware/debugview.shtml.

PAGEDEFRAG V2.1, CONTIG V1.41

PageDefrag e Contig sono tra i primi nella classifica dei download Sysinternals più popolari. PageDefrag deframmenta i file di dati di sistema di base in fase di avvio e Contig è un'utilità di deframmentazione dei file della riga di comando. Le versioni più recenti di questi strumenti hanno un motore di deframmentazione migliorato per Windows 2000 e ognuno ha miglioramenti specifici.

Oltre a deframmentare i file del Registro di sistema e di paging, la versione più recente di PageDefrag deframmenta anche i file del log eventi. Analogamente a Chkdsk in Windows 2000, PageDefrag prevede ora un conto alla rovescia di 3 secondi durante il processo di avvio durante il quale potete premere qualsiasi tasto per evitare la deframmentazione.

Ciò che rende Contig unico è il fatto che è possibile usarlo per deframmentare singoli file, intere directory o un intero disco. Contig è rivolto all'ottimizzazione di particolari file critici per le prestazioni dell'applicazione perché, a differenza dei deframmentatori commerciali, non consolida lo spazio disponibile per evitare la frammentazione futura in un disco. Oltre al motore di deframmentazione avanzato, il nuovo Contig ha una migliore formattazione di output sia in modalità non dettagliata che dettagliata.

PageDefrag v2.1 è disponibile per il download all'indirizzo http://www.sysinternals.com/ntw2k/freeware/pagedefrag.shtml.
Contig v1.4 è disponibile per il download all'indirizzo http://www.sysinternals.com/ntw2k/freeware/contig.shtml.

SYSINTERNALS IN WWW.MICROSOFT.COM

Ecco ancora una volta la versione più recente dei riferimenti di Sysinternals negli articoli della Microsoft Knowledge Base (KB) rilasciati dopo l'ultima newsletter. Questo porta a 27 il numero totale di riferimenti della KB a Sysinternals.

  • 0x8000FFFF "Errore irreversibile" Messaggio con Driver ODBC di SQL Server
    http://support.microsoft.com/support/kb/articles/Q243/3/49.ASP

  • ACC: Messaggio di errore: Il componente ActiveX non può creare l'oggetto
    http://support.microsoft.com/support/kb/articles/Q296/2/05.ASP

  • HOWTO: Determinare la versione di MSXML usata da Internet Explorer
    http://support.microsoft.com/support/kb/articles/Q296/6/47.ASP

  • HOWTO: Risolvere l'errore "ADODB. Connection" 800a0bb9 da Recordset DTC
    http://support.microsoft.com/support/kb/articles/Q197/3/23.ASP

  • INFO: Guida alla risoluzione dei problemi per 80004005 e altri messaggi di errore
    http://support.microsoft.com/support/kb/articles/Q183/0/60.ASP

  • XADM: Vengono generati messaggi con ID evento 3036 e 3026 quando si popola l'archivio cassette postali
    http://support.microsoft.com/support/kb/articles/Q296/1/36.ASP

INFORMAZIONI SU INTERNALS

INSIDE WINDOWS 2000, IL DVD INTERATTIVO

Dave Solomon e io abbiamo scritto "Inside Windows 2000, 3rd Edition", la guida ufficiale ai meccanismi interni e all'architettura di Windows 2000, e siamo lieti di annunciare la pubblicazione imminente dell'esercitazione su DVD "Inside Windows 2000". L'esercitazione è costituita in realtà da 5 DVD con oltre 9 ore di contenuto costituito da Dave e me che insegniamo i meccanismi interni di Windows 2000 con una presentazione informale.

Gli argomenti trattati includono la gestione della memoria, i processi e i thread, l'archiviazione, i file system, la rete e altro ancora e ognuno è suddiviso in moduli di 10-20 minuti per una visualizzazione pratica. La presentazione include decine di diagrammi, demo, screenshot ed elenchi di riepilogo e ogni modulo si conclude con domande di verifica per testare e consolidare la comprensione.

I prezzi finali e la data di pubblicazione non sono ancora stati stabiliti, ma per ricevere una notifica potete inviare un messaggio di posta elettronica a mailto:video@... con la parola "interest" nell'oggetto. In alternativa, guardate http://www.sysinternals.com/video/ per altri dettagli.

SEGNA LA DATA: RUSSINOVICH & SOLOMON INSEGNARE INSIEME A AUSTIN

Se siete interessati al set di DVD, sicuramente sarete interessati all'opportunità di vedere Dave e me insegnare i meccanismi interni di NT dal vivo. Potete venire a Austin (Texas) l'11-13 dicembre per sentirci presentare la nostra lezione di 3 giorni sull'architettura interna di Windows XP/2000/NT. La classe si basa su "Inside Windows 2000, 3rd Edition" e copre i sottosistemi di ambiente, l'invio delle chiamate di sistema, i thread di sistema, l'avvio e l'arresto, i processi e la pianificazione dei thread, la gestione della memoria, la sicurezza, il sistema di I/O, archiviazione, NTFS e il gestore della cache. Comprendendo i lavori interni di Windows XP & 2000 è possibile sfruttare la piattaforma in modo più efficace e più efficace di debug e risoluzione dei problemi.

Non appena saranno disponibili i dettagli, ve lo faremo sapere nella newsletter e nel sito Web, quindi restate sintonizzati!

GESTIONE DEL DISCO DA RIGA DI COMANDO

In risposta alle pressioni degli amministratori di sistemi, Microsoft ha infine rilasciato uno strumento da riga di comando che supporta gli script, per la gestione dei dischi in Windows 2000. DiskPart consente di creare volumi o partizioni, creare e interrompere mirror, estendere volumi ed esaminare i dettagli dei dischi, dei volumi e delle partizioni. L'aspetto positivo è che DiskPart può essere scaricato gratuitamente da http://www.microsoft.com/downloads/release.asp?ReleaseID=31167.

DIAPOSITIVE DI WINHEC 2001 ONLINE

Se vi siete persi l'annuale Windows Hardware Engineering Conference (WINHEC) di Microsoft, potete comunque visualizzare le diapositive di molte presentazioni. Visitate http://www.microsoft.com/winhec/sessions/driver.htm per un elenco di sessioni, descrizioni e collegamenti correlati alle presentazioni di Power Point. Le presentazioni di interesse generale sono quelle relative alle tecniche di debug dei driver, ai driver di filtro e ai miniport e intermedi NDIS.

NUOVE INTERFACCE DEL DRIVER FILTRO FILE SYSTEM IN XP

Se usate un prodotto per il mirroring di file in tempo reale, il controllo dei virus all'accesso o la gestione gerarchica dell'archiviazione basato su un driver di filtro del file system, vorrete assicurarvi di essere aggiornati sulle modifiche introdotte da Microsoft in Windows XP che potrebbero interessarvi.

La modifica più importante riguarda le routine di I/O veloci, le funzioni speciali registrate da un driver del file system in modo che Memory Manager, Cache Manager e il sistema di I/O possano eseguire le operazioni di I/O del file system e interagire con i driver del file system senza dover generare IRG. Può essere una sorpresa per alcuni di voi scoprire che ci sono 6 routine di I/O veloci per cui i driver di filtro del file system vengono sempre ignorati. ovvero:

FastIoAcquireFileExclusive
FastIoReleaseFile
FastIoAcquireFileForCcFlush
FastIoReleaseFileForCcFlush
FastIoAcquireFileForModWrite
FastIoReleaseFileForModWrite

Memory Manager chiama FastIoAcquireFileExclusive e FastIoReleaseFile prima e dopo la creazione di una sezione supportata da un file e altri sottosistemi in modalità kernel possono chiamare queste routine per impedire temporaneamente la creazione di sezioni. Cache Manager chiama FastIoAcquireFileForCcFlush e FastIoReleaseFileForCcFlush prima e dopo lo scaricamento di tutti o parte dei dati memorizzati nella cache modificati di un file nel disco e Memory Manager chiama FastIoAcquireFileForModWrite e FastIoReleaseFileForModWrite prima e dopo aver scritto pagine di file con mapping dirty in un file.

Anziché richiamare direttamente le funzioni di I/O veloci, i sottosistemi in modalità kernel usano routine FsRtl (File System Runtime) surrogate. Le routine di runtime per la maggior parte delle funzioni di I/O veloci richiamano i driver di filtro ottenendo un riferimento all'oggetto dispositivo filtro tramite una chiamata a IoGetRelatedDeviceObject sull'oggetto file di destinazione e quindi chiamando la routine di I/O veloce corrispondente del filtro, ma le routine di runtime correlate alle chiamate di I/O veloci elencate chiamano invece IoGetBaseFileSystemDeviceObject, che restituisce l'oggetto dispositivo del driver del file system sottostante. Il motivo per cui il runtime ignora i filtri per queste funzioni è, a mio parere, un po' debole: il runtime non considera attendibili i driver di filtro. Se un filtro non passa queste chiamate al driver del file system sottostante, causa il danneggiamento dei dati del file system e quasi certamente un arresto anomalo. Ma ci sono molte cose che un driver di filtro può fare per causare arresti anomali.

In Windows XP la routine FsRtl introduce una nuova funzione, FsRtlRegisterFileSystemFilterCallbacks, usata dai driver di filtro per registrare i callback per queste varie operazioni. In questo modo i driver di filtro del file system possono esaminare queste operazioni e anche interromperle, e il runtime può garantire che il driver del file system sottostante venga sempre richiamato quando appropriato. Dove è possibile trovare la documentazione per la funzione? Windows XP Installable File System Kit, disponibile per $ 995 da Microsoft: http://www.microsoft.com/ddk/ifskit/XPdefault.asp.

ARRESTO ANOMALO DI WINDOWS CON UNA SEQUENZA DI TASTI

In una delle mie newsletter precedenti vi ho raccontato come aggiungere un'impostazione al Registro di sistema di Windows 2000 che consente di avviare un arresto anomalo con schermata blu di un sistema in esecuzione con una sequenza di tasti speciale, in modo da poter analizzare i sistemi che altrimenti non rispondono all'input. E se ci fosse un modo per causare l'arresto anomalo di Windows NT e Windows 2000 senza dover impostare niente nel Registro di sistema?

È sufficiente aprire una finestra del prompt dei comandi, impostare la directory corrente sulla radice dell'unità di avvio (l'unità con \winnt) e digitare dir /s. Mentre il comando è in esecuzione premere F7+INVIO alcune volte e quindi interrompete il listato premendo CTRL+C. Verrà visualizzata immediatamente una schermata blu o si verificherà un riavvio spontaneo. Bello, eh? Purtroppo, a differenza del trucco che ho segnalato in precedenza, questo non è un comportamento progettato, ma piuttosto un bug per cui potete trovare un report all'indirizzo http://www.WindowsITsecurity.com/articles/index.cfm?articleID=22037.

Per coloro che si sono persi la newsletter che includeva l'impostazione dell'arresto anomalo con una sequenza di tasti, è sufficiente aggiungere il seguente valore del Registro di sistema al Registro di sistema di Windows 2000 o XP in base alle istruzioni nel file della Guida di Microsoft Debugging Tools:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\i8042prt\Parameters\CrashOnCtrlScrll DWORD 1

Riavviate il sistema e potete causare un arresto anomalo premendo BLOC SCORR due volte mentre tenere premuto il tasto CTRL di sinistra.

PRELETTURA IN WINDOWS XP

Microsoft ha incentrato lo sviluppo di Windows XP sul miglioramento dell'esperienza dell'utente finale e gli utenti considerano una parte importante dell'esperienza la velocità con cui un computer si accende ed è pronto all'uso. Per questi motivi, gli sviluppatori Microsoft hanno dedicato un notevole impegno per migliorare le prestazioni del processo di avvio e dell'avvio dell'applicazione. Questo problema è stato affrontato in diversi modi: il primo è che i driver di dispositivo seriali e di rete vengono inizializzati in parallelo, a differenza di Windows 2000 in cui l'inizializzazione è seriale. In secondo luogo, Winlogon non attende più che il servizio workstation (che a sua volta attende i servizi di rete) diventi disponibile prima di presentare la finestra di dialogo di accesso e consentire a un utente di accedere. Infine, hanno incorporato una tecnica denominata "prelettura" nel processo di avvio e nell'avvio dell'applicazione. Esaminerò brevemente come funziona la prelettura e vi segnalerò un white paper pubblicato da Microsoft sulle ottimizzazioni per l'avvio.

Windows (tutte le versioni ad eccezione di Win3.1 in modalità reale) è un sistema operativo con paging su richiesta, in cui i dati dei file e il codice vengono "serviti" in memoria dal disco quando un'applicazione tenta di accedervi. I dati e il codice vengono forniti in blocchi che compongono una pagina e le dimensioni di una pagina sono dettate dall'hardware di gestione della memoria della CPU. Una pagina è di 4 KB nel sistema x86. La prelettura è il processo di inserimento delle pagine di dati e codice in memoria dal disco prima che vengano richieste.

Per sapere cosa includere nella prelettura, Cache Manager di XP monitora gli errori di pagina in cui incorrono le applicazioni durante l'avvio. Per impostazione predefinita, analizza i primi 2 minuti del processo di avvio e i primi 10 secondi di avvio dell'applicazione. Dopo aver raccolto una traccia organizzata in errori eseguita sul file di metadati MFT (Master File Table) NTFS (se l'applicazione accede a file o directory nei volumi NTFS), i file a cui si fa riferimento e le directory a cui si fa riferimento, notifica il componente di prelettura dell'Utilità di pianificazione segnalando un oggetto evento denominato. L'Utilità di pianificazione esegue una chiamata a NtQuerySystemInformation con un tipo di informazioni che specifica una query per una traccia e la legge. Dopo aver eseguito la post-elaborazione sui dati di traccia, l'Utilità di pianificazione li scrive in un file in \Windows\Prefetch. Il nome del file è il nome dell'applicazione a cui viene applicata la traccia seguito da un trattino e dalla rappresentazione esadecimale di un hash del percorso del file. Il file ha un'estensione ".pf", quindi un esempio potrebbe essere NOTEPAD.EXE-AF43252301.PF.

Un'eccezione alla regola del nome file è il file che archivia la traccia di avvio, che è sempre denominato NTOSBOOT-B00DFAAD.PF (una convoluzione della parola compatibile esadecimale "BAADF00D", che i programmatori usano spesso per rappresentare dati non inizializzati). Tutti gli errori eseguiti nei processi System o Idle vengono considerati parte dell'avvio, il che ha senso perché è nel processo System che vengono caricati e inizializzati i driver di dispositivo.

Quando parte il processo di avvio o un'applicazione esegue Process Manager viene chiamato Cache Manager per offrire la possibilità di eseguire la prelettura. Cache Manager controlla la directory di prelettura per verificare se esiste un file di traccia per lo scenario di prelettura in questione. Quando Cache Manager chiama NTFS per la prelettura dei riferimenti ai file di metadati MFT, legge nel contenuto di ogni directory a cui si fa riferimento e infine apre ogni file a cui si fa riferimento e usa Memory Manager per leggere tutti i dati e il codice specificati nella traccia che non è già in memoria. Memory Manager avvia tutte le letture in modo asincrono e quindi attende il completamento prima di consentire che l'avvio di un'applicazione continui.

In che modo questo schema offre un vantaggio per le prestazioni? La risposta risiede nel fatto che durante l'avvio normale o l'avvio dell'applicazione l'ordine degli errori si verifica in modo che alcune pagine vengano recuperare da una parte di un file, poi un altro, poi alcune da un file diverso, poi alcune da una directory e così via. Questo saltare in giro corrisponde direttamente ai salti nel disco e Microsoft ha scoperto da varie analisi che i tempi di ricerca nel disco sono un fattore dominante che rallenta l'avvio e i tempi di avvio delle applicazioni. La ricerca viene praticamente eliminata quando si esegue la prelettura nei dati da un file o una directory particolare contemporaneamente prima di passare ad altri.

Per ridurre al minimo ulteriormente la ricerca, più o meno ogni tre giorni l'Utilità di pianificazione organizza un elenco di file e directory nell'ordine in cui vi viene fatto riferimento durante un avvio del sistema o l'avvio di un'applicazione e archivia l'elenco in un file denominato \Windows\Prefech\Layout.ini. Avvia quindi il deframmentatore di sistema con un'opzione della riga di comando che indica al deframmentatore di eseguire la deframmentazione in base al contenuto del file anziché eseguire una deframmentazione completa. Il deframmentatore trova un'area contigua su un volume sufficientemente grande da contenere tutti i file e le directory elencati, quindi li sposta nell'area in modo che vengano archiviati uno dopo l'altro.

Questi sono i concetti di base dello schema di prelettura XP, che secondo Microsoft velocizza in modo significativo il processo di avvio (si può effettivamente notare che l'avvio di XP è molto più veloce di Windows 2000). Altre informazioni sulla prelettura e sugli altri miglioramenti per la velocizzazione dell'avvio sono disponibili in un white paper all'indirizzo http://www.microsoft.com/hwdev/fastboot/. Inoltre, io e Dave Solomon abbiamo iniziato a lavorare sulla revisione per XP di "Inside Windows 2000" (la pubblicazione è prevista a metà primavera) e troverete una descrizione ancora più dettagliata lì.

WINDOWS .NET CONNECTIONS

Quelli di voi che si sono persi il mio intervento a TechEd possono sentirmi parlare alla conferenza Windows .NET Connections a Scottsdale in Arizona il 3 ottobre. Eseguirò delle presentazioni sull'analisi del dump di arresto anomalo di Windows NT/2000 e sulle modifiche del kernel in Windows XP. Tra gli altri relatori della conferenza ci sono i colleghi che collaborano con me a Windows 2000 Magazine, Mark Minasi e Sean Daily. Se partecipate, fatemi sapere se siete venuti a conoscenza della conferenza tramite la newsletter.

Gli abstract dei miei interventi e il collegamento al sito Web di Windows .NET Connections sono disponibili all'indirizzo http://www.sysinternals.com/ntw2k/info/talk.shtml.

SVILUPPI FUTURI

LE MIE ESPERIENZE CON ITANIUM

Microsoft mi ha prestato un sistema Itanium in modo da poter convertire le utilità Sysinternals a Win64. Il computer ha alcune specifiche impressionanti, ad esempio 2 processori da 733 MHz e 8 GB di RAM. La prossima volta che vi racconterò le mie esperienze di conversione, incluse le modifiche che ho dovuto apportare a varie utilità in modo che funzionino su Win64.


Grazie per aver letto la newsletter di Sysinternals.

Pubblicato lunedì 20 agosto 2001 alle 19:03 da ottoh

[Archivio newsletter ^] [< Volume 3, Numero 1] [Volume 4, Numero 1 >]