日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SylixOS异常管理

發(fā)布時間:2023/12/31 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SylixOS异常管理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

2019獨角獸企業(yè)重金招聘Python工程師標準>>>

異常管理

  SylixOS提供了一種平臺無關的異常管理方法。當系統(tǒng)產(chǎn)生了寫時拷貝、缺頁等MMU訪問失效異?;蚱渌N類異常時,SylixOS會在異常中構(gòu)建異常處理線程執(zhí)行陷阱,在異常退出后的任務上下文中進行異常處理,完成所有的頁面操作,如果操作失敗線程將自我銷毀。當為缺頁中斷等一般異常時,陷阱執(zhí)行完畢后,系統(tǒng)將回到剛剛訪問內(nèi)存并產(chǎn)生異常的那條指令。其函數(shù)接口如下所示。

LW_API VOID API_VmmAbortIsr (addr_t ulRetAddr, addr_t ulAbortAddr, PLW_VMM_ABORT pabtInfo, PLW_CLASS_TCB ptcb);

函數(shù)API_VmmAbortIsr原型分析:

  • 此函數(shù)無返回;
  • 參數(shù)ulRetAddr是異常返回地址;
  • 參數(shù)ulAbortAddr是異常地址;
  • 參數(shù)pabtInfo是異常類型;
  • 參數(shù)ptcb是出現(xiàn)異常的線程控制塊;
  •   API_VmmAbortIsr函數(shù)的主要內(nèi)容便是處理MMU訪問失效異常,也就通常所說的缺頁中斷。該函數(shù)的一般處理流程如下所示:

  • 致命錯誤探測;
  • 推展溢出檢查;
  • 異常信息構(gòu)建和現(xiàn)場保存,包括異常時的上下文;
  • 缺頁處理陷阱外殼環(huán)境建立;
  • FP保存;
  • FPU、DSP上下文保存。
  •   其中缺頁處理陷阱外殼的建立是通過修改異常上下文的任務入口、入口參數(shù)以及堆棧起點實現(xiàn)的,如下所示。陷阱程序的入口函數(shù)為__vmmAbortShell,異常消息作為函數(shù)參數(shù),堆棧直接使用任務的線程堆棧,而異常消息也保存在該堆棧中(API_VmmAbortIsr函數(shù)執(zhí)行時使用的是CPU的中斷堆棧)。

    #if LW_CFG_VMM_EN > 0pstkFailShell = archTaskCtxCreate(&ptcb->TCB_archRegCtx,(PTHREAD_START_ROUTINE)__vmmAbortShell,(PVOID)pvmpagefailctx,(PLW_STACK)pucStkNow,0); /* 建立缺頁處理陷阱外殼環(huán)境 */ #elsepstkFailShell = archTaskCtxCreate(&ptcb->TCB_archRegCtx,(PTHREAD_START_ROUTINE)__vmmAbortAccess,(PVOID)pvmpagefailctx,(PLW_STACK)pucStkNow,0); /* 建立訪問異常陷阱外殼環(huán)境 */ #endif

      由于產(chǎn)生缺頁中斷時,相關線程一定是就緒的,所以不需要進行調(diào)度器處理。當異常返回后,被修改的任務上下文將被直接恢復到CPU中,也就是說此時的CPU將直接運行陷阱函數(shù)。當陷阱函數(shù)執(zhí)行完之后,并不是普通的函數(shù)返回,而是直接從之前保存在錯誤消息中的任務上下文返回,如下所示。此時系統(tǒng)將回到剛剛訪問內(nèi)存產(chǎn)生異常的那條指令開始執(zhí)行。

    __KERNEL_SPACE_SET(pvmpagefailctx->PAGEFCTX_iKernelSpace); /* 恢復成進入之前的狀態(tài) */errno = pvmpagefailctx->PAGEFCTX_iLastErrno; /* 恢復之前的 errno */iregInterLevel = KN_INT_DISABLE(); /* 關閉當前 CPU 中斷 */KN_SMP_MB();archSigCtxLoad(&pvmpagefailctx->PAGEFCTX_archRegCtx);/* 從 page fail 上下文中返回 */KN_INT_ENABLE(iregInterLevel);

      陷阱程序的具體執(zhí)行過程將在后續(xù)介紹。

    轉(zhuǎn)載于:https://my.oschina.net/u/3248663/blog/2120700

    總結(jié)

    以上是生活随笔為你收集整理的SylixOS异常管理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。