fero86
16-01-2009, 17:56
salve a tutti, ho una domanda da fare... ho esplorato da cima a fondo nella libreria MSDN tutta la documentazione relativa all'I/O sui files, cioé questa sezione: http://msdn.microsoft.com/en-us/library/aa364229(VS.85).aspx
ma non sono riuscito a capire una cosa fondamentale: nel caso di I/O sincrono (quindi non overlapped) e di scritture concorrenti su uno stesso file da parte di processi diversi, o per meglio dire attraverso HANDLEs diversi, i vari blocchi scritti sono ordinati?? oppure il caching causa un potenziale disordinamento?
quello che mi interessa capire fondamentalmente é se il caching:
1) avviene per file;
2) avviene per HANDLE;
3) avviene per processo;
4) l'interfaccia Win32 non specifica questo dettaglio che viene lasciato quindi all'implementazione sottostante, ad esempio al kernel NT o all'FSD sottostante.
questa differenza é molto importante perché:
nel caso 1) i vari blocchi di dati scritti vengono automaticamente ordinati nella cache, che funziona da coda;
nei casi 2) e 3) i blocchi scritti potrebbero essere disordinati perché ciascuno viene effettivamente scritto sul file solo quando la cache da cui proviene viene flushata, e quindi i blocchi restano ordinati secondo l'ordine in cui vengono flushate le caches;
nel caso 4) é una bella rottura di scatole.
volevo saperlo giusto per sapersi regolare quando si scrive un programma che girerá su piu processi e dovrá accedere concorrentemente agli stessi files in scrittura :)
so bene che Vista introduce il file system transazionale che elimina questo e dozzine di altri problemi, ma spesso e volentieri di questi tempi il target é ancora XP.
grazie a tutti dei vostri pareri, specialmente mi farebbe piacere ricevere eventuali link a pagine di MSDN che mi sono sfuggite!
ma non sono riuscito a capire una cosa fondamentale: nel caso di I/O sincrono (quindi non overlapped) e di scritture concorrenti su uno stesso file da parte di processi diversi, o per meglio dire attraverso HANDLEs diversi, i vari blocchi scritti sono ordinati?? oppure il caching causa un potenziale disordinamento?
quello che mi interessa capire fondamentalmente é se il caching:
1) avviene per file;
2) avviene per HANDLE;
3) avviene per processo;
4) l'interfaccia Win32 non specifica questo dettaglio che viene lasciato quindi all'implementazione sottostante, ad esempio al kernel NT o all'FSD sottostante.
questa differenza é molto importante perché:
nel caso 1) i vari blocchi di dati scritti vengono automaticamente ordinati nella cache, che funziona da coda;
nei casi 2) e 3) i blocchi scritti potrebbero essere disordinati perché ciascuno viene effettivamente scritto sul file solo quando la cache da cui proviene viene flushata, e quindi i blocchi restano ordinati secondo l'ordine in cui vengono flushate le caches;
nel caso 4) é una bella rottura di scatole.
volevo saperlo giusto per sapersi regolare quando si scrive un programma che girerá su piu processi e dovrá accedere concorrentemente agli stessi files in scrittura :)
so bene che Vista introduce il file system transazionale che elimina questo e dozzine di altri problemi, ma spesso e volentieri di questi tempi il target é ancora XP.
grazie a tutti dei vostri pareri, specialmente mi farebbe piacere ricevere eventuali link a pagine di MSDN che mi sono sfuggite!