操作实验八:文件系统( 四 )


管道的读取过程和写入过程类似 。
(三) 练习2: 完成基于文件系统的执行程序机制的实现
改写proc.c中的函数和其他相关函数 , 实现基千文件系统的执行程序机制 。执行:make qemu 。如果能看看到sh用户程序的执行界面 , 则基本成功了 。如果在sh用户界面上可以执行”ls”,”hello”等其他放置在sfs文件系统中的其他执行程序 , 则可以认为本实验基本成功 。
1. 改写相关函数
在 Lab 7 的基础上进行修改 , 读 elf 文件变成从磁盘上读 , 而不是直接在内存中读 。
(1) 函数
在 proc.c 中 , 根据注释我们需要先初始化 fs 中的进程控制结构 , 即在函数中我们需要做—下修改 , 加上—句 proc->?lesp = NULL; 从而完成初始化 。—个文件需要在 VFS 中变为—个进程才能被执行 。
(2) 函数
主要修改第(3)部分 , 通过进行特定文件elf头读取;
其余的读取elf的部分不需要改变 , 因为elf的组成不变 。第3部分的将文件逐个段加载到内存中 , 这里要注意设置虚拟地址与物理地址之间的映射 。
2. 问题分析
请在实验报告中给出设计实现基千“UNIX的硬链接和软链接机制”的概要设方案 , 鼓励给出详细设计方案;
2.1. UNIX的硬链接和软链接机制:
简单的说连接就是可以指向文件系统中其他位置的一个快捷方式 , 它非常有用 , 可以避免键入很长的路径名或cd深入到多个文件夹中 , 用过系统桌面的程序图标其实就是一个快捷方式 , 大家也可以这么理解 , 不过两者却存在某些重大的差别 , 在unix中的连接形式分为两种 , 分别为硬链接和软链接 。
unix硬链接:
硬链接是一个目录条目 , 它指具有同一个i-node(硬盘上的物理位置)的另一个文件 。事实上只存在一个文件 , 指向硬盘上同一个物理数据的只有两虞多个目录条目 。
UNIX软链接:
UNIX软链接也称符号连接或 , 相当于系统中的快捷方式 。和硬链接不同的是 , 软链接是一个独立的文件 , 在硬件上有属于自己的i-node 。软链接只是一个文件 , 其中包含指向另一个文件的指针 。
2.2. 实现方案
观察到保存在磁盘上的 inode 信息均存在—个变量用千表示当前文件的被链接的计数 , 因而支持实现硬链接和软链接机制;
3. 运行结果
这是最后一次实验 , 因此将make qemu的结果大概都截取出来 , 并且再次分析lab1~lab8的运行结果;
首先 , 调用堆栈的变化过程如上图的ebp变化所示 , 这表明lab1中完成.c中函数的实现基本正确 。
因为这里我们将lab1中的每1秒会输出一次”100 ticks”的时钟中断处理的部分 , 即填写trap函数中处理时钟中断的部分给变成了后续所需要的检查进程的执行次数(或是定时器相关) , 因此不会像lab1那样输出ticks++;
说明lab1的软件启动过程基本正确;
接着 , 可以看到()、()、() !说明连续物理内存分配算法是正确实现了的与虚拟地址对应的页表项寻找完成、释放虚地址所在页以及映射的取消实现 。
说明lab2的物理内存管理基本正确;
其次 , 中间的()、()、() 的输出分别代表了lab3虚拟内存管理中的给未被映射的地址映射上物理页、补充完成基于FIFO的页面替换算法的实现;
说明lab3的虚拟内存管理基本正确;
()的输出说明lab4的分配并初始化一个进程控制块、为新创建的内核线程分配分配资源、函数的进程切换工作都正常实现 。