色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

線程是如何靠中斷切換的呢

冬至配餃子 ? 來源:天奇工作室 ? 作者:LRC ? 2022-08-02 18:19 ? 次閱讀

上一次的大合集我們從半導體講到了邏輯門,再從邏輯門講到了組合邏輯電路和時序邏輯電路,又緊接著介紹了CPU內(nèi)核的設計體系,最后以CPU的指令集作為結尾,一個CPU已經(jīng)頗具雛形。

經(jīng)過11-19章的更新,我們又介紹了線程和進程,處理器的中斷和異常、特權模式以及最主要的緩存。我將用更清楚連貫的語言將這些內(nèi)容重新串講一次,幫助大家更好地理解,當然這也是大合集的本來初衷。

下面開始。

首先是線程和進程。早期的計算機在一段時間內(nèi)只能運行一段代碼,比如計算導彈軌跡,計算完了出結果就好了。這也是計算機最本來最初級的用法。但是隨著計算機不斷發(fā)展,尤其是人民生活水平的不斷提高,計算機這樣的用法實在是有些過于枯燥了。比如我想邊用計算機聽歌的同時打下這段文字,就需要計算機能同時做兩件事,于是人們就發(fā)明了線程,而線程之間通過少量的必要的溝通可以組合形成一個進程,也就是我們通常意義上的應用程序。比如說音樂播放器中,音樂的播放是一個線程,用戶的操作界面是另外一個線程,兩個線程合起來構成了音樂播放器。當然,一個應用程序(進程)也可以只有一個線程。每個線程包括系統(tǒng)線程都被劃定了一個空間,并且高權限線程(系統(tǒng)線程)能訪問低權限線程(應用程序)的空間,低權限線程只能訪問屬于自己的空間,不然病毒線程將大行其道。所以線程的一個基本屬性需要在CPU中被明確記錄的是權限等級。

對于計算機系統(tǒng)或者CPU來說,越值得信賴的線程的權限等級是越高的。什么是越值得信賴的線程呢?計算機本身的操作系統(tǒng)肯定是值得信賴的,畢竟如果連操作系統(tǒng)都不能信賴,還有什么值得信賴?不過操作系統(tǒng)雖然值得信賴,但本身肯定多多少少存在一些Bug,不然Windows也不會天天藍屏了,但是對于CPU來講,操作系統(tǒng)即使有無心的錯誤,但肯定不會是有害的錯誤。

那么權限等級能決定什么呢?能決定這個線程能訪問哪些內(nèi)容。

話說回來,早期的那個計算導彈的程序在現(xiàn)在看來就可以算是一個線程。而具體是如何做到并行處理的呢?看過三體的同學應該都知道三體人是怎么用一顆智子封鎖地球科技的,靠的就是智子光速來回穿梭干擾在位于地球各處的高能粒子對撞機。因為智子速度太快了,所以只需要一顆就能封鎖整個地球的科技。CPU也是同理,隨著CPU性能的提升,它也可以快速來回切換并處理不同的線程,底層都是串行的,但給我們的感覺卻是并行的。

當然隨著科技的進一步發(fā)展,CPU的核心數(shù)早已從單核心變成了多核心,甚至在一些服務器里我們還能見到多CPU的主板,所以依靠多個CPU核心,現(xiàn)在也能實現(xiàn)真正意義上的并行,不過線程數(shù)總是多于CPU核心數(shù),因此線程的切換即使到了今天也是一直在用的。

那么線程是如何切換的呢?最常見的就是靠中斷了。中斷顧名思義,做到中間的時候被打斷了,有更高優(yōu)先級的人物需要處理。什么被打斷了?當前執(zhí)行的線程被打斷了。被什么打斷了?不好說,有可能是定時時鐘,有可能是你敲擊的鍵盤或你移動的鼠標,有可能是某一個線程自己發(fā)出來的“軟中斷”。為什么要有中斷?就我個人理解,中斷是人與電腦進行實時交互的窗口,沒有中斷就像你沒有鼠標和鍵盤,啥也做不了。但是中斷并不是只有人可以用,計算機本身也能用,只要是優(yōu)先級更高的任務需要介入就可以用。

所以線程是如何靠中斷切換的呢?

第一個方法,我稱之為被動切換。系統(tǒng)里的計時器會對該線程計時,時間差不多了(大概是5ms左右,看系統(tǒng)設定)就該把CPU讓位置出來給另一個線程了。具體過程是,當系統(tǒng)時鐘達到設定的時間時,向CPU發(fā)送一個中斷信號,CPU將現(xiàn)在線程的上下文作為棧保存在內(nèi)存中,暫時儲存起來,同時將pc寄存器跳轉到內(nèi)存中存有中斷服務例程的入口處,執(zhí)行中斷服務例程的程序,程序會查找得知中斷來源(這一步在高級的CPU上可以用硬件實現(xiàn)從而省略軟件查找的過程),進而跳轉到系統(tǒng)調(diào)度線程,這個線程會根據(jù)執(zhí)行情況將一個新線程調(diào)度到CPU上執(zhí)行,自己則退隱。從而實現(xiàn)線程的切換。

第二個辦法,我稱之為主動切換。當本線程沒事干了,或者說在等另一邊的結果,那么這個時候就會執(zhí)行一個軟中斷,自覺地把線程讓出來(要是不自覺就沒辦法了),流程和上面一致,只不過中斷源不再是時鐘了,而是線程本身,稱之為軟(軟件)中斷。

還有一種辦法不是靠中斷切換線程,也可以并行處理的一種技術叫做超線程技術。這個技術是Intel率先提出來的,他們聲稱增加5%的晶體管數(shù)量可以提升20%的性能。

可以理解為如果當前線程沒事干,而且這個線程“不自覺退出”,那么硬件直接介入讓另外一個線程運行。與上面靠中斷的第二種方法不同的是,這種切換是CPU硬件自發(fā)的,操控粒度可以更細(前者只能在軟件層面判斷是否會有空閑情況發(fā)生,后者則能在硬件層面監(jiān)控,硬件發(fā)生堵塞情況軟件是無法知道的),智能程度會更高,線程切換的過程消耗也會更小。如此一來,CPU可以在本該空等的地方擇機執(zhí)行另外一個線程的指令,實現(xiàn)了時間管理,縮短了兩個程序執(zhí)行的總體時間。

上文中提到的線程切換技術中除了第一種被時鐘叫停的以外,基本都是太閑了主動讓位或者被讓位的。那么為什么會出現(xiàn)線程太閑的情況呢?因為他們在等。等的可能是遠方服務器的響應,可能是用戶的輸入,可能是內(nèi)存數(shù)據(jù)的返回……前兩種無關性能,解決不了也不用解決,但是等內(nèi)存可不行,所以介于CPU核心和內(nèi)存之間的緩存出現(xiàn)了。

緩存讀寫速度要比內(nèi)存快,因為緩存采用的是SRAM存儲器內(nèi)建在CPU上,而內(nèi)存采用的是DRAM。前者可以達到很高的讀取速度但是面積占用比較大因此容量上不去,在幾M容量就止步了。后者讀取速度慢且每次讀取后都要刷新電容,但面積占用小,因此容量可以達到好幾個G甚至幾百幾千個G。

那為什么緩存能提高CPU性能呢?程序運行具有一定規(guī)律——順序和反復性,即順序執(zhí)行和循環(huán)執(zhí)行。對于順序執(zhí)行,可以采取預讀策略。即將后面的程序一并讀取至緩存中,減少內(nèi)存讀取次數(shù)(注意CPU的讀指令并沒有減少,只是內(nèi)存響應次數(shù)少了)。緩存行是緩存的基本單位,目前主流緩存行大小是64字節(jié)因為內(nèi)存一次讀操作是64字節(jié),而64位CPU對數(shù)據(jù)的讀取是8字節(jié)即64bit,因此若CPU要讀的八字節(jié)落入某一緩存行中,該緩存行的內(nèi)容將會全部從內(nèi)存中被讀取到緩存中,接下來的程序也被這次讀寫一并帶到了緩存中去。對于循環(huán)執(zhí)行,則正是緩存的強項,之前訪問過的程序都存儲在緩存中,再次讀取時,直接可以從緩存而不是從內(nèi)存中讀取,大大提高了運行效率。

緩存又有分為一級緩存、二級緩存等等。他們的速度也有所不同,從一級緩存以后讀取速度依次降低。為什么呢?雖然都是采用的SRAM存儲器,但是數(shù)據(jù)檢索需要時間,數(shù)據(jù)存儲量大的三級緩存找的時間就比數(shù)據(jù)存儲量小的一級緩存找的時間久。如果把內(nèi)存比作圖書館的書架,那么緩存就像是CPU面前的一張桌子。給你地址讓你去找CPU想要的數(shù)據(jù),如果你是在書架上找,你可以很清楚這個數(shù)據(jù)放在哪一行哪一列,如果恰好你運動速度是光速的話,那么你總能在一個確定的時間內(nèi)拿到CPU想要的數(shù)據(jù)。可是緩存就不一樣了,書就在你面前,還亂糟糟的,你需要翻閱查看地址是否對應上了。因此桌子越大,你找得也就越慢。

就沒有別的辦法了嗎?當然有。桌子亂可以整理整理嘛。比如規(guī)定一下,第一書架的書只能放在桌子上的A區(qū),第二書架放B區(qū)……以此類推。這樣一來,找的人便會方便很多,放的人也沒有什么困難。

舉個例子,假設內(nèi)存可以被劃分成四個緩存塊(即內(nèi)存大小是緩存大小的四倍),記為00,01,10,11四塊。每個緩存塊又可以劃分成四個緩存行,記為00,01,10,11四行。結合起來,最上面緩存塊的最上面的緩存行就可以寫成0000,則這個部分的數(shù)據(jù)應該存在于緩存中的第一個緩存行的位置即00位置。如果1000號緩存行需要寫入,那么就要把0000號緩存行擦除再寫入,不能存儲在緩存中別的地方即使還有空間存放。


審核編輯:劉清


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    19265

    瀏覽量

    229671
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10855

    瀏覽量

    211605
  • 中斷
    +關注

    關注

    5

    文章

    898

    瀏覽量

    41474
  • 計時器
    +關注

    關注

    1

    文章

    420

    瀏覽量

    32690
收藏 人收藏

    評論

    相關推薦

    rtthread是搶占式的rtos,那么線程的timeout參數(shù)具體的作用是什么

    查閱相關說明,rtthread是搶占式的rtos,那么線程的timeout參數(shù)具體的作用是什么, 假如線程A,B的優(yōu)先級分別是1和2,timeout是10ms。當線程B 在運行中,還
    發(fā)表于 09-27 08:39

    CPU線程和程序線程的區(qū)別

    CPU的線程與程序的線程在概念、作用、實現(xiàn)方式以及性能影響等方面存在顯著差異。以下是對兩者區(qū)別的詳細闡述,旨在深入探討這一技術話題。
    的頭像 發(fā)表于 09-02 11:18 ?981次閱讀

    armv8在啟動剛開始時調(diào)用了關中斷,一直到切換第一個線程,在哪里開啟的中斷

    例如當前使用的armv8芯片,在啟動剛開始時調(diào)用了關中斷,一直到切換第一個線程,在哪里開啟的中斷? int rtthread_start
    發(fā)表于 07-04 07:00

    中斷中關閉中斷使能,在應用中開啟中斷使能,為什么沒有響應?

    請問我在中斷中關閉中斷使能,在應用中開啟中斷使能。但是開始會響應。才是多按幾次按鈕中斷就不響應怎么辦
    發(fā)表于 06-26 06:34

    探索虛擬線程:原理與實現(xiàn)

    虛擬線程的引入與優(yōu)勢 在Loom項目之前,Java虛擬機(JVM)中的線程是通過java.lang.Thread類型來實現(xiàn)的,這些線程被稱為平臺線程。 然而,平臺
    的頭像 發(fā)表于 06-24 11:35 ?294次閱讀
    探索虛擬<b class='flag-5'>線程</b>:原理與實現(xiàn)

    esp32已經(jīng)被配置為外部中斷的IO口,怎么切換成pwm?

    請問 已經(jīng)被配置為外部中斷的IO口 要切換成pwm 模式輸出 要如何操作? ps:用到的IO 是 0 5 25 26
    發(fā)表于 06-24 06:50

    can總線中斷狀態(tài)什么意思?

    CAN總線(Controller Area Network)是一種廣泛使用的現(xiàn)場總線通信協(xié)議,主要用于汽車、工業(yè)控制等領域。在CAN總線通信中,中斷狀態(tài)是一個重要的概念,它涉及到CAN總線節(jié)點在通信
    的頭像 發(fā)表于 06-16 10:21 ?1687次閱讀

    鴻蒙開發(fā):【線程模型】

    管理其他線程的ArkTS引擎實例,例如使用TaskPool(任務池)創(chuàng)建任務或取消任務、啟動和終止Worker線程
    的頭像 發(fā)表于 06-13 16:38 ?398次閱讀
    鴻蒙開發(fā):【<b class='flag-5'>線程</b>模型】

    求助,是否可以不用pendSV中斷做任務切換

    freeRTOS的任務切換我的理解是:通過SysTick中斷去觸發(fā)pendSV中斷去做任務切換,因為pendSV中斷優(yōu)先級最低,所以任務
    發(fā)表于 04-16 07:59

    基于RTOS的應用進程中的典型線程

    RTOS中的關鍵因素是最小的中斷延遲和最小的線程切換延遲。RTOS的價值在于它的響應速度或可預測性,而不是它在給定時間段內(nèi)可以執(zhí)行的工作量。
    發(fā)表于 03-05 09:32 ?597次閱讀
    基于RTOS的應用進程中的典型<b class='flag-5'>線程</b>

    什么是動態(tài)線程池?動態(tài)線程池的簡單實現(xiàn)思路

    因此,動態(tài)可監(jiān)控線程池一種針對以上痛點開發(fā)的線程池管理工具。主要可實現(xiàn)功能有:提供對 Spring 應用內(nèi)線程池實例的全局管控、應用運行時動態(tài)變更線程池參數(shù)以及
    的頭像 發(fā)表于 02-28 10:42 ?639次閱讀

    關于FX3使用4個線程進行FPGA到USB的數(shù)據(jù)傳輸-狀態(tài)機設置的問題求解

    使用4個線程,當一個線程對應的DMA緩沖區(qū)滿后切換到下一個線程,應該如何設置轉移條件比較合適? -FAN
    發(fā)表于 02-27 06:40

    請問rtt線程內(nèi)必須顯式調(diào)用調(diào)度函數(shù)嗎?

    我在一個線程中 當創(chuàng)建對象失敗的時候,會使用while(1)printf(“create obj failed!!\\n”) 方式進入死循環(huán),這時候其他線程就不在運行了(表現(xiàn)是LCD上的時鐘不走了),然后我將斷點分別加到LCD線程
    發(fā)表于 02-26 06:36

    什么是守護線程?守護線程的底層原理和使用示例

    大家好,今天這篇文章來梳理一下有關守護線程的相關問題,這也是之前曾經(jīng)有被問到過的面試題,在此之前我們先看一看守護線程的使用示例。
    的頭像 發(fā)表于 01-05 11:01 ?1413次閱讀
    什么是守護<b class='flag-5'>線程</b>?守護<b class='flag-5'>線程</b>的底層原理和使用示例

    mcu線程和進程的區(qū)別是什么

    MCU線程和進程是嵌入式系統(tǒng)中常見的并行執(zhí)行的概念,它們之間有許多區(qū)別,包括線程與進程的定義、資源管理、通信機制、執(zhí)行方式等等。下面將詳細介紹MCU線程和進程的區(qū)別。 一、定義與概念 MCU
    的頭像 發(fā)表于 01-04 10:45 ?745次閱讀
    主站蜘蛛池模板: 一一本之道高清手机在线观看 | 刮伦人妇A极一片| 东北足疗店妓女在线观看| 国产精品大陆在线视频| 好紧好湿太硬了我太爽了文字| 精品手机在线1卡二卡3卡四卡| 久久青草影院| 欧美一夜爽爽爽爽爽爽| 天天看学生视频| 一本色道久久88综合日韩精品| 18日本人XXXXXX18| 超碰在线vip| 嗨嗨快播电影| 免费成人小视频| 石原莉奈rbd806中文字幕| 亚洲国产在线视频精品| 最新中文字幕在线视频| 成人网络电视破解版| 国内精品乱码卡一卡2卡三卡| 伦理片2499电影伦理片| 色偷偷超碰97人人澡人人| 亚洲字幕在线观看| japansemature护士| 国产亚洲欧美ai在线看片| 快插我我好湿啊公交车上做| 日韩免费视频一区| 亚洲熟伦熟女专区| 成人动漫百度影音| 久久爱狠狠综合网| 日日日操操操| 在线涩涩免费观看国产精品| 动漫H片在线播放免费高清| 久久a级片| 天天拍拍国产在线视频| 中文字幕无码一区二区免费| 国产成人自产拍免费视频| 久久精品国产亚洲AV妓女不卡| 肉动漫无码无删减在线观看| 伊人久久大香| 国产精品久久人妻无码网站一区L| 口工漫画r18全彩啪啪|