南京大学 计算机科学与技术系 计算机系统基础 课程实验 2018
实验前阅读
最新消息(请每天至少关注一次)
- 2019/05/03
- ics2019 PA讲义见这里
- 2018/12/16
- PA4和PA5已发布
- 2018/12/12
- 由于i386手册的印刷错误较多, 一定程度上影响理解, 我们在github上开放了一个repo, 欢迎大家贡献修改建议.
- 2018/12/08
- PA4.1和PA4.2已发布
- 2018/11/25
- PA3已全部发布
- 2018/11/03
- PA3.1和PA3.2已发布
- 2018/10/09
- 我们修复了docker中运行native程序时
mmap
失败的问题, 详细信息请见这里. 如果你在此时间之前创建container, 请手动运行以下命令修复该bug:
- 我们修复了docker中运行native程序时
docker stop ics-vm
docker commit ics-vm ics-image:fix-mmap
docker rm ics-vm
docker create --name=ics-vm -p 20022:22 --tmpfs /dev/shm:exec --privileged=true ics-image:fix-mmap
docker start ics-vm
- 2018/10/04
- PA2已全部发布
- 2018/10/03
- PA2.2已发布
- 2018/09/22
- PA2.1已发布
- 2018/09/12
- PA1已全部发布, 提交填写的task请见这里
- 2018/09/09
- PA1.1已发布
- 框架代码已发布
- 我们在2018/09/09 10:28修复了如下bug. 如果你在此时间之前获得源代码, 请手动修复该bug; 如果你在此时间之后获得源代码, 你不需要进行额外的操作.
--- Makefile
+++ Makefile
@@ -12,3 +12,3 @@
submit: clean
git gc
- STUID=$(STUID) STUNAME=$(STDNAME) bash -c "$$(curl -s http://moon.nju.edu.cn/people/yyjiang/teach/submit.sh)"
+ STUID=$(STUID) STUNAME=$(STUNAME) bash -c "$$(curl -s http://moon.nju.edu.cn/people/yyjiang/teach/submit.sh)"
- 2018/09/04
- PA0已发布, 请大家按照讲义内容安装系统, 并注意截止时间
框架代码未发布, 请保持关注
- 2018/03/12
本讲义目前处于测试阶段, 在2018年秋季学期开始前, 将被视为往届讲义材料. 如果你是修读2018年秋季ICS课程的学生, 请勿使用本讲义代替2018年秋季ICS课程的PA实验讲义, 提交本实验内容将被视为没有提交.
如何求助
- 实验前请先仔细阅读本页面以及为什么要学习计算机系统基础.
- 如果你在实验过程中遇到了困难, 并打算向我们寻求帮助, 请先阅读提问的智慧这篇文章.
- 如果你发现了实验讲义和材料的错误或者对实验内容有疑问或建议, 请通过邮件的方式联系余子濠(zihaoyu.x#gmail.com)
小百合系版"有像我一样不会写代码的cser么?"回复节选
- 我们都是活生生的人, 从小就被不由自主地教导用最小的付出获得最大的得到, 经常会忘记我们究竟要的是什么. 我承认我完美主义, 但我想每个人心中都有那一份求知的渴望和对真理的向往, "大学"的灵魂也就在于超越世俗, 超越时代的纯真和理想 -- 我们不是要讨好企业的毕业生, 而是要寻找改变世界的力量. -- jyy
- 教育除了知识的记忆之外, 更本质的是能力的训练, 即所谓的training. 而但凡training就必须克服一定的难度, 否则你就是在做重复劳动, 能力也不会有改变. 如果遇到难度就选择退缩, 或者让别人来替你克服本该由你自己克服的难度, 等于是自动放弃了获得training的机会, 而这其实是大学专业教育最宝贵的部分. -- etone
- 这种"只要不影响我现在survive, 就不要紧"的想法其实非常的利己和短视: 你在专业上的技不如人, 迟早有一天会找上来, 会影响到你个人职业生涯的长远的发展; 更严重的是, 这些以得过且过的态度来对待自己专业的学生, 他们的survive其实是以透支南大教育的信誉为代价的 -- 如果我们一定比例的毕业生都是这种情况, 那么过不了多久, 不但那些混到毕业的学生也没那么容易survive了, 而且那些真正自己刻苦努力的学生, 他们的前途也会受到影响. -- etone
实验方案
理解"程序如何在计算机上运行"的根本途径是从"零"开始实现一个完整的计算机系统.
南京大学计算机科学与技术系计算机系统基础
课程的小型项目
(Programming Assignment, PA)将提出x86架构的一个教学版子集n86,
指导学生实现一个功能完备的n86模拟器NEMU(NJU EMUlator),
最终在NEMU上运行游戏"仙剑奇侠传", 来让学生探究"程序在计算机上运行"的基本原理.
NEMU受到了QEMU的启发, 并去除了大量与课程内容差异较大的部分.
PA包括一个准备实验(配置实验环境)以及5部分连贯的实验内容:
- 简易调试器
- 冯诺依曼计算机系统
- 批处理系统
- 分时多任务
- 程序性能优化
实验环境
- CPU架构: x64
- 操作系统: GNU/Linux
- 编译器: GCC
- 编程语言: C语言
如何获得帮助
在学习和实验的过程中, 你会遇到大量的问题. 除了参考课本内容之外, 你需要掌握如何获取其它参考资料.
但在此之前, 你需要适应查阅英文资料. 和以往程序设计课上遇到的问题不同, 你会发现你不太容易搜索到相关的中文资料. 回顾计算机科学层次抽象图, 计算机系统基础处于程序设计的下层. 这意味着, 懂系统基础的人不如懂程序设计的人多, 相应地, 系统基础的中文资料也会比程序设计的中文资料少.
如何适应查阅英文资料? 方法是尝试并坚持查阅英文资料.
搜索引擎, 百科和问答网站
为了查找英文资料, 你应该使用下表中推荐的网站:
搜索引擎 | 百科 | 问答网站 | |
---|---|---|---|
推荐使用 | 这里有google搜索镜像 | http://en.wikipedia.org | http://stackoverflow.com |
不推荐使用 |
一些说明:
- 一般来说, 百度对英文关键词的处理能力比不上Google.
- 通常来说, 英文维基百科比中文维基百科和百度百科包含更丰富的内容.
为了说明为什么要使用英文维基百科, 请你对比词条
前束范式
分别在百度百科, 中文维基百科和英文维基百科中的内容. - stackoverflow是一个程序设计领域的问答网站, 里面除了技术性的问题(What is ":-!!" in C code?)之外, 也有一些学术性(Is there a regular expression to detect a valid regular expression?) 和一些有趣的问题(What is the “-->” operator in C++?).
官方手册
官方手册包含了查找对象的所有信息, 关于查找对象的一切问题都可以在官方手册中找到答案. 通常官方手册的内容十分详细, 在短时间内通读一遍基本上不太可能, 因此你需要懂得"如何使用目录来定位你所关心的问题". 如果你希望寻找一些用于快速入门的例子, 你应该使用搜索引擎.
这里列出一些本课程中可能会用到的手册:
- Intel 80386 Programmer's Reference Manual(PDF)(HTML)(人手一本的i386手册)
- System V ABI for i386
- C99 Standard
- GCC 6.3.0 Manual
- GDB User Manual
- GNU Make Manual
- On-line Manual Pager (即man, 这里有一个入门教程)
GNU/Linux入门教程
jyy为我们准备了一个GNU/Linux入门教程, 如果你是第一次使用GNU/Linux, 请阅读这里.
许可协议
本作品采用知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆
许可协议进行许可.
要查看该许可协议, 可访问这里,
或者写信到 Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.