存放在某个磁盘上的文件系统,采用混合索引分配方式,其FCB中共有13个地址项,第0~9个地址项为直接地址,第10个地址项为一次间接地址,第11个地址项为二次间接地址,第12个地址项为三次间接地址。如果每个盘块的大小为512字节,若盘块号需要用3个字节来描述,而每个盘块最多存放170个盘块地址: (1)该文件系统允许文件的最大长度是多少? (2)将文件的字节偏移量5000、15000转换为物理块号和块内偏移量。 (3)假设文件的FCB已在内存,为了访问文件中某个位置的内容,最少需要访问几次磁盘,最多需要访问几次磁盘?(4)对某个长度为18000000字节的文件,它需要占用多少个盘块(包括间接地址块)?
时间: 2024-02-26 10:55:12 浏览: 382
基于 C 实现一个类似unix的文件系统【操作系统课程设计】
(1)该文件系统允许文件的最大长度:
- 直接地址项可以存放 10 个盘块地址,因此最多可以存放 10 * 512 = 5120 个字节的数据。
- 一级间接地址项可以存放 170 个盘块地址,因此最多可以存放 170 * 512 = 87040 个字节的数据。
- 二级间接地址项可以存放 170^2 个盘块地址,因此最多可以存放 170^2 * 512 = 14745600 个字节的数据。
- 三级间接地址项可以存放 170^3 个盘块地址,因此最多可以存放 170^3 * 512 = 2500477440 个字节的数据。
- 因此,该文件系统允许文件的最大长度为 2500477440 个字节。
(2)将文件的字节偏移量 5000 转换为物理块号和块内偏移量:
- 5000 字节在第 10 个直接地址块内,因此物理块号为该文件所在的盘块号加上 10,块内偏移量为 5000 mod 512 = 472。
将文件的字节偏移量 15000 转换为物理块号和块内偏移量:
- 15000 字节在第 29 个直接地址块内,因此物理块号为该文件所在的盘块号加上 29,块内偏移量为 15000 mod 512 = 208。
(3)假设文件的 FCB 已在内存,为了访问文件中某个位置的内容,最少需要访问 1 次磁盘,最多需要访问 4 次磁盘:
- 如果需要访问的位置在直接地址块内,只需要访问一次磁盘。
- 如果需要访问的位置在一次间接地址块内,需要先访问一次磁盘获取一级间接地址块的盘块号,再根据盘块号访问二级地址块,最后访问一次磁盘获取数据块。
- 如果需要访问的位置在二次间接地址块内,需要先访问一次磁盘获取一级间接地址块的盘块号,再根据盘块号访问二级间接地址块获取二级间接地址块的盘块号,再根据二级间接地址块的盘块号访问三级地址块,最后访问一次磁盘获取数据块。
- 如果需要访问的位置在三次间接地址块内,需要先访问一次磁盘获取一级间接地址块的盘块号,再根据盘块号访问二级间接地址块获取二级间接地址块的盘块号,再根据二级间接地址块的盘块号访问三级间接地址块获取三级间接地址块的盘块号,再根据三级间接地址块的盘块号访问数据块,最后访问一次磁盘。
(4)对某个长度为 18000000 字节的文件,它需要占用多少个盘块(包括间接地址块):
- 直接地址项可以存放 10 个盘块地址,因此可以存放 10 * 512 = 5120 个字节的数据。
- 一级间接地址项可以存放 170 个盘块地址,因此可以存放 170 * 512 = 87040 个字节的数据。
- 二级间接地址项可以存放 170^2 个盘块地址,因此可以存放 170^2 * 512 = 14745600 个字节的数据。
- 三级间接地址项可以存放 170^3 个盘块地址,因此可以存放 170^3 * 512 = 2500477440 个字节的数据。
- 因此,对于长度为 18000000 字节的文件,需要占用的盘块数量为:
- 直接地址块占用 10 个盘块。
- 一级间接地址块可以占用 170 个盘块,因此需要占用 ceil( (18000000 - 10 * 512) / (170 * 512) ) = 201 个一级间接地址块。
- 二级间接地址块可以占用 170^2 个盘块,因此需要占用 ceil( (18000000 - 10 * 512 - 201 * 170 * 512) / (170^2 * 512) ) = 19 个二级间接地址块。
- 三级间接地址块可以占用 170^3 个盘块,因此需要占用 ceil( (18000000 - 10 * 512 - 201 * 170 * 512 - 19 * 170^2 * 512) / (170^3 * 512) ) = 1 个三级间接地址块。
- 因此,对于长度为 18000000 字节的文件,需要占用的盘块数量为 10 + 201 + 19 + 1 = 231 个盘块。
阅读全文