文件概念
文件是记录在外存上得相关信息的具有名称的集合。其具有连续的逻辑地址空间
文件都是好几个块组成的所有的基本io功能都能以块为单位来进行
文件可以表示程序和数据
数据文件可以包括,数字、字符、字符串或二进制。文件可以是自由形式,如文本文件,也可以具有严格的格式
- 文本文件:按行或者按页组织的文本文件
- 源文件:函数序列 每个函数包括声明和可执行语句
- 可执行文件:一系列代码段,以供加载程序调入内存
文件属性
- 名称:给人看的
- 标识符:这种唯一标记(通常为数字)标识文件系统的文件,文件的非人类可读名称
- 类型:文件格式
- 位置:指向设备与设备上文件位置的指针
- 尺寸:文件的当前大小,以及可能允许的最大大小
- 保护:确定谁能读取,谁能写入,谁能执行
所有的文件信息保存在目录结构中,该目录结构也保存在外存中:目录条文由文件的名称和他唯一的标识符组成,根据标识符可以定位到其他的属性
文件操作
每个进程都有一个他打开文件的表:单个进程表的每个条目相应的指向整个系统的打开文件表。
操作系统用一个打开文件表(open-file table)以用于维护所有打开文件的信息。包含的内容如下
- 文件指针:系统跟踪上次读写位置作为当前文件位置指针,这种指针对打开文件的某个进程来说是唯一的;
- 文件打开计数器:文件关闭时,操作系统必须重用其打开文件表条目,否则表内空间不够用。因为多个进程可能打开同一个文件,所以系统在删除打开文件条 目之前,必须等待最后一个进程关闭文件,该计数器跟踪打开和关闭的数量,当该计数为 0 时,系统关闭文件,删除该条目;
- 文件磁盘位置:绝大多数文件操作都要求系统修改文件数据,该信息保存在内存中,以免每个操作都从磁盘中读取;
- 访问权限:每个进程打开文件都需要有一个访问模式(创建、只读、读写、添加等),该信息保存在进程的打开文件表中,以便操作系统能允许或拒绝之后的 I/O 请求;
我们打开了一个文件后,操作系统就会为每个进程维护一个打开文件表,文件表里的每一项代表文件描述符,所以说文件描述符是打开文件的标识。
文件类型
操作系统使用扩展名来代表文件类型
文件的访问方法
顺序访问
文件信息按照顺序一个记录一个记录的加以处理,比如编译器
直接访问
用直接访问的方法,文件可以作为块或者记录的标号序列,因此可以先读块14再读块53最后写块7
对于大量信息的立即访问,用直接的方式来访问文件及其合适
对于直接访问的方法,可以用position_file(n)来定位目标块号n,然后read_next();就可以实现对n号块的读取了
用户提供给操作系统的块号通常为相对块号(相对于文件开头的索引)比如第一相对块对应的磁盘地址可能为14703