南京大学 计算机系统基础 课程实验 2022
PA0 - 世界诞生的前夜: 开发环境配置
使用 vimtutor
命令启动 vim
教程。
教程:GNU/Linux,Makefile,GDB,tmux,Git,Linux C编程一站式学习。
课程:The Missing Semester of Your CS Education。
其他:Visualizing Git Concepts with D3。
使用 apt-get install
经常遇到 “The following packages have unmet dependencies” 错误,原因是因为依赖的包和现有的包版本冲突,之前我都是手动 apt-get remove
,但是经常遇到该问题。STFW 之后,这里推荐的 aptitude
工具比较方便,发生冲突时会询问是否降级。(apt-get
,aptitude
,apt
的区别,是否有必要使用 aptitude
?讨论。)
使用 make
经常遇到 “No such file or directory” 之类缺失头文件的错误,目前是遇到两种情况。一种是缺失对应的包,直接 apt-get install
即可解决;另一种是有对应的包,但是当前项目中 .mk
文件配置的程序名称和现有名称不一致(例如,配置的是 llvm-config
,而现有的是 llvm-config-11
),修改 .mk
文件即可解决。
PA1 - 开天辟地的篇章: 最简单的计算机
手册:riscv-isa-manual,riscv-elf-psabi-doc,etc,NEMU ISA API。
可以在目标命令之前添加 time
命令,从而计算目标命令的执行时间。使用 make
命令的 -j
选项,可以启用多线程编译。make -j4
表示创建 4 个线程并行编译,具体创建多少个线程,可以根据 lscpu
命令查询得到的系统中的 CPU 数量来确定。使用 ccache
工具可以缓存目标文件,从而加速执行 make clean
之后,再次执行 make
的速度。
如何实现宏 IFDEF
和 MUXDEF
。其中 IFDEF
表示,如果定义了 CONFIG_DEVICE
宏,才会调用 init_device()
函数。而 MUXDEF
表示,如果定义了 CONFIG_TRACE
宏,则预处理结果为 ON
,否则预处理结果为 OFF
。
1 | IFDEF(CONFIG_DEVICE, init_device()); |
在 nemu/include/macro.h
文件中有如下定义:
1 | // macro concatenation |
我们可以使用如下代码进行测试,同时给出宏展开的步骤。需要注意的是,只有当 CONFIG_DEVICE
被定义为 0 或 1 时,才会执行函数调用。
1 |
|
1 | IFDEF(CONFIG_DEVICE, init_device()); |
南京大学 计算机系统基础 课程实验 2022
https://ligh0x74.github.io/2024/08/12/南京大学 计算机系统基础 课程实验 2022/