又一位纯手工打造CPU的牛人,并汇编实现类Unix系统,支持文件系统

本文主要是介绍又一位纯手工打造CPU的牛人,并汇编实现类Unix系统,支持文件系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

之前发过好几期这方面的展示,不同与FPGA的是这种系统化的设计能够让大家对这些东西有一个更加全面的认识。

1、纯手工打造CPU的那些牛人们,欣赏令人叹为观止的纯手工布线和高超技
http://www.armbbs.cn/forum.php?mod=viewthread&tid=25985

2、【自己动手搭建完整计算机系统】从数字逻辑基础,CPU设计,虚拟机实现,汇编器,编译器到操作系统设计一条龙
http://www.armbbs.cn/forum.php?mod=viewthread&tid=89124

3、为了帮助学生学习计算机架构和工作原理,布里斯托大学制作16位计算机平台,100多个
http://www.armbbs.cn/forum.php?mod=viewthread&tid=23367



硬件设计:

GR8CPU是在面包板上构建功能齐全的计算机。第一个版本GR8CPU Rev2拥有600多条电线,74个集成电路和79个LED灯。它是一个8位架构,考虑了简单性和处理能力。CPU可以访问256字节的RAM,已经为其编写了功能齐全的Tic-Tac-Toe游戏。

到目前为止,正在构建第二个GR8CPU Rev3。第一个CPU有很多有趣的工作要做:具有65536字节的内存,改进的算法和设计上更高的速度,该CPU是有史以来最复杂的面包板CPU。

 


最早效果:

 

RAM模块已完成
 

设计ALU
 

完成ALU设计:
 

视频卡设计
 

完成视频输出电路:
 

 
 

类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)可靠地防止进程退出后发生内存泄漏。

实现了动态内存管理后,开始文件系统的制作,实现从磁盘中加载文件:
 

视频展示,在视频中,大家可以看到gr8nix变得栩栩如生,它成功加载并运行了一个Shell程序,该程序又加载并运行了您想要的任何其他程序。

https://www.bilibili.com/video/BV1vX4y1V735/

首先,Exec负责加载程序并运行它们。Exec首先进行一些完整性检查:文件是否存在?它是程序文件吗?这是有效的吗?接下来,Exec通过检查每个节条目并将其偏移量添加到其长度中来查找可执行文件的长度。Exec找到的长度是这些计算出的最大长度。

此后,Exec调用thread_launch,这是一种用于准备启动线程的方法。Exec通过向过程中添加一些原始数据来完成:用户ID,指向分配的内存的指针,运行的命令行以及工作目录等等。

这篇关于又一位纯手工打造CPU的牛人,并汇编实现类Unix系统,支持文件系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/502598

相关文章

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

Java实现Excel与HTML互转

《Java实现Excel与HTML互转》Excel是一种电子表格格式,而HTM则是一种用于创建网页的标记语言,虽然两者在用途上存在差异,但有时我们需要将数据从一种格式转换为另一种格式,下面我们就来看看... Excel是一种电子表格格式,广泛用于数据处理和分析,而HTM则是一种用于创建网页的标记语言。虽然两

Java中Springboot集成Kafka实现消息发送和接收功能

《Java中Springboot集成Kafka实现消息发送和接收功能》Kafka是一个高吞吐量的分布式发布-订阅消息系统,主要用于处理大规模数据流,它由生产者、消费者、主题、分区和代理等组件构成,Ka... 目录一、Kafka 简介二、Kafka 功能三、POM依赖四、配置文件五、生产者六、消费者一、Kaf

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

使用Python实现在Word中添加或删除超链接

《使用Python实现在Word中添加或删除超链接》在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能,本文将为大家介绍一下Python如何实现在Word中添加或... 在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能。通过添加超

windos server2022里的DFS配置的实现

《windosserver2022里的DFS配置的实现》DFS是WindowsServer操作系统提供的一种功能,用于在多台服务器上集中管理共享文件夹和文件的分布式存储解决方案,本文就来介绍一下wi... 目录什么是DFS?优势:应用场景:DFS配置步骤什么是DFS?DFS指的是分布式文件系统(Distr

NFS实现多服务器文件的共享的方法步骤

《NFS实现多服务器文件的共享的方法步骤》NFS允许网络中的计算机之间共享资源,客户端可以透明地读写远端NFS服务器上的文件,本文就来介绍一下NFS实现多服务器文件的共享的方法步骤,感兴趣的可以了解一... 目录一、简介二、部署1、准备1、服务端和客户端:安装nfs-utils2、服务端:创建共享目录3、服

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是