64、【OS】【Nuttx】任務休眠與喚醒:clock_nanosleep

背景

之前的 blog
63、【OS】【Nuttx】任務休眠與喚醒:sleep
分析了任務休眠中的 sleep 函數,下面繼續來分析下 sleep 函數中的核心功能 clock_nanosleep

clock_nanosleep

usleep

上篇 blog 分析了 sleep 函數,其核心功能封裝到了 clock_nanosleep;不僅是 sleep,微秒級別的 usleep,其核心功能也是封裝到了 clock_nanosleep
在這里插入圖片描述
與 sleep 函數不同的是,usleep 不用傳遞 rmtp,即不用返回剩余未休眠時間,錯誤時返回 -1,包括被信號中斷時的提前返回

描述

相對時間模式

clock_nanosleep 是 Nuttx 操作系統中實現納秒級延時的函數,下面來看下它的描述
在這里插入圖片描述
當 TIMER_ABSTIME 標志未置位時,函數將按照相對時間模式運行,此時,clock_nanosleep 將暫停執行當前線程,直到如下情況發生:

  • 請求休眠的時間間隔已過,由 rqtp 參數指定的時間段已經過去,這里的 rqtp 是一個指向 struct timespec 結構體的指針,該結構體包含了秒數 (tv_sec) 和納秒數 (tv_nsec)
  • 接收到信號:如果在休眠期間有信號傳遞給調用線程,并且該信號的動作是調用信號處理函數,則 clock_nanosleep 會提前返回
  • 進程終止:如果進程被終止(比如發送致命信號),clock_nanosleep 也會提前返回

休眠時間由 clock_id 參數指定的時鐘來測量,clock_id 可以是操作系統定義的時鐘之一,比如 CLOCK_REALTIME(系統實時時鐘)或 CLOCK_MONOTONIC(單調遞增時鐘),用戶可以在不同的時鐘基準上進行休眠操作

絕對時間模式

在這里插入圖片描述
當 TIMER_ABSTIME 標志被置位時,clock_nanosleep 將使用絕對時間來決定線程何時恢復執行

  • 和相對時間模式類似,這里的區別主要在于當指定的時鐘達到絕對時間,而不是時間間隔時,線程恢復執行
  • 如果在調用的時刻,rqtp 指定的時間值小于或等于指定時鐘的當前時間值,則 clock_nanosleep 會直接返回,不會掛起調用進程進入休眠

實際休眠時間

在這里插入圖片描述

clock_nanosleep 在執行休眠操作時,實際的暫停時間可能比請求的時間長,主要考慮如下原因

  • 操作系統有一個最小的睡眠單位,所有請求的時間都會被調整到這個單位的整數倍
  • 操作系統需要調度其他任務,也可能導致實際的休眠時間延長。比如操作系統可能會優先處理更高優先級的任務,從而延遲當前線程的恢復
  • 在相對時間模式下,除了被信號中斷的情況,實際的休眠時間不會少于由 rqtp 參數指定的時間間隔
  • 在絕對時間模式下,實際的休眠將至少持續到指定時鐘的時間值達到 rqtp 中指定的絕對時間點,同樣排除被信號中斷的情況

函數定義

在這里插入圖片描述
clock_nanosleep 的函數定義也沒有太多有用的信息,主要實現邏輯被包裝到 nxsig_clockwait 函數里了
下篇 blog 分析 nxsig_clockwait

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/907436.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/907436.shtml
英文地址,請注明出處:http://en.pswp.cn/news/907436.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【生產實踐】華為存儲XSG1在RHEL 7.x/8.x上的多路徑配置操作手冊(生產環境)

一、概述 本手冊針對Red Hat Enterprise Linux 7.x/8.x系統與華為XSG1存儲設備的多路徑I/O(MPIO)配置,通過優化路徑策略實現高可用、負載均衡及故障容錯,適配華為存儲硬件特性,滿足生產環境需求。 二、參數解析與配置…

Unity開發之Webgl自動更新程序包

之前讓客戶端更新webgl程序是在程序里寫版本號然后和服務器對比,不同就調用 window.location.reload(true);之前做的客戶端都是給企業用,用戶數少看不出來啥問題。后來自己開發一個小網站,用戶數量還是挺多,然后就會遇到各種各樣的…

一個開源腳本,可自動安裝在 AMD Radeon 7900XTX 上運行選定 AI 接口所需的所有內容

?一、軟件介紹 文末提供程序和源碼下載 一個開源腳本,可自動安裝在 AMD Radeon 7900XTX 上運行選定 AI 接口所需的所有內容。 二、ROCm-AI-Installer ROCm-AI-安裝程序 一個開源腳本,可自動安裝在 AMD Radeon 7900XTX 上運行選定 AI 接口所需的所有內…

【Axure結合Echarts繪制圖表】

1.繪制一個矩形,用于之后存放圖表,將其命名為test: 2.新建交互 -> 載入時 -> 打開鏈接: 3.鏈接到URL或文件路徑: 4.點擊fx: 5.輸入: javascript: var script document.createEleme…

Relooking:損失權重λ 、梯度權重α、學習率η

一般多任務,大家都喜歡疊加很多損失,由此產生很多損失權重系數。此外,有的學者直接對梯度進行操作。咋一看,上面三個系數貌似重復多余,直接用其中一個系數代替不行嗎?為此,回顧了下神經網絡的前…

數學復習筆記 20

復習方程組,還有隨便復習一下高數和矩陣,向量。現在是復習高數的導數這一章。兩個曲線相切,列出方程,然后解出參數,沒有任何難度呢。算切線方程,就是,算導數,導數就用導數定義&#…

Sqlalchemy 連mssql坑

連接失敗: (pyodbc.OperationalError) (08001, [08001] [Microsoft][ODBC Driver 17 for SQL Server]SSL Provider: [error:0A00014D:SSL routines::legacy sigalg disallowed or unsupported] (-1) (SQLDriverConnect)) (Background on this error at: https://sqlalche.me/e/…

AI大模型學習三十、ubuntu安裝comfyui,安裝插件,修改返回405 bug,值得一看喔

一、說明 ComfyUI是一個開源的、基于節點的Web應用。它允許用戶根據一系列文本提示(Prompt)生成圖像。 ComfyUI使用擴散模型作為基礎模型,并結合 ControlNet、Lora和LCM低階自適應等模型,每個工具都由程序中的一個節點表示 二、開…

MySQL(40)如何使用DROP TABLE刪除表?

DROP TABLE 語句用于從數據庫中永久刪除一個表及其所有數據。執行該語句后,表結構和數據都將被徹底刪除,且無法恢復。因此,在執行 DROP TABLE 操作之前,請確保已備份好相關數據。 基本語法 DROP TABLE table_name;如果要刪除多個…

element ui 表格 勾選復選框后點擊分頁不保存之前的數據問題

element ui 表格 勾選復選框后點擊分頁不保存之前的數據問題 給 el-table上加 :row-key"getRowKey"給type“selection” 上加 :reserve-selection"true"

vite常見面試問題

一、Vite 核心原理 1. Vite 為什么比 Webpack 快? 答案: Vite 的核心優勢在于開發環境和生產環境的雙重優化: 開發環境: 基于原生 ESM(ES Modules):瀏覽器直接加載 ES 模塊,無需打包,啟動時間極短(毫秒級)。按需編譯:僅編譯當前頁面所需的模塊,而非整個項目。預…

Screen 連接遠程服務器(Ubuntu)

連接 1. 安裝screen 默認預安裝&#xff0c;可以通過命令查看&#xff1a; screen --version 若未安裝&#xff1a; # Ubuntu/Debian sudo apt-get install screen 2. 本機連接遠程服務器 ssh root192.168.x.x 在遠程服務器中打開screen&#xff1a; screen -S <nam…

Flutter GridView網格組件

目錄 常用屬性 GridView使用配置 GridView.count使用 GridView.extent使用 GridView.count Container 實現列表 GridView.extent Container 實現列表 GridView.builder使用 GridView網格布局在實際項目中用的也是非常多的&#xff0c;當我們想讓可以滾動的元素使用矩陣…

Jenkins實踐(8):服務器A通過SSH調用服務器B執行Python自動化腳本

Jenkins實踐(8):服務器A通過SSH調用服務器B執行Python自動化腳本 1、需求: 1、Jenkins服務器在74上,Python腳本在196服務器上 2、需要在服務器74的Jenkins上調用196上的腳本執行Python自動化測試 2、操作步驟 第一步:Linux Centos7配置SSH免密登錄 Linux Centos7配置S…

C#二維碼:利用 ThoughtWorks.QRCode 庫實現二維碼生成與解析

C#二維碼&#xff1a;利用 ThoughtWorks.QRCode 庫實現二維碼生成與解析 在當今數字化信息交互頻繁的時代&#xff0c;二維碼憑借其信息容量大、容錯能力強、易識別等特點&#xff0c;廣泛應用于各個領域。從移動支付、產品溯源到活動簽到&#xff0c;二維碼無處不在。在 C# 開…

【Java Web】速通JavaScript

參考筆記:JavaWeb 速通JavaScript_javascript 速通-CSDN博客 目錄 一、JavaScript快速入門 1. 基本介紹 2. JavaScript特點 3. JavaScript的引入方式(重要) 3.1 寫在script標簽中 ?????3.2 以外部文件方式引入 二、JS的數據類型 1. 變量 2. 常用數據類型 3.特殊值 三、…

Python打卡訓練營-Day13-不平衡數據的處理

浙大疏錦行 知識點&#xff1a; 不平衡數據集的處理策略&#xff1a;過采樣、修改權重、修改閾值交叉驗證代碼 過采樣 過采樣一般包含2種做法&#xff1a;隨機采樣和SMOTE 過采樣是把少的類別補充和多的類別一樣多&#xff0c;欠采樣是把多的類別減少和少的類別一樣 一般都是缺…

Mac OS 使用說明

Mac 的啟動組合鍵 了解可通過在啟動時按住一個或多個按鍵來訪問的 Mac 功能和工具。 若要使用這些組合鍵中的任何一個&#xff0c;請在按下電源按鈕以開啟 Mac 后或在 Mac 開始重新啟動后&#xff0c;立即按住相應按鍵。請一直按住&#xff0c;直至電腦出現對應的行為。 !!!上…

LoadRunner 是什么

LoadRunner 是一款由 Micro Focus&#xff08;原惠普企業軟件部門&#xff09;開發的性能測試工具&#xff0c;廣泛應用于軟件、應用程序和系統的 負載測試、壓力測試 和 性能分析。它通過模擬大量用戶并發操作&#xff0c;幫助測試人員評估系統在高負載下的性能、穩定性和可擴…

RISC-V PMA、PMP機制深入分析

1 PMA PMA&#xff08;Physical Memory Attributes&#xff09;&#xff0c;物理內存屬性&#xff0c;顧名思義就是用來設置物理內存屬性的&#xff0c;但這里說“設置”&#xff0c;并不合理&#xff0c;因為一般情況下各存儲的屬性&#xff0c;在芯片設計時就固定了&#xf…