當前位置:首頁 » 操作系統 » linuxhz

linuxhz

發布時間: 2022-07-06 08:33:20

❶ 修改linux內核的hz對系統的穩定性大不大

只要核心模塊沒有修改就沒有問題。
普通情況下,Linux內核中是有一些BUG的~~所以每個新的版本都對上一個版本進行修復~~因此樓主你只要不修改系統的核心模塊就基本上沒有什麼問題~~~

❷ linux 時鍾中斷 哪個定時器

一. Linux的硬體時間
PC機中的時間有三種硬體時鍾實現,這三種都是基於晶振產生的方波信號輸入。這三種時鍾為:(1)實時時鍾RTC ( Real Time Clock) (2)可編程間隔器PIT(Programmable Interval Timer )(3)時間戳計數器TSC(Time Stamp Clock)
1. 實時時鍾 RTC
用於長時間存放系統時間的設備,即時關機後也可依靠主板CMOS電池繼續保持系統的計時,原理圖如下:

Note: Linux與RTC的關系是,當Linux啟動時從RTC讀取時間和日期的基準值,然後在Kernel運行期間便拋開RTC,以軟體的形式維護系統的時間日期,並在適當時機由Kernel將時間寫回RTC Register.
1.1 RTC Register
(1). 時鍾與日歷Register
共10個,地址:0x00-0x09,分別用於保存時間日歷的具體信息,詳情如下:
00 Current Second for RTC
01 Alarm Second
02 Current Minute
03 Alarm Minute
04 Current Hour
05 Alarm Hour
06 Current Day of Week(1=Sunday)
07 Current Date of Month
08 Current Month
09 Current Year
(2).狀態和控制Register
共四個,地址:0x0a-0x0d,控制RTC晶元的工作方式,並表示當前狀態。
l 狀態RegisterA , 0x0A 格式如下:
bit[7]——UIP標志(Update in Progress),為1表示RTC正在更新日歷寄存器組中的值,此時日歷寄存器組是不可訪問的(此時訪問它們將得到一個無意義的漸變值)。
bit[6:4]——這三位是用來定義RTC的操作頻率。各種可能的值如下:

DV2 DV1 DV0
0 0 0 4.194304 MHZ
0 0 1 1.048576 MHZ
0 1 0 32.769 KHZ
1 1 0/1 任何
PC機通常設置成「010」。
bit[3:0]——速率選擇位(Rate Selection bits),用於周期性或方波信號輸出。
RS3 RS2 RS1 RS0 周期性中斷 方波 周期性中斷 方波
0 0 0 0 None None None None
0 0 0 1 30.517μs 32.768 KHZ 3.90625ms 256 HZ
0 0 1 0 61.035μs 16.384 KHZ
0 0 1 1 122.070μs 8.192KHZ
0 1 0 0 244.141μs 4.096KHZ
0 1 0 1 488.281μs 2.048KHZ
0 1 1 0 976.562μs 1.024KHZ
0 1 1 1 1.953125ms 512HZ
1 0 0 0 3.90625ms 256HZ
1 0 0 1 7.8125ms 128HZ
1 0 1 0 15.625ms 64HZ
1 0 1 1 31.25ms 32HZ
1 1 0 0 62.5ms 16HZ
1 1 0 1 125ms 8HZ
1 1 1 0 250ms 4HZ
1 1 1 1 500ms 2HZ
PC機BIOS對其默認的設置值是「0110」
l 狀態Register B , 0x0B 格式如下:
bit[7]——SET標志。為1表示RTC的所有更新過程都將終止,用戶程序隨後馬上對日歷寄存器組中的值進行初始化設置。為0表示將允許更新過程繼續。
bit[6]——PIE標志,周期性中斷enable標志。
bit[5]——AIE標志,告警中斷enable標志。
bit[4]——UIE標志,更新結束中斷enable標志。
bit[3]——SQWE標志,方波信號enable標志。
bit[2]——DM標志,用來控制日歷寄存器組的數據模式,0=BCD,1=BINARY。BIOS總是將它設置為0。
bit[1]——24/12標志,用來控制hour寄存器,0表示12小時制,1表示24小時制。PC機BIOS總是將它設置為1。
bit[0]——DSE標志。BIOS總是將它設置為0。
l 狀態Register C,0x0C 格式如下:
bit[7]——IRQF標志,中斷請求標志,當該位為1時,說明寄存器B中斷請求 發生。
bit[6]——PF標志,周期性中斷標志,為1表示發生周期性中斷請求。
bit[5]——AF標志,告警中斷標志,為1表示發生告警中斷請求。
bit[4]——UF標志,更新結束中斷標志,為1表示發生更新結束中斷請求。
l 狀態Register D,0x0D 格式如下:
bit[7]——VRT標志(Valid RAM and Time),為1表示OK,為0表示RTC 已經掉電。
bit[6:0]——總是為0,未定義。
2.可編程間隔定時器 PIT
每個PC機中都有一個PIT,以通過IRQ0產生周期性的時鍾中斷信號,作為系統定時器 system timer。當前使用最普遍的是Intel 8254 PIT晶元,它的I/O埠地址是0x40~0x43。
Intel 8254 PIT有3個計時通道,每個通道都有其不同的用途:
(1) 通道0用來負責更新系統時鍾。每當一個時鍾滴答過去時,它就會通過IRQ0向 系統 產生一次時鍾中斷。
(2) 通道1通常用於控制DMAC對RAM的刷新。
(3) 通道2被連接到PC機的揚聲器,以產生方波信號。
每 個通道都有一個向下減小的計數器,8254 PIT的輸入時鍾信號的頻率是1.193181MHZ,也即一秒鍾輸入1193181個clock-cycle。每輸入一個clock-cycle其時間 通道的計數器就向下減1,一直減到0值。因此對於通道0而言,當他的計數器減到0時,PIT就向系統產生一次時鍾中斷,表示一個時鍾滴答已經過去了。計數 器為16bit,因此所能表示的最大值是65536,一秒內發生的滴答數是:1193181/65536=18.206482.
PIT的I/O埠:
0x40 通道0 計數器 Read/Write
0X41 通道1計數器 Read/Write
0X42 通道2計數器 Read/Write
0X43 控制字 Write Only
Note: 因PIT I/O埠是8位,而PIT相應計數器是16位,因此必須對PIT計數器進行兩次讀寫。
8254 PIT的控制寄存器(0X43)的格式如下:
bit[7:6] — 通道選擇位:00 ,通道0;01,通道1;10,通道2;11,read-back command,僅8254。
bit[5:4] – Read/Write/Latch鎖定位,00,鎖定當前計數器以便讀取計數值;01,只讀高位元組;10,只讀低位元組;11,先高後低。
bit[3:1] – 設定各通道的工作模式。
000 mode0 當通道處於count out 時產生中斷信號,可用於系統定時
001 mode1 Hardware retriggerable one-shot
010 mode2 Rate Generator。產生實時時鍾中斷,通道0通常工作在這個模式下
011 mode3 方波信號發生器
100 mode4 Software triggered strobe
101 mode5 Hardware triggered strobe
3. 時間戳計數器 TSC
從Pentium開始,所有的Intel 80x86 CPU就都包含一個64位的時間戳記數器(TSC)的寄存器。該寄存器實際上是一個不斷增加的計數器,它在CPU的每個時鍾信號到來時加1(也即每一個clock-cycle輸入CPU時,該計數器的值就加1)。
匯編指令rdtsc可以用於讀取TSC的值。利用CPU的TSC,操作系統通常可以得到更為精準的時間度量。假如clock-cycle的頻率是400MHZ,那麼TSC就將每2.5納秒增加一次。
二. Linux時鍾中斷處理程序
1. 幾個概念
(1)時鍾周期(clock cycle)的頻率:8253/8254 PIT的本質就是對由晶體振盪器產生的時鍾周期進行計數,晶體振盪器在1秒時間內產生的時鍾脈沖個數就是時鍾周期的頻率。Linux用宏 CLOCK_TICK_RATE來表示8254 PIT的輸入時鍾脈沖的頻率(在PC機中這個值通常是1193180HZ),該宏定義在include/asm-i386/timex.h頭文件中
#define CLOCK_TICK_RATE 1193180 kernel=2.4 &2.6

(2)時鍾滴答(clock tick):當PIT通道0的計數器減到0值時,它就在IRQ0上產生一次時鍾中斷,也即一次時鍾滴答。PIT通道0的計數器的初始值決定了要過多少時鍾周期才產生一次時鍾中斷,因此也就決定了一次時鍾滴答的時間間隔長度。
(3)時鍾滴答的頻率(HZ):1秒時間內PIT所產生的時鍾滴答次數。 這個值也由PIT通道0的計數器初值決定的.Linux內核用宏HZ來表示時鍾滴答的頻率,而且在不同的平台上HZ有不同的定義值。對於ALPHA和 IA62平台HZ的值是1024,對於SPARC、MIPS、ARM和i386等平台HZ的值都是100。該宏在i386平台上的定義如下 (include/asm-i386/param.h):
#define HZ 100 kernel=2.4
#define HZ CONFIG_HZ kernel=2.6

(4)宏LATCH:定義要寫到PIT通道0的計數器中的值,它表示PIT將隔多少個時鍾周期產生一次時鍾中斷。公式計算:
LATCH=(1秒之內的時鍾周期個數)÷(1秒之內的時鍾中斷次數)=(CLOCK_TICK_RATE)÷(HZ)
定義在<include/linux/timex.h>
#define LATCH ((CLOCK_TICK_RATE + HZ/2) / HZ)
(5)全局變數jiffies:用於記錄系統自啟動以來產生的滴答總數。啟動時,kernel將該變數初始為0,每次時鍾中斷處理程序timer_interrupt()將該變數加1。因為一秒鍾內增加的時鍾中斷次數等於Hz,所以jiffies一秒內增加的值也是Hz。由此可得系統運行時間是jiffies/Hz 秒。
jiffies定義於<linux/jiffies.h>中:
extern unsigned long volatile jiffies;
Note:在kernel 2.4,jiffies是32位無符號數;kernel 2.6,jiffies是64位無符號數。
(6)全局變數xtime: 結構類型變數,用於表示當前時間距UNIX基準時間1970-01-01 00:00:00的相對秒數值。當系統啟動時,Kernel通過讀取RTC Register中的數據來初始化系統時間(wall_time),該時間存放在xtime中。
void __init time_init (void) {
... ...
xtime.tv_sec = get_cmos_time ();
xtime.tv_usec = 0;
... ... }
Note:實時時鍾RTC的最主要作用便是在系統啟動時用來初始化xtime變數。
2.Linux的時鍾中斷處理程序
Linux下時鍾中斷處理由time_interrupt() 函數實現,主要完成以下任務:
l 獲得xtime_lock鎖,以便對訪問的jiffies_64 (kernel2.6)和 xtime進行保護
l 需要時應答或重新設置系統時鍾。
l 周期性的使用系統時間(wall_time)更新實時時鍾RTC
l 調用體系結構無關的時鍾常式:do_timer()。
do_timer()主要完成以下任務:
l 更新jiffies;
l 更新系統時間(wall_time),該時間存放在xtime變數中
l 執行已經到期的動態定時器
l 計算平均負載值
void do_timer(unsigned long ticks)
{
jiffies_64 += ticks;
update_process_times(user_mode(regs));
update_times (ticks);
}
static inline void update_times(unsigned long ticks)
{
update_wall_time ();
calc_load (ticks);
}
time_interrupt ():

static void timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) {
int count;
write_lock (&xtime_lock); //獲得xtime_lock鎖

if(use_cyclone)
mark_timeoffset_cyclone();
else if (use_tsc) {
rdtscl(last_tsc_low); //讀TSC register到last_tsc_low
spin_lock (&i8253_lock); //對自旋鎖i8253_lock加鎖,對8254PIT訪問
outb_p (0x00, 0x43);

count = inb_p(0x40);
count |= inb(0x40) << 8;
if (count > LATCH) {
printk (KERN_WARNING "i8253 count too high! resetting../n");
outb_p (0x34, 0x43);
outb_p (LATCH & 0xff, 0x40);
outb(LATCH >> 8, 0x40);
count = LATCH - 1;
}
spin_unlock (&i8253_lock);

if (count = = LATCH) {
count- -;
}

count = ((LATCH-1) - count) * TICK_SIZE;
delay_at_last_interrupt = (count + LATCH/2) / LATCH;
} //end use_tsc
do_timer_interrupt (irq, NULL, regs);
write_unlock(&xtime_lock);
}//end time_interrupt

do_timer_interrupt():
static inline void do_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{
……
do_timer(regs);
if((time_status & STA_UNSYNC)= =0&&xtime.tv_sec> last_rtc_update + 660 && xtime.tv_usec >= 500000 - ((unsigned) tick) / 2 && xtime.tv_usec <= 500000 + ((unsigned) tick) / 2) {
if (set_rtc_mmss(xtime.tv_sec) == 0)
last_rtc_update = xtime.tv_sec;
else
last_rtc_update = xtime.tv_sec - 600;
……
}
do_timer_interrupt()主要完成:調用do_timer()和判斷是否需要更新CMOS時鍾。更新CMOS時鍾的條件如下:三個須同時成立
1.系統全局時間狀態變數time_status中沒有設置STA_UNSYNC標志,即Linux沒有設置外部同步時鍾(如NTP)
2.自從上次CMOS時鍾更新已經過去11分鍾。全局變數last_rtc_update保存上次更新CMOS時鍾的時間.
3.由於RTC存在Update Cycle,因此應在一秒鍾間隔的中間500ms左右調用set_rtc_mmss()函數,將當前時間xtime.tv_sec寫回RTC中。
Note. Linux kernel 中定義了一個類似jiffies的變數wall_jiffies,用於記錄kernel上一次更新xtime時,jiffies的值。

Summary: Linux kernel在啟動時,通過讀取RTC里的時間日期初始化xtime,此後由kernel通過初始PIT來提供軟時鍾。
時鍾中斷處理過程可歸納為:系統時鍾system timer在IRQ0上產生中斷;kernel調用time_interrupt();time_interrupt()判斷系統是否使用TSC,若使用 則讀取TSC register;然後讀取PIT 通道0的計數值;調用do_time_interrupt(),實現系統時間更新.

❸ linux下如何設置外接顯示器的解析度

方法一、直接在圖形化界面操作:
桌面---系統---管理---顯示---硬體----配置---選擇需要的解析度即可

方法二、在命令行下修改解析度:
第一步,直接運行xrandr查看下解析度的情況。

第二步,用cvt命令生成一個modeline,得到:
1920x1080 59.96 Hz (CVT 2.07M9) hsync: 67.16 kHz; pclk: 173.00 MHz
Modeline "1920x1080_60.00" 173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync
第三步,編輯 /etc/gdm/Init/Default ,在文件開頭處不遠(前幾行)找到

/sbin/initctl -q emit login-session-start DISPLAY_MANAGER=gdm
這行,在這行前添加三行:
xrandr --newmode "1920x1080_60.00" 173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync
xrandr --addmode VGA1 "1920x1080_60.00"
xrandr --output VGA1 --mode "1920x1080_60.00"

❹ linux下,如何設置刷新頻率(Windows下可以選擇80HZ)在linux下只有60HZ,怎麼設置

進入設備管理器,看看裝好驅動沒有。沒有則重裝驅動。
如果不是這樣,那就選擇看看,如果還是看不到。則重新啟動看看。是在不行就在換個安裝盤。

❺ 我昨天剛裝上linux,但進入時卻提示: 刷新率超出范圍93k/58Hz 然後就沒有了反應.我該怎麼辦

開機按F8進入安全模式,把刷新頻率改到60就可以了,再重起!!!
更改刷新頻率方法::在桌面上右擊滑鼠,選屬性->在屬性頁中右上角點設置選

選中以後,在右下角有個高級,點擊進入->選擇監視器那個選項,改刷新頻率->點確定!!
如果你看不到那個刷新頻率,你可以把進入安全模式把顯卡的驅動刪除,直接在重新啟動就好了

❻ 優麒麟的Linux系統好不好用,2GRAM內存雙核1.6Hz夠用嗎

可以試試deepin這個linux發行版,看到它以後會顛覆你對linux的認知,這個發行版非常好用,這個發行版流暢運行的配置最低要求是 1G內存,雙核處理器 1.4GHZ.

❼ linux各個版本內核的默認HZ分別是多少

Linux內核版本有兩種:穩定版和開發版。 Linux內核版本號由3個數字組成:r.x.y。 r:目前發布的內核主版本。x:偶數表示穩定版本;奇數表示開發中版本。y:錯誤修補的次數。 其中第一個數字是主版本號,第二個數字是次版本號,第三個數字是修訂版本號。如果次版本號是偶數,那麼該內核就是穩定版的;若是奇數,則是開發版的。頭兩個數字合在一齊可以描述內核系列。如穩定版的2.6.0,它是2.6版內核系列。

❽ 紅旗Linux5.0刷新率為什麼調成85HZ,屏幕還是那麼閃

你的驅動不對

❾ 有誰會用linux裡面的定時器timer_list

大家來學習學習,「jiffies + HZ」這個時間是怎麼計算,還不是非常理解。我的整體理解是,驅動被載入一秒內,運行myfunc函數,myfunc函數列印一個「Hello,world!"後,每兩秒再列印一個"Hello,world!"。驅動函數不需要你自己寫main函數,你配置成y會自動被拉起,配置成m,需要手動通過工具拉起。

熱點內容
u啟動iso解壓 發布:2024-11-18 22:22:03 瀏覽:885
oracle存儲過程rollback 發布:2024-11-18 22:14:05 瀏覽:672
c語言學生管理系統課程設計 發布:2024-11-18 22:13:15 瀏覽:604
怎麼在雲伺服器上掛機手機游戲 發布:2024-11-18 22:03:03 瀏覽:317
ppp撥號伺服器搭建 發布:2024-11-18 22:02:59 瀏覽:586
幻靈游俠腳本 發布:2024-11-18 21:57:39 瀏覽:457
node加密 發布:2024-11-18 21:56:13 瀏覽:978
養女ftp 發布:2024-11-18 21:56:02 瀏覽:818
請描述如何配置安全的防火牆 發布:2024-11-18 21:53:45 瀏覽:144
安卓ios怎麼選 發布:2024-11-18 21:41:54 瀏覽:475