2

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

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

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

2 回答 2

2

You are mixing "kernel space/user space" with "critical section".
Kernel/User space only defines what kind of privilege does a process possess. If a thread is executing in user space it cannot access the physical memory directly. It has to go through kernel's virtual memory management.
On the other hand, critical section is part of the code that if executed by two processes in parallel could result in data corruption. This would be happening because of the fact that the code is accessing some shared resource.
Those two concept are independent. Critical section can be either in user space or kernel space. Some kind of synchronization is needed inorder for avoiding the corruption of a shared resource. Even in the case where two process/thread are running in kernel mode and want to access a shared resource, they need to apply some sort of synchronization mechanism(spinlocks or mutex).

I hope this explains helps.

于 2012-11-09T04:51:47.287 回答
0

进程间同步可以通过命名的同步对象来实现。Windws同步函数提供例如命名互斥锁和命名信号量。请参阅Linux 的此答案

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

使用critical section问题中完成的方式这个术语有点误导,因为有关键部分对象(Windows)处理线程同步。

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

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

于 2012-11-08T15:22:05.190 回答