在学习操作系统的主题时,关键部分是我遇到的主题。为了解决这个问题,提供了某些方法,如信号量,某些软件解决方案等......等等。但我有一个问题,即实现这些解决方案的代码从何而来?因为程序员从来没有找到为他们的程序编写这样的代码。假设我在'C'中编写了一个执行printf的简单程序,我从不为临界区问题编写任何代码。并且代码被转换为低级指令并由OS执行,OS表现为我们的服从者。那么,处理关键部分的代码在哪里发起并适应?让像帧缓冲区这样的资源成为关键部分。
答案 0 :(得分:0)
OS内核提供了这样的线程间通信同步机制,互斥,信号量,事件,临界区,条件变量等。必须因为内核需要阻止无法继续的线程。许多语言为这些调用提供了方便的包装。
您的应用程序通过系统调用直接或间接访问它们,即进入内核状态并请求此类服务的中断。
在某些情况下,短期用户空间自旋锁可能会被贴在上面,但如果微调器没有快速满足,这些代码应该推迟到系统调用。
在C printf的情况下,相关库(通常是stdio)将进行锁定/解锁I / O流的调用(假设您已在库的多线程版本中链接)。