Operating system 现代操作系统是如何工作的,如何从头开始?

Operating system 现代操作系统是如何工作的,如何从头开始?,operating-system,Operating System,我想做一个现代的操作系统,但它是如何工作的,我应该从哪里开始。您可能应该从选择开发操作系统和目标处理器开始。我会选择UbuntuLinux,因为它易于使用,并且可以直接访问编写和构建现代操作系统所需的所有软件。它将Gedit作为IDE,在大多数独立的开发环境中都能很好地工作,在这些环境中,您无法访问非自己的库(比如开发操作系统时)。至于目标处理器,我会选择x86-64,因为它是最现代、应用最广泛的处理器 我个人正在开发一个小型的最小操作系统。我准备了一个UEFI引导加载程序,它将用g++编译的E

我想做一个现代的操作系统,但它是如何工作的,我应该从哪里开始。

您可能应该从选择开发操作系统和目标处理器开始。我会选择UbuntuLinux,因为它易于使用,并且可以直接访问编写和构建现代操作系统所需的所有软件。它将Gedit作为IDE,在大多数独立的开发环境中都能很好地工作,在这些环境中,您无法访问非自己的库(比如开发操作系统时)。至于目标处理器,我会选择x86-64,因为它是最现代、应用最广泛的处理器

我个人正在开发一个小型的最小操作系统。我准备了一个UEFI引导加载程序,它将用g++编译的ELF文件加载到内存中,然后跳转到它的入口点。它使用GOP提供的帧缓冲区进行一些打印

如果我能给你一些提示的话,你可以从一个遗留的引导程序开始。传统引导加载程序将教会您比使用UEFI引导加载程序更多的东西。以下是您将学习编写遗留引导加载程序的一些内容:

  • 您将了解一些处理器历史。x86是如何从8086开始的。然后是如何通过分段和分页实现保护模式。4级分页和x86-64处理器的模式到达的时间

  • 您将了解细分及其工作原理

  • 您将深入了解分页

  • 您将了解计算机通常是如何引导的,以及像GRUB这样的遗留引导加载程序是如何工作的

  • 您将了解汇编和x86的复杂性。例如,什么寄存器做什么,如何设置分页,如何设置分段

  • 您将了解传统中断(PIC、旧PS/2键盘等)

  • 在切换到UEFI引导加载程序之前,这里有一些很酷的事情要知道。UEFI引导加载程序为您完成所有这些,因此您无需了解它。我想这会让初学者很难直接使用UEFI引导程序,因为如果没有相应的练习,这将是一个僵硬的学习曲线。编写一个遗留的引导程序将使您能够背诵和深入地学习所有这些主题,以便您能够在清楚理解的情况下切换到UEFI

    一旦开始编码,您将发现有关StackOverflow和其他地方的大量信息。此外,它还是有关操作系统开发信息的宝贵资源

    如果你决定使用UEFI,这里有一些在UbuntuLinux20上设置的技巧:。我在这里的回答将一步一步地让您运行最少的UEFI应用程序。然后可以从那里构建一个完整的引导加载程序

    另一个技巧是将引导加载程序作为独立于操作系统内核的程序。我遇到的一个问题是解决如何跳入C++。我认为您应该不可避免地学习如何解析ELF文件,并从引导加载程序解析它,然后跳转到它的入口点。否则,你将被留下的链接脚本和扭曲,将不总是工作或将使你的经验不完整

    为了从零开始开发一个最小的操作系统,你应该有一些软件来为你做一些事情,比如编译和仿真。我会选择Bochs作为具有集成调试器的传统引导加载程序。而我会使用QEMU或VirtualBox进行UEFI引导。QEMU和VirtualBox都可以很好地使用UEFI测试操作系统,而Bochs在使用传统引导加载程序开发时具有丰富的调试功能


    最后一个技巧是,如果你真的决定冒险进行操作系统开发,那就是给自己一些时间,因为你需要它。

    嘿,虽然这是一个有趣的问题,但这并不适合堆栈溢出。对于有具体、正确、具体答案的问题也是如此。你问的是一个非常普遍的问题,最好在一些reddit或特定于创建操作系统的论坛上提问。祝你好运我鼓励你用谷歌搜索“如何编写操作系统”。你会发现很多东西!我可以在Windows上从头开始使用Linux吗?你说的Windows上的Linux是什么意思?你总是可以在VM中工作,但这会使开发变得更加困难。也许使用ubuntu和Windows进行双启动或在计算机上安装第二个硬盘(如usb硬盘)就可以完成这项工作。LFS不是从头开始开发操作系统,它更像是编译并安装现有操作系统。虽然这是一次很好的学习经历,但这并不是你所要求的。你能告诉我现代操作系统内核执行的各种功能是什么吗