从0实现一个操作系统内核之启动篇_gcc 写入系统自启动-程序员宅基地

技术标签: 操作系统  内核  一个操作系统内核的实现  

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

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


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

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

Ubuntu + gcc + nasm +as

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

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

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



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


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


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

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u011943221/article/details/45748817

智能推荐

ace_file_input 参数_ace_file_input 大小-程序员宅基地

文章浏览阅读4.9k次。a.fn.ace_file_input.defaults = { style: !1, no_file: "No File ...", no_icon: "fa fa-upload", btn_choose: "Choose", btn_change: "Change", icon_remove: "..._ace_file_input 大小

搞定Windows下的Hadoop环境安装_windows hadoop安装-程序员宅基地

文章浏览阅读288次。Hadoop集群肯定还是要在linux下使用好些,但是对于想尝鲜的开发者或者上层应用开发来说,在windows下搭建一个单节点的应用也是蛮有必要的,当然只作为开发测试环境。一、环境准备JDK安装 Hadoop安装包(官网下载) hadooponwindows-master(可使配置更简洁)二、安装配置1、以管理员身份解压Hadoop安装包,2、配置Hado..._windows hadoop安装

二分法和牛顿迭代实现开根号函数:OC的实现-程序员宅基地

文章浏览阅读121次。最近有人贴出BAT的面试题,题目链接。就是实现系统的开根号的操作,并且要求一定的误差,其实这类题就是两种方法,二分法和牛顿迭代,现在用OC的方法实现如下:第一:二分法实现-(double)sqrt_binary:(int)num { double x = sqrt(num); double y = num / 2; double low = 0.0; ..._oc 开根号

我所理解的JMM--3 内存屏障_jmm 屏障组合-程序员宅基地

文章浏览阅读1k次,点赞2次,收藏5次。内存屏障(Memory Barriers)内存屏障可以说是一些指令集,作用于cpu和编译器大致作用:防止屏障指令前后代码乱序,乱序包括内存顺序,和执行顺序。理解内存屏障对于理解理解JMM至关重要。因为不管是volatile和happer-before都需底层插入内存屏障实现。文本以x86架构说明。现代化cpu结构读取流程:cpu从内存读取数据,然后放入L1,L2缓存区,然后从L1 L2存缓存区放入Load Buffer,最后由Cpu寄存器读取,二次读取的时候从Load Buffer读取即可,如_jmm 屏障组合

基于SPI的OLED屏显和汉字点阵编码显示-程序员宅基地

文章浏览阅读43次。下载字模软件链接:https://pan.baidu.com/s/1ZSrDvhP-mwLQB9F0X_uLlQ提取码:1234解压完成后我们打开PCtoLCD2002完美版文件夹随后我们点击该exe文件运行程序打开随后我们点击上方的齿轮图标,修改字模选项如下在下方输入想要的文字后,点击生成字模即可生成对应代码,为之后使用。

【存储数据恢复】H3C存储卷中的数据恢复案例_存储卷什么情况下会重建-程序员宅基地

文章浏览阅读596次。H3C FlexStorage某型号存储,25块磁盘组建的RAID5,其中包含一块热备盘。工作人员误操作将存储设备中原先的2个卷删除,删除之后又使用和删除2个卷同样大小的空间重建了一个卷。用户希望恢复删除的2个卷中的一个。_存储卷什么情况下会重建

随便推点

西门子触摸屏脚本程序_西门子触摸屏利用VBScript脚本创建csv文件-程序员宅基地

文章浏览阅读1.7k次。功能描述:利用VBScript脚本创建csv/txt文件有时需要将PLC或运动控制器Simotion中的数据写到SD卡或U盘上。一种实现方法是,如果使用的是精致面板(comfort panel),可以使用vbscript生成脚本。软件 TIA Portal V14sp1, Wincc professional V15sp1硬件 一个西门子 TP1200触摸屏 (wince系统),其它西门子comf..._西门子 vb脚本导出csv文件

android6支持内存卡,诺基亚6可以插内存卡吗 Nokia 6支持内存卡扩展吗-程序员宅基地

文章浏览阅读115次。诺基亚6可以插内存卡吗 Nokia 6支持内存卡扩展吗来源:www.18183.com作者:似水流年时间:2017-01-10诺基亚6可以插内存卡吗?本文小编为您带来诺基亚6可以插内存卡吗 Nokia 6支持内存卡扩展吗。诺基亚6可以插内存卡吗?本文小编为您带来诺基亚6可以插内存卡吗 Nokia 6支持内存卡扩展吗,希望能够给您带来帮助。Nokia 6作为回归中国市场的诚意之作,各个方面都对标主流..._诺基亚6支持512内存卡吗

打开别人项目时经常遇到的问题-程序员宅基地

文章浏览阅读68次。1.jdk8后默认可以不书写,需要看项目的 language level是否配置好2.下载打开别人的项目则需要关注的是:jdk版本是否一致项目编译配置是否一致

cocos2d-x 3.1中luasocket试用_coluasocket-程序员宅基地

文章浏览阅读1.2w次,点赞3次,收藏6次。我们的手机游戏新项目,较多的使用了lua,于是网络方面也就自然选择了luasocket了。花了两三天时间来学习,调试通过,运行正常,于是发文分享。准备工作如何加载luasocket官方文档http://w3.impa.br/~diego/software/luasocket/introduction.html,说的是使用require('socket');不过经_coluasocket

【IDEA】设置自定义类注释,自定义方法注释_idea自定义方法注释-程序员宅基地

文章浏览阅读8.2k次,点赞10次,收藏47次。由于在写代码过程中,自带的注释缺少部分信息,如author,time等信息,需要新增这些注释信息,根据网上其他资料总结,分为类注释和方法注释,下面开始介绍如何设置。3、修改头文件模板类头文件注释模板(File Header.java)二、方法注释1、打开设置打开设置:Settings->Editor->File and Code Templates,如下图。添加触发关键字,这里设置为:**选择适用的文件类,勾选上Java设置模板格式,变量,触发按键模板格式变量设置para_idea自定义方法注释

设置Raspberry Pi 3B-树莓派系统安装和配置-程序员宅基地

文章浏览阅读1.4k次。一、需要什么电源为了连接电源插座,Raspberry Pi有一个微型USB端口(在许多手机上也是如此)。微型SD卡您的Raspberry Pi需要一张SD卡来存储其所有文件和Raspbian操作系统。您将需要一个容量至少为8 GB的micro SD卡。许多卖家为Raspberry Pi提供SD卡,这些卡已经与Raspbian一起设置并准备好了。键盘和鼠标..._raspberry pi 3b

推荐文章

热门文章

相关标签