ICS2017 Programming Assignment
  • Introduction
  • PA0 - 世界诞生的前夜: 开发环境配置
    • Installing a GNU/Linux VM
    • First Exploration with GNU/Linux
    • Installing Tools
    • Configuring vim
    • More Exploration
    • Transferring Files between host and container
    • Acquiring Source Code for PAs
  • PA1 - 开天辟地的篇章: 最简单的计算机
    • 在开始愉快的PA之旅之前
    • 开天辟地的篇章
    • RTFSC
    • 基础设施
    • 表达式求值
    • 监视点
    • i386手册
  • PA2 - 简单复杂的机器: 冯诺依曼计算机系统
    • 不停计算的机器
    • RTFSC(2)
    • 程序, 运行时环境与AM
    • 基础设施(2)
    • 输入输出
  • PA3 - 穿越时空的旅程: 异常控制流
    • 更方便的运行时环境
    • 等级森严的制度
    • 穿越时空的旅程
    • 文件系统
    • 一切皆文件
  • PA4 - 虚实交错的魔法: 分时多任务
    • 虚实交错的魔法
    • 超越容量的界限
    • 分时多任务
    • 来自外部的声音
    • 编写不朽的传奇
  • PA5 - 从一到无穷大: 程序与性能
    • 浮点数的支持
    • 通往高速的次元
    • 天下武功唯快不破
  • 杂项
    • 为什么要学习计算机系统基础
    • 实验提交要求
    • Linux入门教程
    • man入门教程
    • git入门教程
    • i386手册指令集阅读指南
    • i386手册勘误
    • 指令执行例子
Powered by GitBook
On this page
  • 实验前阅读
  • 实验方案
  • 实验环境
  • 如何获得帮助
  • 搜索引擎, 百科和问答网站
  • 官方手册
  • GNU/Linux入门教程
  • 许可协议

Was this helpful?

Introduction

实验前阅读

最新消息 * 2018/12/25 * ics2018 PA讲义见[这里](https://nju-ics.gitbooks.io/ics2018-programming-assignment/content/) * 2017/12/04 * PA4每阶段的提交时间已经更新 * 2017/11/06 * PA3每阶段的提交时间已经更新 * 2017/10/09 * PA2每阶段的提交时间已经更新 * 2017/10/01 * 由于提交网站的校外域名正在进行维护, PA1截止日期延后到2017/10/08 23:59:59 * 2017/09/25 * 修复git无法跟踪nemu子项目之外的文件的bug. 请手动进行如下修改: ```diff --- nemu/Makefile.git +++ nemu/Makefile.git @@ -8,2 +8,2 @@ define git_commit - -@git add . -A --ignore-errors + -@git add .. -A --ignore-errors ``` * 2017/02/23 * ~~本讲义目前处于测试阶段, 在2017年秋季学期开始前, 将被视为往届讲义材料. 如果你是修读2017年秋季ICS课程的学生, 请勿使用本讲义代替2017年秋季ICS课程的PA实验讲义, 提交本实验内容将被视为没有提交.~~ --- * 实验前请先仔细阅读[本页面](.)以及[为什么要学习计算机系统基础](why.md). * 如果你在实验过程中遇到了困难, 并打算向我们寻求帮助, 请先阅读[提问的智慧](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md)这篇文章. * 如果你发现了实验讲义和材料的错误或者对实验内容有疑问或建议, 请通过邮件的方式联系余子濠(zihaoyu.x#gmail.com)

  • 我们都是活生生的人, 从小就被不由自主地教导用最小的付出获得最大的得到, 经常会忘记我们究竟要的是什么.

    我承认我完美主义, 但我想每个人心中都有那一份求知的渴望和对真理的向往,

    "大学"的灵魂也就在于超越世俗, 超越时代的纯真和理想

    -- 我们不是要讨好企业的毕业生, 而是要寻找改变世界的力量. -- jyy

  • 教育除了知识的记忆之外, 更本质的是能力的训练, 即所谓的training.

    而但凡training就必须克服一定的难度, 否则你就是在做重复劳动, 能力也不会有改变.

    如果遇到难度就选择退缩, 或者让别人来替你克服本该由你自己克服的难度,

    等于是自动放弃了获得training的机会, 而这其实是大学专业教育最宝贵的部分. -- etone

  • 这种"只要不影响我现在survive, 就不要紧"的想法其实非常的利己和短视:

    你在专业上的技不如人, 迟早有一天会找上来, 会影响到你个人职业生涯的长远的发展;

    更严重的是, 这些以得过且过的态度来对待自己专业的学生,

    他们的survive其实是以透支南大教育的信誉为代价的 -- 如果我们一定比例的毕业生都是这种情况,

    那么过不了多久, 不但那些混到毕业的学生也没那么容易survive了,

    而且那些真正自己刻苦努力的学生, 他们的前途也会受到影响. -- etone

实验方案

  • 简易调试器

  • 冯诺依曼计算机系统

  • 异常控制流

  • 分时多任务

  • 程序性能优化

实验环境

  • CPU架构: IA-32

  • 操作系统: GNU/Linux

  • 编译器: GCC

  • 编程语言: C语言

如何获得帮助

在学习和实验的过程中, 你会遇到大量的问题. 除了参考课本内容之外, 你需要掌握如何获取其它参考资料.

但在此之前, 你需要适应查阅英文资料. 和以往程序设计课上遇到的问题不同, 你会发现你不太容易搜索到相关的中文资料. 回顾计算机科学层次抽象图, 计算机系统基础处于程序设计的下层. 这意味着, 懂系统基础的人不如懂程序设计的人多, 相应地, 系统基础的中文资料也会比程序设计的中文资料少.

如何适应查阅英文资料? 方法是尝试并坚持查阅英文资料.

搜索引擎, 百科和问答网站

为了查找英文资料, 你应该使用下表中推荐的网站:

搜索引擎

百科

问答网站

推荐使用

不推荐使用

一些说明:

  • 一般来说, 百度对英文关键词的处理能力比不上Google.

  • 通常来说, 英文维基百科比中文维基百科和百度百科包含更丰富的内容.

官方手册

官方手册包含了查找对象的所有信息, 关于查找对象的一切问题都可以在官方手册中找到答案. 通常官方手册的内容十分详细, 在短时间内通读一遍基本上不太可能, 因此你需要懂得"如何使用目录来定位你所关心的问题". 如果你希望寻找一些用于快速入门的例子, 你应该使用搜索引擎.

这里列出一些本课程中可能会用到的手册:

GNU/Linux入门教程

许可协议

NextPA0 - 世界诞生的前夜: 开发环境配置

Last updated 6 years ago

Was this helpful?

理解"程序如何在计算机上运行"的根本途径是从"零"开始实现一个完整的计算机系统. 南京大学计算机科学与技术系计算机系统基础课程的小型项目 (Programming Assignment, PA)将提出x86架构的一个教学版子集n86, 指导学生实现一个功能完备的n86模拟器NEMU(NJU EMUlator), 最终在NEMU上运行游戏"仙剑奇侠传", 来让学生探究"程序在计算机上运行"的基本原理. NEMU受到了的启发, 并去除了大量与课程内容差异较大的部分. PA包括一个准备实验(配置实验环境)以及5部分连贯的实验内容:

和有google搜索镜像

为了说明为什么要使用英文维基百科, 请你对比词条 前束范式 分别在, 和中的内容.

stackoverflow是一个程序设计领域的问答网站, 里面除了技术性的问题()之外, 也有一些学术性()和一些有趣的问题().

(人手一本的i386手册)

On-line Manual Pager (即man, 有一个入门教程)

jyy为我们准备了一个GNU/Linux入门教程, 如果你是第一次使用GNU/Linux, 请阅读.

本作品采用知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行许可. 要查看该许可协议, 可访问, 或者写信到 Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.

QEMU
百度百科
中文维基百科
英文维基百科
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
GCC 6.3.0 Manual
GDB User Manual
GNU Make Manual
System V ABI for i386
这里
这里
这里
这里
这里
http://en.wikipedia.org
http://stackoverflow.com
http://www.baidu.com
http://baike.baidu.com
http://zhidao.baidu.com
http://bbs.csdn.net