緩沖區的出現是為了減少頻繁的系統調用,由于系統調用需要保存之前的進程數據和狀態等信息,而結束調用之后回來還需要回復之前的信息,為了減少這種耗時耗性能的調用于是出現了緩沖區。 在linux系統中,每個進程有自己獨立的緩沖區,叫做進程緩沖區,而系統內核也有個緩沖區叫做內核緩沖區。 當進程需要指定的磁盤數據的時候,進程先到內核緩沖區去看看數據是否在內核緩沖區,如果沒有,內核把讀取磁盤中此數據的請求添加到內核的請求隊列,然后掛起此進程,等解決了別的進程的問題之后,磁盤中的數據也讀取到了內核緩沖區,然后復制數據到進程緩沖區,接著喚醒這個被掛起的進程,進程從自己的進程緩沖區中拿到數據,然后繼續工作。 但是一般的操作系統在存儲數據的時候也并不是立即存儲的,這個是磁盤文件系統設計的問題,有些UNIX操作系統除外,相對數據安全,但是IO不可避免的會降低。操作系統使用read函數把數據從內核緩沖區復制到進程緩沖區,write把數據從進程緩沖區 復制到內核緩沖區中。至于什么時候讀取和存儲則由內核來決定,內核緩沖區滿則存儲到磁盤,讀取的時候內核緩沖區空則從磁盤讀取到內核緩沖區中,當然,在寫入的時候如果系統突然關閉則會造成內核緩沖區的數據無法存儲到磁盤的事情發生。
新聞熱點
疑難解答