【发布时间】:2016-03-04 14:41:30
【问题描述】:
我正在实现与简单操作系统非常相似的东西,但我很难掌握系统调用的实际含义:
首先 - 在进程系统中哪个线程通常 *执行中断例程(系统调用内核函数) - 内核线程之一或用户空间线程被赋予临时特权和例程地址?
如何在用户空间中实现系统调用机制 - 以下任何一项是否与引擎盖下发生的情况大致匹配?
实施 A:
//equivalent to assembly
//MOV EAX sys_call_no
//INT 0x80
void* interrupt(int service, void* args)
{
return kernel::int_vector[service](args);
}
实施 B:
//equivalent to assembly
//MOV EAX sys_call_no
//INT 0x80
void* interrupt(int service, void* args, void* ret)
{
kernel::intr_queue.push_back_syncd(interrupt_context(){kernel::int_vector[service], args, ret});
waitForServiceCompleted();
return ret;
}
//in kernel thread
while(true)
{
while(!intr_queue.isEmpty())
{
auto context = intr_queue.pop();
context.ret = context.func(context.args);
notifyDone();
}
}
C:我完全不明白——它的工作方式完全不同。
* 通常我指的是当前最常见的桌面系统,例如 window 7/8 或最新的 Ubuntu 发行版
注意:抱歉,如果这不是发布此问题的正确 SE 网站 - 请评论我以移动它
【问题讨论】:
标签: linux windows multithreading operating-system