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
2
3
git branch -m master
bash init.sh nemu
bash init.sh abstract-machine

以上脚本在自动下载源码的同时还会在~/.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