大家设计了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)的流程
不过和北科大巨佬相比, 还有不少差距 😂