互斥体,信号量,事件等是否被视为操作系统内核的一部分,或者它们是通常随操作系统提供的单独的用户级库?
调用信号量上的操作是否涉及系统调用(interrupt / trap / ring-0)?
理论上,我是否可以编写一个用户级同步/锁定库(不是线程管理,只是同步/锁定!),它不会在幕后调用OS函数?
如果我要编写一个多线程操作系统内核,我是否必须包含诸如create / release / grab semaphore之类的内容,或者我是否可以使用为我的操作系统编译的现有库?
正如你所看到的,我对这个问题有点困惑。这些都是不同格式的基本相同的问题。
我对OS理论答案感兴趣,以及“这是如何在Linux / Windows /其他* nix中完成的”答案。
答案 0 :(得分:1)
这个问题过于宽泛,取决于操作系统。您应该查看以下问题:Mutex access and system call,who wakes up a process which is blocked because it executed wait on a semaphore unsuccessfully?
基本上一个尝试使用比较和交换来避免系统调用,然后回退到系统调用以使线程处于睡眠状态。