多執行緒(李森作業系統)

2021-09-21 18:13:57 字數 1264 閱讀 1531

hw9:互斥量

mutex是用來保護資源的。

cond是用來通知喚醒的一種機制,如a等待b的輸出結果,a可呼叫pthread_cond_wait來等待,b輸出結果後可以通知a,告訴他b的工作已經結束,a可以繼續執行了。b呼叫thread_cond_signal or pthread_cond_broadcas來完成此操作。signal喚醒乙個等待者,broadcst喚醒全部。

batch:結算時,沒有io

interactive:互動型,強調響應時間,

real time:實時型,每個動作在規定時間內完成規定的動作,避免資料丟失。例如:生產線。

所有系統要滿足:公平型(公平享用cpu),規定性(都要遵守規定),平衡性(系統的所有資源充分利用)

batch系統排程演算法:

先來先服務,有弊端:對cpu利用率不高,資源浪費,不好

短作業優先法:比較成熟。優點:快。問題:估算每個程序的執行時間,不能保證所有程序都來。

剩餘時間短的優先:

高反應率優先:

執行緒排程:多執行緒

最早時:按照程序排程。cpu以程序進行排程,給你100ms時間片,可以執行程序裡面的執行緒,只能a程序裡面的a1,a2

現在:cpu按照執行緒為單位排程。不管執行緒是哪個程序的,隨便調。

xv6的排程:多路復用:不用cpu的時候,就算你時間片沒用完,也要從cpu中退下。

難點:(1)如何從乙個程序切換到另乙個程序:上下文切換。

(2)如何做到上下文切換透明化,使用時鐘中斷處理程式

(3)多cpu同時切換程序時,使用鎖來避免競爭。

(4)程序退出時切換其占用記憶體與資源。

上下文切換:從使用者態程序->核心態程序->新程序的核心執行緒。

生產者-消費者模式:

睡眠與喚醒,生產者生產之後,需要傳送給消費者資訊。只要籃子裡面有東西,生產者就一直等待。如果沒東西,生產者就生產。消費者看到籃子空,就一直等待。

它的問題:如果生產者很慢,導致消費者無限迴圈等待,消耗cpu時間,cpu利用率不高。改進:如果籃子裡面沒東西,消費者就休眠(sleep),如果籃子裡面有東西了,生產者wakeup(q)喚醒消費者。問題:消費者準備休眠的時候,時間片到了,生產者wakeup時,沒找到消費者,wakeup失效,又輪到消費者執行了,wakeup失效,消費者卻一直在等待。

改進:加鎖,生產者先獲得佇列鎖。睡眠時:先釋放鎖,等喚醒時再加鎖。

exit(): 釋放棧記憶體資源。

父程序fork()了子程序,子程序結束後,父程序一定要處理一下子程序的結束訊號。

kill(): 殺掉程序。

多執行緒的作業系統

在支援多執行緒的作業系統中,假設程序p建立了若干個執行緒,那麼 47 是不能被其他執行緒共享的。47 a.該程序的 段 b.該程序中開啟的檔案 c.該程序的全域性變數 d.該程序中線程的棧指標 答案 d 解析 同一程序間的執行緒共享的資源包括 1 堆 由於堆是在程序空間中開闢出來的,所以它是理所當然...

作業系統 多程序 多執行緒

對比維度 多程序多執行緒 結論資料共享 資料共享複雜,需要用ipc 共享程序資料,資料共享簡單 多程序 多執行緒 資料同步 資料是分開的,同步簡單 因為共享程序資料,同步複雜 多程序 多執行緒 記憶體 cpu 占用記憶體多,切換複雜,cpu利用率低 占用記憶體少,切換簡單,cpu利用率高 多程序 多...

linux多執行緒 作業系統執行緒同步互斥

這一目主要我想得是理論和實際結合的辦法去做,先將理論,把這塊在作業系統中的內容先進行陳述。然後用linux下的 去真正實現。perterson演算法是用來是實現對臨界區資源的互斥訪問,它是用軟體的機制實現。也就是說在linux系統程式設計當中,如果不讓你使用pthread mutex t mutex...