纯手工打造CPU,汇编语言实现类Unix系统
共 1183字,需浏览 3分钟
· 2021-03-17
![](https://filescdn.proginn.com/48d507f0a239c4014cc60a018f0bba9b/9c859f5bad17da786b5fe416aac4a4d2.webp)
作者:安富莱电子
1
硬件设计
GR8CPU是在面包板上构建功能齐全的计算机。第一个版本GR8CPU Rev2拥有600多条电线,74个集成电路和79个LED灯。它是一个8位架构,考虑了简单性和处理能力。CPU可以访问256字节的RAM,已经为其编写了功能齐全的Tic-Tac-Toe游戏。
到目前为止,正在构建第二个GR8CPU Rev3。有很多有趣的工作要做:具有65536字节的内存,改进的算法和设计更高的速度,该CPU是有史以来最复杂的面包板CPU。
![](https://filescdn.proginn.com/9f03e3342e992d9094685f50169a0a79/3ad1c6212726320f16dc04d0228182ac.webp)
最早效果:
![](https://filescdn.proginn.com/961df74da1de6faa76607448115e12ff/54ce74fffdef6e8c1ae31c8ee8654219.webp)
RAM模块已完成:
![](https://filescdn.proginn.com/31d81233fe5bd32dce595220bfb14e55/bb92e2dd3a989035dcfcaae1128ed9f7.webp)
设计ALU:
![](https://filescdn.proginn.com/7fdad9a3affd60d769dcda6a0a6bc02b/5e4777c83cd98e759c691a137fe036b9.webp)
完成ALU设计:
![](https://filescdn.proginn.com/7dcc578dd8a3f32f2bcdeddb38ef2c91/a1c6ac6bd40851f01a3ca23cce244295.webp)
视频卡设计:
![](https://filescdn.proginn.com/6be27d550cbd0bf2e17fcca088f5c9cc/50f9e310ac98a107a7df0748805b7856.webp)
完成视频输出电路:
![](https://filescdn.proginn.com/9e47fd82d94ed773e8b03276c00c9f26/7fef2f27170a1de11ef771aa583f977d.webp)
![](https://filescdn.proginn.com/9e47fd82d94ed773e8b03276c00c9f26/7fef2f27170a1de11ef771aa583f977d.webp)
2
类Unix系统设计
GR8NIX是受Unix启发的操作系统,Unix是1970年代发布的简单多用户,多任务的操作系统。基于unix的思想的现代操作系统包括Linux, MacOS和Android等。GR8CPU Rev3用汇编语言编写,内核由2000行汇编实现,5KB代码:
(1)多线程支持32个并发线程。
(2)理论上不受限制的运行程序数量。
(3)动态内存分配,当前大小最大为8 KB。
(4)真正的程序执行与位置无关(动态应用程序加载)。
但是,GR8NIX并不完美,由于硬件限制,GR8NIX无法:
(1)保护内存免受进程侵害。
(2)从尝试运行无效指令中恢复。
(3)可靠地防止进程退出后发生内存泄漏。
实现了动态内存管理后,开始文件系统的制作,实现从磁盘中加载文件:
![](https://filescdn.proginn.com/b88b0b392224a38cf5bb20309c4738c1/59e0bdb1a97252b4d9f57750ea55c8cd.webp)
在视频展示中,大家可以看到gr8nix变得栩栩如生,它成功加载并运行了一个Shell程序,该程序又加载并运行了大家想要的任何其他程序。
首先,Exec负责加载程序并运行它们。Exec首先进行一些完整性检查:文件是否存在?它是程序文件吗?这是有效的吗?接下来,Exec通过检查每个条目并将其偏移量添加到其长度中来查找可执行文件的长度。Exec找到的长度是这些计算出的最大长度。
此后,Exec调用thread_launch,这是一种用于准备启动线程的方法。Exec通过向过程中添加一些原始数据来完成:用户ID,指向分配的内存指针,运行的命令行以及工作目录等等。
![](https://filescdn.proginn.com/afa23838eea1c48f0676d061021ed8ca/61eb2dd582187e8e4d0264859f018e8e.webp)
![](https://filescdn.proginn.com/3084b6abcb42178502298de74641a524/3deca920e031c5977d3199e08ba76546.webp)
![](https://filescdn.proginn.com/dde66c3b57f12fb0d4f07602d9f41915/7f2b7217319a9f712b2d282eb05397b3.webp)