freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

中斷、定時和系統(tǒng)調(diào)用(編輯修改稿)

2025-08-13 14:26 本頁面
 

【文章內(nèi)容簡介】 nc: 指向 tasklet函數(shù)的指針 – data: 一般用于 tasklet的私有數(shù)據(jù) ? Tasklet由 Softirq啟動 Bottom Halves ? 早期使用的中斷下半部的實現(xiàn)機制,被稱為 BH機制。 ? BH機制在一些傳統(tǒng)的中斷響應(yīng)中仍被廣泛使用。 ? BH在實現(xiàn)方法上缺乏 Tasklet的靈活性,一般都使用 Tasklet代替 BH。 中斷的返回 Linux的時鐘管理 ? 目標 – 時鐘中斷:系統(tǒng)心跳信號 – 系統(tǒng)時鐘:各種時間戳 – 定時器: ? 時鐘種類 – 實時鐘: RTC – 時間戳計數(shù)器器: TSC – 可編程定時器: PIT 幾個常用的變量和概念 ? HZ – 系統(tǒng)時鐘中斷 1秒鐘內(nèi)產(chǎn)生的中斷次數(shù), 100 ? tick – 系統(tǒng)時鐘中斷的時間間隔,一個嘀嗒 ? jiffies – 系統(tǒng)啟動后所經(jīng)歷的系統(tǒng)時鐘嘀嗒數(shù),即 tick數(shù),也就是系統(tǒng)時鐘中斷的次數(shù)。 ? 時間片或時間量子 (time slice, time quantum) – 分配給進程的時間段,以 tick為單位。 IRQ0:系統(tǒng)時鐘中斷 ? 由一個可編程定時器產(chǎn)生系統(tǒng)時鐘中斷 ? 以 HZ為頻率產(chǎn)生中斷 ? 為系統(tǒng)提供基本的時間事件的驅(qū)動 – 更新系統(tǒng)啟動后經(jīng)歷的時間 – 更新系統(tǒng)時鐘的日期和時間 – 判斷一個進程是否已經(jīng)用完所分配的時間量子,決定是否需要進行進程切換 – 用于各種系統(tǒng)資源的統(tǒng)計 – 判斷定時器是否到時 IRQ0中斷服務(wù)程序 ? 首先作為 IRQ被初始化: timt_init() ? 中斷服務(wù)程序: timer_interrupt() – 根據(jù)硬件時鐘讀取各種時間值并保存 – 調(diào)用 do_timer_interrupt() ? 調(diào)用 do_timer() – jiffies++ – update_process_times() – mark_bh(TIMER_BH) ? 其他操作 timer_bh(): update_times(): 更新系統(tǒng)時間計算系統(tǒng)負載 run_timer_list(): 負責處理軟件定時器 軟件定時器 ? 由軟件實現(xiàn)的定時器。使用軟件定時器可以實現(xiàn)在給定的時間間隔后執(zhí)行一個函數(shù)。 ? 內(nèi)核提供軟件定時器的機制。但這種定時器只能保證定時時刻到時或到時之后才起作用。 – 硬件定時器,如可編程定時器 PIT,在定時時刻到時時就會立即發(fā)出中斷。 – 軟件定時器是在系統(tǒng)時鐘中斷的下半部被處理,不能保證實時性。 ? Linux提供 2種定時器 – 動態(tài)定時器 ? 用于內(nèi)核中的定時應(yīng)用 – 時間間隔定時器 ? 可由用戶空間的進程建立 動態(tài)定時器 ? 當某些內(nèi)核過程需要推遲運行時,可以使用動態(tài)定時器。 ? 動態(tài)定時器可以動態(tài)建立和撤銷。 ? 動態(tài)定時器的數(shù)量可以有任意多個。 ? 動態(tài)定時器到時后會執(zhí)行指定的函數(shù),動態(tài)定時器到時之前可以被撤銷。 ? 動態(tài)定時器以 tick為最小時間單位。 ? 動態(tài)定時器的管理由數(shù)據(jù)結(jié)構(gòu) timer_list保存并形成一個鏈表。 /* * In Linux , static timers have been removed from the kernel. * Timers may be dynamically created and destroyed, and should be * initialized by a call to init_timer() upon creation. * * The data field enables use of a mon timeout function for several * timeouts. You can use this field to distinguish between the different * invocations. */ struct timer_list { struct list_head list。 unsigned long expires。 unsigned long data。 void (*function)(unsigned long)。 }。 include/linux/ 動態(tài)定時器的管理 ? 定時器需要在每個時鐘中斷時檢查是否到期 ? 定時器的定時時間可能有非常大的差異 ? 使用簡單鏈表或排序的鏈表在管理大量動態(tài)定時器時會消耗很多 CPU時間 ? Linux使用分組和鏈表的方式管理動態(tài)定時器 – tvecs數(shù)組: 5個元素,指向 5個鏈表組 – 根據(jù)剩余到期時間將定時器放到相應(yīng)的鏈表中 ? tv1:即將在隨后 255個 tick之后到期的定時器,有 256個元素 ? tv2:即將在隨后 2141個 tick之后到期的定時器,有 64個元素 ? ... ? tv5:所有即將在 2321個 tick之后到期的定時器 動態(tài)定時器管理用鏈表結(jié)構(gòu) 例 1:動態(tài)定時器應(yīng)用 ? 假設(shè)內(nèi)核希望當前進程停頓 2秒后再繼續(xù)運行 timeout = 2*HZ。 set_current_state(TASK_INTERRUPTIBLE)。 /* or TASK_UNINTERRUPTIBLE */ remining = schedule_timeout(timeout)。 struct timer_list timer。 expire = timeout + jiffies。 init_timer(amp。timer)。 = expire。 = (unsigned long)current。 = process_timeout。 add_timer(amp
點擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1