操作系统访问文件的方式

访问文件的方式


      • 访问文件的方式

        • 标准访问文件方式
        • 直接IO方式
        • 同步访问文件方式
        • 异步访问文件方式
        • 内存映射方式

读取和写入文件IO操作都需要调用操作系统提供的接口,读和写分别对应read和write两个系统调用,那么就存在内核空间和用户空间地址切换的问题,因为磁盘设备是由操作系统管理的,为了保护系统运行安全将内核运行的内存空间和用户程序的内存空间进行隔离,那么必然存在数据需要从内核空间向用户空间复制的问题。

如磁盘IO,数据需要从磁盘复制到内核空间,处理完成后又从内核空间复制到用户空间,非常耗时。所以操作系统一般会使用缓存机制,就是将文件按照一定的组织形式进行缓存,如果用户访问同一段磁盘地址空间,直接从内核缓存中返回。

标准访问文件方式

当应用程序调用read接口时,操作系统检查高速缓存中是否有,如果有直接从缓存中返回,如果没有,从磁盘读取,并缓存在高速缓存中。写入时,调用write接口将数据从用户地址空间复制到内核缓存中,对于应用程序和用户来说,写入操作已完成,至于什么时候写入到磁盘上,由操作系统决定,除非显示的调用sync同步。

直接IO方式

就是应用程序直接访问磁盘数据,不经过操作系统的内核数据缓存,这样做的目的减少了一次从内核缓冲区到用户程序缓存的数据复制。通常应用在数据库系统中,数据库系统明确知道应该缓存哪些数据,以及一些热点数据。

同步访问文件方式

数据的读取和写入都是同步操作的,它与标准访问文件的方式不同在于,只有当数据被成功写入到磁盘时才返回给应用程序成功的标志。应用在对数据安全性要求较高的场合,而且这种操作方式的硬件都是定制的。

异步访问文件方式

当访问数据的线程发出请求后,线程会处理其它事情,不是阻塞等待,当请求的数据返回后继续处理下面的操作。

内存映射方式

操作系统将内存中的某一块区域与磁盘中的文件关联起来,当要访问内存中一段数据时,转换为访问文件的某一段数据。同样可以减少数据从内核空间缓存到用户空间缓存的数据复制操作,因为这两个空间的数据是共享的。

时间: 2024-08-30 09:29:31

操作系统访问文件的方式的相关文章

文件打开方式

FileMode Enumeration 指定操作系统打开文件的方式.(命名空间:System.IO) 语法 [SerializableAttribute] [ComVisibleAttribute(true)] public enum FileMode 成员 成员名称 说明 CreateNew 指定操作系统创建新文件. 此操作需要FileIOPermissionAccess.Write. 如果文件已存在,则将引发IOException. Create 指定操作系统应创建新文件. 如果文件已存在

随机访问文件RandomAccessFile 与 内存映射文件MappedByteBuffer

一.RandomAccessFile RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了.这些记录的大小不必相同:但是其大小和位置必须是可知的.但是该类仅限于操作文件. RandomAccessFile不属于InputStream和OutputStream类系的.实际上,除了实现DataInput和DataOutput接口之外(DataInputStream和DataOutputStream也实现了这两个接口),它和这两个类系

操作系统基本分段存储管理方式

操作系统基本分段存储管理方式 引入分段存储管理方式的目的:满足程序员在编程和使用上多方面的要求.这种存储管理方式已经成为当今所有存储管理方式的基础. 1.分段存储管理方式的引入 主要满足用户和程序员以下需求: 1).方便编程 用户把自己的作业按照逻辑管理划分为若干段,每个段都是从0开始编址,并有自己的名字和长度.因此,希望要访问的逻辑地址是由段名(段号)和段内偏移量(段内地址)决定的. LOAD1,[A] | <D>;//将分段A中D单元内的值读入寄存器1 STORE1,[B] | <C

java读取文件和写入文件的方式

Java代码 public class ReadFromFile { /** * 以字节为单位读取文件,常用于读二进制文件,如图片.声音.影像等文件. */ public static void readFileByBytes(String fileName) { File file = new File(fileName); InputStream in = null; try { System.out.println("以字节为单位读取文件内容,一次读一个字节:"); // 一次读

操作系统基本分页存储管理方式

操作系统基本分页存储管理方式 连续分配内存方式会形成许多"碎片",通过紧凑的方式将碎片拼接成一块大的空间,但是拼接过程系统开销太大.如果允许将一个进程直接分散地装入到许多不相邻的分区中,那么就不需要再进行"紧凑".基于这一思想而产生了离散分配方式.如果离散分配的基本单位是页,则称为分页存储管理方式:如果离散分配的基本单位是段,则称为分段存储管理方式. 在分页管理方式中,如果不具备页面对换功能(将处于阻塞状态且优先级低的进程对换到外存),则称为基本的分页存储管理方式,

Microsoft Office Excel 不能访问文件

Microsoft Office Excel 不能访问文件“QUOTE5.xls”. 可能的原因有: 1 文件名称或路径不存在.2 文件正被其他程序使用.3 您正要保存的工作簿与当前打开的工作簿同名. 说明: 执行当前 Web 请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息. 异常详细信息: System.Runtime.InteropServices.COMException: Microsoft Office Excel 不能访问文件“D:

oracle四种访问数据库的方式

1.sql plus——命令操作: 数据库自带的命令工具,通过此工具可以在dos窗口中直接对数据库进行操作.使用此工具有两种进入方式: (1).在安装后的数据库下有一个应用程序开发,子目录里有一个sql plus,直接单击打开,就可以输入用户名.密码登录数据库进行操作. (2).直接打开windows的dos窗口(win键+R—>cmd命令回车进入),输入sql plus命令然后输入用户名密码即可以进入. 2.sql developer——图形化界面操作: 数据库自带的图形化操作工具,通过该工具

EasyARM i.mx28学习笔记——文件IO方式操作GPIO

0 前言 本文描述如果通过文件IO sysfs方式控制EasyARM GPIO端口.通过sysfs方式控制GPIO,先访问/sys/class/gpio目录,向export文件写入GPIO编号,使得该GPIO的操作接口从内核空间暴露到用户空间,GPIO的操作接口包括direction和value等,direction控制GPIO方向,而value可控制GPIO输出或获得GPIO输入. Linux学习可从应用出发,先不纠结Linux驱动编写,先把Linux给玩起来. [相关博文] [EasyARM

Linux上使用程序相对路径访问文件【转】

转自:http://blog.csdn.net/yinxusen/article/details/7444249 今天一个朋友问我这个问题,说为什么在Windows上跑得很好的应用程序,移植到Linux上后就读不到跟应用程序在同一文件夹下的文件呢,我说,这是linux和Windows在Work directory上设置的不同. 大家都知道,对于Windows而言,应用程序的默认工作目录就是应用程序所在的目录,它一般是不管应用程序是从哪个目录上下文启动的.那么在不更改工作目录的情况下,读文件使用相