Sono un programmatore dilettante. Ho un grande interesse per il funzionamento interno dei sistemi operativi, un argomento di cui ho letto molto.
Quello che ho capito dei kernel è che nella maggior parte dei sistemi operativi, un processo non è in grado di accedere direttamente al disco rigido (o ad altri supporti di memorizzazione), ma piuttosto attraverso le chiamate di sistema. Quindi, ad esempio, quando un processo vuole gestire i file, chiede al kernel di farlo per suo conto piuttosto che scrivere / leggere il disco direttamente.
Ora ho anche capito che quando i file vengono cancellati, di solito non vengono sovrascritti dal kernel ma solo marcati come non utilizzati, in modo che possano essere sovrascritti quando è necessario spazio. Ciò significa che anche se ho cancellato un file, potrebbe comunque essere recuperabile purché non sia stato ancora sovrascritto (è solo sul disco fisso).
Questo può rappresentare un po 'un rischio per la sicurezza se scarico il mio disco rigido, o un'opportunità per recuperare i file cancellati accidentalmente. Quindi ci sono software per recuperare i file cancellati o eliminare il disco rigido dei file cancellati, ma non ancora sovrascritti. Ecco le mie ipotesi su come funzionano: per il ripristino, in pratica eseguiamo la scansione del disco rigido, cercando sezioni di dati contrassegnate come disponibili per vedere se il nostro file è ancora lì (apparentemente sezioni / blocchi di dati hanno metadati che indicano cose come disponibilità, nome del file). Quindi se troviamo il nostro file, lo segnaliamo come non disponibile. Per eliminare l'unità, il software probabilmente scrive solo zero o qualcosa sui vecchi dati.
Ma la mia domanda è (se la mia ipotesi sul funzionamento di questo tipo di software è corretta): come può un'applicazione fare questo, poiché non fa parte del kernel? Il kernel ha un'API molto definita per la gestione dei file, e se chiediamo di cancellare un file lo farà a modo suo e non ci dovrebbe essere nulla che possiamo fare come normali applicazioni. Quindi come funziona questo tipo di software? Come posso creare un programma che accede al disco rigido in modo libero?