408操作系统学习笔记——文件管理(一)

简介: 408操作系统学习笔记——文件管理

1.文件系统基础

1.1.文件系统的概念

1.1.1.文件的属性

文件具有如下的属性:

①文件名(面向用户):由用户决定一个文件的名字。同一目录下不允许有重名文件(用户根据文件名区分不同文件)

②标识符(面向系统):一个系统内各文件的标识符唯一(操作系统根据标识符区别不同文件)

可能有一种情况:C判和D盘中的存在某两个文件名相同的且类型相同的文件,这时候如果仅凭文件名操作系统无法区分这两个文件,因此,操作系统需要通过标识符区分不同文件

③类型:指明文件类型,操作系统可以根据类型的不同选择不同的软件将其打开(例如:pdf、exe、word等等)

④位置:文件的存放路径(面向用户),文件在外存中的地址(面向系统)

⑤大小:文件的具体大小

⑥保护信息:对文件进行保护的访问控制信息(操作系统对不同的用户进行分组,不同用户对不同文件的权限不同,例如:读/写)

⑦还有其他属性

1.1.2.文件内部的组织形式(文件的逻辑结构)

无结构文件:文件内部不再划分记录,没有明显的结构特性

991ea275cc614a438027af6861f6cd1e.png

4b617747982d4581b5390110768e5173.png

1.1.3.文件之间的组织形式63bd8008c3f649afade1f947b9833734.png

1.1.4.操作系统提供的功能

1.创建文件(create系统调用):创建新文件时,操作系统调用了create系统调用

2.读文件(read系统调用):例如打开.txt文件,需要经历以下操作

①操作系统默认打开.txt文件对应的应用程序记事本

②记事本通过操作系统提供的read系统调用将.txt文件从外存调入内存

3.写文件(write系统调用):例如将保存经过编辑的.txt文件,记事本通过操作系统提供的write系统调用将数据从内存写回外存(在此之前只是修改.txt文件在内存中的副本的数据)

4.删除文件(delete系统调用):删除文件时,操作系统调用了delete系统调用

5.打开文件(open系统调用):读/写文件开始前,操作系统文件需要调用open系统调用

6.关闭文件(close系统调用):读/写文件结束后,操作系统文件需要调用close系统调用

1.1.5.文件在外存的存储方式(文件的物理结构)

1.外存由若干存储单元组成,一个存储单元对应一个物理地址(与内存相同)

2.外存被分为一个个相同大小的物理块,操作系统需要将逻辑地址转换为物理地址,即物理块号,块内地址(与内存相同)

3.即使文件很小,依然占用一整个物理块(如:文件为1B,物理块为1KB,该文件需要占用1KB)

4.外存调入内存时,以块为单位174c940ff21f4d9191603ceb33fddb9e.png

1.2.文件的逻辑结构(面向用户,编程实现,与操作系统无关)

有结构文件分为:

①定长记录:每条记录的长度相同(所占用的空间相同)

②可变长记录:每条记录的长度不确定

1.2.1.顺序文件6fee5dc934d940b6a055b8d73ec705ae.png

1.可变长文件都不能实现随机存储:长度没有规律性

2.定长文件的顺序存储可以实现随机存储,在此基础上若采用顺序结构(按关键字排序),则可以实现快速检索(根据关键字快速找到对应记录)

3.顺序结构增加/删除一个记录比较困难(参考顺序表,需要进行大量移动),而串结构相对容易

1.2.2.索引文件

1.每个文件对应一个索引表,索引表项和记录一一对应

2.记录离散存放,索引表项连续存放

3.每个索引表项大小相等

5bc11a5a1b4a45c18de1ce472aba9130.png

1.2.3.索引顺序文件

1.通过一组记录对应一个索引表项的方式解决索引文件占用空间过大的问题(索引文件中,记录和索引表项一一对应,如果每条记录的大小远小于每条索引表项的大小,则空间利用率大大降低)

2.索引顺序文件是定长结构(每条索引项大小相同)的串记录(不按照关键字排序)的顺序文件(逻辑上相邻)26bde9196b6d41dbb3678db2f1feba9f.png

1.2.4.多级索引顺序文件

进一步提高检索效率

248e9f02bd924116b420808541b27998.pngb06bacc5f23e48a5abebaabf29bd6d7b.png

1.3.文件的物理结构(面向操作系统,底层实现,与用户无关)

1.磁盘块的大小和内存块、页面大小相同:方便外存和内存进行数据交换(以块为单位进行)

2.文件的逻辑地址可以表示为(逻辑块号,块内地址)。类似于进程的逻辑地址可以表示为(页号,页内地址)

3.操作系统为文件分配存储空间是以块为单位

4.用户使用逻辑地址操作文件,操作系统负责将逻辑地址转换为物理地址

5.顺序访问:访问文件的某个块需要从该文件的起始块按顺序访问到该块

直接访问:与顺序访问相对,可以直接对文件的某个块进行访问,不需要从第一个块开始

1.3.1.连续分配

1.逻辑上相邻的块物理上也相邻,并且保持这些块的相对顺序

2.操作系统通过目录项(FCB)中记录的起始块号和长度进行逻辑地址和物理地址的转换:物理块号 = 起始块号 + 逻辑块号(块内地址不需要转换)(需要检查是否逻辑块号是否合法,即逻辑块号是否大于等于长度)

3.优点:

①支持顺序访问和直接访问

连续分配的文件在顺序读/写时速度最快:磁盘的访问是基于磁头移动的,连续 分配即它们所占用的磁盘块物理上是相邻的,即在读/写时磁头所需移动距离最短

4.缺点:

①不方便扩展:若某个文件需要进行扩展,而它所占用的磁盘块紧挨着的若干个磁盘块都被其他文件所占满,即无法添加物理上相邻的新物理块,则会因此需要整体迁移到某个能够容纳扩展后该文件大小的地方

②存储空间利用率低,会产生难以利用的磁盘碎片:若新文件的大小大于磁盘中所剩余的每个单独空闲区的大小(类似外部碎片),则无法为该新文件分配空间;可以通过紧凑解决磁盘碎片,但是要付出时间代价

1.3.2.链接分配

1.采用离散分配方式,分为显式链接和隐式链接

2.隐式链接:

①FCB中记录起始块号和结束块号:从起始块号依次开始访问

②缺点:只支持顺序访问,不支持直接访问:只有读入该块,才能知道该块的下一个块是哪个块(读第i个块,需要进行i + 1次磁盘I/O)

③缺点:指针需要消耗存储空间

④优点:方便扩展(参考链式存储),不会有碎片问题,外存利用率高

467598270edb42dead687977c0ed79a5.png

3.显式链接:

1.文件中各块间的链接关系被记录在FAT中(每个文件的最后一个物理块在FAT中用特殊记号标识,例如-1等)

2.FCB中仅需记录起始块号(结束块号可由FAT得到)

3.一个磁盘仅需要一张FAT(FAT中可以记录该磁盘的所有物理块)

4.优点:

①方便文件扩展:直接修改表项就可以做到将新物理块分配给文件

②地址转换不需要访存,文件访问效率更高:开机时FAT读入内存,并常驻内存

③支持随机访问:根据起始块号查FAT表就可以得到该文件所占用的所有物理块的块号

④没有碎片问题,外存利用率高

5.缺点:FAT表需要占用一定存储空间。FAT的采用连续存储(指FAT这张表自身的存储方式)12392a37f3d84bc3abe5cda116aa200b.png

1.3.3.索引分配

1.采用离散分配的方式

2.一个文件对应一个索引表(区别于显式链接,一个磁盘对应一张FAT表),索引表中记录文件所占用的各个逻辑块所对应的物理块

3.索引块用于存放索引表(索引表自身也需要占用存储空间);数据块用于存放文件数据

4.索引表由若干索引项组成,索引项由逻辑块号和物理块号组成(物理块号即该逻辑块实际所占用的物理块,逻辑块号隐含,按顺序递增,类似数组)

5.FCB中记录索引块的块号

6.优点:

①支持随机访问:仅需找到该文件对应的索引块就可以指定该文件所占用的所有逻辑块和其所对应的物理块的映射关系

易于实现文件拓展:仅需为该文件的索引表增加一个索引表项,该索引表项对应所扩展的物理块

7.缺点:索引表自身需要占用一定存储空间14deff5c21824e9e8fccf7c720652a94.png

8.当文件过大,一个索引块放不下其对应的索引表时:

①链接方案:

(1)实现方式:将索引表拆分,为这个文件分配多个索引块,在每个索引块中使用一定空间存储指向下一个索引块的指针,FCB中依然只需要记录第一个索引块的块号

(2)只能实现顺序访问,不支持直接访问:只有将该索引块读入内存,才能知道下一个索引块在外存的位置

8fb60581dfdd4f4fa03d37e414983d42.png

②多级索引:建立多层索引表(类似多级页表)。解决链接方案中需要进行多次磁盘I/O

1.FCB中记录存放顶级索引表的索引块

2.各层索引表的大小不能超过一个物理块的大小(即每个物理块存放的索引项数量有限)

.文件最大长度的计算(每个物理块所能存放的最大索引项数量m相同,设采用n层索引):

文件最大长度 = m个n相乘 * 单个物理块的大小

4.磁盘I/O的次数(设采用2层索引):第一次I/O读取顶层索引表(索引块),第二次I/O读取二级索引表(索引块),第三次I/O读取目标数据块

即采用n层索引需要进行n次读索引块 + 1次读数据块,即n + 1次磁盘I/O9022efad0e4542f2a5ee91226097c771.png

③混合索引:解决当文件很小时,多级索引方式仍需要进行多次磁盘I/O

(1)文件最大长度的计算:分别计算每个索引方式所使用的物理块的大小,然后求和

(2)磁盘I/O次数:根据每种索引方式的特性,不同的索引方式所需要的磁盘I/O次数不同,但是在顶级索引表没有读入内存的情况下,都需要先进行一次磁盘I/O用于读取顶级索引表

e50f244bbd164e5a97a2cfc2f4bf3b07.png


21018d718d4e47948f5efbb34d429e9e.pngimage.png

1.4.文件的基本操作

1.创建文件:

image.png


2.删除文件:

image.png

3.打开文件:

fa06c4378e46443eb5b7f83bbdf62446.png

打开文件表分为进程打开文件表和系统打开文件表:

①系统打开文件表:一个系统只有一张系统打开文件表,记录正在被所有进程使用所有文件的信息(打开计数器用于记录当前有几个进程正在使用该文件)

②进程打开文件表:一个进程对应一张进程打开文件表,记录该进程使用的所有文件的信息。该表中将记录进程打开文件表中的某个文件在系统打开文件表中该文件的位置(读/写指针标记该进程对该文件读/写操作到哪个位置,不同进程的读写指针不同;访问权限标记该进程对该文件的使用权限,不同进程的访问权限不同)

819b97476fa2494584fa4e4a0d56385c.png4.关闭文件:

c248c91ad27b44809c8d0cb34004c388.png

5.读文件:

3062af4581064fd193ded5fd0afc0c24.png

6.写文件:607421af1705414188b01d2cb9c840ae.png

2dd1ca4db587462caca1b248591697e4.png

1.5.文件保护

1.口令保护

d484fe67aff14eabb32edb0c444fb59d.png

2.加密保护b20bcc5a18a24147ab17f88e6ea50790.png

3.访问控制:

①每个文件对应一个访问控制表

②如果某个用户不允许访问某个目录,则它也不允许访问该目录下的所有文件

dd974fb469c7438498fc5926a815a9d6.png

e7afe648dc574877809a7e9b9f520ea6.png

18899647579e41f68acd0aba7d5fc9b2.png


相关文章
|
3月前
|
存储 算法 Unix
操作系统(13)-----文件管理3
操作系统(13)-----文件管理
47 0
操作系统(13)-----文件管理3
|
3月前
|
存储 安全 Linux
操作系统(13)-----文件管理4
操作系统(13)-----文件管理
39 0
|
3月前
|
存储 索引 Windows
操作系统(13)-----文件管理2
操作系统(13)-----文件管理
51 0
|
3月前
|
存储 SQL 算法
操作系统(13)-----文件管理1
操作系统(13)-----文件管理
31 0
|
3月前
|
监控 Linux 调度
操作系统学习笔记(一)
在Linux中,使用`ps -aux | grep PID`来查看特定进程的状态,或者用`top`指令监控进程和内存。通过`cat 文件名 | grep 关键词`或`grep -i 关键词 文件名`搜索日志文件。`grep`是一个强大的文本搜索工具,支持多种参数,如`-i`忽略大小写,`-c`计数,`-f`从文件读取关键词。要临时更改主机名用`hostname 新主机名`,永久更改则用`hostnamectl set-hostname 新主机名`
29 0
|
3月前
|
消息中间件
操作系统学习笔记(二)
进程切换比线程切换更消耗资源,因为进程切换需保存更多上下文,包括地址空间、寄存器、栈和文件描述符等,还要刷新TLB。线程切换仅需切换硬件上下文和内核栈,上下文更小,所以开销低。进程间通信有多种方式,如匿名管道(父子进程间)、命名管道(无亲缘关系进程)、信号、消息队列、共享内存和信号量等。这些通信方法各有特点,适用于不同场景。例如,匿名管道是半双工的,有名管道允许任何进程通过路径通信,信号用于进程间的简单通知,消息队列支持随机查询和按类型读取,共享内存允许多进程共享数据,而信号量则用于同步和控制对共享资源的访问。
33 0
|
3月前
|
Ubuntu Unix Linux
Linux 学习笔记一: 常见操作系统相关概念
Linux 学习笔记一: 常见操作系统相关概念
Linux 学习笔记一: 常见操作系统相关概念
|
3月前
|
存储 算法 安全
|
3月前
|
缓存 算法 Linux
[操作系统] 文件管理
[操作系统] 文件管理
|
8月前
|
程序员 Linux
不愧是华为内部的“操作系统学习笔记”,一篇说细节,一篇讲哲学
当然重要,身为程序员的我们,那更应该深刻理解和掌握操作系统,虽然我们日常 CURD 的工作中,即使不熟悉它们,也不妨碍我们写代码,但是当出现问题时,没有这些基础知识,你是无厘头的,根本没有思路下手,这时候和别人差距就显现出来了,可以说是程序员之间的分水岭。