引言(文件的由来)
需求
所有的计算机程序都要存储和检索信息.
- 进程运行时,会在内存开辟自己的内存空间,但存储容量受虚拟地址空间的大小限制;
- 进程终止后,保存的信息随之丢失;
- 经常需要多个进程同时访问同一信息(或其中的部分信息)
解决方法:使信息本身独立于任何一个程序
因此,长期保存信息有3个基本要求:
1)能够存储大量信息
2)使用信息的程序终止时,信息仍旧存在
3)必须能使多个进程并发访问有关信息
磁盘
磁盘(magnetic disk)由于其长期存储的性质,使用磁盘长期存储信息.目前先把磁盘当作一种大小固定的块的线性序列,并且支持一下两种操作:
- 读块k
- 写块k
产生的问题:
- 如何找到信息?
- 如何防止一个用户读取另一个用户的数据?
- 如何知道哪些块是空闲的?
文件的概念
操作系统提取处理器的概念建立进程的抽象,提取物理存储器的概念建立进程(虚拟)地址空间的抽象,我们可以建立一个新的抽象–文件,以解决上述问题.
- 文件是进程创建的信息逻辑单元,是对磁盘的建模,而不是RAM的建模(内存)
- 操作系统中处理文件的部分称为文件系统
- 文件是一种抽象机制,它提供了一种在磁盘上保存信息而且方便以后读取的方法.这种方法可以使用户不必了解存储信息的方法,位置,和实际磁盘工作方式等有关细节.
文件命名
任何一种抽象机制的最重要特性就是对管理对象的命名方式.
文件名.扩展名
UNIX中,扩展名知识一种约定,操作系统并不强制采用它,扩展名更多的是提醒所有者,不表示传送什么信息给计算机.
Windows关注扩展名并赋予其含义.用户(或进程)可以在操作系统中注册扩展名,并且规定哪个程序"拥有"改扩展名
文件结构
文件的逻辑结构是从用户观点出发看到的文件的组织形式。文件的物理结构是从实现观点出发,又称为文件的存储结构,是指文件在外存上的存储组织形式。文件的逻辑结构与存储介质特性无关,但文件的物理结构与存储介质的特性有很大关系。
按逻辑结构,文件有无结构文件和有结构文件两种类型:无结构文件和有结构文件。
图4-2a的文件是一种无结构的字节序列,事实上操作系统不知道也不关心文件内容是什么,操作系统所见到的就是字节,其文件内容的任何含义只在用户程序中解释.UNIX和Windows都采用这种办法
文件类型
很多操作系统支持多种文件类型.Linux下文件类型
文件属性 | 文件类型 |
---|---|
- | 普通文件 |
d | 目录文件 |
b | block device,块设备文件,如硬盘,支持以block为单位进行随机访问 |
c | character device字符设备文件,如键盘,支持以character为单位进行线性访问 |
l | symbolic link符号链接文件,又称软链接文件 |
p | 命名管道文件 |
s | socket套接字文件,用于实现两个进程进行通信 |
计算机的存储在物理上是二进制的,所以物理上所有的磁盘文件本质上都是一样的:==以字节为单位进行顺序存储
从用户或操作系统使用的角度(逻辑上)把文件分为:
- 普通文件
- ASCII(文本) 文件:基于字符编码的文件
*存储的是编码 - 二进制文件:基于值编码的文件
- 把内存中的数据按其在内存中的存储形式原样输出到磁盘
- 把内存中的数据按其在内存中的存储形式原样输出到磁盘
- ASCII(文本) 文件:基于字符编码的文件
文件访问
- 顺序访问
- 随机访问(能够以任何次序读取其中字节或记录)
文件属性
操作系统保存的与文件相关的信息,这些附加信息—>文件属性/元数据
文件操作
使用文件的目的是存储信息并方便以后检索.对于存储和检索,不同系统提供了不同的操作,以下是与文件有关的做常用的一些系统调用:
- create
- delete
- open.使用文件之前,必须打开文件.open调用的目的:把文件属性和磁盘地址表装入内存,便于后续调用的快速访问
- read
- write
- seek
等