退出操作系统中的应用程序而不分离内存

age*_*ith 5 c operating-system kernel

我正在编写一个单片操作系统(将它称为操作系统是一个笑话,但它确实有非常小的,学校级功能主义者).当我说单片时,我的意思是,它被编译为单个二进制blob并且不支持文件系统等.目前我只有一个基本的简单用户空间,这只是无限循环.

我打算让我的操作系统变得更有用,并希望能够编写用户应用程序,这些应用程序可以在完整的操作系统上像常规应用程序一样终止.

我没有glibc或同等的.我在用户空间中的当前库是我编写的代码.现在我的问题是如何为用户空间应用添加一个框架,这将使它们终止于一个修复点.

我知道如何在常规系统上编译程序以及程序终止时会发生什么.但是,在我的情况下,我没有奢侈的编译程序对库,如果一个程序终止,那么我的指令指针只是疯狂的绕道而行.

目前我正在制作所有应用程序以进行"回访",并且我使用修复地址预先填充应用程序堆栈(在启动期间).有没有更好的方法来处理这个问题?

除了答案,我非常乐意清楚一些操作系统概念.

我正在使用x86模拟器平台并静态编译我的二进制文件.(我确实有虚拟内存支持)

Joh*_*all 3

手工制作第一个堆栈帧并返回到您需要运行的任何进程清理代码似乎是一个完全合理的方法。如果您的操作系统有“系统调用”,那么用户空间进程清理代码(可能称为exit())可能以对系统调用的调用结束_exit()。您仍然需要处理程序尝试在“la-la land”中执行代码的情况,因为这种情况仍然可能发生(但是在拥有页面保护系统之前这样做可能是一个难题)。