我正在为我的内核做一些输入缓冲区的工作,我有一些问题。在双核机器上,我知道可以同时运行多个“进程”。我不知道操作系统和各个程序如何保护数据冲突。
关于这个话题,我想知道两件事:
(1) 中断发生在哪里?它们是否保证发生在一个核心上而不是另一个核心上,这是否可以用来确保一个核心上的实时操作不会被另一个核心上可以处理的文件 IO 中断?(我从逻辑上假设中断会发生在第一个核心上,但这总是正确的,你怎么知道?或者也许每个核心都有自己的中断设置?这不会导致每个核心都发生中断吗?核心可以同时对同一个中断做出反应,可能以不同的方式?)
(2) 双核处理器如何处理操作码内存冲突?如果一个核心正在读取内存中的地址,而另一个核心正在写入内存中的同一地址,会发生什么?是抛出异常,还是读取了值?(我假设写入会以任何一种方式工作。)如果读取了一个值,是否保证它是碰撞时的旧值或新值?
我知道理想情况下应该编写程序以避免这些并发症,但操作系统当然不能指望这一点,并且需要能够处理此类事件而不会自己窒息。