操作系统--用户级线程与内核级线程
一.多進(jìn)程是操作系統(tǒng)基本圖像?
進(jìn)程都是在內(nèi)核進(jìn)行
二.用戶級(jí)線程
2.1線程引入
可以切指令不切表,也就是資源不動(dòng),指令執(zhí)行分開,更加輕量化,從而提高效率,保留并發(fā)優(yōu)點(diǎn),避免進(jìn)程切換代價(jià),也就引入了線程.?
2.2多線程例子
?
同時(shí)觸發(fā)以及用yield交替執(zhí)行
?
104是B的函數(shù)返回地址,將104壓棧,其他也是陸續(xù)壓棧,用兩個(gè)執(zhí)行序列和一個(gè)棧,就會(huì)發(fā)現(xiàn)第一個(gè)線程,居然返回的函數(shù)地址是404,也就是線程在亂跑.?
?解決辦法,一個(gè)序列一個(gè)棧,切回線程要將棧切回,用一個(gè)地方存放棧指針也就是TCB(thread control block),esp是cpu寄存器(理解為大腦),利用TCB和棧配合就解決了多線程執(zhí)行問(wèn)題,每個(gè)線程有自己的TCB和棧.
用戶級(jí)線程缺點(diǎn): 由于某個(gè)線程阻塞,導(dǎo)致進(jìn)程阻塞,而內(nèi)核并不知道,不會(huì)切換到下一個(gè)線程,會(huì)到另一個(gè)進(jìn)程,這樣瀏覽器例子就不會(huì)顯示內(nèi)容.
?但是內(nèi)核級(jí)線程就不會(huì)這樣
三.內(nèi)核級(jí)線程
3.1 多核利用核心級(jí)線程優(yōu)勢(shì)
并發(fā):同時(shí)觸發(fā),交替執(zhí)行,共用一套資源.這意味著,如果程序在單核處理器上運(yùn)行,那么這兩個(gè)線程將交替地?fù)Q入或者換出內(nèi)存。這些線程是同時(shí)“存在”的——每個(gè)線程都處于執(zhí)行過(guò)程中的某個(gè)狀態(tài)。
并行:同時(shí)觸發(fā),同時(shí)進(jìn)行.如果程序能夠并行執(zhí)行,那么就一定是運(yùn)行在多核處理器上。此時(shí)程序中的每個(gè)線程都將分配到一個(gè)獨(dú)立的處理器核上,因此可以同時(shí)運(yùn)行。
多核共用一套內(nèi)存映射,真正實(shí)現(xiàn)核心級(jí)線程才能利用多核,如果用多進(jìn)程,就需要不同資源(內(nèi)存映射)那實(shí)際上對(duì)于多核就是一套資源反復(fù)切換,如果用用戶級(jí)線程,操作系統(tǒng)是看不見的,沒(méi)法使用多核.也就是多核只能適用于核心級(jí)線程才能發(fā)揮優(yōu)勢(shì).
3.2和用戶級(jí)線程對(duì)比??
?進(jìn)入內(nèi)核只能是中斷,INT指令是一個(gè)中斷指令?
?
四.總結(jié)
多個(gè)線程同時(shí)執(zhí)行任務(wù)肯定存在線程間的同步和互斥:
線程同步:指線程之間所具有的一種制約關(guān)系,一個(gè)線程的執(zhí)行依賴另外一個(gè)線程的消息,當(dāng)它沒(méi)有得到另一個(gè)線程的消息時(shí)應(yīng)等待,直到消息到達(dá)時(shí)才被喚醒。
線程互斥:指對(duì)于共享的進(jìn)程系統(tǒng)資源,每個(gè)線程訪問(wèn)時(shí)的排他性。當(dāng)有若干個(gè)線程都要使用某一個(gè)共享資源時(shí),任何時(shí)刻最多只允許一個(gè)線程去使用,其他線程必須等待,直到占用資源者釋放該資源。線程互斥可以看成是一種特殊的線程同步。
線程間的同步方法大體可以分為兩類:
用戶模式(使用時(shí)不需要切換內(nèi)核態(tài),只在用戶態(tài)完成操作):臨界區(qū):適合一個(gè)進(jìn)程內(nèi)的多線程訪問(wèn)公共區(qū)域或代碼段時(shí)使用;
內(nèi)核模式(利用系統(tǒng)內(nèi)核對(duì)象的單一性來(lái)進(jìn)行同步,使用時(shí)需要切換內(nèi)核態(tài)與用戶態(tài)):
-
-
事件:通過(guò)線程間觸發(fā)事件實(shí)現(xiàn)同步互斥;
-
互斥量:適合不同進(jìn)程內(nèi)多線程訪問(wèn)公共區(qū)域或代碼段時(shí)使用,與臨界區(qū)相似;
-
信號(hào)量:與臨界區(qū)和互斥量不同,可以實(shí)現(xiàn)多個(gè)線程同時(shí)訪問(wèn)公共區(qū)域數(shù)據(jù),原理與操作系統(tǒng)中PV操作類似,先設(shè)置一個(gè)訪問(wèn)公共區(qū)域的線程最大連接數(shù),每有一個(gè)線程訪問(wèn)共享區(qū)資源數(shù)就減一,直到資源數(shù)小于等于零;
-
參考:
操作系統(tǒng)_哈爾濱工業(yè)大學(xué)_中國(guó)大學(xué)MOOC(慕課)
總結(jié)
以上是生活随笔為你收集整理的操作系统--用户级线程与内核级线程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: simulink学习仿真(微分模块、传递
- 下一篇: CSDN之人人code,整数取反