从0实现一个操作系统内核之启动篇

    一直在使用windows,很想知道双击桌面上的一个应用程序图标,到这个应用程序完全跑起来,这中间到底发生了什么。于是就开始学习windows内核,学了一段时间之后,又着手去学习linux内核,包括linux内核驱动程序的编写,个人感觉是写linux的驱动比写windows的驱动要简单一些,呵呵,纯属个人感觉。一不小心就扯远了。在学习了一段时间的操作系统理论和一些操作系统底层的相关知识后,渐渐的我不再满足于仅仅只会使用操作系统以及“懂”操作系统理论,我要从0编写一个操作系统内 核,让自己的计算机上跑着自己写的操作系统内核,那无疑是一件很令人自豪的事情,而且自己也会更加了解操作系统底层的运行机制,同时也让自己学到的理论有用武之地。抱着这个想法,我开始着手编写自己的内核。到现在已经过去了一年多的时间,当然中间因为一 些学业上的缘故,在编写代码的过程中也是断断续续,现在来看至少有一个内核的样子了,内存管理、进程管理、文件系统、系统调用等等都已实现。本打算以后花更多的时间来完善这个内核,但是我转念一想,应该会有很多人都有一个操作系统梦,至少程序员都有这样的梦吧(纯属个人猜测,呵呵)。于是打算以后把更多的时间花在写这个系列的博客上,一来是总结自己在这一年学到的知识,二来是给一些想写自己的内核的人一些帮助或者说一些提示,帮助他们少走弯路,因为我当初 是走了不少弯路的。

操作系统是硬件和应用程序之间的桥梁,既要管理着各种硬件(CPU,内存,硬盘,显卡、声卡等),也要为上层应用程序提供服务。举个例子,linux的内核架构是这样的

从0实现一个操作系统内核之启动篇_第1张图片

从上图中我们可以看到,操作系统内核主要是运行在内核空间,而应用程序主要是运行在用户空间,这种“隔离”使得应用程序无法直接操作硬件,保证了操作系统一定程度上的安全。我们还可以看到,内核主要是通过系统调用接口来为上层的应用程序提供服务的。

好了,这里再简单的介绍一下开发环境。

Ubuntu + gcc + nasm +as

我们自己写的内核是要在ubuntu上编译的,当然这里最好是32位的ubuntu,如果你已经安装了64位的ubuntu也没关系,我们的内核也能在64位的ubuntu上编译,只不过要简单的对Makefile做一些修改,具体修改方法见我后面的博客。

gcc是C编译器,nasm和as都是汇编器。

在终端输入gcc -v如果是类似下面的说明就安装好了

从0实现一个操作系统内核之启动篇_第2张图片


输入nasm -v如果是类似下面的说明就安装好了


如果不是则输入sudo apt-get install nasm进行安装即可


好了,我希望这一系列博客能帮助大家一步一步实现自己的OS内核。

详细教程见视频:http://www.duobei.com/course/1574348473

你可能感兴趣的:(一个操作系统内核的实现,操作系统,内核)