操作系统开发入门
似乎大多数人确实想写一个OS,但是他们不知道从哪里开始,也不知道需要知道什么编程语言。
好吧,当我启动我的操作系统时,我的方式几乎相同,因此我正在撰写本教程,以开始进行操作系统开发。
为了方便理解,我以问答形式编写了此文章。
1,问:制作我自己的操作系统需要知道哪些语言?
答: 您至少应该知道汇编(ASM)语言,因为您将需要它来编写引导程序(在下一个问题中对此进行更多介绍)以及许多其他内容。我建议您也学习C / C ++,因为与ASM相比,它是一种更易懂的语言。然后,您可以在OS中同时使用C / C ++和ASM。
您可能考虑使用Pascal和ASM而不是C / C ++和ASM编写操作系统,但我建议使用C / C ++和ASM。(请注意,C ++和OS开发人员存在一些特殊问题)
2,问:什么是引导程序?
答: 引导程序是一个小程序,存储在软盘和/或硬盘驱动器的最开始。它负责查找您的内核(操作系统的主要部分,完成大部分工作),将其加载到内存中并运行它。
3,问:我必须已经拥有一个操作系统才能制作一个操作系统吗?
答:可以。大多数人使用Windows和/或Linux进行OS开发。
4,问:我应该使用什么编译器?
答:对于汇编程序,我建议NASM,因为它是免费的,具有良好的文档,可以输出多种文件格式,可用于大多数OS,它的源代码可用,并且OS开发人员站点上的大多数汇编示例都需要它。对于C / C ++,我建议在Linux 下使用gcc,在Windows 下使用DJGPP(两者都兼容)。
5,问:如何使我的操作系统引导程序可引导?
答:您需要将其输出到平面二进制文件。供NASM使用-f bin。如果您使用的是C / C ++,则需要使用链接器执行此操作(请参阅下一个问题)。
6,问:什么是链接程序?如何将其用于OS开发?
答:链接器获取编译器生成的输出文件,并将其链接到一个文件中。对于OS开发人员,通常需要将文件链接到平面二进制文件中。对于LD(最常与DJGPP和gcc一起使用的链接器),请使用option --oformat binary。如果使用LD,则应使用链接描述文件以更好地控制链接。请参阅“ 我的建议以制作操作系统”。
7,问:什么是实模式?
答: 实模式是初次打开PC时x86(386、486,Pentium等)所处的状态。实模式有几个缺点:
它缺乏保护(Protection)功能,无法阻止程序混乱和崩溃。
您可能只有一项任务。
您限于1Meg的地址空间。
您必须使用分段来访问内存。
8,问:什么是保护模式?
答: 保护模式(也称为PMode)是从实模式的升级。保护模式比实模式有几个优势:
保护模式具有保护功能,可以防止程序混乱和崩溃(这是保护模式的名称)。
您可能只有几个任务(例如Windows和Linux)。
您有4Gig(是4 GB)的地址空间(一旦启用A20-Gate,请参阅下一个问题)。
您可以使用分页来访问内存。
如果不是很明显,除非您有非常特殊的理由要使用实模式,否则您的操作系统应以保护模式运行。
9,问:那是A20门?
答: 8086微处理器(286、386、486,奔腾等产品之前的处理器)只能访问1MB的地址空间。对于该地址范围,足够20个地址位(A0-A19)。然后,英特尔发明了80286(通常称为“ 286”)。80286最多可以访问16MB的地址空间,但是80286必须与8086兼容(为8086编写的程序必须能够在80286上运行)。解决方案是什么?为了给80286提供更多的地址范围,但某些程序取决于以下事实:地址以1MB环绕:
让我们以8086的方式查看它:在双系统中您拥有地址11111111111111111111,并添加1对它。结果为0,因为您没有第21位(A20!)。但是80286实际上有更多位。
为了解决该问题,英特尔使80286禁用了A20-Gate,并将地址范围限制为20位。因此,要访问超过1MB的内存,我们需要启用A20-Gate。
10,问:什么是选择器?
答:选择器(有时也称为描述符)是段的定义。它包含对基本段属性的描述,例如段基础(起始地址)和段限制(长度)。每个选择器的长度为64位。在GDT和LDT的描述中有更多关于它们的信息。
11,问:什么是GDT?
答: gdt是包含选择器的表。基本上,它提供了一个起始地址来寻址所有选择器。
12,问:什么是中断?
答:中断是一种中断CPU正在执行的当前任务的信号。它告诉CPU一个重要事件已经到来,例如硬件中断,并且CPU需要停止当前任务并运行适当的中断处理程序。中断处理程序是一种特殊功能,旨在处理特定的中断(例如键盘上的按键)。由于中断具有特殊的属性,例如可以将它们从环3切换到环0,因此它们可以在操作系统中用作进行系统调用的方式。Linux系统调用是通过中断处理的。
13,问:什么是PIC?
答: PIC,可编程中断控制器,是一种收集硬件中断请求并向CPU发出中断发生信号的设备。发生这种情况时,PIC和CPU都会就发生了哪个请求进行通信,并且CPU将停止当前任务并执行该请求的中断处理程序。
14,问:什么是PIT?
答: PIT,可编程中断定时器,是一个可编程的(您可以更改其速度)硬件定时器,它在中断(IRQ 0)关闭时触发一个中断。它主要用于任务调度。
15,问:我应该以什么顺序安装操作系统?
答:好的,您几乎可以在任何地方开始,但最终可能会遇到许多错误。我建议您首先制作一个引导扇区,然后制作一个基本内核,然后再添加到您的内核中。
16,问:在启动时设置PMode的基本步骤是什么?
答:
禁用中断,以免混乱。
设置GDT。
启用A20。
将CR0的第一位设置为1。
从GDT向段寄存器加载正确的值。
通过远跳将CS和EIP加载正确的值。
您现在处于PMode
Chris Giese在保护模式下对此进行了更详细的介绍。
原文:http://www.osdever.net/tutorials/view/getting-started-in-os-development
作者: K.J. and Joachim Nock.
另外,可以参考国内的指导:https://www.zhihu.com/question/22463820