将一段代码指定为关键部分的因素
据我了解,进程同步
是使用信号量
等内核数据结构来实现的,以防止并发访问关键部分
代码。 一般来说,我认为定义是“关键部分是可以访问共享数据(或)共享资源的代码段”。所以问题是:
- 共享数据是一个用户空间实体。因此,用户进程有责任确保其访问的一致性。
- 我认为内核应该注意多个进程对资源的并发访问。那里需要什么样的用户级别同步?
- 用户空间程序中的一段代码被决定为关键部分的因素是什么。
最佳答案
您正在将“内核空间/用户空间”与“关键部分”混合在一起。
内核/用户空间仅定义进程拥有什么样的权限。如果线程在用户空间中执行,则它无法直接访问物理内存。它必须经过内核的虚拟内存管理。
另一方面,临界区是代码的一部分,如果由两个进程并行执行可能会导致数据损坏。发生这种情况是因为代码正在访问某些共享资源。
这两个概念是独立的。临界区可以位于用户空间或内核空间。为了避免共享资源的损坏,需要某种类型的同步。即使在两个进程/线程在内核模式下运行并想要访问共享资源的情况下,它们也需要应用某种同步机制(自旋锁或互斥锁)。
我希望这解释有帮助。
关于进程同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13291300/