[心得] multi-tasking的觀念

作者: zzss2003 (brotherD)   2018-11-21 11:34:46
比喻得很爛請幫忙改正~
有一個人格分裂症的少女,身體裡住著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啦~)
作者: alan23273850   2018-11-22 03:07:00
這是不是該po在grad-probask板上
作者: ypyp1010 (Nigel)   2018-11-23 09:17:00
其實就是把系統主頻的離散時間降頻給好幾個task用這樣真的會比較快嗎?平均分配給各個task的頻率是一樣的但各個task耗得時間又不同...
作者: swhss   2018-11-24 05:56:00
multi-task從task得到時脈總合上看是比不多工少,因為還要扣掉overhead。但是有多工能力,在軟體寫作上增加許多便利,是單工比不上的
作者: b0920075 (Void)   2018-11-26 05:45:00
其實沒那麼複雜,就一個人要打很多工而已
作者: ypyp1010 (Nigel)   2018-11-26 09:23:00
推樓上,本質其實都是單工,但單工是ㄧ個人在一間公司,有很多項任務要處理,multi-task就是ㄧ個人要到各個公司處理不同的事情XD

Links booklink

Contact Us: admin [ a t ] ucptt.com