
大家设计了NEMU, 如何让它们运行程序?

A: 迭代改进
其他例子:
不仅是这些具体的系统, 就连计算机技术本身, 也是迭代式发展的

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

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


ls
如何应对?
如果程序只想计算, 计算机需要提供什么?
NEMU就可以满足程序的需求!
在程序看来, 它需要什么样的运行时环境?
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 = 按照计算机发展史将计算机功能抽象地模块化的裸机运行时环境
_trm_init()函数_trm_init()调用main()main()返回后调用halt()
printf(),
strcpy()等南京大学也经历了这个过程
2017年1月和jyy讨论: 该有的都有了, 要不搞个大的?
听上去很酷, 但最大的两个挑战是
例如北科大某巨佬的本科毕设成果(点此膜拜)

教学上的目标: 提出可传承的实验方案, 帮助更多同学实现这一目标


| 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)的流程


不过和北科大巨佬相比, 还有不少差距 😂