當(dāng)前位置:首頁(yè) > 芯聞號(hào) > 充電吧
[導(dǎo)讀]signal ? ? 信號(hào)是異步通知task的一種機(jī)制,HISR是不可以接收信號(hào)的,但是可以發(fā)送信號(hào)。 ? ??TCB中與signal相關(guān)數(shù)據(jù)結(jié)構(gòu)包括active_signal,enabl

signal ? ? 信號(hào)是異步通知task的一種機(jī)制,HISR是不可以接收信號(hào)的,但是可以發(fā)送信號(hào)。 ? ??

TCB中與signal相關(guān)數(shù)據(jù)結(jié)構(gòu)包括active_signal,enable_signal(這是一個(gè)掩碼,如果為0則不執(zhí)行signal_handler),(*signal_handler),主要有兩個(gè)函數(shù),一個(gè)是send_signals()和signal_shell(),其中send_signals()函數(shù)主要是區(qū)分發(fā)送信號(hào)給自己還是給其他的task,如果發(fā)給自己就直接執(zhí)行signal_shell(),如果發(fā)送至其他task(處于suspend或ready但沒(méi)有占用處理器的狀態(tài)),target task必須要釋放占用的protect,因?yàn)樵趕ignal_handler中可能會(huì)去請(qǐng)求protect資源,這樣就會(huì)發(fā)生死鎖,當(dāng)前task執(zhí)行TCT_protect_switch()函數(shù),與請(qǐng)求protect()函數(shù)前半部分一致,調(diào)用schedule_protect()讓target task釋放占用的protect資源。 ? ??

在target stack處建立solicited stack,其中PC = &signal_shell,保存target task的status和tc_statck_ptr,根據(jù)當(dāng)前的狀態(tài),如果是ready或pure_suspend,則返回,否則就resume_task()喚醒target task,根據(jù)返回值確定是否進(jìn)入schedule()。 ? ??

在send_signal中應(yīng)用protect來(lái)保護(hù)共享數(shù)據(jù),而到了protect_switch中應(yīng)用關(guān)中斷來(lái)保護(hù),中間有一個(gè)數(shù)據(jù)保護(hù)的真空期,因此要兩次確認(rèn)target task沒(méi)有再占用protect資源
suspend/resume 對(duì)于task狀態(tài)改變的操作主要有suspend和resume函數(shù),其中suspend將一個(gè)task掛起,當(dāng)掛起自己時(shí)會(huì)control_to_system,finished和terminated狀態(tài)的轉(zhuǎn)變也是利用suspend函數(shù),resume函數(shù)用來(lái)將task喚醒,并返回一個(gè)標(biāo)志是否需要context switch
線程同步 應(yīng)用里可以使用到的線程同步有兩種方式,semaphore和event groups,semaphore與linux中的一直,但是NU中并沒(méi)有對(duì)優(yōu)先級(jí)反轉(zhuǎn)有處理 event groups是一個(gè)32bit的數(shù)據(jù)結(jié)構(gòu),可以標(biāo)記32個(gè)事件,操作包括set和retrieve,set event時(shí)會(huì)喚醒suspend list上的所有task,最后在對(duì)相應(yīng)bit consume,retrieve去請(qǐng)求event,如果失敗則掛起在suspend list上,只有拿到event后才會(huì)對(duì)consume
線程通信 NU中支持的線程通信方式包括queue,pipe,mailbox,這里queue和pipe的機(jī)制基本相同,只是queue是按32bit操作,pipe是按照字節(jié)訪問(wèn),但是代碼里也做了對(duì)齊,mailbox是一種信箱機(jī)制,信箱的大小為4*32bit,使用的好處就是執(zhí)行速度快
內(nèi)存管理 NU并沒(méi)有使用到虛擬內(nèi)存管理,直接訪問(wèn)物理地址,有兩種建立內(nèi)存池的方法,動(dòng)態(tài)內(nèi)存管理和靜態(tài)內(nèi)存管理,動(dòng)態(tài)內(nèi)存管理采用的分配策略是first-fit和釋放后內(nèi)存融合,靜態(tài)內(nèi)存管理是每次分配固定大小的內(nèi)存塊,這樣可能會(huì)引起內(nèi)存的利用率降低,但是不會(huì)引起內(nèi)存外部碎片 ? ??
1. 中斷向量表的reset地址為0x0,直接跳轉(zhuǎn)至INT_Initialize()
2. Low_bit_set[256]用來(lái)快速計(jì)算優(yōu)先級(jí)的表,其中放的是對(duì)應(yīng)優(yōu)先級(jí)數(shù)值第一個(gè)不為0的數(shù),例如當(dāng)前最高priority=17,則low_bit_set[17] = 0,17 = 0x11第一個(gè)不為0的位是第0位
3. HISR不會(huì)suspend,沒(méi)有time slice即同優(yōu)先級(jí)的HISR依次執(zhí)行,不會(huì)接收信號(hào),只可以被中斷,如果激活了更高優(yōu)先級(jí)的HISR則當(dāng)前HISR被搶占。
4. 當(dāng)中斷發(fā)生時(shí),ARM硬件完成的工作包括: ? ?i. 保存中斷前的CPSR至SPSR_irq_mode ? ?ii.保存中斷時(shí)PC值至lr_irq_mode ? ?iii.切換至irq mode,屏蔽irq bit,set arm mode ? ?iv. 將PC指向irq_entry(0x18) 5. time slice只有在被中斷里才會(huì)保存下來(lái),即一個(gè)task被中斷后執(zhí)行了LISR和HISR后,重新schedule到task,其time slice是之前剩下的時(shí)間片,當(dāng)task主動(dòng)讓出處理器時(shí),比如self-suspend,send_signal,resume高優(yōu)先級(jí)的task時(shí),會(huì)將time slice重新置為預(yù)設(shè)值
5. 在control_to_system里有clear protect的動(dòng)作
6. TMD_Timer_Start記錄的是當(dāng)前timer_active_list上頂端timer的remaining_time,當(dāng)發(fā)生start_timer,stop_timer或timer expired時(shí)都會(huì)去更新這個(gè)值
7. 所有的system call都要用system_protect來(lái)保護(hù),因?yàn)槠渲杏袑?duì)于重要全局變量的訪問(wèn)
8. TCB中有一個(gè)suspend_protect,用來(lái)記錄task在suspend前擁有的是什么樣類型的protect,例如一個(gè)請(qǐng)求Dynamic memory的task suspend在dm_suspend_list上,在掛起前將dm_protect保存至suspend_protect中,因?yàn)橐粋€(gè)task在suspend前必須釋放所持有的protect,所以只能利用suspend_protect標(biāo)記之前占有的是dm_protect,當(dāng)timeout發(fā)生時(shí),重新獲得dm_protect去執(zhí)行cleanup函數(shù),做清理工作將task從dm_suspend_list上移除,resume一個(gè)task時(shí)會(huì)將suspend_protect清空。
9. 一個(gè)HISR中可以send_signal,suspend其他task,請(qǐng)求protect資源,這些動(dòng)作都有可能使HISR讓出處理器給低優(yōu)先級(jí)的task去執(zhí)行,都是調(diào)用TCC_schedule_protect(),目的是避免deadlock
10. deadlock產(chǎn)生的四個(gè)必要條件 (必考) ? ? i.互斥條件:資源同一時(shí)間只可以被一個(gè)進(jìn)程訪問(wèn) ? ? ii.請(qǐng)求與保持條件:當(dāng)進(jìn)程請(qǐng)求新資源阻塞時(shí),不釋放已經(jīng)占有的資源 ? ? iii.不剝奪條件:進(jìn)程在占有資源時(shí),未使用完之前,不可以被強(qiáng)行剝奪 ? ? iv. 循環(huán)等待條件:若干進(jìn)程形成一種頭尾相接的循環(huán)等待資源關(guān)系 ? 12. 優(yōu)先級(jí)反轉(zhuǎn)(priority inversion)(必考) 產(chǎn)生原因:三個(gè)task,優(yōu)先級(jí)關(guān)系是taskA>taskB>taskC,taskC占有互斥sem,當(dāng)taskA執(zhí)行時(shí)申請(qǐng)sem,suspend,此時(shí)taskB被喚醒,繼續(xù)執(zhí)行,則taskC無(wú)法釋放sem,導(dǎo)致高優(yōu)先級(jí)的taskA無(wú)法執(zhí)行,而低優(yōu)先級(jí)的taskB一直執(zhí)行下去 解決方法: ? ? i.disable interrupt (影響OS的實(shí)時(shí)性) ? ? ii.disable preemption (影響實(shí)時(shí)性) ? ? iii.優(yōu)先級(jí)繼承 ? ? 在運(yùn)行時(shí),taskA請(qǐng)求低優(yōu)先級(jí)taskC已經(jīng)占有的sem,則將taskC的優(yōu)先級(jí)提升至taskA相同 ? ? iv. 優(yōu)先級(jí)天花板 ? ? 在未運(yùn)行的情況下,首先估計(jì)會(huì)使用到sem的task,然后將所有的task優(yōu)先級(jí)升高至這些task中的最高 ? ? 優(yōu)先級(jí)。
11. 在TCT_schedule_Protected的代碼中,在control_to_thread前開(kāi)關(guān)了一次中斷,這樣可以節(jié)省一次上下文切換,讓中斷在當(dāng)前task上發(fā)生,而不是切換至占有protect的task在發(fā)生中斷。
12. 當(dāng)task被中斷后搶占,不會(huì)釋放protect資源,因此在LISR中不可以使用與Protect相關(guān)的系統(tǒng)調(diào)用,只可以使用activate_HISR(),它是用中斷來(lái)保證原子訪問(wèn)的。
13. protect的嵌套利用unprotect_specific()和set_current_protect()來(lái)實(shí)現(xiàn),同時(shí)system_protect一般作為第二個(gè)protect去申請(qǐng),因?yàn)閟ystem_protect保護(hù)了內(nèi)核中全局的數(shù)據(jù)結(jié)構(gòu),粒度較大,因此要盡量減少持有的時(shí)間
14. 第一次中斷的上下文保存在task stack,嵌套的中斷上下文保存在system stack,因?yàn)橹袛嗲短装l(fā)生在LISR中,此時(shí)sp值已經(jīng)更新為system stack ptr
15. protect() send_signal(), suspend()都有為了防止deadlock讓持有protect的task執(zhí)行,直到釋放protect的機(jī)制
16. 在調(diào)用terminate task時(shí),如果task是suspend要調(diào)用cleanup函數(shù),要利用suspend_protect保護(hù),同時(shí)不會(huì)與system_protect形成死鎖
17. queue和pipe,按照FIFO的模式發(fā)送message,在變長(zhǎng)模式下,如果taskA的message較大suspend,則taskB即使有空間也必須suspend在taskA后面。
18.resume返回true的條件 ? ? i.當(dāng)前priority_list上只有target_task一個(gè) ? ? ii.target_task的優(yōu)先級(jí)高于TCD_Highest_priority ? ? iii.確定當(dāng)前task是可搶占的 ? ? iv. 當(dāng)前線程是一個(gè)task,如果是NULL則是在初始化里面,初始化還未完成不應(yīng)該schedule,如果在 ? ? ? ? ? HISR里,因?yàn)镠ISR的優(yōu)先級(jí)總是高于task的,因此也不會(huì)發(fā)生搶占
19. Dynamic memory的數(shù)據(jù)結(jié)構(gòu)使用雙向鏈表是為了可以進(jìn)行融合操作
20. first-fit策略必須使用相鄰融合的內(nèi)存管理方法,但是仍會(huì)造成50%的浪費(fèi)
21. TCD_current_thread == NULL,如果當(dāng)前開(kāi)著中斷則是schedule,如果是關(guān)中斷則是INT_initialize
22. 如果申請(qǐng)protect,TCD_current_thread == NULL,protect中直接跳過(guò),因?yàn)檫@是在初始化中,初始化使用關(guān)中斷來(lái)保護(hù)的
23.如果一個(gè)HISR suspend了,則下一次LISR觸發(fā)HISR時(shí),就無(wú)法處理了 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ?

?


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉