NachOS实验报告(4个全)(8)

2019-03-22 21:44

? 实现多级目录后,添加、删除目录项要根据具体的路径,因此对树的遍历要有

深刻的理解。

3. 为了实现文件长度无限,要采取混合索引分配方式,必须对此概念有所了解。

⑵ 磁盘类Disk模拟了一个异步的磁盘.

a) 什么是同步/异步:

i) 同步: 所谓同步,就是在发出一个功能调用时,在没有得到结果之

前,该调用就不返回。

ii) 异步: 异步的概念和同步相对。当一个异步过程调用发出后,调用

者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者

b) 磁盘异步读写:

i) CPU发出读写请求,不需要等待执行完成. ii) 磁盘接收请求后自行完成读写操作. iii) CPU可自行执行其他事务.

vi) 磁盘读/写操作执行完毕后,通过中断,回调或其他方式通知CPU.

⑶ NachOS如何通过同步的文件读写函数模拟异步磁盘的?

a) Disk类本身是个回调对象,通过中断回调模拟磁盘读写完成后发回CPU的消息. b) 它接受一个回调对象作为读写操作执行后的事件通知.

⑷ 同步磁盘SynchDisk:

a) 通过信号量对异步的磁盘读写进行同步

b) 继承自回调对象,当异步磁盘读写完毕后进行回调 c) 每次磁盘读写完成后,信号量执行V操作. d) 每次发出读写请求后,信号量在P操作上等待.

⑸ 磁盘扇区:

a) 原始的磁盘读写操作是以扇区为单位的. b) NachOS中: i. SectorSize = 128 ii. SectorsPerTrack = 32 iii. NumTracks = 32 iv. NumSectors = (SectorsPerTrack * NumTracks) = 1024

⑹ NachOS文件格式:filehdr.h

a) 类FileHeader定义了文件头的格式. b) FileHeader的尺寸正好为一个扇区大小

c) 成员变量dataSectors中记录了该文件内容所在的扇区.

d) FetchFrom和WriteBack分别是从指定扇区读取文件头和向指定扇区写入文件头. e) 当前文件格式所支持的文件尺寸为:

(SectorSize – 2*sizeof(int))/sizeof(int)* SectorSize = 3840

NachOS的文件格式:

⑺ 类OpenFile描述一个文件:

a) 构造函数:从一个扇区中读出文件头. b) 读写函数ReadAt和WriteAt i. 计算待读写的内容在文件头dataSectors中的位置; ii. 读写取相应扇区的内容;

⑻ 文件系统中的两个特殊文件

a) freeMapFile: i. 此文件是一个位表(bitmap),用于标识磁盘中哪些扇区已被使用. ii. 此文件的文件头始终位于0号扇区. b) directoryFile: i. 此文件用于记录文件系统中各个文件的目录结构. ii. 此文件的文件头始终位于1号扇区.

⑼ 空闲表文件freeMapFile:

a) 类bitmap,按位标记. i. 在文件系统某,一位代表一个扇区. ii. Mark 将某位设置为1(标记某扇区被使用) iii. Clear 将某位设置为0(标记某扇区没有被使用) iv. Test 判断某位是否被置1(判断某扇区是否被使用) v. FindAndSet 寻找下一个为0的位设置为1(寻找空闲扇区) vi. NumClear 返回当前为0的位(查看磁盘剩余空间) vii. 持久位表: PersistentBitmap viii. 在Bitmap的基础上增加了向文件读写功能. ix. FetchFrom和WriteBack:分别用于从一个文件读取位表和将位表写入一个文

件. x. 写入的文件就是freeMapFile.

b) 目录文件directoryFile:

i) 用于记录各个文件信息和目录层次关系. ii) 类Directory用于描述这个这个目录文件.

iii) FetchFrom和WriteBack用于读取和写入此文件

⑽ DirectoryEntry用于表示一个文件

a) inUse 该实体是否被使用 b) Sector 文件头所在的扇区 c) Name 文件名

⑾ 类Directory用于记录文件目录

a) 这个类就是directoryFile.

b) 它对DirectoryEntry的组织是简单的顺序表.

c) 没有树形结构,并且文件个数也有限制(tableSize)

⑿ 文件系统如何整合工作的FileSystem:

a) 格式化: i. 在使用文件系统前,需要进行格式化:./nachos –f ii. 类FileSystem构造函数中,打开format标志进行格式化. b) 创建文件 c) 打开文件

d) 删除文件: i. ./nachos –r filename

⒀ 格式化步骤:

a) 创建PersistentBitmap对象代表磁盘空闲表, Directory对象代表磁盘目录结构. b) 创建freeMapFile和directoryFile文件 i. 创建freeMapFile和directoryFile的文件头. ii. 将freeMapFile和directoryFile所使用的固定文件头所在扇区(0号和1号)

在freemap中标记为1.

iii. 通过文件头中的Allocate函数分配文件尺寸(修改freemap和文件头的

dataSectors).

iv. 向磁盘写入文件头.

c) 将PersistentBitmap 和Directory 的内容写入freeMapFile和directoryFile

中: i. 利用OpenFile对象打开freeMapFile和directoryFile. 将PersistentBitmap 和Directory 写入这两个文件.

⒁ 创建文件的步骤:

a) 打开目录结构

b) 查找是否存在此文件,如果存在返回false

c) 打开空闲表,查找一个空闲的扇区,如果磁盘没有空间则返回false d) 根据名字和文件头扇区向目录结构中添加此文件的记录 e) 创建文件头,并通过Allocate函数和freemap分配文件空间 f) 将文件头写入先前取得的文件头扇区 g) 更新磁盘中的目录文件和空闲表文件

⒂ 打开文件:

a) 打开目录文件(directory->FetchFrom)

b) 查找目录中是否存在此文件(directory->Find)

c) 如果查找到此文件的文件头扇区编号,则通过OpenFile对象打开(new

OpenFile(sector))

⒃ 删除文件

a) 打开目录文件(directory->FetchFrom)

b) 查找目录中是否存在此文件(directory->Find) c) 根据查找到的文件头扇区打开文件头 d) 打开空闲表

e) 通过Deallocate函数修改空闲表中所有保存文件内容的扇区

(fileHdr->Deallocate(freeMap))

f) 将文件头扇区从空闲表中清零(freeMap->Clear(sector)) g) 从目录结构中删除此文件记录(directory->Remove(name)) h) 更新磁盘中的目录文件和空闲表文件

⒄ 文件系统的多线程访问机制:


NachOS实验报告(4个全)(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:《电子商务》2016年必修考试题目资料答案题库(最完全)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: