[理工] 想问一个OS的观念问题(C.S. Design)

楼主: gash55025502 (白影弓)   2019-04-25 01:40:10
想问一下
不管是原文书或洪逸笔记
都说:
在多处理器系统下采用Diasble/Enable Interrupt方法,
只要Disable all CPU’s Interrupt 就可解决C.S. Problem,(但会造成系统产能低落

但我觉得就算Disable all CPU’s interrupt了,
感觉还是不能防止在不同CPU上执行的process/thread去同样的C.S.执行,进而违反mutua
l exclusion,无法解决C.S. Problem,
在这部分想请教是我的观念有误吗?感谢!
作者: TWkobe (中华柯比)   2019-04-25 10:18:00
你说的没错 课本这说法很有问题 假设c.s问题最低要求是只要自增自减某个变量 那用atomic instr和disable interrupt有机会做到更别说要扯到乱序、mem、cache的影响 我猜课本是理想的假设
作者: TMDTMD2487 (ㄚ冰)   2019-04-25 10:40:00
一般而言单核会使用interrupt disable + preemtiondisable然而你说的没有错除非你绑定在同一颗cpu不然没有用至于out of order/ cache,TLB flush 的问题在hardware会解决掉另外值得注意的事情是补习班不会跟你说的,所谓的spinlock 本身会带有disable preemtion的效果所以spinlock里面不能sleep,而且在单核的状态下spinlock也纯粹只是disable preemtion然后我发现一直把preemption打错字XD
作者: TWkobe (中华柯比)   2019-04-25 10:52:00
楼上说的没错 至于为什么spinlock 不能sleep 考量有二:第一 要是睡了就没人能取回了 第二 spinlock就是要快 要睡处理时间长请改用semaphore
作者: DLHZ ( )   2019-04-25 10:59:00
作者: TMDTMD2487 (ㄚ冰)   2019-04-25 12:39:00
preemption是指能不能去做task switchtimer可以发interrupt近来然后cpu跳去处理interruptroutine,但如果结束时去call sched,会因为preemption关掉,所以sched继续回去执行原本的taskdisable interrupt跟disable preemption是不一样的事另外一点是spin lock通常是kernel implement在用的
作者: TWkobe (中华柯比)   2019-04-25 13:16:00
补充一下 spinlock 本来是kernel structure不适合直接用在 user space , user space请用pthread spinlock

Links booklink

Contact Us: admin [ a t ] ucptt.com