国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

Linux之時鐘中斷詳解

2024-08-28 00:02:04
字體:
來源:轉載
供稿:網友

在Linux的0號中斷是一個定時器中斷。在固定的時間間隔都發生一次中斷,也是說每秒發生該中斷的頻率都是固定的。該頻率是常量HZ,該值一般是在100 ~ 1000之間。該中斷的作用是為了定時更新系統日期和時間,使系統時間不斷地得到跳轉。另外該中斷的中斷處理函數除了更新系統時間外,還需要更新本地CPU統計數。指的是調用scheduler_tick遞減進程的時間片,若進程的時間片遞減到0,進程則被調度出去而放棄CPU使用權。

時鐘中斷的產生

Linux的OS時鐘的物理產生原因是可編程定時/計數器產生的輸出脈沖,這個脈沖送入CPU,就可以引發一個中斷請求信號,我們就把它叫做時鐘中斷。

“時鐘中斷”是特別重要的一個中斷,因為整個操作系統的活動都受到它的激勵。系統利用時鐘中斷維持系統時間、促使環境的切換,以保證所有進程共享CPU;利用時鐘中斷進行記帳、監督系統工作以及確定未來的調度優先級等工作??梢哉f,“時鐘中斷”是整個操作系統的脈搏。

時鐘中斷的物理產生如圖所示:

操作系統對可編程定時/計數器進行有關初始化,然后定時/計數器就對輸入脈沖進行計數(分頻),產生的三個輸出脈沖Out0、Out1、Out2各有用途,很多接口書都介紹了這個問題,我們只看Out0上的輸出脈沖,這個脈沖信號接到中斷控制器8259A_1的0號管腳,觸發一個周期性的中斷,我們就把這個中斷叫做時鐘中斷,時鐘中斷的周期,也就是脈沖信號的周期,我們叫做“滴答”或“時標”(tick)。從本質上說,時鐘中斷只是一個周期性的信號,完全是硬件行為,該信號觸發CPU去執行一個中斷服務程序,但是為了方便,我們就把這個服務程序叫做時鐘中斷。

Linux實現時鐘中斷的全過程

1.可編程定時/計數器的初始化

IBM PC中使用的是8253或8254芯片。有關該芯片的詳細知識我們不再詳述,只大體介紹以下它的組成和作用,如下表5.1所示:

表 8253/8254的組成及作用

名稱

端口地址

工作方式

產生的輸出脈沖的用途

計數器0

0x40

方式3

時鐘中斷,也叫系統時鐘

計數器1

0x41

方式2

動態存儲器刷新

計數器2

0x42

方式3

揚聲器發聲

控制寄存器

0x43

/

用于8253的初始化,接收控制字

計數器0的輸出就是圖中的Out0,它的頻率由操作系統的設計者確定,Linux對8253的初始化程序段如下(在/arch/i386/kernel/i8259.c的init_IRQ()函數中):

set_intr_gate(ox20, interrupt[0]);  /*在IDT的第0x20個表項中插入一個中斷門。這個門中的段選擇符設置成內核代碼段的選擇符,偏移域設置成0號中斷處理程序的入口地址。*/  outb_p(0x34,0x43);  /* 寫計數器0的控制字:工作方式2*/  outb_p(LATCH & 0xff , 0x40); /* 寫計數初值LSB 計數初值低位字節*/  outb(LATCH >> 8 , 0x40); /* 寫計數初值MSB 計數初值高位字節*/  LATCH(英文意思為:鎖存器,即其中鎖存了計數器0的初值)為計數器0的計數初值,在/include/linux/timex.h中定義如下:  #define CLOCK_TICK_RATE 1193180 /* 圖5.3中的輸入脈沖 */  #define LATCH ((CLOCK_TICK_RATE + HZ/2) / HZ) /* 計數器0的計數初值 */ 
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 房产| 西乡县| 马关县| 凌源市| 正阳县| 新邵县| 洪湖市| 于田县| 上饶县| 新巴尔虎右旗| 独山县| 尚义县| 安化县| 乌鲁木齐县| 武汉市| 阳信县| 高安市| 屏南县| 福鼎市| 延川县| 奉节县| 灌阳县| 广德县| 平乡县| 岳池县| 普格县| 汉川市| 前郭尔| 南昌县| 兴安县| 广昌县| 连江县| 安吉县| 肥乡县| 宁城县| 马公市| 蛟河市| 大冶市| 婺源县| 秦皇岛市| 凤山县|