我正在为我的内核做一些输入缓冲区的工作,有一些问题需要解答。在双核机器上,我知道可以同时运行多个“进程”。但我不知道操作系统和各个程序如何保护数据冲突。
关于这个话题,我想了解两件事情:
(1) 中断发生在哪里?它们是否保证只在一个核心上发生,而不是在另一个核心上发生?这个特性能否用来确保一个核心上的实时操作不会被其他核心上的文件IO等操作所中断?(我逻辑上认为中断会发生在第一个核心上,但这总是正确的吗?如何判断?或者每个核心是否都有自己的中断设置?这是否会导致每个核心对同一个中断同时做出反应,可能以不同的方式?)
(2) 双核处理器如何处理操作码内存冲突?如果一个核心在读取内存中的某个地址,恰好在同一时间,另一个核心正在向该内存中的相同地址写入数据,会发生什么?会抛出异常吗,还是会读取一个值?(我认为无论如何写入都会成功)。如果读取一个值,它是否保证是冲突发生时的旧值或新值中的一个?
我知道程序最好是避免这些复杂情况,但操作系统肯定不能指望所有程序都能做到这一点,必须能够处理这些事件而不会崩溃。