我知道加载程序会将程序加载到内存中。但是如何使用程序实现它呢?使用程序集或C.这可能非常有用。或者参考。
答案 0 :(得分:2)
也许你已经明白这一点,不确定。高级程序加载器只是读取/下载/接受程序,如果需要,解析文件格式。将程序放在内存中,并跳转/分支到它。
现在,如果你更具体,说一个处理器的引导加载程序,你通常没有文件系统或这样的东西,所以也许你只能接受已经在闪存上的程序,你的主要用例之一,或允许开发人员下载测试版本,注定是flash,xmodem,ymodem或其他协议上的程序。也许如果有以太网然后那样或usb如果可用并且有意义或可移动媒体(SD卡等)。在一天结束时,你仍然支持某种类型的格式,它只是程序的原始内存映像或其他一些格式(intel hex,motorola srecord,也许是elf等)。
操作系统还有很多工作要做,因为现在需要使用windows或linux或mac,编写一个简单的应用程序来读取和解析一个简单的程序,将该程序读入你的应用程序内存空间或者malloc一些,无论如何,然后尝试分支。操作系统阻止你,有办法解决这个问题,但这不是重点,你是一个不是操作系统的应用程序。但是,如果您是操作系统加载程序,那么您只需拥有更多权限,即您设计的操作系统,您的文件格式是什么,商定的入口点地址是什么,系统接口用于打电话的应用程序等等。必须符合你的规则,然后你会阅读二进制文件,解析它(例如你可能只支持.elf文件格式),根据你的规则为程序分配内存,程序需要分配资源(理想情况下,最初是部分(根据您的操作系统规则),您可以设置虚拟地址空间并将其指向程序加载的位置,然后分支到程序中从超级用户更改为用户模式的程序。
你的问题非常模糊,但是不能理解你是否理解基础知识和想要的细节(应用程序不是带保护的操作系统上的加载器,所以只需阅读linux或bsd的源代码等),或者不明白基础知识(如果您不想购买微控制器,请为微控制器制作一个小型引导程序或使用指令集模拟器。)
答案 1 :(得分:1)
我觉得做出我认为你想做的事情的最佳方式是关闭一个进程,然后创建一个在其中运行的进程?这就是说,如果你想用unistd.h库最好地完成C和C ++,并且想要更直接地了解PThreads库。但是,如果你现在还不知道如何调用这些东西,我建议你在错误地创建一个fork炸弹之前进行重读,并使你的系统崩溃。如果需要,请查看openpub文档。不过我强烈建议清理这个问题,我也觉得这个网站也经常被问过。