我必须学习啥样的 C++ 来制作自己的操作系统内核? [关闭]

     2023-02-23     25

关键词:

【中文标题】我必须学习啥样的 C++ 来制作自己的操作系统内核? [关闭]【英文标题】:What kind of C++ would I have to learn to make my own OS kernel? [closed]我必须学习什么样的 C++ 来制作自己的操作系统内核? [关闭] 【发布时间】:2010-10-09 11:32:59 【问题描述】:

我必须学习哪种 C++(重新编程)来制作自己的操作系统内核? (我知道我还必须学习组装。) 编辑***像中断,键盘驱动程序,获取输入。***

好的,我制作了一个非常 * 3 的基本操作系统,并想分享它。

给你。 http://bcsy.hostzi.com/BytOS.zip

在linux上编译

【问题讨论】:

简答:全部。 哈哈,我们应该信任一个名叫“hacklord”的人来下载他的代码吗? 你当然信任他。因为他最赞成的 Q 是“我如何导致缓冲区溢出”。所以他一定是无害的:-) 基于意见投票结束。 【参考方案1】:

http://www.brokenthorn.com/Resources/OSDevIndex.html

【讨论】:

【参考方案2】:

我有一个朋友用 C++ 编写了一个 OS 内核:

http://sourceforge.net/projects/ekp/

所以这绝对是可能的。 (上面有些cmet说不可能,错了。)

你甚至可能想偷他的 引导和构建代码,这样你就可以直接进入并 开始实现“有趣的东西”。

【讨论】:

【参考方案3】:

鉴于您今天的选择,绝对没有理由“制作”操作系统。好好学习一门语言,并真正适应 Windows 或 Linux 的变体。 C 或 C++ 非常适合学习。

为澄清而编辑 - 我的观点是,第一次尝试通过制作操作系统来学习一门语言既不切实际,也很疯狂。至少需要非常好的 C 语言背景,否则在尝试自己动手之前开始制作应用程序并利用现有操作系统的强大功能。

【讨论】:

我不能同意这一点,我编写了一个小型操作系统,这是了解文件系统、并发性、同步原语、线程调度、I/O 和中断等内容的绝佳方式。等等等等。 @David 我同意,但我敢打赌,在你解决这个问题之前,你必须好好学习一门语言。通过编写自己的操作系统来尝试学习一门语言真是太疯狂了。 当然,我对 C 语言(以及少量汇编)有相当的了解,但这并不意味着没有理由对操作系统进行编程。 在上面添加了澄清以回答试图不被选离岛:) 任何项目都可以帮助您[学习]、编写操作系统、Windows 应用程序,只要是您感兴趣的任何东西。【参考方案4】:

我建议您查看OSDev wiki。它是有关使用多种语言(包括 c++)编程 OS 的绝佳信息来源。

具体来说,see this 部分告诉您使用 gcc 使用 c++ 内核所需的一切。

最后,看看OSDev forums,那里有很多用户,从新手到经验丰富的都有。他们通常非常乐意帮助别人(只要他们在提出要求之前表明他们尝试过 :-P)

【讨论】:

+1 用于提及 OSDev。【参考方案5】:

只有一种,应该有助于缩小范围。从学习 CPU 架构手册开始,Intel 的可用for free。获取 BIOS 文档将是最困难的部分。

【讨论】:

只有一种 - 谢谢!我也在想同样的事情!【参考方案6】:

查看nanoos,它是一个 C++ 操作系统项目!

回答您的问题:

操作系统(通常 缩写为 OS 或 O/S)是一个 硬件和之间的接口 应用程序;它负责 管理和协调 活动和分享 计算机资源有限。这 操作系统充当主机 上运行的应用程序 机器。因此,您需要学习 C++ 中使您的程序 (OS) 能够与将要运行的硬件进行交互的位。

然后它需要超越与硬件交互并为用户提供使用。

为此,再次返回并查看 nanoos 中的尝试作为起点(对于 C++ 学习需要,了解在 C++ 中构建操作系统需要什么)

在 nanoos 中发现的功能:

C++ 运行时间

32 位保护模式内存管理器

CPU 检测、内存检测和 IDE 硬盘检测

IDE硬盘读取

基本上,要编写Operating System,只需查看操作系统需要做什么(或它是什么)

如果我要编写操作系统,在考虑语言之前,我会尝试了解操作系统是什么,this is a great book:操作系统设计和实现。

读一读。祝你好运

【讨论】:

【参考方案7】:

我会推荐直接 C 用于内核开发。通过操作系统开发,您真的想知道“幕后”正在发生什么。我觉得 C++ 对于低级开发隐藏了太多东西。

好资源:

http://osdever.net/bkerndev/Docs/intro.htm http://www.osdever.net/ http://www.osdever.net/tutorials/hello_btldr.php?the_id=85

【讨论】:

【参考方案8】:

由于许多技术原因,Linux 没有使用除 C 之外的任何语言进行编程。由于各种政治原因,很少有其他操作系统使用 C++ 编程。

如果您想了解关于编程内核,Minix 操作系统/微内核专为学习操作系统设计而设计。它很小而且很小。它也是用 C 语言编写的。

【讨论】:

只是出于好奇,那些政治原因是什么? Google for Linus Torvalds 的 C++ 咆哮,我想你会明白的。 linus 的咆哮只是愚蠢的 fud :/ @litb:确实,因为 c++ 只为您使用的内容付费。使用 c++ 开发操作系统就像使用 c 一样容易。除了现在,您还可以享受对象、虚拟函数、模板等带来的好处:-P。 @Paul:同意,这不是偶然的,这是历史性的。【参考方案9】:

我建议看一下nachos(不是另一个完全启发式的操作系统)。这是我们在大学时用于操作系统课程的教学操作系统。

【讨论】:

【参考方案10】:

Newos 是一个很好的 C++ 内核。 eCos 和 L4 也是如此。 Newos 是由前 BeOS 开发人员开发的微内核。 L4 也是一个微内核,以其令人难以置信的快速消息传递而闻名。 eCos 是一个单体内核。

【讨论】:

【参考方案11】:

全部。这不是一项简单的任务,您需要学习该语言的大部分方面,我建议您查找内核编程。从它的外观来看,我会在将自己嵌入语法之前查找编程语言的逻辑理论和范式。有很多硬件层,你需要学习的东西太多了,而不是从你在这个网站上得到的答案或通过谷歌搜索得到的答案。

祝你好运!

【讨论】:

【参考方案12】:

我不建议在制作单片内核时使用 C++。但是,如果您正在考虑微内核设计,您可以使用 C++ 编写服务器(网络、控制台、fs、vfs 等),同时使用 C/内联 asm 保持内核本身的紧密性。

再说一次,如果你只是选择 x86,那也没那么重要。

您的操作系统的设计目标是什么?

【讨论】:

【参考方案13】:

查看 linux 内核邮件列表FAQ 了解常见问题(适用于任何内核开发),不要因this 点而气馁。

【讨论】:

【参考方案14】:

据我所知,唯一一个使用 C++ 编程为“裸机”的大型操作系统是 AS/400 操作系统 OS/400(v3r6 之后)。

没有什么可以阻止您使用 C++ 开发任何操作系统——尤其是当您回忆起 vanilla C 无论如何“几乎”是有效的 C++ 时。有趣的是在最低级别执行new/delete,因为您需要保证没有泄漏等。这导致需要重新实现new 函数。

我帮助做了 v3r6,但已经有 13 年了,我不记得毛茸茸的细节了。我不知道有关它的任何出版物,但如果您真的感兴趣,请尝试在 http://www.parashift.com 写 Marshall Cline。

(啊。“删除”副“免费”。)

【讨论】:

实现 new/delete 是微不足道的,通常只是 malloc/free 的简短包装。编译将为您发出构造函数/析构函数代码。我有自己的 c++ 操作系统,唯一真正的困难的部分是如果你想要异常/rtti。如果你可以没有这些,启动和运行不需要太多工作。 我猜,另一件值得注意的事是全局构造函数/析构函数,因为它们需要在“main”之前调用,但再一次,它是一个 5 行函数来处理它,没什么大不了的。跨度> Evan,实际上为低级“裸机”类实现 new/delete 不是微不足道的;这对于需要映射到特定物理地址的类来说是双倍的。 考虑一下,例如,你的 malloc 来自哪里。 是的,你必须实现 malloc/free。但是对于 C 内核也是如此,所以这是一个清洗。实现 new/delete is 绝对是微不足道的(我可以根据经验这么说)。见wiki.osdev.org/C_PlusPlus#new_and_delete。一个完美的衬里。【参考方案15】:

查看 L4Ka::Pistachio、Haiku 内核或 Symbian 的 EKA2 可能是个好主意,如果您对“真正的”基于 C++ 的内核的示例感兴趣,这些内核已被用作复杂功能的基础——负载操作系统。

我发现后者结构良好,包含非常简洁易读的代码,但其他人可能不同意。然而,目前很难获得和构建(因为 Symbian Foundation 网站目前处于离线状态),尽管 Google Code 上的副本是 mirrored。

除此之外,我发现 L4Ka::Pistachio 是迄今为止最容易构建的内核之一,但高级组件的定制和实现是另一种方式 - 尽管Genode 似乎是一个很有希望的途径很久以前我测试它时快速构建更高级别的组件。

【讨论】:

计算器遵循啥样的算法来查找正弦值?

】计算器遵循啥样的算法来查找正弦值?【英文标题】:Whatkindofalgorithmdocalculatorsfollowtofindvaluesofsine?计算器遵循什么样的算法来查找正弦值?【发布时间】:2014-01-2208:52:20【问题描述】:如果有人给我一个角度,比如38度,我将... 查看详情

MS Windows 有啥样的内核?

】MSWindows有啥样的内核?【英文标题】:WhatkindofkerneldoesMSWindowshave?MSWindows有什么样的内核?【发布时间】:2010-12-2021:49:41【问题描述】:我看到一个关于LinuxKernel的问题。读到我有thisdoubt。【问题讨论】:关于各种类型内核的讨... 查看详情

addSubview 方法是啥样的?

】addSubview方法是啥样的?【英文标题】:WhatdoestheaddSubviewmethodlooklike?addSubview方法是什么样的?【发布时间】:2011-12-1708:47:42【问题描述】:我知道它的功能以及如何使用addSubview方法。想知道该方法是什么样的,该方法中使用的... 查看详情

是啥样的测试?巢穴

...】:我正在尝试测试我的nestjs应用程序,但我不太确定我必须编写什么样的测试,我想测试我的服务,所以为了测试它,我使用了nestjs提供的函数createTestingModule,这是我的代码beforeAll(async()=>constmoduleRef=awa 查看详情

我应该使用啥样的意图来保存android设备生成的错误报告

】我应该使用啥样的意图来保存android设备生成的错误报告【英文标题】:WhatkindofintentsshouldIusetosavethebugreportgeneratedbyandroiddevice我应该使用什么样的意图来保存android设备生成的错误报告【发布时间】:2016-03-2720:36:12【问题描述】... 查看详情

我应该使用啥样的描述符来检测海豹幼崽?

】我应该使用啥样的描述符来检测海豹幼崽?【英文标题】:WhatkindofdescriptorshouldIuseforsealcubdetection?我应该使用什么样的描述符来检测海豹幼崽?【发布时间】:2011-08-0800:01:38【问题描述】:我有一个项目来检测和计数从海滩拍... 查看详情

你会用啥样的测试来测试这个

】你会用啥样的测试来测试这个【英文标题】:Whatsortoftestswouldyouusetotestthis你会用什么样的测试来测试这个【发布时间】:2014-09-0108:52:01【问题描述】:我有一个随机数生成器,它接受两个参数并在它们之间生成一个随机数。这... 查看详情

WINAPI中的消息部署函数应该设置啥样的参数

...参数【发布时间】:2014-03-1215:11:06【问题描述】:我正在学习WINAPI。当我想编程获取消息然后做一些特定的操作时。我收到了来自VC6.0的错误。例如,我想得到wm_keydown消息。这样的 查看详情

图像通用文件扩展名的正则表达式是啥样的?

】图像通用文件扩展名的正则表达式是啥样的?【英文标题】:Whatwouldaregexforcommonfilenameextensionsforimageslooklike?图像通用文件扩展名的正则表达式是什么样的?【发布时间】:2011-05-0721:21:05【问题描述】:我正在开始制作图片,所... 查看详情

我需要啥样的证书来测试使用 ad-hoc 分发的 apns?

】我需要啥样的证书来测试使用ad-hoc分发的apns?【英文标题】:whatkindofcertificatedoIneedtotestapnsusingad-hocdistribution?我需要什么样的证书来测试使用ad-hoc分发的apns?【发布时间】:2009-12-1117:50:52【问题描述】:如果我需要生产证书... 查看详情

花式指针是啥样的?

】花式指针是啥样的?【英文标题】:Howdoesafancypointerlooklike?花式指针是什么样的?【发布时间】:2017-04-1812:24:56【问题描述】:C++参考文献提到了一个名为fancypointers的概念。我是从最近一个被严重否决且随后被删除的问题中了... 查看详情

我的 Kendo 数据源架构必须是啥样的?

】我的Kendo数据源架构必须是啥样的?【英文标题】:WhatmustmyKendodatasourceschemalooklike?我的Kendo数据源架构必须是什么样的?【发布时间】:2013-01-2119:42:28【问题描述】:给定这个json?["CompanyId":20,"CompanyName":"Walmart","CompanyContacts":["... 查看详情

易语言程序在啥样的环境才能运行

...易语言还是不用安装的XP系统下就能运行易语言支持很多操作系统..我在Win2008Server操作系统下测试过!运行根本没问题.最重要的一点必须带上易语言支持库在编译程序后回提示你需要带什么支持库.参考技术A从windows1.0到windowsvista... 查看详情

接口自动化测试流程是啥样的?

...分析结果可以去黑马程序员看一下有没有对自己有帮助的学习视频,他们家免费的资源很多,这么多年很有经验很实用。我高中很多同学毕业去黑马学习了,现在在北上广工作,感觉我也想报班去一线看看了。 查看详情

操作系统是用啥样的 C 语言编写的?

】操作系统是用啥样的C语言编写的?【英文标题】:WhatkindofCisanoperatingsystemwrittenin?操作系统是用什么样的C语言编写的?【发布时间】:2010-11-0823:04:46【问题描述】:像操作系统这样的东西会用C语言编写是有道理的。但是其中... 查看详情

php全栈开发工程师需要一些啥样的技能

...上就需要花很大的心思来一点点配置环境,但是新人直接学习linux也是需要花费精力的。所以在学习初期,完全建议采用集成环境来开发,把全部的心思放在学习语法上面。在此推荐XAMPP、AppServ、PHPStudy、WampServer等集成环境。2.... 查看详情

有啥样的工具,可以自动生成oracle数据库的数据字典

制作数据字典工具的sql文件必须Navicat或MySQLFront或Toad导出,我使用的是sqlyog,因此格式和这个工具有冲突,导致经常使用有问题,建议使用的话采用Navicat导出表结构,这样就不会存在sql格式不兼容的问题。参考技术A你使用$ORACLE... 查看详情

频率为随机变量的正弦曲线 - FFT 脉冲是啥样的?

】频率为随机变量的正弦曲线-FFT脉冲是啥样的?【英文标题】:Sinusoidswithfrequenciesthatarerandomvariales-WhatdoestheFFTimpulselooklike?频率为随机变量的正弦曲线-FFT脉冲是什么样的?【发布时间】:2016-04-1615:59:03【问题描述】:我目前正在... 查看详情