為什麼個人作業系統不能是實時的?

時間 2021-05-29 23:39:42

1樓:

從實時系統(real-time system)的角度上看,現代個人電腦的作業系統都是「實時」的,嚴格上說是軟實時(soft real-time),即系統對任務的響應時間只是盡可能短,並沒有嚴格的保證(guarantee)。

「我的PC卡住」可能因為當前任務被其它更高優先順序任務(比如軟體bug/錯誤/異常所導致的奇怪的中斷啊)搶占了CPU執行時間,也可能是因為當前任務需求的資源(記憶體,外設,匯流排等)被其它任務鎖住了所以被阻塞。這些任務的優先順序或資源分配可能不是很科學,而且應用本身的設計也可能不是很科學,甚至硬體本身的資源就不足提供你需求的響應時間。總之原因很多。

「個人電腦為什麼不可以是不同優先順序可搶占,相同優先順序做時間片輪詢。讓計算機能實時響應高優先順序操作」你想到的這些在大部分現代作業系統都得到實現,甚至你沒想到的也實現了,只是系統太複雜了,錯誤總是來得很突然。

2樓:ImKAIne

卡死是人家寫的不好或者某些實現上的bug,在ui執行緒裡幹別的事導致卡死了,正常的處理邏輯是讓當前介面弄個載入中的動畫然後起個子執行緒去跑真正要做的事情,子執行緒跑完了發個訊息通知ui執行緒該重新整理介面了

3樓:

幫Kevinfu貼個回答。實時系統從廣義上講本來就分硬實時,強實時和軟實時,理論上只要支援優先順序搶占式排程的作業系統都可以用作實時系統,包括linux(linux的排程策略是可配置的)。所以實時系統和非實時系統的關鍵區別在於排程策略,而不同的排程策略的背後是應用需求。

一般非實時系統都是多應用多用途的,而實時系統即便支援多應用,也通常是服務於同乙個用途。所以非實時系統的排程策略要保證不同用途的應用程序都能得到充分的排程,不至於有某個程序因為優先順序低而被餓死,因此非常複雜,一般非實時系統的應用開發者不需要理會優先順序和排程。而實時系統的排程策略就簡單得多,通常是優先順序搶占為主,這樣就需要實時系統的應用開發者通盤考慮整個系統的優先順序配置

4樓:風雨橋

那我反問一下提問者,什麼是實時什麼不是實時。其實對於我們普通使用者來說,只要能滿足你的速度要求,就可以說是實時。當然這個是廣義上的實時系統。

我們個人PC的作業系統一般在狹義上不能稱為實時系統。例如常用的Windows和Linux。這一類作業系統的重點是偏重於多用途,想做到這一點,就要方便應用程式的開發。

為了達到這一點,作業系統將硬體和應用程式隔離,就是說開發應用程式只需要關心功能實現,而不需要過多關心硬體,作業系統已經提供了標準介面。為了防止訪問硬體衝突,應用程式操作硬體功能(例如串列埠、USB、硬中斷等)全部需要向作業系統申請。再加上這類作業系統任務分配策略大部分沒有採用優先順序搶斷功能,所以這樣一來實時性必然大打折扣。

舉個最簡單例子,比如汽車剎車系統,採用的就是實時系統。如果採用像linux這樣的作業系統,那麼它響應過程是這樣的。首先應用程式向系統註冊剎車訊號(作業系統管理一切硬體),並且繫結到乙個事件中。

當剎車訊號來到,發生中斷,系統得到這個訊號,根據繫結的事件,發出這個事件訊號通知到註冊的應用程式上。

是不是很繁瑣,而實時系統響應是這樣的,硬體中斷訊號一來,立即啟用剎車任務。而這個任務事先已經設定最高優先順序,剎車任務立即搶斷當前所有任務,執行剎車。是不是非常快捷可靠。

所以我們電腦上的系統更偏向功能性,這也是我們電腦應用軟體眾多,功能強大的原因。但如果把電腦換成像實時系統那樣,估計應用程式開發者會瘋掉的。畢竟對於電腦來說穩定性不是最關鍵的,Windows宕機重啟就可以了。

就像一位知名人士說的:如果每死一次機,微軟賠客戶一塊錢,那麼用不了多久時間,微軟就倒閉了。

5樓:

你壓根就沒理解實時作業系統的用途,也不明白你的電腦為什麼會卡住,卡住的最根本原因還是硬體系統的效能問題。而實時作業系統的主要用途是在自動控制領域(如航空航天),個人電腦根本沒有這個必要。

6樓:原子筆

windows上面你可以試下隨便設定乙個應用程式程序優先順序為實時的。

你可以看下會發生什麼。。單核電腦絕對卡死當場了吧(多核時代我還真沒做過這個實驗)。

因為如果允許實時的程序存在,那麼他必須經常性(以非常高的頻率)主動讓出cpu才能讓多工作業系統不崩(否則連作業系統都沒法奪回cpu控制權)。 所以這種應用程式是非常難開發的。

過去有乙個叫RMCLOCK 的軟體 RMClock - Wikipedia,啟動就是實時程序,沒事發起hlt指令來給電腦省電(軟降頻),還能根據系統實際負荷來調整降頻幅度。不過多核x64時代這個軟體早不更新了,沒法用了。

7樓:

大部分人對「實時」這個詞都理解錯了,英文的「real time」指的是「真實時間」而不是「立即響應」

「真實時間」的意思是:系統承諾指定任務在指定時間內一定完成,換句話說和響應速度沒什麼關係。

我們能見到的實時系統,一般都是只能完成有限固定任務,例如大部分嵌入式作業系統。

至於為什麼一般面向個人使用者的作業系統不是實時的,我的理解是因為一般作業系統需要完成的任務種類太多,面對的情況太複雜,所以整個系統難以做成實時的。尤其是需要和使用者互動的任務。

8樓:

PC上跑的軟體太多太雜,來自不同的公司的不同程式設計師。每個程式都有自己的私心。

怎麼能給他們實時優先順序?要像防賊一樣防它們。

實時系統上實在太難做開發了,業務越多越困難。不要問我怎麼知道的,我經常被叫去處理這種問題,心累。

9樓:anglum

曾經有。

現在Windows系統的祖宗是DOS,後來加了桌面,知名的版本叫Windows 3.1。DOS就是實時系統,執行在8086晶元上,記憶體512k就很高大上了,整個系統就一張軟盤。

現在雲這麼流行,其實乙個終端就好,並不需要作業系統,前提通訊要夠好。大家申請個超算中心賬號,登入就用,需要的僅是一線路,一鍵盤,一滑鼠,一螢幕而已。

太美不敢想……

10樓:曲奇

所謂實時,是要求系統在指定的時間內必須做出響應,並不是指「快」。

實時作業系統多用在工業控制領域,比如戰鬥機的飛控系統,如果沒有及時對反饋訊號做出響應,飛機就掉下去了。做不到實時,就是災難性的結果。

普通使用者使用作業系統,無非是弄個文件,聽歌看片,上網,打遊戲等等,系統卡一卡,不致命。實時需求不強烈。

實時作業系統中所跑的任務/程式必須是嚴謹設計的,「優先順序搶占」只能給極少的關鍵任務,否則就無法保證實時,這個系統整體上小而精,由開發者完全控制。而PC就是個高速路,誰都可以開發軟體跑在上面,大部分時間流暢,偶爾堵車。

普通作業系統中雖然也設計了優先順序,但是高優先順序任務並不能碾壓低優先順序,後者總要保證一定的時間片來執行,以免掛死。

實際上Windows/Linux開發中,執行緒可以指定自己的優先順序的。這就帶來乙個問題,哪個任務不想自己執行最快呢?大家都申請最高優先順序,作業系統傻眼了。

實際上,作業系統只參考每個執行緒的申請,它有自己的排程策略。

再舉個例子:

IP包頭的設計中,有個8bit的伺服器型別(TOS)字段,其中前3個bit表示優先權,能容納8種優先權。用名稱表示時,這8個取值分別為routine(普通,值為000)、priority(優先,值為001)、immediate(快速,值為010)、flash(閃速,值為011)、flash-override(急速,值為100)、critical(關鍵,值為101)、internetwork control (網間控制,值為110)和network control(網路控制,值為111),分別對應於數字0~7。

TOS欄位已經廢棄不用。為啥呢?因為哪個使用者發資料的時候不想把優先順序設得高一點呢?然後路由器就傻眼了。

11樓:

你其實不懂實時系統。

你寫的那些都是實時系統的解決方案而不是實時系統的目的。實時系統的目的是保證每個任務在deadline之前執行完成,為了達成這個目的,你需要搶占和輪詢。但是不是給你搶占和輪詢,就能保證實時性了,這個邏輯要搞清楚。

為了達到實時性,實時系統裡面的高優先順序任務必須要非常快速執行並且不能有大的執行時間的variation,不然的話一旦高優先順序任務花的時間多了,全部的其它任務都得停下來等這個高優先順序任務。

像你說的,如果PC卡住了,你覺得在實時的框架下給哪個程式高優先順序才能解決這個問題?給已經卡住的程式高優先順序?那你的電腦會更卡住......

給其它程式高優先順序?那你怎麼事先知道他們需要高優先順序的?給任務管理器高優先順序?

任務管理器本來就是高優先順序了,Ctrl+Alt+Del在當前Windows裡面基本是不管什麼情況下都可以喚出的。那麼你說的「高優先順序操作」到底是什麼東西呢?你自己想明白了麼?

所以你需要的不是real-time的系統,你需要的是real-fast的系統......而這不是作業系統可以解決的問題,你需要一台更快的電腦。

12樓:徐辰

第一,滑鼠鍵盤卡住其實和實時不實時沒什麼關係,只是因為有優先順序更高的事要做;

第二,如果操作沒完成,比如下乙個場景要用的貼圖還沒從磁碟裡讀出來,就算滑鼠鍵盤設成最高優先順序你也沒法繼續打遊戲。

13樓:

「個人電腦為什麼不可以是不同優先順序可搶占,相同優先順序做時間片輪詢。讓計算機能實時響應高優先順序操作」

現代的桌面作業系統都是這麼做的。實時系統*不是*這麼做的。

題主方便透露一下自己是哪個大學的嗎?

14樓:「已登出」

「不同優先順序可搶占,相同優先順序做時間片輪詢」

這個一般叫做可搶占輪換法(preemptive round robin),確實有很多情況用類似的方法的……

以及RR不是實時排程演算法啊,實時排程都是earliest ddl first這種畫風的

你這個需求也不是對實時性的需求,而是說你希望前台程序的優先順序高一點……但是呢,其實它的優先順序已經比別人高了,還卡頓的原因是這個程序自己不願理你,因為一方面它在等IO,理你也沒用,另一方面是實現有問題,UI執行緒被針對了

教材上說鐵路訂票系統是實時作業系統,可是伺服器的Linux不是分時作業系統嗎?

作業系統有專門的定義,訂票系統是典型的應用,和作業系統沒關係。從給的三個選項來說,b的實時性要求高,或者說原子性要求高,之前12306比較坑的時候,知乎上就有分析,這個系統的難點在哪,查詢鎖定要海量併發但對具體資源 某乙個座位 互斥,這個有實時性體現,但是還是那句話 和作業系統沒有直接關係 題目的問...

作業系統實時排程中的可排程判斷條件是怎麼得出來的?

sum T 這個我也糾結了一下,本人是東秦的小菜雞,看到了就隨便寫寫 先明確兩個定義 處理時間Ci和週期時間Pi 處理時間Ci 指的是乙個任務每次需要處理的時間長度,我們假設單位是ms。週期時間Pi 指的是HRT 硬實時任務 每次執行的間隔,我們也假設單位是ms。然後明確一下本算式使用情況 單處理機...

為什麼要學作業系統?

JavaGuide 作業系統中的很多思想 很多經典的演算法,你都可以在我們日常開發使用的各種工具或者框架中找到它們的影子。比如說我們開發的系統使用的快取 比如 Redis 和作業系統的快取記憶體就很像。CPU 中的快取記憶體有很多種,不過大部分都是為了解決CPU處理速度和記憶體處理速度不對等的問題。...