实验文档 概述 这次实验主要实现Lazy allocation的功能,即进程在动态分配内存的时候先不分配,等到要用到发生缺页中断的时候再实际分配,核心是实现缺页中断的处理。xv6的文档介绍了三种缺页中断的应用,第一为Copy on write,即fork的时候先不复制内存,等到要用到发生 ...
实验文档 概述 这次实验要求实现Linux中的mmap函数的一个子集,相当于在第五次实验Lazy Allocation中加上了文件的操作。难度比较难定义,因为这个 子集 还是比较模糊的,如果仅仅只针对测试程序,做出一些简化性的假设,难度就不会太大,但如果不做这些假设,难度就会非常高。 内容 为了简化问题,首先做出一些假设: 调用mmap的参数length是页宽的倍数,调用munmap的参数addr ...
2021-01-13 10:07 0 576 推荐指数:
实验文档 概述 这次实验主要实现Lazy allocation的功能,即进程在动态分配内存的时候先不分配,等到要用到发生缺页中断的时候再实际分配,核心是实现缺页中断的处理。xv6的文档介绍了三种缺页中断的应用,第一为Copy on write,即fork的时候先不复制内存,等到要用到发生 ...
实验文档 概述 这次实验主要涉及多线程编程,和之前的实验不太一样,比较偏向于应用层面,除了任务一外都是在宿主机上编写多线程程序,应该是xv6不支持系统级的多线程。 内容 Uthread: switching between threads 这个任务要求对一个程序填空,这个程序在用户层面 ...
实验文档 概述 实验一主要涉及调用系统调用函数,这些系统调用函数基本都是符合POSIX规范的,和操作系统本身关系较小,在调试的时候也可以先把程序在外部的Linux下跑通然后再放进xv6中运行。 内容 sleep 基本没什么特别的内容,按说明的做就行了。 pingpong 涉及进程 ...
实验文档 概述 这次实验内容比较分散,总体来说难度不是太高。 内容 Backtrace 要求在内核中对程序的调用栈进行遍历,输出每一级调用的返回地址。首先我们分析Riscv的栈帧结构,查看call.asm中main函数的汇编代码: 栈是由高地址向低地址增长的,可见在进入函数时,会由 ...
实验文档 概述 这次实验主要涉及锁在内核的应用,没有用到什么特别的理论知识,但是编程的时候陷阱重重,要么资源竞争,要么死锁,和实验三差不多,非常考验耐心和细心。 内容 Memory allocator 这个任务要求给物理内存分配程序重新设计锁,使得等待锁时的阻塞尽量少。可以按CPU的数量 ...
实验文档 概述 这次实验主要实现网卡驱动的一部分,文档内容非常长,实际实验不算难,跟着hint就行,但还是需要对整体框架有一定的了解。 内容 发送函数: 这里有两个问题,第一是可不可以只保存一个mbuf,每次调用函数的时候就释放掉上一个mbuf,答案是不能,因为多进程的影响,可能有 ...
实验文档 概述 这次实验实现copy on write功能,和上次实验一样也是缺页中断的应用,但不同的是,这次实验涉及的物理内存和虚拟地址的操作要比上个实验多不少,因此难度也更大一些。 内容 首先是uvmcopy的部分,原来的操作是从老页表中获得虚拟地址对应的物理地址,创建一个新物理页 ...
实验文档 概述 这次实验涉及文件系统,重点是对inode节点的操作。 内容 Large files 这个任务主要目的是支持更大的文件。和内存映射类似,文件系统中也有一个类似“页表”的结构,每个文件(inode)都有自己的一个“页表”,维护自己文件占用的文件块。和内存不同的是,这个“页表 ...