标签:
读取和写入文件IO操作都需要调用操作系统提供的接口,读和写分别对应read和write两个系统调用,那么就存在内核空间和用户空间地址切换的问题,因为磁盘设备是由操作系统管理的,为了保护系统运行安全将内核运行的内存空间和用户程序的内存空间进行隔离,那么必然存在数据需要从内核空间向用户空间复制的问题。
如磁盘IO,数据需要从磁盘复制到内核空间,处理完成后又从内核空间复制到用户空间,非常耗时。所以操作系统一般会使用缓存机制,就是将文件按照一定的组织形式进行缓存,如果用户访问同一段磁盘地址空间,直接从内核缓存中返回。
当应用程序调用read接口时,操作系统检查高速缓存中是否有,如果有直接从缓存中返回,如果没有,从磁盘读取,并缓存在高速缓存中。写入时,调用write接口将数据从用户地址空间复制到内核缓存中,对于应用程序和用户来说,写入操作已完成,至于什么时候写入到磁盘上,由操作系统决定,除非显示的调用sync同步。
就是应用程序直接访问磁盘数据,不经过操作系统的内核数据缓存,这样做的目的减少了一次从内核缓冲区到用户程序缓存的数据复制。通常应用在数据库系统中,数据库系统明确知道应该缓存哪些数据,以及一些热点数据。
数据的读取和写入都是同步操作的,它与标准访问文件的方式不同在于,只有当数据被成功写入到磁盘时才返回给应用程序成功的标志。应用在对数据安全性要求较高的场合,而且这种操作方式的硬件都是定制的。
当访问数据的线程发出请求后,线程会处理其它事情,不是阻塞等待,当请求的数据返回后继续处理下面的操作。
操作系统将内存中的某一块区域与磁盘中的文件关联起来,当要访问内存中一段数据时,转换为访问文件的某一段数据。同样可以减少数据从内核空间缓存到用户空间缓存的数据复制操作,因为这两个空间的数据是共享的。
标签:
原文地址:http://blog.csdn.net/a101070096/article/details/51366210