1 Star 0 Fork 0

marvtao / Concordia

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
WTFPL

简介

  1. 了解计算机如何工作的必由之路

和所有打算自己实现一个操作系统的朋友一样,受Linux如何诞生的故事所激励,希望能全面了解计算机的硬件结构,就是被现有的操作系统所隐藏的各种细节,也希望弄明白一个操作系统到底是如何工作的。目前操作系统的架构以及设计实现也非常成熟,大部分学校的计算机系都开设操作系统课程,即使你没有自己实现操作系统,也能明白它如何实现内存和其他硬件资源的管理,进程调度,进程间通信,以及网络等等。你只要遵循所学到的知识,读源码,看教程,然后从一个汇编代码的bootloader写起,逐步加载一个用C写的内核镜像,包括虚拟内存管理,调度器,等等。目前大部分能够找到的homebrew操作系统源码,大概都遵循这个套路。

  1. 一个不同的汇编语言开发方式

汇编代码给人带来的直观感受是多达几千行形状又细又长的代码,其中大部分的指令是MOV,在内存地址之间搬运来搬运去,或者随随便便就可以跳转到某个位置。但事实上,汇编语言支持强大的宏,正确地使用宏可以极大地增强汇编代码的可读性,缩小代码量,并且实现模块化编程。只是由于高级语言和编译器技术很早就得到普及,因此在结合宏进行汇编语言开发的探索没有进行下去。

Concordia受到JonesForth这个项目的启发。它是一个Forth语言的实现,同时也是一个由x86汇编完成的项目。这个项目包含Forth的定义,以及实现对这个语言的解释器的设计细节,同时它也成功地向我们演示了在2010年应当如何用汇编语言做些事情。Concordia也做了同样的事,Concordia未必是一个成功的系统,甚至很可能不是一个能使用的系统,但是Concordia也希望能启发人重新思考汇编的开发。

这个开发方式的大体思路是,你不能直接上手去写汇编代码,而是要先围绕一系列基础的操作和数据结构构造出宏,然后使用这些宏来编程。很类似先写出一个底层的代码库,只是在这里这个代码库使用汇编语言实现的。

  1. Forth是什么以及为什么要用Forth

语言设计的层次,Forth是一个连接式语言(concatenative language),也就是说语言的语法要素通过前后连接而成,不像高级语言如C/Lisp有括号和引号等专门指示代码结构的语法要素,也就是说实际上Forth是顺序执行一系列的关键字。从语言实现的层次,Forth包含有一个可以不断扩充的关键字字典。关键字既可以对应到一段汇编代码,也可以对应到其它关键字的序列组合。

这样使得Forth所对应的汇编代码有些不同的特点。对于POSIX兼容的嵌套函数调用,每次调用函数之前,都先需要将所有寄存器中的内容压入栈中,调用结束后再弹出。然而在Forth所对应的系统,寄存器是全局的中转站,因此和POSIX正相反,是进入下一个子过程前时将结果保存至寄存器里,进入后再从寄存器中取回数据。

因此,Forth很类似一个可以使用汇编语言的最小运行时环境。如果说UNIX是一个庞大的C的运行时环境,它围绕着C提供了编译工具、系统不同层次访问各种资源的接口,那么Forth就是一个最小化的汇编语言的运行时环境。一个Forth提供了一个非常基础的汇编器,将汇编代码转化为机器指令序列后加载到内存中,然后通过Forth的关键字及关键字组合来调用它。

总之,这一切的目的并非是为了打造一个高效的或者易用的系统,而是为了使得计算机内的所有软硬件资源都能暴露给使用者。当然,风险自负。

  1. 阅读代码

很多描述性出现在注释中,你需要在阅读注释的同时阅读代码才能明白,可以从Main.S开始。.s后缀是*nix下汇编代码的后缀,你可能需要在编辑器中安装一个代码高亮插件。

  1. 编译和执行

这个项目是在OS X下开发的,因此使用了OS X的工具链。在OS X下的系统调用符合BSD规则。cc是BSD下的C编译器,其中整合了汇编器,因此接受AT&T风格的汇编代码。otool是BSD下的十六进制工具,你可以看到汇编后的二进制文件的分布,其中哪些是指令,哪些是数据。

由于OS X的系统和工具链都兼容BSD,这意味着你无法在Linux下直接使用这些代码。但是本项目服从WTFPL协议,意味着you just DO WHAT THE FUCK YOU WANT TO.

DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE Version 2, December 2004 Copyright (C) 2004 Sam Hocevar <sam@hocevar.net> Everyone is permitted to copy and distribute verbatim or modified copies of this license document, and changing it is allowed as long as the name is changed. DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. You just DO WHAT THE FUCK YOU WANT TO.

简介

暂无描述 展开 收起
WTFPL
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/marvintau/concordia.git
git@gitee.com:marvintau/concordia.git
marvintau
concordia
Concordia
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891