文件在用户看来是再熟悉不过的名字了。因为能够创建文件,把一些数据放在文件中。
文件系统包含了文件和目录。
目录用以组织文件,包含了文件的简要信息。放在外存。
在计算机中有许多不同的介质,而计算机把这些抽象成一个统一的逻辑单元,再映射到物理设备。
文件有很多不同的类型,比如:
1.文本文件:由行组成的文件。
2.二进制文件。
3.源文件。由子程序和函数构成。
一个文件有自己的属性:
1.文件名,identifier,类型,位置,大小,保护,时间。即最近访问时间,最近修改时间,文件创建时间。
这些文件属性都放在目录中。
文件有许多操作,比如创建,删除,重定位,读,写。
创建文件需要找到一个空的空间,在目录中创建一个条目,指向文件。
读:系统调用,控制读指针。
写:系统调用,控制写指针。
重定位:首先声明一点,读和写的指针是共用的,因此只需要把这个指针移动即可。
删除:释放文件空间并在目录中删除条目。
每次执行一个操作都要遍历目录,找到文件,但是这样速度很慢,因为目录在外存。
我们要对一个文件进行操作必须要显式地打开文件。
在操作系统中维护了一个open-file table,记录了打开的文件,以后每次操作,只需要索引这个表即可。
但是对于多进程,可能同时打开一个文件,因此操作系统维护了两级的表:一个进程单独一个表,操作系统维护一个系统表。
单个进程的表条目指向系统表。
对于多进程访问一个文件时,需要在文件表中置一个计数器,等到计数器为0时再删除条目。
当然对于多进程同时访问,可以用锁来解决同步问题。
专用锁:类似写者锁。一个进程访问一个文件,其他进程就不能访问。
共享锁:类似于读者锁。多进程可同时访问。
文件类型:
操作系统预先必须要声明支持哪些文件类型。
Windows通过加扩展名来声明类型。
Unix通过幻数在文件头部加声明类型。
每个文件类型都有自己特有的结构,因此如果操作系统支持文件类型过多,就会出现操作系统过于庞大。
磁盘的最小单元是块,因此一个块中可以放多个逻辑记录。一个文件由多个块组成。但是一个块可能会没放满,所以会出现内部碎片。
访问文件信息的第一步必须将他所在的块读入内存。
接下来就是不同的访问方法。
1.顺序访问
一条一条访问。
2.直接访问
因为文件的一条记录是固定长度的,因此可以利用公式快速计算出所要找的那个记录的位置。
相对块号:相对于文件的块号。即文件的第一个块为0.
对于目录,我们也要利用数据结构,这样就可以快速索引。
一个磁盘可能有多个文件系统。一个卷有相关信息。记录大小,名称等。
对于目录,我们如果要找到文件,必须要通过目录,如果create一个文件,就必须在目录中添加一个条目。
为了更好更快地访问文件,我们对于目录进行一些构造。
1.单层目录。
只能一个用户,并且每个目录的名字必须唯一。
2.双层目录。
第一层是MFD。一个record是一个用户。
一个用户对应一个单层目录。UFD。
缺点:不能多用户共享或多目录共享文件。
对于系统文件,我们需要定义一个特殊的用户目录。他包括所有系统文件,这个目录在其他目录都找不到的情况下会自动遍历。
3.树状目录。
禁止共享文件或目录。
就是树状的目录结构,内部有子目录和文件。通过一位来表示是目录还是文件。
对于删除目录,有两种解决方法:
1.如果这个目录有子目录或文件,则不能删。
2.Unix。删除目录的子目录和文件。
4.无环图目录。
允许共享。
实现共享的方法:
1.链接。一个指针指向一个文件。
2.复制目录条目。像其他目录条目一样。但是要维护一致性。
对于删除,也会出现问题。解决方案:
1.删除链接时,则不变,删除文件条目,则链接无效。
2.删除全部引用才删除。为每个文件建立一个引用计数器或文件引用表,当引用为空,则删除文件。
MS-DOS采用树状目录结构。
5.通用图目录。
可以存在环,会无限遍历。
解决方法:通过记录目录被访问次数来强制终止。
删除文件时,由于存在环而等不到引用计数为0,因此通过垃圾收集解决引用技术问题。
总结:为了避免过大开销,避免链接。
文件系统在使用前必须要mount,安装时要指明安装位置即安装点。然后操作系统要验证文件系统安装的有效性。再是如果mount在一个目录下,原来在这个目录下的子目录的文件就不能使用了。必须要将unmount新的文件系统才行。在pintos中,我一开始把虚拟机和windows的共享数据空间在Desktop,发现原来的Desktop的东西打不开了。。。慌了我半天。。
文件共享的三种实现方式:
1.人工传输。
2.远程登录。
3.浏览器。
对于文件共享,每个文件系统都有不同的语义,现在不只是多用户本地共享,也会有远程文件系统的共享。
对于多用户的文件共享问题,我们需要明确每个用户的文件访问权限。
拥有者需要有最高的权限。
组需要有权限的子集。
拥有者ID和组ID 保存在文件属性中。每次对文件进行操作都要比对。
1.在unix中,对于一个用户进行写操作,其他用户都会看到。
2.AFS中,对于一个用户写操作,以打开的用户不能看到其变化,只有等到写操作的用户关闭后再打开的用户才能看到变化。
3.一个文件只要被共享,就不能被修改。
计算机可能会遇到两个不安全问题:
1.物理损坏问题。通过备份解决。
2.访问。 通过访问控制解决。
对于一个文件,只要允许访问,就必定存在保护的问题,我们需要通过控制访问即控制用户的操作权限。
基本的操作在前面也讲过,比如读,写,执行,删除,添加,列出列表。对于高层的操作,比如复制,就可以用读来写出。让我想到了数据库。关系代数表达式的基本操作~选择,投影,并,笛卡儿积,差,重命名。其他高层的一些操作比如交,除,都可以用基本操作替代。
对于访问控制的最容易想到的解决方法是给每个文件加上一张表,称为访问控制表ACL。列出能够访问的用户名。但是这个方法的直观缺点就是长度问题。
解决方案就是精简访问列表:
1.拥有者:最高等级。
2.组:需要某种类似访问组成的组。
3.其他。
分享到:
相关推荐
1. 文件系统的基本概念:文件系统是操作系统用于管理存储设备上的数据的一种组织方式,它将数据组织成一系列文件,并提供了创建、删除、读取和写入文件的接口。 2. 主目录和子目录结构:在设计文件系统时,主目录和...
操作系统是计算机科学中的核心课程,它管理并控制计算机硬件资源,为...操作系统总结_引论.jpg和操作系统总结_引论.xmind文件可能包含了更详细的操作系统概念图和思维导图,可以辅助学习者进一步掌握和巩固这些知识。
首先,文件复制是操作系统中最基本的功能之一。在实验中,我们需要理解文件在操作系统中的表示方式,即文件系统。文件系统是操作系统用于组织、存储和检索文件的结构。常见的文件系统有FAT、NTFS、EXT系列等,它们...
操作系统的主要功能包括:进程管理、内存管理、设备管理、文件管理以及用户接口。这些功能确保了计算机系统的稳定性和效率。 用户接口是操作系统与用户交互的重要方式,分为命令行接口(CLI)和图形用户接口(GUI)...
Linux操作系统是计算机科学领域的重要组成部分,它是一种自由和开源的Unix-like操作系统。Linux的核心由Linus Torvalds创建,它的命名来源于开发者本人的名字。Linux不仅仅是一个操作系统内核,它还包括了GNU工具集...
总的来说,这个课程设计项目涵盖了操作系统中的关键概念,如文件系统、内存管理、I/O操作和用户接口设计,是一个全面锻炼学生操作系统知识的实践平台。通过这样的设计,学生不仅加深了对操作系统原理的理解,还增强...
文件系统提供了用户接口程序接口和图形接口。 ### 现代操作系统安全 现代操作系统安全包括网络功能、网络资源管理、数据通信管理和网络管理,以及支持多媒体应用。 ### 现代操作系统的网络功能 现代操作系统的...
从给定的代码片段和描述来看,这是一段模拟文件...通过这些基本元素和操作,可以模拟出一个简单的文件系统,帮助理解操作系统中文件系统的工作原理。对于深入学习操作系统和文件系统的设计与实现,这是一个很好的起点。
系统调用是操作系统为应用程序提供的接口,用于请求操作系统的服务,如创建进程、打开文件、分配内存等。它是用户空间和内核空间交互的主要方式,保证了应用程序对底层硬件的间接访问,增强了系统的安全性和稳定性。...
在Linux环境下,C语言编程经常被用于实现对文件系统的交互,因为C语言提供了丰富的系统调用接口,可以直接访问操作系统内核服务。 **设计目的与任务** 设计一个Linux下的文件操作程序的主要目的是让开发者更深入地...
根据给定的文件信息,我们可以总结出以下关于操作系统文件管理的知识点: ### 一、操作系统文件管理系统概述 在操作系统中,文件管理系统是负责管理和组织计算机文件的重要组成部分。它提供了用户与存储设备之间的...
### 操作系统接口设计知识点详解 #### 一、概述 本设计主要针对操作系统的基本命令接口进行设计与实现,旨在帮助学生深入理解操作系统的工作原理及其与用户之间的交互方式。设计采用C语言并结合DOS中断机制来模拟...
操作系统实验之文件系统模拟是计算机科学教育中的一个重要实践环节,主要目的是让学生深入理解文件系统的工作原理,以及如何在实际编程环境中实现这些原理。在这个实验中,我们使用了经典的C++集成开发环境Visual ...
这份"操作系统原理知识总结.zip"文件显然是为了帮助学习者深入理解操作系统的工作原理,并且特别适用于准备计算机四级考试和考研复习的人。以下是对这份资料可能包含的关键知识点的详细解释: 1. **进程管理**:...
总的来说,建立基于磁盘存储设备的FAT文件系统是一项综合性的任务,它涵盖了操作系统中的多个关键领域,包括文件管理、磁盘空间分配、目录结构以及用户接口设计。通过这样的实践,学生可以深化对操作系统和文件系统...
根据设计要求,需要实现一系列基于DOS命令行接口的功能,这些功能涵盖了操作系统常见的命令操作,如文件管理、路径更改、时间日期显示等。具体包括: 1. **命令解释器**:负责解析并执行用户输入的命令。 2. **列...
"计算机操作系统基本概念总结" 本文涵盖了计算机操作系统的基本概念,包括操作系统概述、进程管理、内存管理、文件管理和输入/输出(I/O)管理等。 一、操作系统概述 操作系统是指控制和管理整个计算机系统的硬件...
操作系统是计算机科学的基础核心课程,它负责管理计算机的硬件资源,提供给用户和应用程序一个友好的接口。在本次操作系统课程设计中,我们深入探讨了操作系统的基本概念、原理以及实际应用,通过实践操作来深化理解...
10. **操作系统的移植性**:理解操作系统内核和用户接口的层次结构,以及操作系统如何适应不同的硬件平台。 以上知识点是操作系统课程的核心内容,通过深入学习和理解,考生能够在问答题中展现出对操作系统全面的...