操作系统核心原理-6.外存管理(下)文件系统

一、为何需要文件系统?

  磁盘具有大容量、低成本以及持久化的特点,即使发生断电,磁盘上的数据也不会丢失。但是,对于一般用户而言,使用磁盘是非常苦难的,因为他们不知道如何驱动一个磁盘,以及计算数据在磁盘上的存放位置。从上一篇《磁盘基础》可以知道,了解磁盘的各项技术细节将使用户不堪重负。

  操作系统是一个魔术师,其提供给用户的就是各种幻想:抽象。进程抽象的是CPU,虚拟内存抽象的是内存,对于磁盘来说,操作系统提供给用户的帮助就是在磁盘外面包裹一层容易使用的抽象,用户直接与这层抽象打交道,而无需了解磁盘的技术细节。在操作系统中,这层为磁盘提供的抽象就是:文件系统

二、文件系统的基本概念

2.1 文件系统是什么

  文件系统是操作系统为磁盘和用户之间提供的一个抽象,它是一个子虚乌有的,看不见摸不着的接口,如下图所示:

  (1)文件系统使得用户能够很方便的使用磁盘:将用户从数据存放的细节中解放出来,用户不需要知道内容存放在什么地方,也不需要知道如何存放,更不需要知道磁盘到底是如何工作的。

  (2)简单地说,文件系统将其接触的磁盘物理特性转换为用户看到的路径名和文件名。用户对磁盘进行访问只需要给出文件名和路径名即可,而无需知道磁柱、磁道、扇面、数据块等信息

  (3)文件系统的主要特性就是存储大量的信息,多个进程可以同时访问一个文件,进程结束也不会影响文件的持续存在

2.2 文件系统的目标

  (1)地址独立

  一个文件在产生的时候无需担心其存放的磁盘地址,即文件数据的产生与文件将来存放的磁盘地址相互独立。

  (2)地址保护

  地址保护需要对文件的访问进行一定的限制,即不是任何人都可以访问任何文件。

Difference:文件系统的地址保护与内存管理下的地址保护不同,内存管理下地址保护指的是一个进程不能访问另一个进程空间,而文件系统下的地址保护不是一个文件不能访问另一个文件空间,而是一个文件的访问时有限制的。

2.3 文件的基本知识

  (1)文件命名

  文件名可以便于访问一个文件,这个文件名既可以是英语名、中文名,也可以是图像名。当用户给出一个文件名,操作系统就可以根据这个名字找到对应文件的内容。具体来说,就是找到该文件存放在磁盘上的所有数据块

  操作系统将文件名翻译为其数据块在磁盘上存放的地址,由于磁盘的寻址单位是扇面,而这些磁盘地址实际上就是一个个的扇面号。

  (2)扩展名

  扩展名通常用来表明文件的类型,如何文本文件、二进制文件等等。例如:file.c 表明该文件是一个C语言的源文件。扩展名对文件类别的指示仅仅是指示性的,并不具有强制性。

  (3)内容寻址

  除了给出文件名外,还可以给出文件的内容,供操作系统查找使用。数据库系统是这种实现方式的典型应用。

  (4)文件访问

  ①顺序访问:从开头开始访问,按照先来后到的顺序读取数据。

  ②随机访问:可以按照任意顺序读取数据记录,就像我们看DVD一样可以随机选择想要观看的段落。

  (5)文件属性

  每个文件除了一个文件名外,还有许多信息也是我们感兴趣的,所以,文件还拥有一些属性。不同的操作系统,文件的属性种类和数量都不同,但每一种属性都有自己的用途,下表列出了常见的文件属性:

  (6)文件操作

  可以对文件进行操作有:创建/删除、打开/关闭、读写添加、寻找访问位置、读取属性/设置属性、重命名等等。

三、文件夹实现地址独立

3.1 为何要有文件夹

  我们可以对文件进行读写操作,那么给一个文件名,操作系统是如何知道从什么地方读取文件内容的呢?换句话说,文件在磁盘上的什么位置,操作系统是如何知道的呢?这需要一个数据结构来记录每个文件在磁盘上的地址,这个数据结构就是文件夹

  文件夹也称为目录夹(Folder),它的角色就是跟踪文件,里面存放的是从文件到文件所在磁盘的地址的映射,即“文件名→文件所在磁盘上的地址”。文件夹对于文件来说,就相当于从虚拟地址到实际地址的一种翻译机制。

3.2 文件夹结构

  由于文件夹里面可以有子文件夹,因此就形成了一个层次结构,这个层次结构的顶端就是根文件夹(也称为根目录),如下图所示:

  根目录是一个文件系统的总起点,它在操作系统启动的时候加载到内存。从根目录开始,该文件系统里面的所有文件都可以找出来。

四、文件系统的调用

4.1 操作系统提供的“接口”

  操作系统为用户提供的文件系统接口就是文件系统调用,用户可以在程序中通过这些系统调用来对文件系统进行读写操作。这些系统调用包括:打开文件、关闭文件、读文件内容、写文件内容等等。

4.2 文件系统调用实例

  下图展示了一个C语言编写的使用文件系统调用实现文件拷贝的简单实例程序:

  上述文件拷贝程序实现的是打开源文件和目标文件,然后循环往复地将源文件内容读取到一个缓冲区,然后将缓冲区的内容写到输出目标文件里。当拷贝结束后,关闭源文件和目标文件。

参考资料

邹恒明,《操作系统之哲学原理》,机械工业出版社

作者:周旭龙

出处:http://edisonchou.cnblogs.com

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

时间: 2025-01-08 18:10:44

操作系统核心原理-6.外存管理(下)文件系统的相关文章

操作系统核心原理-6.外存管理(上)磁盘基础

计算机是处理数据的机器,而数据就需要有地方存放.在计算机中,可供数据存放的地方并不太多,除了内存之外,最主要的存储数据的媒介就是磁盘.对于大多数计算机领域的人来说,磁盘通常被看做是一种外部设备.可是,对于现代操作系统来说,磁盘是不可或缺的.虽然早期的操作系统可以基于磁带,但由于操作系统复杂性和性能的不断提升,用磁带作为操作系统的载体已经不合时宜,取而代之的是磁盘.由于操作系统需要存放在磁盘上,且操作系统内的文件系统也是基于磁盘,所以,从某种程度来说,磁盘是操作系统不可分割的一部分,理解磁盘将对理

操作系统核心原理-5.内存管理(下):分页内存管理

在上一篇介绍的几种多道编程的内存管理模式中,以交换内存管理最为灵活和先进.但是这种策略也存在很多重大问题,而其中最重要的两个问题就是空间浪费和程序大小受限.那么有什么办法可以解决交换内存存在的这些问题呢?答案是分页,它是我们解决交换缺陷的“不二法门”. 一.分页内存管理 1.1 解决问题之道 为了解决交换系统存在的缺陷,分页系统横空出世.分页系统的核心在于:将虚拟内存空间和物理内存空间皆划分为大小相同的页面,如4KB.8KB或16KB等,并以页面作为内存空间的最小分配单位,一个程序的一个页面可以

操作系统核心原理-3.进程管理(中):进程调度

PS:在多进程并发的环境里,虽然从概念上看,有多个进程在同时执行,但在单个CPU下,在任何时刻只能有一个进程处于执行状态,而其他进程则处于非执行状态.那么问题来了,我们是如何确定在任意时刻到底由哪个进程执行,哪些不执行呢?这就涉及到进程管理的一个重要组成部分:进程调度,跟随本篇来一起复习下进程调度吧! 一.进程调度基础 1.1 进程调度定义 进程调度是操作系统进程管理的一个重要组成部分,其任务是选择下一个要运行的进程. 1.2 进程调度目标 首先,一般的程序任务分为三种:CPU计算密集型.IO密

操作系统核心原理-3.进程管理(上):进程概要

进程管理.内存管理和文件管理是操作系统的三大核心功能,那么什么是进程呢?顾名思义,进程就是进展中的程序,或者说进程是执行中的程序.当一个程序被加载到内存之后就变为了进程.因此,我们可以得到:进程=程序+执行.本篇将会对进程.进程模型.进程状态以及进程的缺陷等进行学习,为后续学习进程调度与进程通信打下坚实基础. 一.进程是什么鬼? 1.1 从工作到进程 进程在Multics操作系统出现之前被叫做工作(Job),工作是IBM用于多道批处理程序设计中的概念.由于历史原因,Multics操作系统的研发人

操作系统核心原理-7.设备管理:I/O原理

一.I/O的基本知识 1.1 为何要有I/O 前面阐述了操作系统具有进程管理.内存管理.外存管理三大核心功能,但是计算机归根是为人类服务的,这就要求计算机必须提供某种机制使得人们可以向计算机发出命令或操纵计算机.也就是说计算机与人之间必须存在某种沟通的机制,这种沟通的机制就是计算机的输入输出机制.输入输出的存在才使得计算机的存在有了意义,就像一个人,如果没有输入输出,那么就不能与外部世界打交道. (1)输入提供的是一个“人→计算机”的通道,即人或外部世界通过输入向计算机发出命令或提供数据. (2

操作系统核心原理-4.线程原理(上)线程基础与线程同步

我们都知道,进程是运转中的程序,是为了在CPU上实现多道编程而发明的一个概念.但是进程在一个时间只能干一件事情,如果想要同时干两件或者多件事情,例如同时看两场电影,我们自然会想到传说中的分身术,就像孙悟空那样可以变出多个真身.虽然我们在现实中无法分身,但进程却可以办到,办法就是线程.线程就是我们为了让一个进程能够同时干多件事情而发明的“分身术”. 一.线程基础 1.1 线程概念 线程是进程的“分身”,是进程里的一个执行上下文或执行序列.of course,一个进程可以同时拥有多个执行序列.这就像

操作系统核心原理—2.一些基本概念

一.计算机硬件基础 1.1 总线结构 从概念上讲,计算机的结构是总线型的:布置一根总线将各种硬件设备挂在总线(Bus)上. (1)所有的设备都有一个控制设备,外部设备通过控制器与CPU进行通信. (2)所有的设备之间的通信也需要通过总线. 1.2 流水线结构 为了提高计算机的效率,人们又设计出了流水线结构:仿照工业流水装配线,将计算机的功能部件分为多个梯级,并将计算机的每条指令拆分为同样多个步骤,使每条指令在流水线上流动,到流水线最后一个梯级时指令执行完毕. 下图展示了5个梯级的流水线结构,流水

操作系统核心原理-3.进程原理(中):进程调度

PS:在多进程并发的环境里,虽然从概念上看,有多个进程在同时执行,但在单个CPU下,在任何时刻只能有一个进程处于执行状态,而其他进程则处于非执行状态.那么问题来了,我们是如何确定在任意时刻到底由哪个进程执行,哪些不执行呢?这就涉及到进程管理的一个重要组成部分:进程调度,跟随本篇来一起复习下进程调度吧! 一.进程调度基础 1.1 进程调度定义 进程调度是操作系统进程管理的一个重要组成部分,其任务是选择下一个要运行的进程. 1.2 进程调度目标 首先,一般的程序任务分为三种:CPU计算密集型.IO密

linux学习之路之磁盘管理和文件系统三

ext3文件系统和ext2文件系统的区别? 在某些时候,某个用户在linux系统上写入数据,这时系统正好断电或者系统核心出现错误,写入的数据仅有inode table和datablock而已,可能会导致之前写过的数据没有保存在磁盘上.而当系统重启后,系统可能会对没有保存的数据进行数据恢复.但是,由于系统并不知道是哪个文件不完整,因此会遍历整个文件系统中inode,来查看block是否完整.不过,当某个文件的数据太大时,数据的恢复时间可能会比较长,而这对于服务器来说是不利的.所以在这种情况下,也就