成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

分析linux內核的idle的知識

系統 Linux
Linux系統越來越受到電腦用戶的歡迎,于是很多人開始學習Linux時,學習linux,你可能會遇到linux內核問題,這里將介紹linux內核中idle知識,在這里拿出來和大家分享一下。

Linux系統越來越受到電腦用戶的歡迎,于是很多人開始學習Linux時,學習linux,你可能會遇到linux內核問題,這里將介紹linux內核中idle知識,在這里拿出來和大家分享一下。

1. idle是什么
簡單的說idle是一個進程,其pid號為 0。其前身是系統創建的第一個進程,也是唯一一個沒有通過fork()產生的進程。在smp系統中,每個處理器單元有獨立的一個運行隊列,而每個運行隊列上又有一個idle進程,即有多少處理器單元,就有多少idle進程。系統的空閑時間,其實就是指idle進程的"運行時間"。既然是idle是進程,那我們來看看idle是如何被創建,又具體做了哪些事情?

2. idle的創建
我們知道系統是從BIOS加電自檢,載入MBR中的引導程序(LILO/GRUB),再加載linux內核開始運行的,一直到指定shell開始運行告一段落,這時用戶開始操作Linux。而大致是在vmlinux的入口startup_32(head.S)中為pid號為0的原始進程設置了執行環境,然后原是進程開始執行start_kernel()完成Linux內核的初始化工作。包括初始化頁表,初始化中斷向量表,初始化系統時間等。繼而調用 fork(),創建第一個用戶進程:
kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND);

這個進程就是著名的pid為1的init進程,它會繼續完成剩下的初始化工作,然后execve(/sbin/init), 成為系統中的其他所有進程的祖先。關于init我們這次先不研究,回過頭來看pid=0的進程,在創建了init進程后,pid=0的進程調用 cpu_idle()演變成了idle進程。

                           current_thread_info()->status |= TS_POLLING;

在 smp系統中,除了上面剛才我們講的主處理器(執行初始化工作的處理器)上idle進程的創建,還有從處理器(被主處理器activate的處理器)上的idle進程,他們又是怎么創建的呢?接著看init進程,init在演變成/sbin/init之前,會執行一部分初始化工作,其中一個就是 smp_prepare_cpus(),初始化SMP處理器,在這過程中會在處理每個從處理器時調用
task = copy_process(CLONE_VM, 0, idle_regs(&regs), 0, NULL, NULL, 0);
init_idle(task, cpu);
即從init中復制出一個進程,并把它初始化為idle進程(pid仍然為0)。從處理器上的idle進程會進行一些Activate工作,然后執行cpu_idle()。

整個過程簡單的說就是,原始進程(pid=0)創建init進程(pid=1),然后演化成idle進程(pid=0)。init進程為每個從處理器(運行隊列)創建出一個idle進程(pid=0),然后演化成/sbin/init。

3. idle的運行時機
idle 進程優先級為MAX_PRIO,即最低優先級。早先版本中,idle是參與調度的,所以將其優先級設為最低,當沒有其他進程可以運行時,才會調度執行idle。而目前的版本中idle并不在運行隊列中參與調度,而是在運行隊列結構中含idle指針,指向idle進程,在調度器發現運行隊列為空的時候運行,調入運行。

4. idle的workload
從上面的分析我們可以看出,idle在系統沒有其他就緒的進程可執行的時候才會被調度。不管是主處理器,還是從處理器,最后都是執行的cpu_idle()函數。所以我們來看看cpu_idle做了什么事情。
因為idle進程中并不執行什么有意義的任務,所以通常考慮的是兩點:1.節能,2.低退出延遲。
其核心代碼如下:

  1. void cpu_idle(void)  
  2. {  
  3.  int cpu = smp_processor_id();  
  4.  
  5.  current_thread_info()->status |= TS_POLLING;  
  6.  
  7.  /* endless idle loop with no priority at all */  
  8.  while (1) {  
  9.   tick_nohz_stop_sched_tick(1);  
  10.   while (!need_resched()) {  
  11.  
  12.    check_pgt_cache();  
  13.    rmb();  
  14.  
  15.    if (rcu_pending(cpu))  
  16.     rcu_check_callbacks(cpu, 0);  
  17.  
  18.    if (cpu_is_offline(cpu))  
  19.     play_dead();  
  20.  
  21.    local_irq_disable();  
  22.    __get_cpu_var(irq_stat).idle_timestamp = jiffies;  
  23.    /* Don't trace irqs off for idle */  
  24.    stop_critical_timings();  
  25.    pm_idle();  
  26.    start_critical_timings();  
  27.   }  
  28.   tick_nohz_restart_sched_tick();  
  29.   preempt_enable_no_resched();  
  30.   schedule();  
  31.   preempt_disable();  
  32.  }  
  33. }  

循環判斷need_resched以降低退出延遲,用idle()來節能。
默認的idle實現是hlt指令,hlt指令使CPU處于暫停狀態,等待硬件中斷發生的時候恢復,從而達到節能的目的。即從處理器C0態變到C1態(見 ACPI標準)。這也是早些年windows平臺上各種"處理器降溫"工具的主要手段。當然idle也可以是在別的ACPI或者APM模塊中定義的,甚至是自定義的一個idle(比如說nop)。

小結:
1.idle是一個進程,其pid為0。
2.主處理器上的idle由原始進程(pid=0)演變而來。從處理器上的idle由init進程fork得到,但是它們的pid都為0。
3.Idle進程為最低優先級,且不參與調度,只是在運行隊列為空的時候才被調度。
4.Idle循環等待need_resched置位。默認使用hlt節能。

希望通過本文你能全面了解linux內核中idle知識。

【編輯推薦】

  1. 詳解Linux系統修改環境變量PATH路徑的方法
  2. Linux里防范arp病毒攻擊
  3. Linux Opera輕松應用scim
  4. 輕松完成Linux安裝Flash Media Server
  5. 闡述Linux系統時鐘同步服務NTPD配置技巧
責任編輯:小霞 來源: 電子工業出版社
相關推薦

2014-07-29 15:44:33

Linux內核Crash

2023-04-28 08:42:08

Linux內核SPI驅動

2009-06-19 20:32:00

Linux

2021-09-06 07:45:08

LinuxLinux內核

2021-09-28 07:12:09

Linux內核入口

2017-08-16 16:20:01

Linux內核態搶占用戶態搶占

2013-11-05 09:58:39

Linux內核

2013-11-12 11:01:46

Linux內核

2013-11-06 13:03:10

Linux內核

2013-11-25 14:07:11

Linux內核內核特性

2013-11-07 13:59:56

Linux內核

2017-04-12 14:30:45

Linux內核DebugFS

2011-01-11 13:45:06

2017-03-17 15:05:05

Linux內核源碼do_fork

2013-05-13 09:52:52

Windows內核Linux內核

2010-05-05 13:13:55

Unix內核

2013-11-05 09:55:37

2013-10-31 14:09:14

Linux內核

2009-10-16 09:45:41

Linux內核操作系統

2011-02-28 10:31:02

Linux 2.6內核
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕亚洲精品 | 精品久久久久久久久久久久久久 | 亚洲精品二区 | 成人日韩 | 中文字幕在线精品 | 免费一级网站 | 精品日韩一区 | 犬夜叉在线观看 | 欧美日一区二区 | 欧美高清视频 | 亚洲黄色在线免费观看 | 99精品视频在线观看 | 欧美理论片在线观看 | 国产成人艳妇aa视频在线 | 精品国产免费一区二区三区五区 | 人人干免费 | 久久久久久亚洲精品不卡 | 免费在线播放黄色 | 国产日韩在线观看一区 | 久久久无码精品亚洲日韩按摩 | 国产亚洲一区二区在线观看 | 男人天堂99| 日韩中文字幕一区二区 | 日韩欧美三区 | 超碰在线人人干 | www四虎影视 | 国产精品视频一区二区三区不卡 | 日韩精品一区二区久久 | 91精品在线播放 | 日本精品在线播放 | 亚洲精品第一页 | 极情综合网 | 亚洲天堂影院 | 久久影音先锋 | 91麻豆精品一区二区三区 | 精品日韩一区二区 | 国产精品精品视频一区二区三区 | 秋霞在线一区二区 | 欧美日韩一区二区三区四区五区 | 第四色播日韩第一页 | 久久爆操 |