两个月学完《现代操作系统》(七)——第四章习题

两个月学完《现代操作系统》(七)——第四章习题

摘要:个人操作系统学习笔记

0x01写在前面

感觉这章还是蛮简单吧,不多说,直接莽。

0x02正文




1、这题就很送分了。/etc/passwd;/etc/./passwd;../../etc/passwd;./etc/passwd;etc/../etc/passwd;etc/passwd/../passwd
2、windows的方法是使用文件扩展名,每个扩展名跟一个文件类型相对于并且有对应的程序来处理对应的类型;第二章方法是记住那个程序创造了这个文件,然后运行那个文件就行
3、这些系统直接将程序加载到内存中并且从字0也就是魔数开始执行之,为了避免将文件头当做代码执行了,这些魔数中都包含了有BRANCH指令以及目标地址,以便不需要知道header的大小直接运行代买。
4、不是必须的。如果没有open函数的话,每一个read必须制定对应的文件的名字来打开它,系统必须为其抓取inode的值。问题会出现在将iNode返回到磁盘时,尽管会花费一定的时间,也很笨重,但这是可以在买有open的情况下实现的。
5、不需要,想从哪里读就从哪里读
6、前者修改的是原有文件的名称属性但是没有修改其他属性,并且不需要开辟一块新的磁盘空间;后者是开辟了一块新的磁盘空间并且修改时间啥的都被修改了。
7、文件的映射必须从页面的边界开始且在一个固定长度的页面范围中,每一个被映射的页面作为其自身的后备存储器;未被映射的内存使用一个临时文件或者部分作为其后备存储器
8、使用类似/usr/passwd这样的文件名就可以模拟了
9、增加一个额外的参数到read函数中,这个参数指向用户想读取的地址。这个方案有以下缺陷:1、每一个read函数的调用都多了一个额外的参数;2、需要用户一直跟踪文件指针在什么位置。
10、/usr/ast/x
11、被分配了没法被使用,这明显是内部碎片
12、a.只是单单这个块不能被读到了,其他块都能被读到;b.这个块之后的块都不能被读到;c.只有索引对应的块会失效
13、9ms来开始传输,2^13字节数据需要0.0977ms,总共9.0977ms,复制粘贴一共18.1954ms;8G磁盘一共2^20字节数据,一共需要5.3小时来处理
14、当然有用,这使得数据连贯从而能够更快进行访问
15、摄像机
16、
17、表格/索引和连续存储会更合适
18、后两者会更合适,同时表格/索引会对随机访问更为支持
19、There must be a way to signal that the address-block pointers hold data, rather than pointers. If there is a bit left over somewhere among the attributes, it can be used. This leaves all nine pointers for data. If the pointers are k bytes each, the stored file could be up to 9k bytes long. If no bit is left over among the attributes, the first disk address can hold an invalid address to mark the following bytes as data rather than pointers. In that case, the maximum file is 8k bytes.
20、Elinor是对的,在内存中同时存在两个inode是很不合理的,如果要进行写操作,则两个inode都要同时被修改,如果其中一个没有修改完成,写入磁盘时后写入者会覆盖前写入这。
21、硬链接不需要额外的硬盘空间,只需要在inode中记数就行;符号链接需要额外的空间来存放它所指向的文件的名字。符号链接可以指向其他机器的文件,而硬链接只能够指向本地的。
22、在硬链接中,单个inode指向所有硬链接文件的文件夹条目;而软连接中,一个新的inode会生成,这个inode指向原来的文件
23、块的大小为4k说明4T的硬盘中存在着2^30个块,这说明了每个块地址的大小可以为32位,这是最接近2^30的幂,32位为4字节,那么每个块中大概有1024个地址
24、位图需要B比特的数据大小;空闲链表需要DF比特的大小。当DF<B时,空闲链表需要更少的空间。在16位的情况下,很容易得到当F/B<1/16时,空闲链表需要的空间更少
25、a.1111111111110000;b.1000000111110000;c.1111111111111100;d.1111111000001100;26、这其实是可以恢复的,恢复算法会将列出所有文件所在的块,然后将其他部分作为一个空闲的块。在UNIX中,这可以通过扫描inode完成;在FAT文件系统中,这个问题不可能发生,因为根本没有空闲列表。就算有,也可以很轻松地通过扫描FAT中的空闲条目来完成
27、他的备份可能不会那么可靠,因为备份软件会跳过正在执行的程序在操作的数据
28、可以跟踪文件的修改时间,设定一个时间点,在这个时间后修改的程序就需要备份
29、在a和b中21号文件将不会被标志;c中不会有啥改变;d中21不会被标志
30、很多UNIX文件都是小文件,如果直接和其i节点放在同一个磁盘块中,可能就不需要访问其他磁盘块了;就算是大文件也是有好处的,以为文件数据就在附近。
31、因为某一些bug这可能会发生。修复:首先移除两个空闲位,然后获取一个空闲位,将这个有问题块的数据复制到那,最后指向这个块的一个文件要将指针指向我们复制的那个块中。
32、h*1ms+(1-h)*40ms
33、通写高速缓存更合适,因为写入缓存的数据同时写入硬件的数据,这样会确保数据及时写入,防止意外造成干扰。
34、学生的记录可以随便填写,ID也不一定是连续的,故不太合适
35、f1的(22,19)(19,15)(15,17)(17,21)(21,-1)f2(16,23)(23,14),(14,18),(18,20),(20,-1)
36、公式:平均寻道时间+旋转时间/2+(字节块大小/磁道上数据量大小)*旋转时间
37、50%,实际会比这个小吧,因为实际中有大文件也有小文件,这会使得存储更为有效率
38、间接地址可以包含1024个地址,加上十个直接地址,一共1034个地址,每个指向一个4kb的硬盘块,那么最大文件大小为4235264字节
39、所有文件的总长度不能超过磁盘。(我觉得这是句废话)
40、一个间接块包含1024个地址,一个二次间接块包含1024^2个地址,一个三次间接块包含1024^3个地址。算一下,文件最大可以为1074791434个块,大概有16.06GB那么大
41、directory for /
i-node for /usr
directory for /usr
i-node for /usr/ast
directory for /usr/ast
i-node for /usr/ast/courses
directory for /usr/ast/courses
i-node for /usr/ast/courses/os
directory for /usr/ast/courses/os
i-node for /usr/ast/courses/os/handout.t
42、优点:存储inode的时候不会有空间浪费;inode不会被用完;更少的磁盘操作需要采用
缺点:需要采用32位来存储inode了;文件合法性检查会变慢,因为需要查找整个磁盘;文件被设计能够同块数耦合的大小将不管作用因为inode
43-48略

0x03总结

文件系统还是蛮简单,希望后面在lab中能自己实现一个操作系统中的文件系统。


评论