系統(tǒng)進(jìn)行了什么操作?
以vim file為例,編輯過程輸入的很多內(nèi)容在保存之前是存放在用戶空間內(nèi)存中的,執(zhí)行:w保存時(shí),vim開始執(zhí)行保存文件相關(guān)的系統(tǒng)調(diào)用,如open(file)在磁盤中創(chuàng)建一個(gè)文件,創(chuàng)建文件的過程,包括在磁盤上申請對應(yīng)的i節(jié)點(diǎn)將文件名、文件權(quán)限、文件類型等元信息寫入,然后申請對應(yīng)的數(shù)據(jù)塊,并將數(shù)據(jù)塊編號(hào)也寫入i節(jié)點(diǎn)中,將這個(gè)i節(jié)點(diǎn)信息加載到內(nèi)核的i節(jié)點(diǎn)緩沖塊中。然后內(nèi)核為open系統(tǒng)調(diào)用創(chuàng)建一個(gè)文件描述表項(xiàng),并將其無與i節(jié)點(diǎn)建立起聯(lián)系,最后內(nèi)核為進(jìn)程分配一個(gè)文件描述符,將其與文件描述表項(xiàng)建立起聯(lián)系,以后進(jìn)程寫文件數(shù)據(jù)到文件的時(shí)候就通過這個(gè)fd進(jìn)行。
write(fd,buf)將用戶空間緩沖區(qū)的文件數(shù)據(jù)寫入文件,具其實(shí)內(nèi)核只是將這部分?jǐn)?shù)據(jù)從用戶空間拷貝到內(nèi)核的緩沖塊中,后續(xù)內(nèi)核有另一個(gè)進(jìn)程專門完成數(shù)據(jù)塊、i節(jié)點(diǎn)塊信息同步到磁盤的過程,完成文件編輯的內(nèi)容最終被保存到磁盤里面。