系统调用通常是如何实现的

时间:2015-11-30 20:32:03

标签: linux windows multithreading operating-system

我正在实现与简单操作系统非常类似的东西,但我正在努力去掌握系统调用实际上是什么:
首先 - 进程系统哪个线程通常 *执行中断例程(系统调用内核函数) - 内核线程之一或给定时间特权和例程地址的用户空间线程?
如何在用户空间中实现系统调用机制 - 下面的任何一个大致匹配引擎盖下的内容? 实施A:

if ($this->logger->isDecorated()) {
    $this->logger->write("\x0D");
}

实施B:

//equivalent to assembly
//MOV EAX sys_call_no
//INT 0x80
void* interrupt(int service, void* args)
{
   return kernel::int_vector[service](args);
}
C:我根本不理解它 - 它完全不同。
 * 通常我的意思是最常见的当前桌面系统,如窗口7/8或最新的Ubuntu发行版
 注意:对不起,如果这不是发布此问题的正确的SE网站 - 请评论我移动它

1 个答案:

答案 0 :(得分:2)

实施A通常是它的工作原理。操作系统主要仅将自己的线程用于不涉及直接响应特定进程请求的任务。当进程进行典型的系统调用时,该线程切换到内核堆栈并开始在内核上下文中运行内核代码。