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

proc文件系统的实现

实验名称:proc文件系统的实现 实验日期:2020年6月25日 班级:物联网183 姓名:刘董升 学号:1813061090 一.实验预习报告 1.实验相关知识的简述: 正式的 Linux 内核实现了 procfs,它是一个虚拟文件系统,通常被 mount(挂载) 到 /proc 目录上,通过虚拟文件和虚拟目录的方式提供访问系统参数的机会,所以有人称它为 “了解系统信息的一个窗口”。 这些虚拟的文件和目录并没有真实地存在在磁盘上,而是内核中各种数据的一种直观表示。虽然是虚拟的,但它们都可以通过标准的系统调用(open()、read() 等)访问 2.实验原理的预习情况: 如果要求你在 psinfo 之外再实现另一个结点,具体内容自选,那么你会实现一个给出什么信息的结点?为什么?

答:会实现meminfo、cpuinfo这些节点,分别对应的信息是系统内存信息和cpu的信息。 一次 read() 未必能读出所有的数据,需要继续 read(),直到把数据读空为止。而数次 read() 之间,进程的状态可能会发生变化。你认为后几次 read() 传给用户的数据,应该是变化后的,还是变化前的? + 如果是变化后的,那么用户得到的数据衔接部分是否会有混乱?如何防止混乱? + 如果是变化前的,那么该在什么样的情况下更新 psinfo 的内容?

答:后几次read()传递给用户的数据应该是变化前的,因为读完一部分数据之后,之前读取的进程状态信息可能已经发生了改变了,那么读给proc_buf缓冲区的内容还是读之前的,所以可能会导致读到的数据出现混乱(数据不正确?),要使得数据读的正确、不混乱,就要在读的时候让想要变化的进程先等待,等读完了数据放到了文件中以后,再唤醒要更新的进程。 3.实验注意事项: 二.实验报告 1.实验目的与要求: 掌握虚拟文件系统的实现原理; 实践文件、目录、文件系统等概念。 2.实验仪器或材料: oslab实验环境、Linux环境及语言。 3.实验原理: 在 Linux 0.11 上实现 procfs(proc 文件系统)内的 psinfo 结点。当读取此结点的内容时,可得到系统当前所有进程的状态信息。 4.实验过程及数据分析: 1.配置环境 image.png

2.在include/sys/stat.h文件中定义了几种文件类型和相应的测试宏: image.png

3.3.让mknod()支持新的文件类型,修改/fs/namei.c image.png

4.进程proc文件初始化,修改/init/main.c
image.png

image.png

5.编译内核
image.png

image.png

6.修改sys_read().首先在/fs/read_write.c中添加声明
image.png

image.png

7.创建/fs/proc.c文件实现上述的proc_read()函数,用于读取proc文件内容
image.png image.png

image.png

image.png

8.编译内核 image.png

9.输出cat命令,查看psinfo和hdinfo信息 image.png

最新评论
暂无评论~