操作系统也是一个进程,用户程序调用了API,不是跟函数调用一样吧,我觉得应该是转到了操作系统。如果是转到操作系统执行,这个用户程序调用操作系统是如何实现的?
另外,操作系统是一个进程,其中包含了进程调度功能,他能调度其他用户进程。可是谁来调度执行操作系统呢?
------解决方案--------------------------------------------------------
系统调用一般要采用cpu内核模式切换,也就是书上讲的管态和用户态。
谁调度执行操作系统? 回去看书吧
------解决方案--------------------------------------------------------
其实操作系统就是一个while,哈哈
你想想哈。
bool exit=false;
while(exit)//操作系统代码
{
操作系统 控制进程代码....(包括了控制整个操作系统的代码 比如吧exit赋值为true的话那整个操作系统的while就退出了。。。当然还有控制其他进程的代码,)
其他进程代码。。。
}
当然,上面的只是一个很简单的比方。
------解决方案--------------------------------------------------------
这个我也说不好,写过ARM和单片机上的简单操作系统,但是也就只是任务调度和任务同步,顶多再加个简单的内存管理。API这个一般是需要文件系统的。所以,我个人感觉不划分层次不是不能实现,就是把这些分模块的东西揉到一起还是怎么样,但是写起来维护起来就极其麻烦了。
任务调度和任务同步应该是最底层的,然后是内存管理,然后是文件系统。API实现应该算是文件系统层的,这里都有3层了。不分层要自己完全重写一定麻烦。不知道你到底是要实现什么?
对于那些不需要软中断实现的API,一般来说就很简单了,它不需要切换进入内核态。那些用软中断来做的就需要用 int n的软中断来实现了,n是软中断号,在这个流程中软中断相当于就是一个接口了。进入软中断处理流程后就算是内核态了,后面有一些就和驱动、系统服务啥的有关系了,这块就比较难了。一般学习系统调用的话,知道这个流程,原理上就差不多了,然后实战上,需要知道怎么利用软中断命令的接口来实现自己的API功能就差不多了,如果还要深入到内核态下继续实现底层的功能,就很困难了,也没有必要了。
以上个人观点仅供参考,有一些也不敢确认一定是对的。希望对你有用。