PA通关--pa0
PA (Programming Assignment, PA)是南京大学计算机科学与技术系推出的计算机系统基础课程实验,也是一生一芯项目的必做实验。
本博客记录一下我自己完成pa的过程,将会展示代码并阐述自己的方案。
以下是PA的实验资料:
实验讲义:Introduction · GitBook (nju-projectn.github.io)
2023年秋季学期实验介绍:计算机系统基础习题课 (2023 秋季学期) (why.ink)
实验方案
理解”程序如何在计算机上运行”的根本途径是从”零”开始实现一个完整的计算机系统. 南京大学计算机科学与技术系计算机系统基础
课程的小型项目PA将提出x86/mips32/riscv32(64)架构相应的教学版子集, 指导学生实现一个经过简化但功能完备的x86/mips32/riscv32(64)模拟器NEMU(NJU EMUlator), 最终在NEMU上运行游戏”仙剑奇侠传”, 来让学生探究”程序在计算机上运行”的基本原理. NEMU受到了QEMU的启发, 并去除了大量与课程内容差异较大的部分. PA包括一个准备实验(配置实验环境)以及5部分连贯的实验内容:
- 图灵机与简易调试器
- 冯诺依曼计算机系统
- 批处理系统
- 分时多任务
- 程序性能优化
实验环境
- CPU架构: x64
- 操作系统: GNU/Linux
- 编译器: GCC
- 编程语言: C语言
PA zero:配置实验环境
一、 安装Ubuntu虚拟机
我使用的是VMware,Ubuntu版本为22.04.6
pa0教程很大一部分都是介绍虚拟机、Linux的配置和使用,例如更换国内源、检查网络、安装常用工具等,按照讲义来就好啦。
二、常用工具
vim、tmux、apt
三、克隆项目
如果只做pa,那么只需要通过以下git命令获得框架代码
1 | git clone -b 2023 git@github.com:NJU-ProjectN/ics-pa.git ics2023 |
如果是要准备一生一芯,那么需要通过以下命令获得整个一生一芯的框架代码
1 | git clone -b master git@github.com:OSCPU/ysyx-workbench.git |
然后进入master分支,通过脚本自动获得nemu和am的项目源代码
1 | git branch -m master |
以上脚本在自动下载源码的同时还会在~/.bashrc
中分别添加nemu和am两个项目所在目录的环境变量($NEMU_HOME
,$AM_HOME
)
所以需要通过source命令使环境变量生效
1 | source ~/.bashrc |
如果你参加”一生一芯”, 请通过git log tracer-ysyx
查看代码跟踪日志.
四、试运行nemu
克隆完成之后,进入nemu目录,首先通过make menuconfig
命令配置nemu
1 | make menuconfig |
进入配置页面后直接EXIT即可
然后通过make run
命令运行nemu
1 | make run |