作者gash55025502 (白影弓)
看板Grad-ProbAsk
标题[理工] 想问一个OS的观念问题(C.S. Design)
时间Thu Apr 25 01:40:10 2019
想问一下
不管是原文书或洪逸笔记
都说:
在多处理器系统下采用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,
在这部分想请教是我的观念有误吗?感谢!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 180.217.206.150
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Grad-ProbAsk/M.1556127612.A.39E.html
※ 编辑: gash55025502 (180.217.206.150), 04/25/2019 01:42:39
1F:推 TWkobe: 你说的没错 课本这说法很有问题 假设c.s问题最低要求是04/25 10:18
2F:推 TWkobe: 只要自增自减某个变数 那用atomic instr和disable interr04/25 10:21
3F:→ TWkobe: upt有机会做到04/25 10:21
4F:推 TWkobe: 更别说要扯到乱序、mem、cache的影响 我猜课本是理想的假04/25 10:24
5F:→ TWkobe: 设04/25 10:24
6F:推 TMDTMD2487: 一般而言单核会使用interrupt disable + preemtion04/25 10:40
7F:→ TMDTMD2487: disable04/25 10:40
想请问一下:Interrupt disable跟Preemption disable有什麽差别吗?preempt别人不是
就要先Interrupt吗
8F:→ TMDTMD2487: 然而你说的没有错除非你绑定在同一颗cpu不然没有用04/25 10:41
9F:→ TMDTMD2487: 至於out of order/ cache,TLB flush 的问题在hardware04/25 10:42
10F:→ TMDTMD2487: 会解决掉 04/25 10:42
11F:→ TMDTMD2487: 另外值得注意的事情是补习班不会跟你说的,所谓的spin04/25 10:43
12F:→ TMDTMD2487: lock 本身会带有disable preemtion的效果04/25 10:44
13F:→ TMDTMD2487: 所以spinlock里面不能sleep,而且在单核的状态下spinl04/25 10:44
14F:→ TMDTMD2487: ock也纯粹只是disable preemtion 04/25 10:45
15F:→ TMDTMD2487: 然後我发现一直把preemption打错字XD04/25 10:46
16F:推 TWkobe: 楼上说的没错 至於爲什麽spinlock 不能sleep 考量有二:04/25 10:52
17F:→ TWkobe: 第一 要是睡了就没人能取回了 第二 spinlock就是要快 要04/25 10:52
18F:→ TWkobe: 睡处理时间长请改用semaphore04/25 10:52
原来如此!小弟受益良多XD,谢谢两位的回答!
19F:推 DLHZ: 推04/25 10:59
※ 编辑: gash55025502 (180.217.206.150), 04/25/2019 12:17:19
20F:→ TMDTMD2487: preemption是指能不能去做task switch 04/25 12:39
21F:→ TMDTMD2487: timer可以发interrupt近来然後cpu跳去处理interrupt 04/25 12:42
22F:→ TMDTMD2487: routine,但如果结束时去call sched,会因为preemptio 04/25 12:43
23F:→ TMDTMD2487: n关掉,所以sched继续回去执行原本的task 04/25 12:44
24F:→ TMDTMD2487: disable interrupt跟disable preemption是不一样的事 04/25 12:45
25F:→ TMDTMD2487: 另外一点是spin lock通常是kernel implement在用的 04/25 12:48
26F:推 TWkobe: 补充一下 spinlock 本来是kernel structure不适合直接用 04/25 13:16
27F:→ TWkobe: 在 user space , user space请用pthread spinlock 04/25 13:16