|东京大学版一生一芯:自制CPU,成功运行类Unix系统( 四 )
我们修复的一个有趣问题是缓存别名问题 。 GAIA CPU 选择了虚拟地址作为缓存索引 , 而非物理地址 。 这让 CPU 在查找缓存时能够跳过虚拟地址转译 。 但是 , 由于这样的设计 , 我们发现缓存之间会出现不一致问题 , 因为虚拟地址的多个缓存可以指向同一个物理地址 。 当一个虚拟地址的缓存更新之后 , 其它指向同一物理地址的虚拟地址的缓存却没有更新 。
这个漏洞很难在硬件层面上低成本地修复 , 所以为了解决它 , 我们为我们的 Xv6 引入了 Page Coloring 。 这会为每个缓存行引入「颜色」并重新分配页面 , 使得指向同一物理地址的虚拟地址总会有一样的颜色 。 这意味着指向同一物理地址的虚拟地址总是仅有一个缓存 。 这能让 Xv6 确保 GAIA 永远不会让多个缓存共用同一个物理地址 。
三月:Xv6 跑起来!
3 月 1 日 , Xv6 移植工作完成 。 现在 Xv6 已经运行在模拟器上了!
本文插图
娱乐少不了
一开始 , 移植 Xv6 是因为这很有趣 , 现在 Xv6 已经成功运行在模拟器上 , 那我们就要加把劲让它更有趣 。
首先 , Masayoshi 用大约 4 个小时做了一个小火车以及运行在 Xv6 上的 sl 命令 。
本文插图
Shohei 则想做一个扫雷游戏 。
本文插图
在这期间 , Yuichi 完成了 Group X 的 CPU 实现工作 。 真正的 CPU 的运行速度比模拟器快多了 , 这能让我们更轻松地玩耍和开发游戏 。 这时候 , 我们创建了一个非常高质量的应用:2048 。
本文插图
这个 2048 的质量很高 。 Yuichi 老是在玩 。 顺便提一句 , 这个 2048 使用的是 non-line buffering 输入 , 这是 Xv6 原本没有的功能 。 为了支持这一功能 , ioctl 被添加进来作为 read 和 write 之外的另一个 devsw 动作 , 另外还添加了用来控制 ICANON 和 echo 的与 termios 相关的新功能 。 因此 , 唯一能以如此高的完成度玩 2048 的 Xv6 就运行在 GAIA 上 。
另外 , 毕竟 Xv6 是由 Unix v6 启发的 , 因此我猜想 , 添加 gtty 和 stty 系统调用是更像 Unix v6 的方法 。 不过 , 因为 Xv6 没有 tty 的概念 , 所以我采用了 ioctl;而且事实上 Unix v7 就引入了 ioctl , 所以这与历史情况也接近 。
现在 , 更酷的是 , Keiichi 又为 Xv6-GAIA 做了一个小型汇编器 , Shohei 还做了一个 mini vi 。 想想看你能用这两个工具做什么 。
本文插图
本文插图
这就是基于 FPGA 的交互式编程!这是 CPU 实验的一个出色演示 , 因为其中一般不包括任何交互式程序 。
最棒的演示
CPU 实验实践课程的原始任务是「在自制 CPU 上运行给定的光线追踪程序」 。 现在我们的 CPU 上有操作系统了 , 你知道该怎么做了吗?我们决定在我们的 CPU 的 OS 上运行这个光线追踪程序 。 我们遇到了一些问题 , 但我们在最终展示前一个小时里成功解决了它们 。
本文插图
因此 , 我们做了我们这个系的学生开玩笑时说的话:在一个 CPU 上运行一个操作系统 , 然后再在上面运行光线追踪程序 。
来自 2020 年的回顾
这段故事发生在 2015 年 , 本文也是我自己的博文的翻新稿 。 尽管现在读来 , 我看到了当时自身技术经验的不足 , 但我们当时做的事情实在很激动人心 。
- 如今在破产边缘徘徊的拉夏贝尔|拉夏贝尔被野性消费,“中国版ZARA”起死回生?
- 新冠病毒是基因武器?英国大学权威发声:六成亚洲人很危险
- 创业之星获万元奖金,长清区举办首届十大大学生创业之星评选活动
- 编辑、排版 | 李小进来源:喀什中院...|公告 | 关于喀什冠维房地产开发有限公司破产清算一案申报债权的公告
- 中国版ZARA破产?数万人涌入拉夏贝尔直播间捡漏咋回事?
- 壹指阐|既有行业龙头又有一年六倍股,看化工大省的A股版图
- 富士山沉睡300年,可能随时爆发,专家:2小时或致东京瘫痪
- “中国版ZARA”被申请破产清算
- 环上海电力大学碳中和生态经济圈倡仪启动
- 拉夏贝尔被多位债权人申请破产清算,中国版Zara要“倒”了?