原文筆記
本課程筆記操作系統 · 43 篇
Chap. 12 HW
1. 选择题与简答题
题目内容
- UNIX中的文件系统采用( )。
A 网状文件
B 记录式文件
C 索引文件
D 流式文件
- 设文件F1当前引用计数值为1,先建立F1的符号链接文件F2,再建立F1的硬链接文件F3,然后删除F1。此时,F2和F3的引用计数值分别是( )
A 0,1
B 1,2
C 1,1
D 2,1
- 对磁盘而言,输入输出操作的信息传送单位为 ( ) 。
A. 字符
B. 字
C. 块
D. 文件
- 计算机系统中,屏幕显示分辨率为640×480,若要存储一屏256彩色的图像,需要( )KB存储空间。
- 什么是文件的物理结构?有哪几种组织方式?
- 什么是文件的逻辑结构?有哪几种组织方式?
答案和讲解
1.1 UNIX中的文件系统采用什么?
答案:
UNIX/Linux 普通文件一般被看成连续的字节流,也就是 byte stream。
它不要求文件内部必须是一条条记录,也不要求文件内部必须有复杂的树形、网状结构。
所以 UNIX 文件的逻辑结构通常说成:
因此答案选:
1.2 符号链接、硬链接与引用计数
答案:
初始条件:
文件 当前引用计数为:
这说明目前只有目录项 指向该文件的 inode。
第一步:建立 的符号链接文件 。
符号链接,也叫软链接。
它本质上是一个新的特殊文件,文件内容保存的是目标路径名,例如保存“F1”这个路径。
所以建立符号链接不会让 的 inode 引用计数增加。
此时:
的引用计数仍为:
而 自己作为一个独立文件,也有自己的 inode,自己的引用计数为:
第二步:建立 的硬链接文件 。
硬链接会让新的目录项 直接指向 原来的 inode。
所以 和 实际上是同一个文件实体的两个名字。
此时原文件 inode 的引用计数从:
变成:
第三步:删除 。
删除 只是删除目录项 ,并不是立刻删除文件内容。
因为 仍然指向原来的 inode。
所以原 inode 的引用计数从:
变成:
因此:
对应的原文件 inode 引用计数为:
而 是符号链接文件,它本身没有被删除,所以它自己的引用计数仍为:
但是要注意: 保存的是路径 ,现在 被删了,所以 会变成悬空符号链接。
最终:
答案选:
1.3 磁盘输入输出操作的信息传送单位
答案:
磁盘 I/O 通常不是按字符传输,也不是按字传输,而是按块传输。
一个磁盘块通常包含多个字节,文件系统读写磁盘时,基本单位是:
也就是:
所以答案选:
1.4 640×480,256色图像需要多少KB?
答案:
屏幕分辨率为:
所以总像素数为:
256 色表示每个像素有 256 种可能颜色。
因为:
所以每个像素需要:
总存储空间为:
换算成 KB:
所以:
最终答案:
1.5 什么是文件的物理结构?有哪几种组织方式?
文件的物理结构是指文件在外存,也就是磁盘上的实际存放方式。
换句话说,它关心的是:
文件被分成哪些磁盘块?
这些磁盘块在磁盘上如何分布?
操作系统如何记录这些块的位置?
Stallings 第 12 章在 secondary storage management 中讲到,文件在二级存储上由一组 blocks 组成,操作系统或文件管理系统负责给文件分配这些块。
常见的文件物理组织方式主要有三种:
1. 连续分配 Contiguous Allocation
文件占用一组连续的磁盘块。
例如:
这些块连续存放同一个文件。
优点:
- 顺序访问速度快。
- 随机访问也方便。
- 文件分配表只需要记录起始块号和文件长度。
如果文件从块 开始,要访问第 块,则物理位置可以直接算:
缺点:
- 容易产生外部碎片。
- 文件增长困难。
- 创建文件时可能需要提前知道文件最大长度。
2. 链式分配 Chained Allocation
文件由多个磁盘块组成,每个块中保存指向下一个块的指针。
例如:
这些块不必连续。
优点:
- 不要求连续空间。
- 文件增长比较方便。
- 不容易产生外部碎片。
缺点:
- 随机访问效率低。
- 要访问第 块,必须从头沿链找。
- 指针损坏可能导致后续块丢失。
- 不符合局部性,连续读文件时可能在磁盘上跳来跳去。
3. 索引分配 Indexed Allocation
为每个文件建立一个索引块,索引块中保存该文件所有数据块的地址。
例如索引块中保存:
表示文件数据分别存放在这些磁盘块中。
优点:
- 支持直接访问。
- 支持顺序访问。
- 不要求文件块连续。
- 相比链式分配,随机访问效率更高。
缺点:
- 索引块本身需要额外空间。
- 小文件也可能有索引开销。
- 大文件可能需要多级索引。
Stallings 认为索引分配解决了连续分配和链式分配的许多问题,因此是很常见的文件分配方式。
1.6 什么是文件的逻辑结构?有哪几种组织方式?
文件的逻辑结构是指从用户或应用程序角度看到的文件内部组织方式。
它关心的是:
文件中的数据在逻辑上如何排列?
是字节流?
是一条条记录?
是否有索引?
是否按关键字顺序排列?
Stallings 将 file organization 定义为由访问方式决定的记录逻辑结构。
常见逻辑结构可以分两套说法。
国内教材常见分类
- 流式文件
文件被看作连续的字节流。
UNIX/Linux 普通文件就是典型例子。
- 记录式文件
文件由一条条记录组成。
例如学生信息文件、工资表文件、成绩表文件。
记录式文件还可以分为:
定长记录文件
变长记录文件
Stallings 第 12 章常见分类
Stallings 讲了五种基本 file organization:
- 堆文件 Pile
数据按照到达顺序直接加入文件。
特点:
- 结构最简单;
- 适合收集数据;
- 查找效率较低。
- 顺序文件 Sequential File
记录按某个关键字顺序排列。
例如按学号递增存放学生记录。
优点:
- 顺序处理效率高;
- 适合批处理。
缺点:
- 插入和删除不方便;
- 随机查找效率不够高。
- 索引顺序文件 Indexed Sequential File
既保留顺序文件的顺序结构,又建立索引。
优点:
- 可以顺序访问;
- 也可以通过索引较快查找。
- 索引文件 Indexed File
通过索引来访问记录。
适合需要频繁随机查找的场景。
- 直接文件或散列文件 Direct / Hashed File
通过散列函数根据关键字直接计算记录存放位置。
例如:
优点:
- 按关键字访问速度很快。
缺点:
- 可能有冲突;
- 不适合顺序遍历。
2. 文件增长时按 1、2、4、8... 块分配空间
题目内容
One scheme to avoid the problem of pre-allocation versus waste or lack of contiguity is to allocate portions of increasing size as the file grows. For example, begin with a portion size of one block, and double the portion size for each allocation. Consider a file of n records with a blocking factor of F, and suppose that a simple one-level index is used as a file allocation table.
a. Give an upper limit on the number of entries in the file allocation table as a function of F and n.
b. What is the maximum amount of the allocated file space that is unused at any time?
中文意思:
为了避免预分配造成浪费,或者文件块不连续的问题,可以随着文件增长,按越来越大的 portion 分配空间。
例如:
第一次分配 1 块;
第二次分配 2 块;
第三次分配 4 块;
第四次分配 8 块;
之后每次翻倍。
设文件有 条记录,阻塞因子为 ,即每个磁盘块可以存放 条记录。假设使用简单的一级索引作为文件分配表。
a. 求文件分配表中的索引项数量上限。
b. 任意时刻已经分配但未使用的文件空间最大是多少?
答案和讲解
2.a 文件分配表项数上限
阻塞因子 表示:
每个磁盘块可以存放:
条记录。
文件共有:
条记录。
所以需要的数据块数为:
这里 表示实际至少需要多少个磁盘块。
按题目规则,文件空间分配为:
第一次:
块。
第二次:
块。
第三次:
块。
第四次:
块。
第 次:
块。
前 次分配的总块数为:
这是等比数列,和为:
为了容纳文件,必须满足:
也就是:
移项:
两边取以 2 为底的对数:
所以文件分配表项数上限为:
2.b 最大未使用空间
已经分配但未使用的空间主要出现在刚刚分配一个新 portion 的时候。
因为每次新分配的 portion 都比前一次大一倍,所以最大的浪费发生在最后一次,也就是最大 portion 刚分配出来的时候。
如果文件共用了 个索引项,那么最后一次分配的 portion 大小是:
个块。
所以按块数计,最大未使用空间不超过:
其中:
如果换成记录容量:
如果认为“刚分配后马上写入一条记录”,那么最大未使用记录槽位约为:
另一种更精确的最终文件浪费
如果题目问的是“最终文件有 条记录时实际浪费多少”,则总分配块数为:
总分配记录容量为:
实际使用记录数为:
所以最终未使用记录槽位为:
但是本题问的是“at any time”的最大未使用空间,所以更常用答案是:
第 2 题最终答案
a.
b.
令:
最大未使用空间为:
或:
若刚写入触发分配的那条记录后再统计,则为:
3. 计算最后一个块未装满造成的空间浪费百分比
题目内容
Ignoring overhead for directories and file descriptors, consider a file system in which files are stored in blocks of 16K bytes. For each of the following file sizes, calculate the percentage of wasted file space due to incomplete filling of the last block: 41,600 bytes; 640,000 bytes; 4.064,000 bytes.
中文意思:
忽略目录和文件描述符开销,假设文件系统以 字节为一个块存储文件。对于下面三种文件大小,计算由于最后一个块未装满而造成的空间浪费百分比:
注意:题目中的 通常应理解为 字节。
答案和讲解
块大小为:
计算步骤:
- 需要块数:
- 实际分配空间:
- 浪费空间:
- 浪费百分比:
3.1 文件大小为
需要块数:
实际分配空间:
浪费空间:
浪费百分比:
答案:
3.2 文件大小为
需要块数:
实际分配空间:
浪费空间:
浪费百分比:
答案:
3.3 文件大小为
先算:
还剩:
所以需要再多一个块。
需要块数:
实际分配空间:
浪费空间:
浪费百分比:
答案:
第 3 题最终答案
:
:
:
4. 磁盘组柱面数、总存储量、平均等待时间
题目内容
某磁盘组有6片盘片,每片有两个记录面,存储区域内径为22cm,外径为33cm,道存储密度为40道/cm,内层位存储密度为400b/cm,转速为3000r/min(转/分),问共有多少柱面?盘组总存储量为多少?平均等待时间为多少?
答案和讲解
已知:
盘片数:
每片有两个记录面,所以记录面总数为:
存储区域内径:
存储区域外径:
道存储密度:
内层位存储密度:
转速:
4.1 共有多少柱面?
柱面数等于每个记录面上的磁道数。
注意题目给的是内径和外径,不是半径。
所以先求半径:
内半径:
外半径:
存储区域宽度:
道密度为:
所以每个记录面上的磁道数为:
因此柱面数为:
4.2 盘组总存储量
题目给的是内层位存储密度。
一般这种题按内层磁道容量作为每条磁道容量来算,因为外层磁道虽然周长更长,但通常为了保持统一格式,按内层容量确定每道容量。
内层磁道周长为:
内层位密度为:
所以每条磁道可存储位数为:
每个记录面有:
条磁道。
共有:
个记录面。
所以盘组总存储量为:
计算:
近似为:
换算为字节:
约等于:
如果按二进制 MiB 计算:
所以盘组总存储量为:
约为:
约为:
4.3 平均等待时间
这里的平均等待时间通常指平均旋转等待时间,也叫平均旋转延迟。
转速为:
换成每秒转数:
所以一圈时间为:
平均等待时间为半圈时间:
所以平均等待时间为:
第 4 题最终答案
柱面数:
盘组总存储量:
平均等待时间:
5. 多级索引文件最大长度
题目内容
设文件索引节点中有7个地址项,其中4个为直接地址索引,2个是一级间接地址索引,1个是二级间接地址索引,地址项大小为4B,若磁盘索引块和磁盘数据块大小均为1KB,求可表示的单个文件的最大长度。
答案和讲解
已知:
地址项总数:
直接地址索引:
一级间接地址索引:
二级间接地址索引:
地址项大小:
索引块大小:
数据块大小:
5.1 一个索引块能存放多少个地址项?
每个地址项大小为:
一个索引块大小为:
所以一个索引块能存放的地址项数量为:
也就是说,一个一级间接索引块可以指向:
个数据块。
5.2 直接地址索引能表示多少数据?
有 4 个直接地址项。
每个直接地址项直接指向 1 个数据块。
所以直接地址索引可以表示:
个数据块。
容量为:
5.3 一级间接地址索引能表示多少数据?
有 2 个一级间接地址项。
每个一级间接地址项指向一个索引块。
每个索引块中有:
个地址项。
每个地址项指向一个数据块。
所以一级间接索引可以表示的数据块数为:
容量为:
5.4 二级间接地址索引能表示多少数据?
二级间接结构是:
inode 中的二级间接地址项
指向一个一级索引块
这个一级索引块中的每个地址项又指向一个二级索引块
每个二级索引块再指向数据块
所以一个二级间接地址项可以表示的数据块数为:
容量为:
5.5 单个文件最大长度
总数据块数为:
计算:
所以最大文件长度为:
换算成字节:
换算成 MiB:
第 5 题最终答案
可表示的单个文件最大长度为:
也就是:
约等于:
6. UNIX/Linux 文件访问偏移 263168 字节处数据需要几次间接?
题目内容
一个UNIX/Linux文件,如果一个盘块的大小为1KB,每个盘块占4个字节,那么,若进程欲访问偏移为263168字节处的数据,需经过几次间接?
注意:
题目中的“每个盘块占4个字节”应理解为“每个盘块号/地址项占4个字节”。
答案和讲解
已知:
盘块大小:
每个盘块号,也就是每个地址项大小:
目标偏移量:
6.1 先求该偏移位于第几个逻辑块
逻辑块号从 0 开始编号。
目标逻辑块号为:
因为:
所以该偏移正好位于逻辑块:
的起始位置。
如果从 1 开始数,它就是第:
个数据块。
6.2 一个间接索引块可以存多少个块号?
一个索引块大小为:
每个块号大小为:
所以一个索引块可以存放块号数:
也就是说,一个一级间接索引块可以指向:
个数据块。
6.3 判断需要几次间接
UNIX/Linux inode 通常使用:
直接地址项
一级间接地址项
二级间接地址项
三级间接地址项
Stallings 中 UNIX inode 也采用 direct pointers 加 single、double、triple indirect pointers 的方式。
常见 UNIX/Linux inode 有 12 个直接块地址。
直接块覆盖逻辑块:
一级间接块可以再覆盖:
个数据块。
所以一级间接覆盖逻辑块:
因为:
目标逻辑块号为:
它落在:
范围内。
因此它只需要通过一级间接索引访问。
所以需要经过:
补充说明
即使某些传统 UNIX 使用 10 个直接块地址,结论仍然一样。
如果有 10 个直接块:
直接块覆盖:
一级间接覆盖:
目标逻辑块:
仍然在一级间接范围内。
所以答案依然是:
第 6 题最终答案
访问偏移:
对应逻辑块号:
需要经过:
也就是:
汇总答案
第 1 题
UNIX 文件系统采用:
F2 和 F3 的引用计数分别为:
磁盘 I/O 信息传送单位:
一屏 256 色图像存储空间:
文件物理结构:
常见方式:
文件逻辑结构:
常见方式:
第 2 题
a.
b.
令:
最大未使用空间为:
或:
第 3 题
:
:
:
第 4 题
柱面数:
总存储量:
平均等待时间:
第 5 题
最大文件长度:
也就是:
约为:
第 6 题
需要:
即: