【问题标题】:Process synchronization进程同步
【发布时间】:2012-10-28 18:47:18
【问题描述】:

将一段代码指定为关键部分的因素

据我了解,process synchronization 使用诸如semaphores 之类的内核数据结构来防止并发访问代码的critical section一般而言,我认为定义是“关键部分是可以访问共享数据(或)共享资源的一段代码”。所以问题是:

  • 共享数据是一个用户空间实体。因此,用户进程有责任确保其访问的一致性。
  • 我认为多个进程对资源的并发访问是内核应该注意的事情。那里需要什么样的用户级同步?
  • 用户空间程序中的一段代码被确定为关键部分的因素是什么。

【问题讨论】:

    标签: process synchronization operating-system critical-section


    【解决方案1】:

    您将“内核空间/用户空间”与“临界区”混合在一起。
    内核/用户空间只定义了一个进程拥有什么样的权限。如果线程在用户空间中执行,它不能直接访问物理内存。它必须经过内核的虚拟内存管理。
    另一方面,临界区是代码的一部分,如果由两个进程并行执行,可能会导致数据损坏。之所以会发生这种情况,是因为代码正在访问某些共享资源。
    这两个概念是独立的。临界区可以在用户空间或内核空间。为了避免共享资源的损坏,需要某种同步。即使在两个进程/线程在内核模式下运行并想要访问共享资源的情况下,它们也需要应用某种同步机制(自旋锁或互斥锁)。

    我希望这解释对您有所帮助。

    【讨论】:

      【解决方案2】:

      进程间同步可以通过命名同步对象来实现。 Windws Synchronization Functions 提供例如命名互斥体和命名信号量。 对于 Linux,请参阅 this answer

      多个进程的共享资源例如可以是共享内存。

      在问题中使用术语critical section 有点误导,因为 有Critical Section Objects(Windows)处理线程同步。

      我怀疑您的意思更笼统,因为您也明确指出了流程。

      但是,任何共享资源,无论是共享内存还是任何其他对象,都应在处理时受到保护,防止并发访问。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-04
        • 2014-10-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多