大家设计了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)的流程