进程缓冲区和内核缓冲区

2/10/2017来源:ASP.NET技巧人气:1307

缓冲区的出现是为了减少频繁的系统调用,由于系统调用需要保存之前的进程数据和状态等信息,而结束调用之后回来还需要回复之前的信息,为了减少这种耗时耗性能的调用于是出现了缓冲区。 在linux系统中,每个进程有自己独立的缓冲区,叫做进程缓冲区,而系统内核也有个缓冲区叫做内核缓冲区。 当进程需要指定的磁盘数据的时候,进程先到内核缓冲区去看看数据是否在内核缓冲区,如果没有,内核把读取磁盘中此数据的请求添加到内核的请求队列,然后挂起此进程,等解决了别的进程的问题之后,磁盘中的数据也读取到了内核缓冲区,然后复制数据到进程缓冲区,接着唤醒这个被挂起的进程,进程从自己的进程缓冲区中拿到数据,然后继续工作。 但是一般的操作系统在存储数据的时候也并不是立即存储的,这个是磁盘文件系统设计的问题,有些UNIX操作系统除外,相对数据安全,但是IO不可避免的会降低。操作系统使用read函数把数据从内核缓冲区复制到进程缓冲区,write把数据从进程缓冲区 复制到内核缓冲区中。至于什么时候读取和存储则由内核来决定,内核缓冲区满则存储到磁盘,读取的时候内核缓冲区空则从磁盘读取到内核缓冲区中,当然,在写入的时候如果系统突然关闭则会造成内核缓冲区的数据无法存储到磁盘的事情发生。