
大家设计了NEMU和单周期处理器, 如何让它们运行程序?

A: 迭代改进
其他例子:
让大家设计一个简单的x86/Windows还是有点难 😂
但就连计算机技术, 也是迭代式发展的

可以看成一个强化的状态机
<input, output, move, next state>

图灵在1936年发表论文《论可计算数及其在可判定性问题上的应用》


如何应对?
如果程序只想计算, 计算机需要提供什么?
单周期处理器就可以满足程序的需求!
如果程序只想计算, 计算机需要提供什么?
在程序看来, 它需要什么样的运行时环境?
main(const char *args)halt()putch()
有了这些API, 程序就可以输出Hello World了!
如果程序想输入输出, 运行时环境需要提供什么?
ioe_read()和输出函数ioe_write()在x86-nemu上运行超级玛丽
第三期 “一生一芯”低配版超级玛丽
想进行中断/异常处理, 运行时环境需要提供什么?

kcontext()创建内核上下文yield()自陷操作ienabled()/iset()中断查询/设置

迈向现代计算机系统

protect()创建虚拟地址空间map()添加va到pa的映射关系ucontext()创建用户上下文
cpu_count()返回处理器数量cpu_current()返回当前处理器编号atomic_xchg()共享内存的原子交换KISS原则: 提供最少的API来实现现代计算机系统软件
失去: 真实系统中某些特性的支持
得到: 适合教学的简洁概念和实现
AM = 按照计算机发展史将计算机功能抽象地模块化的裸机运行时环境
AM = 按照计算机发展史将计算机功能抽象地模块化的裸机运行时环境
AM = 按照计算机发展史将计算机功能抽象地模块化的裸机运行时环境
printf(),
strcpy()等例如P大硕士的本科毕设(看时间应该是)成果(点此膜拜)

我们更希望提出可传承的实验方案, 帮助更多同学实现这一目标


| Project-N组件 | 说明 |
|---|---|
| Navy-apps | 应用程序集 |
| NCC | NJU C Compiler, C编译器 |
| Newlib | 嵌入式C库(从官方版本移植) |
| Nanos/Nanos-lite | NanJU OS, 操作系统/简化版 |
| Nexus-AM(旧名称) | 抽象计算机, 裸机运行时环境 |
| NEMU | NJU EMUlator, 全系统模拟器 |
| NPC | NJU Personal Computer, SoC |
| NOOP | NJU Out-of-Order Processor, 处理器 |
影响了 “一生一芯”(1/2/3), 香山(1/2), 龙芯杯(2)的流程

