在多任務系統中,可以同時執行多個并行任務,各個任務之間互相獨立。通過操作系統執行任務調度而實現宏觀上的“并發運行”。從宏觀上不同的任務并發運行,好像每個任務都有自己的 CPU 一樣。 其實在單一 CPU 的情況下,是不存在真正的多任務機制的,存在的只有不同的任務輪流使用 CPU,所以本質上還是單任務的。但由于 CPU 執行速度非常快,加上任務切換 十分頻繁并且切換的很快,所以我們感覺好像有很多任務同時在運行一樣。這就是所謂的多任務機制。
多任務的最大好處是充分利用硬件資源,如在單任務時(大循環結構,如大部分 51
程序)遇到 delay 函數時,CPU 在空轉;而在多任務系統,遇到 delay 或需等待資源時系
統會自動運行下一個任務,等條件滿足再回來運行先前的任務,這樣就充分利用了 CPU,
提高了效率。
任務的特性:
搶占式調度:
調度的概念,通俗的說就是系統在多個任務中選擇合適的任務執行。系統如何知道
何時該執行哪個任務?可以為每個任務安排一個唯一的優先級別,當同時有多個任務就
緒時,優先運行優先級較高的任務。
同時,任務的優先級也作為任務的唯一標識號。代碼中都是對標識號來完成對任務
的操作的。如 OSDelPrioRdy(prio),OSSetPrioRdy(prio)等。
不同的優先級對應就緒表中的每一位。低位對應高優先級。優先級 0 的優先權最高,
優先級 31 的優先權最低。
“搶占式調度”是指:一旦就緒狀態中出現優先權更高的任務,便立即剝奪當前任務的運行權,把 CPU 分配給更高優先級的任務。這樣 CPU 總是執行處于就緒條件下優先級最高的任務。
先來看看中斷的過程:當中斷來臨時,CPU 把當前程序的運行地址,寄存器等現場數據保存起來(一般保存在棧里),然后跳到中斷服務程序執行。待執行完畢,再把先前保存的數據裝回 CPU 又回到原來的程序執行。這樣就實現了兩個不同程序的交叉運行。
借鑒這種思想就能實現多任務了:模仿中斷的過程就可以實現任務切換運行。
任務切換:
任務切換時,把當前任務的現場數據保存在自己的任務棧里面,再把待運行的任務的數據從自己的任務棧裝載到 CPU 中,改變 CPU 的 PC,SP,寄存器等。可以說,任務的切換是任務運行環境的切換。而任務的運行環境保存在任務棧中,也就是說,任務切換的關鍵是把任務的私有堆棧指針賦予處理器的堆棧指針 SP。 兩個任務的切換過程如下:
1.Spring MVC 的介紹
Spring Web MVC是基于Servlet API構建的原始Web框架,也是Spring框架的一部分。它提供了靈活可擴展的MVC架構,方便開發者構建高性能的Web應用程序,并與 Spring 生態系統無縫集成。
2.MVC 設計模式 MVC(Model…