没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
实验五实验记录
作者:卓达城
单位:华中科技大学集群网络与服务计算实验室
欢迎来信
()
开始本实验之前请使用 把代码合并。
本实验编程技巧不多,不想 ,用了很多很多技巧,好像是在卖弄什么似的,但是代码
量大和逻辑复杂,总的来说分成四大块,分别是服务器模块,用户模块还有底层模块和通
讯模块。
以下先按照底层模块,服务器模块(包含通讯模块),用户模块(包含通讯模块),四个
模块如何合作的顺序详细叙述。
底层模块(
磁盘结构:
这里我们不用管,是 !。
记录着磁盘的基本信息(魔数和总块数)和根目录文件。
"!记录这那些块可用那些不可用(已用或者未用)。
#" 结构可以表示文件或者目录,在 $ 里面目录是记录文件和目录信息的文件。
如果一个文件是目录的话,那么这个文件里面记录的是 #" 结构数组。
文件系统里面有两个概念,一个是实际块号,一个是文件块号,实际块号就是块在磁盘的
位置,也可以在服务器进程中转化为虚拟地址。文件块号是相对文件而言的,文件的第一
块块号为
磁盘
#" 结构解释:
#"这个里面又放着
% 个块号,其中
前 个没有用。
"! &"!'(
"!
"!
"!%
"!%
""!
一个 ) 是
) , 一 个 文
件 最 大 可 以
放 % 个
) , 所 以
一 个 文 件 最
大是 *
如果文件的大小小于 个 ),那么文件块号就放在 "! 记录的块里面,如果文件大于
个 ),那么文件的 个块以上的文件块号就放在 ""! 里面,""!) 是指向
一个块的,块里面放在块号的信息,这里要注意的是 ""!) 块的前十个块号是没有
用的,为什么作者要这样做,这是因为要保证文件最大是 *,$ 文件最大只能是 *。
服务器模块:
先看线性地址(虚拟地址)的分布情况
+,,,,
+ -./012.
+&
3#45.62
+
3&4-*27
+ ,,
3/.862
。
。
9:
堆栈等其它信息
-
-
!;"<=
! 是一个 #" 数组,具体在内存
那个位置不知道,由编译器决定,编译器应
该足够聪明不至于让它跟上面提到的地方重
复了。
这里为何要 ) 一个呢?
原因很简单,因为这里要用作页映射,是
进程通信需要的。
)
这里是用来接收客户
端进程发来的请求的
这一段是用来映射 >: 磁盘的,
每从磁盘读一块磁盘块,服务器
进程就会把它映射到这一段空间
中。(- 为单位)然后映射给
用户模块。
) 对应的地
址(-
) 对应的地
址(-
)% 对应的地
址(-
!
"!
+
这里最关键的结构式 #" 结构
其中 =( 是用来操作底层文件系统的,
= 是用来传到客户进程的,客户进程根据 = 的信息操作文件。
这段代码就是把 = 映射到 #45.62 以上的地址,以便进程之间的通讯,具体见服务器模块
的图。
用户模块:
+,,,,线性地址(物理地址)
+ -./012.
+& #45.12.
*
#&?215.
*
*
这里是用来存储映射过来的文
件 的 , 每 个 文 件 最 大 为 *
。
( 就 是 映 射 地 址 ) 一 共
*@>%A%*
其它信息
-
-
-
这里是用来存储 # 结构的。这
里一开始没有分配地址空间,只
是在用的时候才分配。通过使用
检查页表是否存在的方式判断是
否被分配或者使用。
+
这里最关键的结构式 #
用户进程通过 # 保存的信息实现相关的文件操作。(例如 是保存相关操作函数的指
针)
通信模块:
在 "B 中定义了一些通信的数据结构。
通过这些数据结构,服务器进程对底层文件系统进行相应的操作。
发送函数如下:
第一个参数是操作类型,第二个是要传递的参数,第三个就是 (服务器进程把 (
的 = 映射到这里),第四个就是权限。
四个模块的合作
大体上是:用户需要文件操作--->用户进程向服务器进程发出请求--->服务器进程操作底层
文件模块--->服务器进程向用户进程发出已经完成操作的信息,并把相关信息传递回去--->
用户进程获得相关文件。
底层文件用 le 结构操作,用户用 fd 结构,服务器用 OpenFile 把两者联系起来。
先从客户端进程开始(")
客户端:
第一个函数("
这个函数的作用就是打开一个文件并获得句柄。((
分配一个句柄3"
方框里面的内容是设置 , 将根据 这个参数对底层文件系统进行操作。
然后发送到服务器端。这里 #/.8=7.0 是告诉服务器进程要进行什么样的操作, 就是
这个操作需要的参数, 是地址,服务器进程进行完相关的处理之后就会把内容映射到
的地址中, 具体在哪里请看客户端模块的图。
现在进入 " 函数,代码如下(":
具体操作是向服务器进程发送该发送的数据C注意,这里的 "= 会循环发送,知道服务
器进程响应为止。
然后进入阻塞状态,"= 函数。
现在进入服务器模块:
第一个函数:=""!33
进入 =""! 函数,此函数的功能是初始化服务器进程。
剩余23页未读,继续阅读
资源评论
- 木薏米2013-03-21太老了,现在JOS又改了许多
- syusukf2014-02-08恩恩有些挑战没有做的,不过还可以
- qq_355581952017-12-20希望重新下载一次
- mumunihao1232013-01-04还不错,可惜有些挑战题没做
- huangleisam2014-04-18很有用的资源。作者写的很认真。
dachengzhuo
- 粉丝: 0
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功