2025 年操作系统大作业1.虚拟内存治理试验。在 Linux 环境下编写一个内核模块,分别实现如下几个函数:static void mtest_dump_vma_list(void):依次列出当前进程所占用的虚拟内存空间各段的读、写或执行权限。static void mtest_find_vma(unsigned long addr):查找出虚拟地址 addr 所在的 vma,并通过 printk 打印该段的起始地址、终止地址和段标志等信息。static void mtest_find_(unsigned long addr):找到虚拟地址 addr 对应的物理地址并打印。为了测试和使用以上函数,需要在内核模块的初始化函数中创立一个名为 mtest 的/proc 文件。mtest 文件绑定的写函数 mtest_write 允许用户程序写入一串字符串:假设写入的字符串是 listvma 则调用函数 mtest_dump_vma_list(void);假设写入的字符串是 findvma0xffffffff 则调用函数 mtest_find_vma(0xffffffff),字符串的后几个字符是传递给函数的参数;假设写入的字符串是 find0xffffffff 则调用函数 mtest_find_(0xffffffff),同样字符串的后几个字符是参数。试验要求:为了测试以上模块的正确性,需要编写一个小型的 test 应用程序,它翻开/proc/mtest 文件,并向其中写入字符串调用模块中的相关函数并给出相应的反响信息。学问储藏:虚拟存储空间治理的相关数据构造 vm_area_struct 和 mm_struct/proc 文件系统的相关学问内核模块的相关学问试验思路及过程:相关学问储藏:1.可以使用/proc 文件系统和 pmap 工具查看给定进程的内存空间和其中所包含的内存区域mmap 描述的该地址空间中的全部内存区域。内核使用内存描述符构造表示进程的地址空间,由构造体 mm_struct 构造体表示,定义在linux/sched.h 中,同时 linux 操作系统承受虚拟内存技术,全部进程之间以虚拟方式共享内存。进程地址空间由每个进程中的线性地址区组成,而且更为重要的特点是内核允许进程 使用该空间中的地址。通常状况况下,每个进程都有唯一的地址空间,而且进程地址空间之 间彼此互不相干。但是进程之间也可以选择共享地址空间,这样的进程就叫做线程。 Linux 供给了内存映射函数 mmap, 它把文件内容映射到一段内存上(准确说是虚拟内存上), 通过对这段内存的读取和修改, 实现对文件的读取和修改,2.unlikely 的作用就是告知编译器,ab)...