写一个操作系统内核有多难?大概的内容,步骤是什么?

作者&投稿:夕朋 (若有异议请与网页底部的电邮联系)
写一个操作系统内核有多难?大概的内容,步骤是什么~

“一个好一点儿的计算机硕士毕业的学生。写一个操作系统的内核绝对是应该办到而且肯定可以办到的事儿。” ------这句话我们可以理解为”一个好的计算机硕士掌握的理论知识足够他搭建起一个简单的操作系统框架“。

我上操作系统课(大二)的第一天就问我的老师,学完了这门课可以自己实现一个操作系统了吗?老师说:”你可以基本掌握操作系统中要处理的主要问题,但是即使实现最简单的五脏俱全的操作系统还需要掌握很多很多东西,而且前提是你已经有很不错的代码能力。“

回到题目上来,我们要实现一个简单的操作系统,最先需要解决的是哪些问题?这个问题我相信翻开任何一本操作系统书都可以得到答案,一般都是操作系统书的前五,六章内容(第一章基本是操作系统概念及发展历史)。
包括:

进程管理
存储管理
文件系统
输入/输出
这些大部分是讨论理论类的书,比如我们上课用的书是西电汤子瀛老师的《计算机操作系统》,后来自己为了深入学习买了Andrew S. Tanenbaum的《Modern Operating Systems》。

如果想写个操作系统,除了理论知识外,动手之前最好先看看操作系统源代码,Linux的代码都是开源的,可以先学习学习。不过对于我们这种初学者千万不要看最新的Linux内核代码,因为那是很多人的杰作,可能一辈子都看不完。最好先看看国内同济大学赵炯基于0.11的《Linux完全注释》,即使只看懂30%也至会让自己懂很多之前不知道的东西。

理论类的书很少有提到Bootload问题的,就是加电之后从哪里开始执行的部分。仅仅是这个步骤也需要花不少时间去了解CPU知识,汇编语言知识等,相当不容易。不话说回来,这部分如果能处理好之后会发现组成原理,汇编语言,微机原理的知识被自己运用到了,成就感巨大。这部分内容,可以参看MIT的课程6.828 Operating System Engineering的课程,Google一下就能搜到不少大牛关于这门课的博客。如果英语不太好我记得华中科技大学有一个叫32位操作系统实践的课,资料都放到网上了,看起来很不错。

过了这一关,用《深入理解计算机系统》加上《现代操作系统》看一下虚拟存储器的内容,这两本书这部分说得都很棒。虚拟存储器的概念贯穿所有,如果能弄懂,对很多方面都有很大的帮助,不仅仅是操作系统这块。有了虚拟存储器概念之后对于链接,加载等知识理解就会深刻许多。 不过,这部分内容也需要对硬件部分有所了解,又是一坑。

之后回到进程上来之后,终于可以把工作重心从硬件部分转移过来了。但是我们又将面对进程创建,进程调度,进程通信三大问题,既然是简单实现,就先不考虑线程的事。算法书中会给很多,不过这些算法都是有一定的局限性,比如调度算法,对应的调度算法优劣差异很大,至于如何抉择就看个人需求。不过话说回来,操作系统里的”算法“和ACM里的算法在难度上差很多,还是比较容易实现的。

内容太多了,就不完全展开了,后面就看自己“耐力”了,写操作系统是需要坚持很长实践+大量知识积累的。有些问题还涉及到哲学的观点,这里推荐上海交大邹恒明教授的《操作系统之哲学原理》。除了理论方面的书,现在市面上也有直接教如何实现一个操作系统的,比如《Orange'S:一个操作系统的实现》和《30天自制操作系统》(仅有的几本“XX天XX”而不是烂书的书),起步阶段跟着这些书来还是很不错的。

总之,实现最最基本的功能也许可以做到。实现功能强大,鲁棒性强的操作系统极难。

项目概述和开发环境配置

计算机启动过程、GRUB 以及 multiboot 标准

裸机上运行的 Hello OS Kernel

字符模式下的显卡驱动

相关库函数和调试打印函数

添加全局段描述符表

添加中断描述符表

完成中断请求和定时器中断

物理内存管理的实现

虚拟内存管理的实现

内核堆管理的实现

内核线程的创建与切换

接下来如何继续学习
------------------------------------------

这个东西很难被称为“内核”,甚至说它是“玩具内核”都是缪赞了。这只是一个看起来能运行的原理示范性质的小程序。不过不可否认,按照文档来,你可以写出一个看起来挺好玩的东西并学到一些基础知识。
虽然一个真正的内核很难很复杂,但是一个简单的Demo并不是遥不可及。即使有兴趣,学习的过程中也需要乐趣和不断获得的成就感,不是吗?
百度搜索“系统城”会有更多更新的电脑系统下载、电脑教程为您解决电脑相关问题。

“一个好一点儿的计算机硕士毕业的学生。写一个操作系统的内核绝对是应该办到而且肯定可以办到的事儿。” ------这句话我们可以理解为”一个好的计算机硕士掌握的理论知识足够他搭建起一个简单的操作系统框架“。

我上操作系统课(大二)的第一天就问我的老师,学完了这门课可以自己实现一个操作系统了吗?老师说:”你可以基本掌握操作系统中要处理的主要问题,但是即使实现最简单的五脏俱全的操作系统还需要掌握很多很多东西,而且前提是你已经有很不错的代码能力。“

回到题目上来,我们要实现一个简单的操作系统,最先需要解决的是哪些问题?这个问题我相信翻开任何一本操作系统书都可以得到答案,一般都是操作系统书的前五,六章内容(第一章基本是操作系统概念及发展历史)。
包括:

进程管理
存储管理
文件系统
输入/输出
这些大部分是讨论理论类的书,比如我们上课用的书是西电汤子瀛老师的《计算机操作系统》,后来自己为了深入学习买了Andrew S. Tanenbaum的《Modern Operating Systems》。

如果想写个操作系统,除了理论知识外,动手之前最好先看看操作系统源代码,Linux的代码都是开源的,可以先学习学习。不过对于我们这种初学者千万不要看最新的Linux内核代码,因为那是很多人的杰作,可能一辈子都看不完。最好先看看国内同济大学赵炯基于0.11的《Linux完全注释》,即使只看懂30%也至会让自己懂很多之前不知道的东西。

理论类的书很少有提到Bootload问题的,就是加电之后从哪里开始执行的部分。仅仅是这个步骤也需要花不少时间去了解CPU知识,汇编语言知识等,相当不容易。不话说回来,这部分如果能处理好之后会发现组成原理,汇编语言,微机原理的知识被自己运用到了,成就感巨大。这部分内容,可以参看MIT的课程6.828 Operating System Engineering的课程,Google一下就能搜到不少大牛关于这门课的博客。如果英语不太好我记得华中科技大学有一个叫32位操作系统实践的课,资料都放到网上了,看起来很不错。

过了这一关,用《深入理解计算机系统》加上《现代操作系统》看一下虚拟存储器的内容,这两本书这部分说得都很棒。虚拟存储器的概念贯穿所有,如果能弄懂,对很多方面都有很大的帮助,不仅仅是操作系统这块。有了虚拟存储器概念之后对于链接,加载等知识理解就会深刻许多。 不过,这部分内容也需要对硬件部分有所了解,又是一坑。

之后回到进程上来之后,终于可以把工作重心从硬件部分转移过来了。但是我们又将面对进程创建,进程调度,进程通信三大问题,既然是简单实现,就先不考虑线程的事。算法书中会给很多,不过这些算法都是有一定的局限性,比如调度算法,对应的调度算法优劣差异很大,至于如何抉择就看个人需求。不过话说回来,操作系统里的”算法“和ACM里的算法在难度上差很多,还是比较容易实现的。

内容太多了,就不完全展开了,后面就看自己“耐力”了,写操作系统是需要坚持很长实践+大量知识积累的。有些问题还涉及到哲学的观点,这里推荐上海交大邹恒明教授的《操作系统之哲学原理》。除了理论方面的书,现在市面上也有直接教如何实现一个操作系统的,比如《Orange'S:一个操作系统的实现》和《30天自制操作系统》(仅有的几本“XX天XX”而不是烂书的书),起步阶段跟着这些书来还是很不错的。

总之,实现最最基本的功能也许可以做到。实现功能强大,鲁棒性强的操作系统极难。


操作系统包括那些基本部分
内核 操作系统往往将一些与硬件紧密相关的模块以及频率较高的模块,以及一些公用的基本操作模块,安排在靠近硬件的层次中,并使它们常驻内存,通常将这部分称为操作系统的内核。内核是一段计算机的发行程序,有很多最基本的功能,如管理CPU、存储器、文件系统、网络通信、中断处理,设备驱动程序等,内核部分...

常见的五种计算机系统
DOS家族包括MS-DOS、PC-DOS、DR-DOS、FreeDOS、PTS-DOS、ROM-DOS、JM-OS等,其中以MS-DOS最为著名。虽然这些系统常被简称为”DOS”,但没有任何一个系统单纯以”DOS”命名(只有一个毫无关连的1960年代IBM大型主机操作系统以此命名)。此外,有几个和DOS无关、在非x86的微计算机系统上运行的磁盘...

操作系统是硬件还是软件
操作系统属于系统软件。操作系统是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。操作系统的类型非常多样,不同...

什么叫做操作系统?都包括什么?
操作系统是用户和计算机的接口,同时也是计算机硬件和其他软件的接口。操作系统的功能包括管理计算机系统的硬件、软件及数据资源,控制程序运行,改善人机界面,为其它应用软件提供支持,让计算机系统所有资源最大限度地发挥作用,提供各种形式的用户界面,使用户有一个好的工作环境,为其它软件的开发提供必要的...

手机内核有什么用
问题一:安卓手机刷内核是什么意思?刷机是不是一定要刷内核? 有内核要求的rom就必须得对应。而有的只是建议你用某个内核,会更流畅些。内核是一个操作系统的核心,它负责管理系统的进程,内存,设备驱动程序,文件和网络系统,决定着系统的性能和稳定性。内核以独占的方式执行最底层任务,保证系统正常...

windows+操作系统的启动过程有哪些?
Windows操作系统的启动过程通常包括以下步骤:加电自检(Power-On Self-Test,POST):当计算机加电时,系统硬件会进行自检,包括检查内存、处理器、硬盘等硬件是否正常运行。主引导记录(Master Boot Record,MBR):在硬盘的第一个扇区(引导扇区)存储着主引导记录。计算机启动时,BIOS会加载MBR并执行其中...

单核操作系统与微核操作系统有啥区别?各有什么优缺点?
所谓“微核”,就是说操作系统只有很小的一部分是运行在最高优先级的,其他的功能都是以 若用人类社会来比喻的话,CPU代表执行力,是一个抽象的概念;而操作系统则是各级政府,操作系统的内核则是最高决策者,以前是皇帝及宰相(现在是国家主席)以及围绕他们为核心的一个班子。远古时期的CPU是没有...

各位大侠WindowsServer和普通WIN操作系统有什么不同?
一、主体不同 1、WindowsServer:微软推出的Windows 的服务器操作系统,其核心是Microsoft Windows Server System(WSS),每个Windows Server都与其家用(工作站)版对应。2、WIN操作系统:Windows操作系统是美国微软公司研发的一套操作系统,也当前应用最广泛的操作系统。二、内核不同 1、WindowsServer:除核...

常用的网络操作系统有哪些?
常用的网络操作系统有Windows、NetWare类、Unix系统、Linux。现代操作系统的特点为内装网络,即把网络功能包含到操作系统的内核中,作为操作系统核心功能的一个组成部分。Microsoft公司的Windows NT,AT&T公司的UNIX System V、Sun公司的Sun OS、HP公司的HP\/OX、IBM公司的AIX、Linux等都已把TCP\/IP网络功能...

减少Linux内核空循环 降低系统能耗技巧 1
如果不花更多的时间看表,你将有更多充裕的时间。通俗地讲,这就是Linux内核中一个重要变化的基本原理,编程人员希望这一变化能够提高Linux的效率。新版Linux操作系统将采用“tickless”(没有空循环)的内核,使处理器能够在低能耗状态下运行。能耗对于所有操作系统都是非常重要的。对于Linux而言,通过延长...

立山区17359819073: 写一个操作系统内核有多难?大概的内容,步骤是什么 -
尧悦卵磷: 谈谈我的思路和写过的经验.1、把握简单操作系统的最基础的两个组件:1.1 心跳代码.1.2 任务调度.2、代码架构把握:2.1 纵向上, 硬件相关层和硬件无关层分离.2.2 横向上,根据 心跳、任务、中断、I/O、文件 不断在 1 的基础上扩展丰富OS.3、构建环境:3.1 在 x86+win 的PC机上,选择合适的 编译环境(如 VC ).3.2 从基础组件开始,边学、边写、边调.主要掌握硬件无关部分.3.3 牛逼后,找个开发板,学写 BIOS.开始掌握硬件相关部分.3.4 将PC上写的OS代码移植到开发板上.

立山区17359819073: 开发操作系统,要什么样的电脑配置?开发系统内核有多难?有知识方面的人回答 -
尧悦卵磷: 一丢丢硬件基础、出奇的逻辑能力、汇编、C.理论上拥有以上4点你就可以开发出自己的操作系统了,牛逼点C都可以不用,单纯的用汇编(亦或者用其他语言,比如C++),再牛逼点,,你只要有个记事本软件,理论上只要是计算机上的一切...

立山区17359819073: 编写一个操作系统有多难 -
尧悦卵磷: 直接与硬件相关,没有功底,你底层的硬件操作这一关就很难过,而则看你需要一个什么规模的操作系统,简单的嵌入式的,比如我现在做的控制系统,二十几个人半年可以做一个完整一些的东西出来,还是有一些BUG在修正,明确你的开发对象很重要,确定你预期的目标也很重要,另外就是考虑自己的实力也很重要

立山区17359819073: 我想自己创作一个系统,就像windows ,ios一样,难吗?问下专业学过编程的,谢谢……
尧悦卵磷: 做新操作系统,相对来说是比较难的,因为要从零开始,所有东西都得自己写,包括启动、设备管理、文件管理、线程管理等,除了要会汇编、C语言外,还要对计算机的底层有所了解,以及对操作系统的基本构成及原理有所了解,还有就是,既然是新的操作系统,那么也就意味着需要开发相应的各种适用的应用软件,如果还要能连上互联网,需要知道计算机网络知识.因此做一个操作系统相对于应用软件还是比较难的

立山区17359819073: 操作系统真的有这么好写吗,正常一个人要多 -
尧悦卵磷: 那要看什么级别的了. 操作系统说白了就是模块堆砌,工作量非常大. 如果你去仿一个linux, 估计一个人写一辈子, 还要不断支持新的技术. 如果只是学生作业,就是那种只能运行一个进程的,基本上写个引导,写个文件系统(其实这个都可以不要),加几个中断函数能够保存进程上下文跳到内核态, 然后再写一个内核态下的汇编,能够访问IO设备,触发中断后跳回用户态, 基本上就能运行hello world了.

立山区17359819073: 程序员的梦想:自己写一个操作系统有多难 -
尧悦卵磷: 就如同你一个人造一艘航空母舰.windows系统是召集了全世界最优秀的2000多个技术人员写的,你可以思考一下,你什么时候能进入全世界优秀的人才中的2000人内,就是第一步.

立山区17359819073: 设计一个操作系统难吗? -
尧悦卵磷: 操作系统有多种实现方法与设计思路,下面仅选取最有代表性的三种做一简单的叙述. 1.整体式系统结构设计 这是最常用的一种组织方式,它常被誉为“大杂烩”,也可说,整体式系统结构就是“无结构”. 这种结构方式下,开发人员为了构...

立山区17359819073: 一个人编写一个操作系统是什么概念 -
尧悦卵磷: 一个人写一个简单的操作系统内核是一件非常帅气并且可行的事情.如果缺乏能力/计划,推荐《30 天自制操作系统》,或者相关链接 https://www.zhihu.com/question/25628124

立山区17359819073: 设计编写一个操作系统内核需要什么工作人员,准备些什么 -
尧悦卵磷: 不管是要写一个单机操作系统或是多工系统,对於CPU的架构以及MEMORY,I/O的使用方式,必须要熟悉.如果只是一个单机操作系统,熟悉CPU架构以及运行方式已经足够;但是如果牵涉到分时多工,那麽对於CPU保护模式,INTERRUPT的使用,IPC 的使用等等,都必须了解.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网