进程运行时,可以在他自己的地址空间内存储一定量的信息,但存储容量受虚拟地址空间大小的限制。
进程上保存空间的第二个问题是——当进程终止时,他保存的信息也随之消失。
第三个问题是:经常需要多个进程同事都去同一个信息(或部分信息)
文件锁进程创建的信息逻辑单元。一个磁盘一般含有几千甚至几百万个文件,每个文件是独立于其他文件的。
进程可以读取已经存在的文件,并在需要时建立新的文件。存储在文件中的信息必须是持久的,也就是说,不会因为进程的创建终止而受损,一个文件应该只在其所有者明确删除它的情况下才会消失。
文件
文件命名
文件是一种抽象机制,它提供了一种在磁盘上保留信息而方便以后读取的方法。
文件的具体命名规则在不同系统中是不相同的,不过所有的现代操作系统都允许用1个到8个字母组成的字符串作为合法的文件名。
在某些系统中,文件扩展名只是一种约定,操作系统并不强迫采用它。
相反,windows对扩展名赋予含义,用户(或进程)在操作系统中注册扩展名,并且规定哪个程序拥有该扩展名。当用户双击某文件名时,“拥有”该文件扩展名的程序就骑宠并运行该文件。
文件结构
1.无结构字节序列:操作系统不知道也不关心文件内容是什么,操作系统所见到的是字节,其任何含义只在用户程序中解释。在UNIX和Windows中都采用这种方法。
2.文件是具有固定长度记录的序列,每个记录都有其内部结构。把文件作为记录序列的中心思想是:读操作返回一个记录,而写操作重写或追加一个记录。
3.文件由一颗记录树构成,每个记录并不具有同样的长度,而记录的固定位置上有一个“键”字段。这棵树按“键”字段进行排序,从而可以对特定“键“进行快速查找。(在这种文件中向文件添加纪录的位置是由操作系统决定的,而不是用户决定的)
文件类型
普通文件中含有用户信息。
目录是管理文件系统结构的系统文件。
字符特殊文件和输入/输出有关,用于串行IO设备。
块特殊文件用户磁盘类设备。
普通文件氛围ASCII文件和二进制文件。
ASCII文件的最大优势是可以显示和打印,还可以用任何文本编辑器进行编辑。另外,很多程序都把ASCII文件进行输入输出,因此可以当作管道使用。
打印出来的二进制文件无法被理解,二进制文件具有一定的结果,使用该文件的程序才了解这种结构。
所有操作系统必须能过识别他们自己的可执行文件的文件类型,其中有些操作系统还可识别更多的信息。
文件存取
顺序存取:在存储介质是磁带而不是磁盘时,顺序存取文件是很方便的。
当用磁盘来存储文件时,我们可以不按顺序地读取文件中的字节或记录,或者按照关键字而不是位置存取记录。这种可以以任何次序读取文件成为随机存取文件。
有两种方法可以只是从何处开始读取文件。一种是每次read操作都给出开始读文件的位置。另一种是用一个特殊的seek操作设置当前位置,seek之后从该位置顺序读取额外你就。(UNIX和WINDOWS采取后一种)
文件属性
文件都有文件名和数据。另外,所有的操作系统还会保留其它与文件相关的信息,如果文件创建的时间等,这些信息成为文件属性,有些人称之为元数据。
记录长度\键的位置和键的长度等字段只能出现现在用关键字查找记录的文件里,他们提供了查找关键字所需的信息。
文件操作
使用文件的目的是存储信息并方便以后的检索。对于存储和检索,不同系统提供不同的操作
P148
目录
一级目录系统
层次目录系统
路径名
指明文件名常用的方法有两种,第一种:每一个文件都赋予一个绝对路径名,它由根目录到到文件的路径组成。
若路径名第一个字符就是分隔符,则这个路径就是绝对路径。
另外一种方法是相对路径名,它和工作目录有关。
若一个陈旭需要存取某个特定的文件,而不论当前目录是什么。这时,都应该使用绝对路径名。
每个进程都有自己的工作目录,这样在进程改变工作目录并退出后,其他进程不会受到影响。
对进程而言,切换工作目录是安全的。但如果改变了库过程的工作目录,且工作完毕之后没有该回去,则其它程序有可能无法正常运行。
目录操作
打开和读取目录与文件相同,读取之前必须打开。
link链接技术允许多个目录出现同一个文件。(两个文件名指向了同一个内部数据结构)
unlink时若只出现在一个目录中,则删除文件。
与连接文件的一种不同思路是符号连接。当时用第一个文件时,录入打开,操作系统沿着路径找到末端的名字。然后它使用该新名字启动查找进程。符号连接的有点碍于他能跨越磁盘界限,甚至可以命名远程计算机上的文件,不过符号链接的实现不像硬链接那样有效率。