文章列表

# lab-0 实验总结 # 思考题 # Thinking 0.1 使用 cat Modified.txt ,观察它和第一次 add 之前的 status 一样吗,思考一 下为什么? 两者显然不同,第一次 add 之前并没有 Stage.txt 和 Modified.txt ,因此在 Untracked files 中没有它们 第一次 add 之前, README.txt 在工作区,但不在版本库中,因此显示 Untracked;第二次 README.txt 在版本库中已经有一个版本,但是工作区做了修改,因此显示 modified # Thinking...

# lab-1 实验总结 # 思考题 # Thinking 1.1 请查阅并给出前述 objdump 中使用的参数的含义。使用其它体系结构的编译器(如课程平台的 MIPS 交叉编译器)重复上述各步编译过程,观察并在 实验报告中提交相应的结果。 答案 下面的结果摘自 objdump --help -D, --disassemble-all Display assembler contents of all sections --disassemble=<sym> Display assembler contents from <sym>-S,...

# lab-2 实验总结 # 思考题解答 Thinking 2.1 请你根据上述说明,回答问题: 在我们编写的程序中,指针变量中存储的地址是虚拟地址还是物理地址? MIPS 汇编程序中 lw, sw 使用的是虚拟地址还是物理地址? 【答案】 指针变量中存储的是虚拟地址,因为程序需要编译成机器码由 CPU 发出访存请求,而 CPU 只能发出虚拟地址访问请求 MIPS 汇编程序中 lw, sw 使用的是也是虚拟地址,因为本质上还是 CPU 访存 Thinking 2.2 请从可重用性的角度,阐述用宏来实现链表的好处。 请你查看实验环境中的 /usr/include/sys/queue.h...

# lab-3 实验总结 # 实验思考题 # Thinking 3.1 思考 envid2env 函数: 为什么 envid2env 中需要判断 e->env_id != envid 的情况?如果没有这步判断会发生什么情况? 在判断前,我们是通过 e = &envs[ENVX(envid)]; 获取进程控制块的,这表明 e->env_id 一定与 envid 在低 10 位上相同,因为 ENVX(envid) 就是通过低 10 位的序号来访问 struct Env 结构体的。 但在 ASID...

# lab-4 实验总结 # 实验思考题 # Thinking 4.1 内核在保存现场的时候是如何避免破坏通用寄存器的? 系统陷入内核调用后可以直接从当时的 $a0−$a3 参数寄存器中得到用户调用 msyscall 留下的信息吗? 我们是怎么做到让 sys 开头的函数 “认为” 我们提供了和用户调用 msyscall 时同样的参数的? 内核处理系统调用的过程对 Trapframe 做了哪些更改?这种修改对应的用户态的变化是? 【答案】 保存现场时,k0 寄存器暂存了 sp 栈指针的值,k1 寄存器更新 sp 栈指针的值,除 k0、k1...

# lab-5 实验报告 # 实验思考题 # Thinking 5.1 查阅资料,了解 Linux/Unix 的 /proc 文件系统是什么?有什么作用? Windows 操作系统又是如何实现这些功能的?proc 文件系统这样的设计有什么好处和可以改进的地方? 答案 /proc 文件系统是一个虚拟文件系统,通过它可以使用一种新的方法在 Linux 内核空间和用户间之间进行通信。在 /proc...

# Lab 2-1 Exam 给出页面保护的概念,如果一个页面处于空闲状态,那么可以利用 page_protect(pp) 函数使得页面 pp 被保护,被保护的页面永远不能再次被 page_alloc 分配出去 同时实现 page_status_query(pp) 函数,支持查询页面 pp 是否处于保护状态 考察要点 struct Page 结构体的内容 空闲页面的链式管理方法 如何遍历 page_free_list ( LIST_FOREACH 的用法) page_alloc 分配空闲页面的工作原理 解答 首先我们考虑给 struct Page...

# Lab 3-1 Exam 题目大意是 Linux 系统在管理进程时,维护了一个软件 ASID,由硬件 ASID 和版本号组成,要求编写程序模拟使用软件 ASID 的情形下,进程建立时 ASID 的分配过程 考察点有 读懂一段资料的能力 根据流程图改写代码的能力(因为题目直接给出了一个详尽的流程图) 进程的创建过程,进程结构体中的内容 ASID 的概念和作用 首先按照题意,定义两个宏,从 env_asid 中获取硬件 ASID 和版本号,然后再 Env 结构体中增加 env_asid 字段 #define HARDWARE_ASID(env_asid) ((env_asid)...

# 这些文字写于 lab2-2-exam 结束后,旨在主要通过对 lab0 中 Linux 系统进阶操作和 lab2 中的 OS 内存管理图像的复习,对 lab2 课上两次测试失利进行总结,但是无论对谁而言,我相信以下内容一定可以提升你课上课下的做题与调试的舒适度,这些内容并不是按照 lab 的顺序组织的,所以可能稍显混乱 工具篇 当你在课上测试奋战,离考试结束还剩 30 分钟甚至更短,面对黑漆漆 Linux 的命令行,糟糕的网速,速度感人的机房电脑,不是太好使的机房键盘,你输入 :wq 退出 vim,输入 cd .. 回到主目录,再输入 make...

# P8:FPGA 实验 通过阅读本文,您肯定做不出 P8,本文也仅限于介绍很少一部分 P8 的思路以及实现 P8 作为 FPGA 实验,需要详细参考教程,本文仅供参考 P8 的主要内容是对 Verilog 搭建的 MIPS 微系统进行综合,并使其能够运行在 FPGA 上 课上课下会要求编写汇编代码实现一些功能 # 课下部分 坚持到最后感觉还是写点东西吧,这个系列最好不要半途而废,这里是 P8 的一些做法和提示,详细的等到有时间再慢慢写 首先是 P8 怎么做,P8 很范围很广,看起来很复杂,但是其实如果 P7 写的好,那么把乘除槽注释掉之后过综合不是问题,然后按照要求添加约束文件,换 IP...