作者zzss2003 (brotherD)
看板ASM
标题[心得] multi-tasking的观念
时间Wed Nov 21 11:34:46 2018
比喻得很烂请帮忙改正~
有一个人格分裂症的少女,身体里住着6种人格。
每个人格(task)在少女的记忆里(memory)都有"各自的"记忆空间(stack),可以用来放置
上次操控该少女时的状态(cpu status register)。
如果"没有用各自"的stack来放cpu status register,会发生这种事:
A人格看影片看到一半 -> (切换成B人格) -> B: 干???我怎麽在看影片? 我要去大便!
-> (切换成A人格) -> A: 咦???我怎麽在大便?
这样子不行,每个人格都混在一起了,不是独立的,且也没有办法把自己的事做完。
所以当要切换成B人格的时候,A人格必须把当前状态(cpu status register)存回自己的
stack,好让B人格也把上次操作少女的状态load进少女(这样B才知道上次自己做到哪里)
,这个行为就是context switch
所以这就是为什麽每个task都要有自己的stack啦~
然後OS会负责分配每个人格什麽时候该出现(scheduler),以及要出现多久(time quantum)
(PS:每个task的stack中,有一个register是用来放"上次做到哪里",这样子scheduler就
可以把该register的值抓近来放在CPU的program counter中,好让每个task可以知道从哪
边开始继续往下做,其实这个register就是使用者自定义的program counter啦~)
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.163.216.18
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/ASM/M.1542771288.A.D7C.html
※ 编辑: zzss2003 (118.163.216.18), 11/21/2018 11:35:43
1F:推 alan23273850: 这是不是该po在grad-probask板上 11/22 03:07
我也不知道欸哈哈,只是当初这个问题卡我卡很久,上PTT跟网路查也查不到什麽所以然,
搞懂後想说分享给大家知道一下
※ 编辑: zzss2003 (118.163.216.18), 11/22/2018 09:54:45
2F:→ ypyp1010: 其实就是把系统主频的离散时间降频给好几个task用 11/23 09:17
3F:→ ypyp1010: 这样真的会比较快吗?平均分配给各个task的频率是一样的 11/23 09:18
4F:→ ypyp1010: 但各个task耗得时间又不同... 11/23 09:21
5F:推 swhss: multi-task从task得到时脉总合上看是比不多工少,因为还要 11/24 05:56
6F:→ swhss: 扣掉overhead。但是有多工能力,在软体写作上增加许多便利 11/24 05:56
7F:→ swhss: ,是单工比不上的 11/24 05:56
8F:→ b0920075: 其实没那麽复杂,就一个人要打很多工而已 11/26 05:45
9F:推 ypyp1010: 推楼上,本质其实都是单工,但单工是ㄧ个人在一间公司, 11/26 09:23
10F:→ ypyp1010: 有很多项任务要处理,multi-task就是ㄧ个人要到各个公司 11/26 09:24
11F:→ ypyp1010: 处理不同的事情XD 11/26 09:25