www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

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

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

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

? ? ? ? ? ? ? ?

?


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

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉