上期回顧:
程序是程式的一次執行過程,作業系統以程序為單位排程任務;
多個程序共享cpu,每個程序都有自己的虛擬cpu,物理cpu就在這些虛擬cpu之間來回切換,構成多任務模型。
其實從單個任務的角度看,他們是不喜歡甚至討厭作業系統的!
為什麼?因為程序跟人一樣,是貪得無厭的,而作業系統剝奪了他們獨佔硬體資源的權力!
注意:由於cpu在各個程序之間來回快速切換,所以每個程序執行其運算的速度是不確定的;而且當同乙個程序再次執行時,他的運算速度通常不可再現;所以,在對程序程式設計時決不能對時序做任何確定的假設。
分析:
1.由於硬體資源cpu有限,各個程序輪流執行,那麼從單個任務的角度,他的執行過程就要受到其他任務的影響,比如其他任務的優先順序,任務數量的多少等等!就像開車一樣,你的賓士能開250,但是也得路況滿足才行,如果你在北京的路上,估計最多25了,呵呵!誰都想開的更快點,但是道路有限,別的車也得跑不是。所以你開車速度的多少(程序速度),就不取決於你自己了,取決於:道路的寬窄(cpu能力)、其他車的多少(程序數量),特權車的多少(優先順序)。
2.再以北京交通為例,同一條道路,每一天的交通路況都不相同,取決於:車數量的多少,天氣情況,是否有交通事故等等。那麼你開同樣一輛車,同樣的道路,不同時間走得快慢就不一樣,所以用的時間就不同了,這個很好理解。
3.正因為你不能對外界環境做非常精準的預期,同樣你不能對自己的開車速度和開車時間做精準預期。天氣多變,尾號限行,嚴重的你一晚上都未必能到家,比如說前兩天北京的大暴雨,有的人3點才能到家,而有的人根本就到不了家了,哎!他們有錯嗎?他們沒有區別,區別的是外部環境。祝福那些到不了家的人吧,更祝福你們的家人!
本質:
其實這種現象的造成,是有本質原因的。在於作業系統和單個程序本身,他們是一對矛盾體,各自存在的目的是不同的!
作業系統的存在:計算機那麼多硬體資源,每次只讓其中乙個幹活,其他人歇著太浪費了,我得把他們組織起來,誰都不能偷懶。有點資本家的味道,呵呵!
程序的存在:我有我的任務,就是最快的把我這邊的工作完成,好向老闆要獎勵,我才不管他們之間誰歇著呢,只要我交給他們的活兒,一直沒停就行。苦命的碼農啊!
即:作業系統是為了巨集觀上硬體利用率的最大化,減小瓶頸損失;單個程序是為了獨佔資源,快速執行。乙個全域性乙個個體,目的不同,矛盾產生!
既然矛盾天然形成,那麼我們就只能最大化的避開。
注意:當乙個程序具有嚴格的實時要求時,也就是一些特定事件一定要在所指定的若干毫秒內發生,那麼就必須採取特殊措施保證他們一定在這段事件中發生。但是,通常大多數程序並不受cpu多道程式設計或者其他程序相對速度的影響。
例如:程序a延時3s,作業系統就會讓其阻塞,排程其他程序執行;等3s時間到,並不是說這個程序就能馬上執行,而是作業系統把a再次放入就緒佇列,產生排程中斷。問題就在這裡,排程中斷並不能保證a一定執行,這跟排程演算法有關了,其實就是剛開始說的問題了。如果想馬上執行,就必須在優先順序上,在排程策略上進行優化了!說了半天,又轉回來了,其實就是乙個問題,呵呵!
多工作業系統
單使用者單任務作業系統是指一台計算機同時只能有乙個使用者在使用,該使用者一次只能提交乙個作業,乙個使用者獨自享用系統的全部硬體和軟體資源。多使用者與多工作業系統是指一台計算機可以同時有多個使用者同時使用,並且同時可以執行由多個使用者提交的多個任務。windows多工處理採用的是虛擬機器技術,為每乙個...
多工作業系統的任務切換
在學習os時,對於多工作業系統的任務切換,一直不能理解 控制權是怎麼麼回到排程程式上的?記得在描述任務切換時,一般都是這麼描述的 在每乙個時鐘滴答,都將檢查當前程序是否是乙個運 行超過100毫秒的使用者程序。如果是,則呼叫排程程式來檢視是否有另乙個使用者程序在等待cpu,我這裡舉個例子 我用 寫了乙...
UCOS 實時多工作業系統
ucosii 的前身是 ucos,最早出自於 1992 年美國嵌入式系統專家 jean j.labrosse 在 嵌 入式系統程式設計 雜誌的 5 月和 6 月刊上刊登的文章 並把 ucos 的原始碼發布在該雜誌的 bbs 上。目前最新的版本 ucosiii 已經出來,但是現在使用最為廣泛的還是 u...