是否可以在C或C++中实现小型磁盘操作系统?

App*_*ker 10 c c++ operating-system systems-programming

不是想做任何这样的事情,但我想知道是否可以在C中实现"整个操作系统"(不一定像Linux或Microsoft Windows那样大,但更像是一个类似DOS的操作系统)和/或C++使用no或little程序集.

通过实现操作系统,我的意思是从头开始使用C或C++将启动加载程序和内核启动到图形驱动程序(以及可选的GUI).通过编译器访问低级功能,我在C++中看到了一些低级的东西.这可以在整个操作系统上完成吗?

我不是在问这是不是一个好主意,我只是想问它是否可以远程实现?

use*_*653 11

与OSDev wiki的强制性链接,描述了创建操作系统所需的大多数步骤,如x86/x64所述.

要回答你的问题,创建引导加载程序并启动保护模式而不诉诸至少一些程序集会非常困难/不愉快,尽管它可以保持在最低限度(特别是如果你没有真正计算使用的东西)__asm__ ( "lidt %0\n" : : "m" (*idt) );作为'组装').

一个很大的障碍(再次在x86上)是处理器以16位实模式启动,因此您需要一些16位代码.根据这个讨论,你可以让GCC生成16位代码,但你仍然需要一些方法来设置内存,从某些存储介质加载代码等等,所有这些都需要以标准C只有的方式与硬件接口.没有(中断,IO端口等)的概念.

对于仅通过内存映射IO与硬件通信的体系结构,您可以在纯C中编写除C启动代码(设置堆栈,初始化变量等)之外的所有内容,尽管中断例程的特定要求/异常或系统调用门等可能难以实现(因为您必须访问特殊的CPU寄存器).