程序緩衝區和核心緩衝區

NO IMAGE

緩衝區的出現是為了減少頻繁的系統呼叫,由於系統呼叫需要儲存之前的程序資料和狀態等資訊,而結束呼叫之後回來還需要回復之前的資訊,為了減少這種耗時耗效能的呼叫於是出現了緩衝區。在linux系統中,每個程序有自己獨立的緩衝區,叫做程序緩衝區,而系統核心也有個緩衝區叫做核心緩衝區

當程序需要指定的磁碟資料的時候,程序先到核心緩衝區去看看資料是否在核心緩衝區,如果沒有,核心把讀取磁碟中此資料的請求新增到核心的請求佇列,然後掛起此程序,等解決了別的程序的問題之後,磁碟中的資料也讀取到了核心緩衝區,然後複製資料到程序緩衝區,接著喚醒這個被掛起的程序,程序從自己的程序緩衝區中拿到資料,然後繼續工作。

但是一般的作業系統在儲存資料的時候也並不是立即儲存的,這個是磁碟檔案系統設計的問題,有些UNIX作業系統除外,相對資料安全,但是IO不可避免的會降低。作業系統使用read函式把資料從核心緩衝區複製到程序緩衝區,write把資料從程序緩衝區 複製到核心緩衝區中。至於什麼時候讀取和儲存則由核心來決定,核心緩衝區滿則儲存到磁碟,讀取的時候核心緩衝區空則從磁碟讀取到核心緩衝區中,當然,在寫入的時候如果系統突然關閉則會造成核心緩衝區的資料無法儲存到磁碟的事情發生。