引言(文件的由来)

需求

所有的计算机程序都要存储和检索信息.

  1. 进程运行时,会在内存开辟自己的内存空间,但存储容量受虚拟地址空间的大小限制;
  2. 进程终止后,保存的信息随之丢失;
  3. 经常需要多个进程同时访问同一信息(或其中的部分信息)
    解决方法:使信息本身独立于任何一个程序
    因此,长期保存信息有3个基本要求:
    1)能够存储大量信息
    2)使用信息的程序终止时,信息仍旧存在
    3)必须能使多个进程并发访问有关信息

磁盘

磁盘(magnetic disk)由于其长期存储的性质,使用磁盘长期存储信息.目前先把磁盘当作一种大小固定的块的线性序列,并且支持一下两种操作:

  1. 读块k
  2. 写块k

产生的问题:

  1. 如何找到信息?
  2. 如何防止一个用户读取另一个用户的数据?
  3. 如何知道哪些块是空闲的?

文件的概念

操作系统提取处理器的概念建立进程的抽象,提取物理存储器的概念建立进程(虚拟)地址空间的抽象,我们可以建立一个新的抽象–文件,以解决上述问题.

  1. 文件是进程创建的信息逻辑单元,是对磁盘的建模,而不是RAM的建模(内存)
  2. 操作系统中处理文件的部分称为文件系统
  3. 文件是一种抽象机制,它提供了一种在磁盘上保存信息而且方便以后读取的方法.这种方法可以使用户不必了解存储信息的方法,位置,和实际磁盘工作方式等有关细节.

文件命名

任何一种抽象机制的最重要特性就是对管理对象的命名方式.
文件名.扩展名
UNIX中,扩展名知识一种约定,操作系统并不强制采用它,扩展名更多的是提醒所有者,不表示传送什么信息给计算机.
Windows关注扩展名并赋予其含义.用户(或进程)可以在操作系统中注册扩展名,并且规定哪个程序"拥有"改扩展名

文件结构

文件的逻辑结构是从用户观点出发看到的文件的组织形式。文件的物理结构是从实现观点出发,又称为文件的存储结构,是指文件在外存上的存储组织形式。文件的逻辑结构与存储介质特性无关,但文件的物理结构与存储介质的特性有很大关系。
按逻辑结构,文件有无结构文件和有结构文件两种类型:无结构文件和有结构文件。
文件的逻辑结构
图4-2a的文件是一种无结构的字节序列,事实上操作系统不知道也不关心文件内容是什么,操作系统所见到的就是字节,其文件内容的任何含义只在用户程序中解释.UNIX和Windows都采用这种办法

文件类型

很多操作系统支持多种文件类型.Linux下文件类型

文件属性 文件类型
- 普通文件
d 目录文件
b block device,块设备文件,如硬盘,支持以block为单位进行随机访问
c character device字符设备文件,如键盘,支持以character为单位进行线性访问
l symbolic link符号链接文件,又称软链接文件
p 命名管道文件
s socket套接字文件,用于实现两个进程进行通信

计算机的存储在物理上是二进制的,所以物理上所有的磁盘文件本质上都是一样的:==以字节为单位进行顺序存储
从用户或操作系统使用的角度(逻辑上)把文件分为:

  • 普通文件
    • ASCII(文本) 文件:基于字符编码的文件
      *存储的是编码
    • 二进制文件:基于值编码的文件
      • 把内存中的数据按其在内存中的存储形式原样输出到磁盘
        在这里插入图片描述

文件访问

  • 顺序访问
  • 随机访问(能够以任何次序读取其中字节或记录)

文件属性

操作系统保存的与文件相关的信息,这些附加信息—>文件属性/元数据
在这里插入图片描述

文件操作

使用文件的目的是存储信息并方便以后检索.对于存储和检索,不同系统提供了不同的操作,以下是与文件有关的做常用的一些系统调用:

  • create
  • delete
  • open.使用文件之前,必须打开文件.open调用的目的:把文件属性和磁盘地址表装入内存,便于后续调用的快速访问
  • read
  • write
  • seek

使用文件系统调用的一个示例