“操作系统实验”实验报告

proc文件系统的实现

实验名称:proc文件系统的实现

实验日期:2022年6月3日

班级:软嵌201

姓名:王威

学号:2030110750

一.实验目的

1.掌握虚拟文件系统的实现原理;

2.实践文件、目录、文件系统等概念。

二.实验环境

硬件环境是 IA-32(x86) 架构的 PC 机(在实验楼的环境中就是右侧的窗口),主要软件环境是 Bochs + gcc + 你最喜欢的编辑器 / IDE + 你最喜欢的操作系统 + Linux 0.11 源代码

三.实验内容

在 Linux 0.11 上实现 procfs(proc 文件系统)内的 psinfo 结点。当读取此结点的内容时,可得到系统当前所有进程的状态信息。

四.实验过程及数据记录

1.准备实验环境 tar -zxvf hit-oslab-linux-20110823.tar.gz
-C /home/shiyanlou/ 图片描述 2.增加新文件( include/sys/stat.h) 图片描述

3.修改sys_mknod函数( fs/namei.c) 图片描述 4.修改init函数(init/main.c),建立 / proc目录和目录下的结点 图片描述 图片描述 5.修改sys_read(fs/read_write.c )系统调用,使之能够读取proc类型文件 图片描述 图片描述 6.创建proc.c 图片描述 图片描述 图片描述 图片描述 图片描述 图片描述 6.修改Makefile(linux/fs/Makefile) 图片描述 图片描述

五.实验结果分析

cat /proc/psinfo 图片描述 cat /proc/hdinfo 图片描述 图片描述 1.如果要求你在 psinfo 之外再实现另一个结点,具体内容自选,那么你会实现一个给出什么信息的结点?为什么?

给出占用CPU时间最长的进程的名称信息,因为不知道他它是否满足我现在的需求

2.一次 read() 未必能读出所有的数据,需要继续 read(),直到把数据读空为止。而数次 read() 之间,进程的状态可能会发生变化。你认为后几次 read() 传给用户的数据,应该是变化后的,还是变化前的? + 如果是变化后的,那么用户得到的数据衔接部分是否会有混乱?如何防止混乱? + 如果是变化前的,那么该在什么样的情况下更新 psinfo 的内容?

几次传给用户的数据是变化后的。

按照目前的实现方法,如果在几次read之间进程状态发生变化,后几次传递给用户的是变化后的信息,那么可能会导致信息混乱。如果要防止混乱发生,可以考虑将取到的进程信息保存在硬盘的一个文件中,这样读取时只要该文件存在,就可以从文件中直接读取,而不是每次read都重新生成进程信息。

每一次数据读完后,立刻删除之后才能进行更新。这样应该可以保证前后的数据不混乱。

六.实验心得

结合网上学习,做这个实验就算不上太难。但只是做完了实验,还有许多知识点没有彻底理解,还有待提高。而且肯定还有更好的,更优的实验方法。

最新评论
暂无评论~