【发布时间】:2010-09-29 23:43:06
【问题描述】:
我正在为我的内核做一些输入缓冲区的工作,我有一些问题。在双核机器上,我知道可以同时运行多个“进程”。我不知道操作系统和各个程序如何保护数据冲突。
关于这个话题我想知道两件事:
(1) 中断发生在哪里?它们是否保证发生在一个核心上而不是另一个核心上,这是否可以用来确保一个核心上的实时操作不会被另一个核心上可以处理的文件 IO 中断? (我从逻辑上假设中断会发生在第一个核心上,但这总是正确的,你怎么知道?或者每个核心都有自己的中断设置?这不会导致每个核心都发生中断吗?内核可以同时对同一个中断做出反应,可能以不同的方式?)
(2) 双核处理器如何处理操作码内存冲突?如果一个核心正在读取内存中的地址,而另一个核心正在写入内存中的同一地址,会发生什么?是抛出异常,还是读取了值? (我假设无论哪种方式写入都可以。)如果读取一个值,是否保证它是冲突时的旧值或新值?
我知道理想情况下应该编写程序以避免这些并发症,但操作系统当然不能指望这种情况,并且需要能够处理此类事件而不会自己窒息。
【问题讨论】:
-
多处理器操作系统设计/实现不适合胆小的人。 :-)
-
操作系统设计通常不适合胆小的人,但这当然不会阻止我想要这样做。 ^_^
-
如果你需要一个最小的例子来测试这些东西:stackoverflow.com/a/33651438/895245
标签: x86 kernel multicore osdev