日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux下0号进程的前世(init_task进程)今生(idle进程)----Linux进程的管理与调度(五)【转】...

發(fā)布時(shí)間:2025/3/21 linux 73 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux下0号进程的前世(init_task进程)今生(idle进程)----Linux进程的管理与调度(五)【转】... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

Linux下有3個(gè)特殊的進(jìn)程,idle進(jìn)程(PID = 0), init進(jìn)程(PID = 1)和kthreadd(PID = 2)

  • idle進(jìn)程由系統(tǒng)自動創(chuàng)建, 運(yùn)行在內(nèi)核態(tài)

idle進(jìn)程其pid=0,其前身是系統(tǒng)創(chuàng)建的第一個(gè)進(jìn)程,也是唯一一個(gè)沒有通過fork或者kernel_thread產(chǎn)生的進(jìn)程。完成加載系統(tǒng)后,演變?yōu)檫M(jìn)程調(diào)度、交換

  • init進(jìn)程由idle通過kernel_thread創(chuàng)建,在內(nèi)核空間完成初始化后, 加載init程序, 并最終用戶空間

由0進(jìn)程創(chuàng)建,完成系統(tǒng)的初始化. 是系統(tǒng)中所有其它用戶進(jìn)程的祖先進(jìn)程

Linux中的所有進(jìn)程都是有init進(jìn)程創(chuàng)建并運(yùn)行的。首先Linux內(nèi)核啟動,然后在用戶空間中啟動init進(jìn)程,再啟動其他系統(tǒng)進(jìn)程。在系統(tǒng)啟動完成完成后,init將變?yōu)槭刈o(hù)進(jìn)程監(jiān)視系統(tǒng)其他進(jìn)程。

  • kthreadd進(jìn)程由idle通過kernel_thread創(chuàng)建,并始終運(yùn)行在內(nèi)核空間, 負(fù)責(zé)所有內(nèi)核線程的調(diào)度和管理

它的任務(wù)就是管理和調(diào)度其他內(nèi)核線程kernel_thread, 會循環(huán)執(zhí)行一個(gè)kthread的函數(shù),該函數(shù)的作用就是運(yùn)行kthread_create_list全局鏈表中維護(hù)的kthread, 當(dāng)我們調(diào)用kernel_thread創(chuàng)建的內(nèi)核線程會被加入到此鏈表中,因此所有的內(nèi)核線程都是直接或者間接的以kthreadd為父進(jìn)程

我們下面就詳解分析0號進(jìn)程的前世(init_task)今生(idle)

idle的創(chuàng)建

在smp系統(tǒng)中,每個(gè)處理器單元有獨(dú)立的一個(gè)運(yùn)行隊(duì)列,而每個(gè)運(yùn)行隊(duì)列上又有一個(gè)idle進(jìn)程,即有多少處理器單元,就有多少idle進(jìn)程。

idle進(jìn)程其pid=0,其前身是系統(tǒng)創(chuàng)建的第一個(gè)進(jìn)程,也是唯一一個(gè)沒有通過fork()產(chǎn)生的進(jìn)程。在smp系統(tǒng)中,每個(gè)處理器單元有獨(dú)立的一個(gè)運(yùn)行隊(duì)列,而每個(gè)運(yùn)行隊(duì)列上又有一個(gè)idle進(jìn)程,即有多少處理器單元,就有多少idle進(jìn)程。系統(tǒng)的空閑時(shí)間,其實(shí)就是指idle進(jìn)程的”運(yùn)行時(shí)間”。既然是idle是進(jìn)程,那我們來看看idle是如何被創(chuàng)建,又具體做了哪些事情?

我們知道系統(tǒng)是從BIOS加電自檢,載入MBR中的引導(dǎo)程序(LILO/GRUB),再加載linux內(nèi)核開始運(yùn)行的,一直到指定shell開始運(yùn)行告一段落,這時(shí)用戶開始操作Linux。

0號進(jìn)程上下文信息–init_task描述符

init_task是內(nèi)核中所有進(jìn)程、線程的task_struct雛形,在內(nèi)核初始化過程中,通過靜態(tài)定義構(gòu)造出了一個(gè)task_struct接口,取名為init_task,然后在內(nèi)核初始化的后期,通過rest_init()函數(shù)新建了內(nèi)核init線程,kthreadd內(nèi)核線程

  • 內(nèi)核init線程,最終執(zhí)行/sbin/init進(jìn)程,變?yōu)樗杏脩魬B(tài)程序的根進(jìn)程(pstree命令顯示),即用戶空間的init進(jìn)程

開始的init是有kthread_thread創(chuàng)建的內(nèi)核線程, 他在完成初始化工作后, 轉(zhuǎn)向用戶空間, 并且生成所有用戶進(jìn)程的祖先

  • 內(nèi)核kthreadd內(nèi)核線程,變?yōu)樗袃?nèi)核態(tài)其他守護(hù)線程的父線程。

它的任務(wù)就是管理和調(diào)度其他內(nèi)核線程kernel_thread, 會循環(huán)執(zhí)行一個(gè)kthread的函數(shù),該函數(shù)的作用就是運(yùn)行kthread_create_list全局鏈表中維護(hù)的kthread, 當(dāng)我們調(diào)用kernel_thread創(chuàng)建的內(nèi)核線程會被加入到此鏈表中,因此所有的內(nèi)核線程都是直接或者間接的以kthreadd為父進(jìn)程

所以init_task決定了系統(tǒng)所有進(jìn)程、線程的基因, 它完成初始化后, 最終演變?yōu)?號進(jìn)程idle, 并且運(yùn)行在內(nèi)核態(tài)

內(nèi)核在初始化過程中,當(dāng)創(chuàng)建完init和kthreadd內(nèi)核線程后,內(nèi)核會發(fā)生調(diào)度執(zhí)行,此時(shí)內(nèi)核將使用該init_task作為其task_struct結(jié)構(gòu)體描述符,當(dāng)系統(tǒng)無事可做時(shí),會調(diào)度其執(zhí)行, 此時(shí)該內(nèi)核會變?yōu)閕dle進(jìn)程,讓出CPU,自己進(jìn)入睡眠,不停的循環(huán),查看init_task結(jié)構(gòu)體,其comm字段為swapper,作為idle進(jìn)程的描述符。

idle的運(yùn)行時(shí)機(jī)

idle 進(jìn)程優(yōu)先級為MAX_PRIO-20。早先版本中,idle是參與調(diào)度的,所以將其優(yōu)先級設(shè)低點(diǎn),當(dāng)沒有其他進(jìn)程可以運(yùn)行時(shí),才會調(diào)度執(zhí)行 idle。而目前的版本中idle并不在運(yùn)行隊(duì)列中參與調(diào)度,而是在運(yùn)行隊(duì)列結(jié)構(gòu)中含idle指針,指向idle進(jìn)程,在調(diào)度器發(fā)現(xiàn)運(yùn)行隊(duì)列為空的時(shí)候運(yùn)行,調(diào)入運(yùn)行

簡言之, 內(nèi)核中init_task變量就是是進(jìn)程0使用的進(jìn)程描述符,也是Linux系統(tǒng)中第一個(gè)進(jìn)程描述符,init_task并不是系統(tǒng)通過kernel_thread的方式(當(dāng)然更不可能是fork)創(chuàng)建的, 而是由內(nèi)核黑客靜態(tài)創(chuàng)建的.

該進(jìn)程的描述符在init/init_task中定義,代碼片段如下

/* Initial task structure */ struct task_struct init_task = INIT_TASK(init_task); EXPORT_SYMBOL(init_task);

init_task描述符使用宏INIT_TASK對init_task的進(jìn)程描述符進(jìn)行初始化,宏INIT_TASK在include/linux/init_task.h文件中

init_task是Linux內(nèi)核中的第一個(gè)線程,它貫穿于整個(gè)Linux系統(tǒng)的初始化過程中,該進(jìn)程也是Linux系統(tǒng)中唯一一個(gè)沒有用kernel_thread()函數(shù)創(chuàng)建的內(nèi)核態(tài)進(jìn)程(內(nèi)核線程)

在init_task進(jìn)程執(zhí)行后期,它會調(diào)用kernel_thread()函數(shù)創(chuàng)建第一個(gè)核心進(jìn)程kernel_init,同時(shí)init_task進(jìn)程繼續(xù)對Linux系統(tǒng)初始化。在完成初始化后,init_task會退化為cpu_idle進(jìn)程,當(dāng)Core 0的就緒隊(duì)列中沒有其它進(jìn)程時(shí),該進(jìn)程將會獲得CPU運(yùn)行。新創(chuàng)建的1號進(jìn)程kernel_init將會逐個(gè)啟動次CPU,并最終創(chuàng)建用戶進(jìn)程!

備注:core0上的idle進(jìn)程由init_task進(jìn)程退化而來,而AP的idle進(jìn)程則是BSP在后面調(diào)用fork()函數(shù)逐個(gè)創(chuàng)建的

進(jìn)程堆棧init_thread_union

init_task進(jìn)程使用init_thread_union數(shù)據(jù)結(jié)構(gòu)描述的內(nèi)存區(qū)域作為該進(jìn)程的堆棧空間,并且和自身的thread_info參數(shù)公用這一內(nèi)存空間空間

.stack = &init_thread_info,

而init_thread_info則是一段體系結(jié)構(gòu)相關(guān)的定義,被定義在[/arch/對應(yīng)體系/include/asm/thread_info.h]中,但是他們大多數(shù)為如下定義

#define init_thread_info (init_thread_union.thread_info) #define init_stack (init_thread_union.stack)

其中init_thread_union被定義在init/init_task.c, 緊跟著前面init_task的定義

/** Initial thread structure. Alignment of this is handled by a special* linker map entry.*/ union thread_union init_thread_union __init_task_data ={ INIT_THREAD_INFO(init_task) };

我們可以發(fā)現(xiàn)init_task是用INIT_THREAD_INFO宏進(jìn)行初始化的, 這個(gè)才是我們真正體系結(jié)構(gòu)相關(guān)的部分, 他與init_thread_info定義在一起,被定義在/arch/對應(yīng)體系/include/asm/thread_info.h中,以下為x86架構(gòu)的定義

參見
http://lxr.free-electrons.com/source/arch/x86/include/asm/thread_info.h?v=4.5#L65

#define INIT_THREAD_INFO(tsk) \ { \.task = &tsk, \.flags = 0, \.cpu = 0, \.addr_limit = KERNEL_DS, \ }

其他體系結(jié)構(gòu)的定義請參見
/arch/對應(yīng)體系/include/asm/thread_info.h中

架構(gòu)定義
x86arch/x86/include/asm/thread_info.h
arm64arch/arm64/include/asm/thread_info.h

init_thread_info定義中的__init_task_data表明該內(nèi)核棧所在的區(qū)域位于內(nèi)核映像的init data區(qū),我們可以通過編譯完內(nèi)核后所產(chǎn)生的System.map來看到該變量及其對應(yīng)的邏輯地址

cat System.map-3.1.6 | grep init_thread_union

進(jìn)程內(nèi)存空間

init_task的虛擬地址空間,也采用同樣的方法被定義

由于init_task是一個(gè)運(yùn)行在內(nèi)核空間的內(nèi)核線程, 因此其虛地址段mm為NULL, 但是必要時(shí)他還是需要使用虛擬地址的,因此avtive_mm被設(shè)置為init_mm

參見
http://lxr.free-electrons.com/source/include/linux/init_task.h?v=4.5#L202

.mm = NULL, \.active_mm = &init_mm, \

其中init_mm被定義為init-mm.c中,參見 http://lxr.free-electrons.com/source/mm/init-mm.c?v=4.5#L16

struct mm_struct init_mm = {.mm_rb = RB_ROOT,.pgd = swapper_pg_dir,.mm_users = ATOMIC_INIT(2),.mm_count = ATOMIC_INIT(1),.mmap_sem = __RWSEM_INITIALIZER(init_mm.mmap_sem),.page_table_lock = __SPIN_LOCK_UNLOCKED(init_mm.page_table_lock),.mmlist = LIST_HEAD_INIT(init_mm.mmlist),INIT_MM_CONTEXT(init_mm) };

0號進(jìn)程演化

rest_init創(chuàng)建init進(jìn)程(PID =1)和kthread進(jìn)程(PID=2)

Linux在無進(jìn)程概念的情況下將一直從初始化部分的代碼執(zhí)行到start_kernel,然后再到其最后一個(gè)函數(shù)調(diào)用rest_init

大致是在vmlinux的入口startup_32(head.S)中為pid號為0的原始進(jìn)程設(shè)置了執(zhí)行環(huán)境,然后原是進(jìn)程開始執(zhí)行start_kernel()完成Linux內(nèi)核的初始化工作。包括初始化頁表,初始化中斷向量表,初始化系統(tǒng)時(shí)間等。

從rest_init開始,Linux開始產(chǎn)生進(jìn)程,因?yàn)閕nit_task是靜態(tài)制造出來的,pid=0,它試圖將從最早的匯編代碼一直到start_kernel的執(zhí)行都納入到init_task進(jìn)程上下文中。

這個(gè)函數(shù)其實(shí)是由0號進(jìn)程執(zhí)行的, 他就是在這個(gè)函數(shù)中, 創(chuàng)建了init進(jìn)程和kthreadd進(jìn)程

這部分代碼如下:

static noinline void __init_refok rest_init(void) {int pid;rcu_scheduler_starting();smpboot_thread_init();/** We need to spawn init first so that it obtains pid 1, however* the init task will end up wanting to create kthreads, which, if* we schedule it before we create kthreadd, will OOPS.*/kernel_thread(kernel_init, NULL, CLONE_FS);numa_default_policy();pid = kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES);rcu_read_lock();kthreadd_task = find_task_by_pid_ns(pid, &init_pid_ns);rcu_read_unlock();complete(&kthreadd_done);/** The boot idle thread must execute schedule()* at least once to get things moving:*/init_idle_bootup_task(current);schedule_preempt_disabled();/* Call into cpu_idle with preempt disabled */cpu_startup_entry(CPUHP_ONLINE); }
  • 調(diào)用kernel_thread()創(chuàng)建1號內(nèi)核線程, 該線程隨后轉(zhuǎn)向用戶空間, 演變?yōu)閕nit進(jìn)程
  • 調(diào)用kernel_thread()創(chuàng)建kthreadd內(nèi)核線程。
  • init_idle_bootup_task():當(dāng)前0號進(jìn)程init_task最終會退化成idle進(jìn)程,所以這里調(diào)用init_idle_bootup_task()函數(shù),讓init_task進(jìn)程隸屬到idle調(diào)度類中。即選擇idle的調(diào)度相關(guān)函數(shù)。
  • 調(diào)用schedule()函數(shù)切換當(dāng)前進(jìn)程,在調(diào)用該函數(shù)之前,Linux系統(tǒng)中只有兩個(gè)進(jìn)程,即0號進(jìn)程init_task和1號進(jìn)程kernel_init,其中kernel_init進(jìn)程也是剛剛被創(chuàng)建的。調(diào)用該函數(shù)后,1號進(jìn)程kernel_init將會運(yùn)行!
  • 調(diào)用cpu_idle(),0號線程進(jìn)入idle函數(shù)的循環(huán),在該循環(huán)中會周期性地檢查。
  • 創(chuàng)建kernel_init

    在rest_init函數(shù)中,內(nèi)核將通過下面的代碼產(chǎn)生第一個(gè)真正的進(jìn)程(pid=1):

    kernel_thread(kernel_init, NULL, CLONE_FS);

    這個(gè)進(jìn)程就是著名的pid為1的init進(jìn)程,它會繼續(xù)完成剩下的初始化工作,然后execve(/sbin/init), 成為系統(tǒng)中的其他所有進(jìn)程的祖先。

    但是這里我們發(fā)現(xiàn)一個(gè)問題, init進(jìn)程應(yīng)該是一個(gè)用戶空間的進(jìn)程, 但是這里卻是通過kernel_thread的方式創(chuàng)建的, 哪豈不是式一個(gè)永遠(yuǎn)運(yùn)行在內(nèi)核態(tài)的內(nèi)核線程么, 它是怎么演變?yōu)檎嬲饬x上用戶空間的init進(jìn)程的?

    1號kernel_init進(jìn)程完成linux的各項(xiàng)配置(包括啟動AP)后,就會在/sbin,/etc,/bin尋找init程序來運(yùn)行。該init程序會替換kernel_init進(jìn)程(注意:并不是創(chuàng)建一個(gè)新的進(jìn)程來運(yùn)行init程序,而是一次變身,使用sys_execve函數(shù)改變核心進(jìn)程的正文段,將核心進(jìn)程kernel_init轉(zhuǎn)換成用戶進(jìn)程init),此時(shí)處于內(nèi)核態(tài)的1號kernel_init進(jìn)程將會轉(zhuǎn)換為用戶空間內(nèi)的1號進(jìn)程init。戶進(jìn)程init將根據(jù)/etc/inittab中提供的信息完成應(yīng)用程序的初始化調(diào)用。然后init進(jìn)程會執(zhí)行/bin/sh產(chǎn)生shell界面提供給用戶來與Linux系統(tǒng)進(jìn)行交互。

    調(diào)用init_post()創(chuàng)建用戶模式1號進(jìn)程。

    關(guān)于init其他的信息我們這次先不研究,因?yàn)槲覀冞@篇旨在探究0號進(jìn)程的詳細(xì)過程,

    創(chuàng)建kthreadd

    在rest_init函數(shù)中,內(nèi)核將通過下面的代碼產(chǎn)生第一個(gè)kthreadd(pid=2)

    pid = kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES);

    它的任務(wù)就是管理和調(diào)度其他內(nèi)核線程kernel_thread, 會循環(huán)執(zhí)行一個(gè)kthread的函數(shù),該函數(shù)的作用就是運(yùn)行kthread_create_list全局鏈表中維護(hù)的kthread, 當(dāng)我們調(diào)用kernel_thread創(chuàng)建的內(nèi)核線程會被加入到此鏈表中,因此所有的內(nèi)核線程都是直接或者間接的以kthreadd為父進(jìn)程

    0號進(jìn)程演變?yōu)閕dle

    /** The boot idle thread must execute schedule()* at least once to get things moving:*/init_idle_bootup_task(current);schedule_preempt_disabled();/* Call into cpu_idle with preempt disabled */cpu_startup_entry(CPUHP_ONLINE);

    因此我們回過頭來看pid=0的進(jìn)程,在創(chuàng)建了init進(jìn)程后,pid=0的進(jìn)程調(diào)用 cpu_idle()演變成了idle進(jìn)程。

    0號進(jìn)程首先執(zhí)行init_idle_bootup_task, 讓init_task進(jìn)程隸屬到idle調(diào)度類中。即選擇idle的調(diào)度相關(guān)函數(shù)。

    這個(gè)函數(shù)被定義在kernel/sched/core.c中,如下

    void init_idle_bootup_task(struct task_struct *idle) {idle->sched_class = &idle_sched_class; }

    接著通過schedule_preempt_disabled來執(zhí)行調(diào)用schedule()函數(shù)切換當(dāng)前進(jìn)程,在調(diào)用該函數(shù)之前,Linux系統(tǒng)中只有兩個(gè)進(jìn)程,即0號進(jìn)程init_task和1號進(jìn)程kernel_init,其中kernel_init進(jìn)程也是剛剛被創(chuàng)建的。調(diào)用該函數(shù)后,1號進(jìn)程kernel_init將會運(yùn)行

    這個(gè)函數(shù)被定義在kernel/sched/core.c中,如下

    /** * schedule_preempt_disabled - called with preemption disabled * * Returns with preemption disabled. Note: preempt_count must be 1 */ void __sched schedule_preempt_disabled(void) {sched_preempt_enable_no_resched();schedule();preempt_disable(); }

    最后cpu_startup_entry調(diào)用cpu_idle_loop(),0號線程進(jìn)入idle函數(shù)的循環(huán),在該循環(huán)中會周期性地檢查

    cpu_startup_entry定義在kernel/sched/idle.c

    void cpu_startup_entry(enum cpuhp_state state) {/** This #ifdef needs to die, but it's too late in the cycle to* make this generic (arm and sh have never invoked the canary* init for the non boot cpus!). Will be fixed in 3.11*/ #ifdef CONFIG_X86/** If we're the non-boot CPU, nothing set the stack canary up* for us. The boot CPU already has it initialized but no harm* in doing it again. This is a good place for updating it, as* we wont ever return from this function (so the invalid* canaries already on the stack wont ever trigger).*/boot_init_stack_canary(); #endifarch_cpu_idle_prepare();cpu_idle_loop(); }

    其中cpu_idle_loop就是idle進(jìn)程的事件循環(huán),定義在kernel/sched/idle.c

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

    idle的運(yùn)行與調(diào)度

    idle的workload–cpu_idle_loop

    從上面的分析我們知道,idle在系統(tǒng)沒有其他就緒的進(jìn)程可執(zhí)行的時(shí)候才會被調(diào)度。不管是主處理器,還是從處理器,最后都是執(zhí)行的cpu_idle_loop()函數(shù)

    其中cpu_idle_loop就是idle進(jìn)程的事件循環(huán),定義在kernel/sched/idle.c,早期的版本中提供的是cpu_idle,但是這個(gè)函數(shù)是完全依賴于體系結(jié)構(gòu)的,不利用架構(gòu)的分層,因此在新的內(nèi)核中更新為更加通用的cpu_idle_loop,由他來調(diào)用體系結(jié)構(gòu)相關(guān)的代碼

    所以我們來看看cpu_idle_loop做了什么事情。

    因?yàn)閕dle進(jìn)程中并不執(zhí)行什么有意義的任務(wù),所以通常考慮的是兩點(diǎn)

  • 節(jié)能
  • 低退出延遲。
  • 其代碼如下

    /** Generic idle loop implementation** Called with polling cleared.*/ static void cpu_idle_loop(void) {while (1) {/** If the arch has a polling bit, we maintain an invariant:** Our polling bit is clear if we're not scheduled (i.e. if* rq->curr != rq->idle). This means that, if rq->idle has* the polling bit set, then setting need_resched is* guaranteed to cause the cpu to reschedule.*/__current_set_polling();quiet_vmstat();tick_nohz_idle_enter();while (!need_resched()) {check_pgt_cache();rmb();if (cpu_is_offline(smp_processor_id())) {rcu_cpu_notify(NULL, CPU_DYING_IDLE,(void *)(long)smp_processor_id());smp_mb(); /* all activity before dead. */this_cpu_write(cpu_dead_idle, true);arch_cpu_idle_dead();}local_irq_disable();arch_cpu_idle_enter();/** In poll mode we reenable interrupts and spin.** Also if we detected in the wakeup from idle* path that the tick broadcast device expired* for us, we don't want to go deep idle as we* know that the IPI is going to arrive right* away*/if (cpu_idle_force_poll || tick_check_broadcast_expired())cpu_idle_poll();elsecpuidle_idle_call();arch_cpu_idle_exit();}/** Since we fell out of the loop above, we know* TIF_NEED_RESCHED must be set, propagate it into* PREEMPT_NEED_RESCHED.** This is required because for polling idle loops we will* not have had an IPI to fold the state for us.*/preempt_set_need_resched();tick_nohz_idle_exit();__current_clr_polling();/** We promise to call sched_ttwu_pending and reschedule* if need_resched is set while polling is set. That* means that clearing polling needs to be visible* before doing these things.*/smp_mb__after_atomic();sched_ttwu_pending();schedule_preempt_disabled();} }

    循環(huán)判斷need_resched以降低退出延遲,用idle()來節(jié)能。

    默認(rèn)的idle實(shí)現(xiàn)是hlt指令,hlt指令使CPU處于暫停狀態(tài),等待硬件中斷發(fā)生的時(shí)候恢復(fù),從而達(dá)到節(jié)能的目的。即從處理器C0態(tài)變到 C1態(tài)(見 ACPI標(biāo)準(zhǔn))。這也是早些年windows平臺上各種”處理器降溫”工具的主要手段。當(dāng)然idle也可以是在別的ACPI或者APM模塊中定義的,甚至是自定義的一個(gè)idle(比如說nop)。

  • idle是一個(gè)進(jìn)程,其pid為0。
  • 主處理器上的idle由原始進(jìn)程(pid=0)演變而來。從處理器上的idle由init進(jìn)程fork得到,但是它們的pid都為0。
  • Idle進(jìn)程為最低優(yōu)先級,且不參與調(diào)度,只是在運(yùn)行隊(duì)列為空的時(shí)候才被調(diào)度。
  • Idle循環(huán)等待need_resched置位。默認(rèn)使用hlt節(jié)能。
  • 希望通過本文你能全面了解linux內(nèi)核中idle知識。

    idle的調(diào)度和運(yùn)行時(shí)機(jī)

    我們知道, linux進(jìn)程的調(diào)度順序是按照 rt實(shí)時(shí)進(jìn)程(rt調(diào)度器), normal普通進(jìn)程(cfs調(diào)度器),和idel的順序來調(diào)度的

    那么可以試想如果rt和cfs都沒有可以運(yùn)行的任務(wù),那么idle才可以被調(diào)度,那么他是通過怎樣的方式實(shí)現(xiàn)的呢?

    由于我們還沒有講解調(diào)度器的知識, 所有我們只是簡單講解一下

    在normal的調(diào)度類,cfs公平調(diào)度器sched_fair.c中, 我們可以看到

    static const struct sched_class fair_sched_class = { .next = &idle_sched_class,

    也就是說,如果系統(tǒng)中沒有普通進(jìn)程,那么會選擇下個(gè)調(diào)度類優(yōu)先級的進(jìn)程,即使用idle_sched_class調(diào)度類進(jìn)行調(diào)度的進(jìn)程

    當(dāng)系統(tǒng)空閑的時(shí)候,最后就是調(diào)用idle的pick_next_task函數(shù),被定義在/kernel/sched/idle_task.c中

    static struct task_struct *pick_next_task_idle(struct rq *rq) {schedstat_inc(rq, sched_goidle);calc_load_account_idle(rq);return rq->idle; //可以看到就是返回rq中idle進(jìn)程。 }

    這idle進(jìn)程在啟動start_kernel函數(shù)的時(shí)候調(diào)用init_idle函數(shù)的時(shí)候,把當(dāng)前進(jìn)程(0號進(jìn)程)置為每個(gè)rq運(yùn)行隊(duì)列的的idle上。

    rq->curr = rq->idle = idle;

    這里idle就是調(diào)用start_kernel函數(shù)的進(jìn)程,就是0號進(jìn)程。

    idle進(jìn)程總結(jié)

    系統(tǒng)允許一個(gè)進(jìn)程創(chuàng)建新進(jìn)程,新進(jìn)程即為子進(jìn)程,子進(jìn)程還可以創(chuàng)建新的子進(jìn)程,形成進(jìn)程樹結(jié)構(gòu)模型。整個(gè)linux系統(tǒng)的所有進(jìn)程也是一個(gè)樹形結(jié)構(gòu)。樹根是系統(tǒng)自動構(gòu)造的(或者說是由內(nèi)核黑客手動創(chuàng)建的),即在內(nèi)核態(tài)下執(zhí)行的0號進(jìn)程,它是所有進(jìn)程的遠(yuǎn)古先祖。

    在smp系統(tǒng)中,每個(gè)處理器單元有獨(dú)立的一個(gè)運(yùn)行隊(duì)列,而每個(gè)運(yùn)行隊(duì)列上又有一個(gè)idle進(jìn)程,即有多少處理器單元,就有多少idle進(jìn)程。

  • idle進(jìn)程其pid=0,其前身是系統(tǒng)創(chuàng)建的第一個(gè)進(jìn)程(我們稱之為init_task),也是唯一一個(gè)沒有通過fork或者kernel_thread產(chǎn)生的進(jìn)程。
  • init_task是內(nèi)核中所有進(jìn)程、線程的task_struct雛形,它是在內(nèi)核初始化過程中,通過靜態(tài)定義構(gòu)造出了一個(gè)task_struct接口,取名為init_task,然后在內(nèi)核初始化的后期,在rest_init()函數(shù)中通過kernel_thread創(chuàng)建了兩個(gè)內(nèi)核線程內(nèi)核init線程,kthreadd內(nèi)核線程, 前者后來通過演變,進(jìn)入用戶空間,成為所有用戶進(jìn)程的先祖, 而后者則成為所有內(nèi)核態(tài)其他守護(hù)線程的父線程, 負(fù)責(zé)接手內(nèi)核線程的創(chuàng)建工作
  • 然后init_task通過變更調(diào)度類為sched_idle等操作演變成為idle進(jìn)程, 此時(shí)系統(tǒng)中只有0(idle), 1(init), 2(kthreadd)3個(gè)進(jìn)程, 然后執(zhí)行一次進(jìn)程調(diào)度, 必然切換當(dāng)前進(jìn)程到到init
  • 轉(zhuǎn)載于:https://www.cnblogs.com/linhaostudy/p/9640955.html

    總結(jié)

    以上是生活随笔為你收集整理的Linux下0号进程的前世(init_task进程)今生(idle进程)----Linux进程的管理与调度(五)【转】...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    最新av网址在线观看 | 99婷婷| 人人爱人人爽 | 密桃av在线| 一区二区三区精品久久久 | 中文亚洲欧美日韩 | 色视频一区 | 国产成人久久av免费高清密臂 | 中文字幕大全 | 国产黄a三级三级 | 97偷拍视频 | 日韩手机在线观看 | 91黄色免费网站 | 狠狠狠狠干 | 在线观看视频日韩 | 日韩网站在线免费观看 | a亚洲视频 | 国产伦精品一区二区三区免费 | 精品久久久久久久久久久久久久久久 | 国产五十路毛片 | 97国产一区二区 | 国产一级黄 | 欧美精品一级视频 | 欧美精品久久久久性色 | 亚洲五月婷 | 国产视频久 | 九色视频自拍 | 国产精品情侣视频 | 久久激五月天综合精品 | 欧美久草视频 | 激情大尺度视频 | 最近中文字幕高清字幕免费mv | 东方av在线免费观看 | www.狠狠色 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 国产成人在线观看免费 | 久草精品视频在线观看 | 999久久久久久久久6666 | 四虎影视国产精品免费久久 | 欧美日韩精品在线观看视频 | 欧美日韩国产综合一区二区 | 午夜美女wwww | 欧美视频国产视频 | 91色在线观看 | 一本一本久久aa综合精品 | 久久久国产精品一区二区中文 | 在线看黄色的网站 | 亚洲精品乱码白浆高清久久久久久 | 日日夜夜精品视频天天综合网 | 亚洲欧洲日韩 | 99热这里精品 | 国产午夜精品免费一区二区三区视频 | 91麻豆精品国产91久久久更新时间 | 97视频免费观看 | 天天色天| 欧美日韩不卡一区 | 国产999精品久久久影片官网 | 国产精品对白一区二区三区 | 中文字幕免费 | 欧美不卡视频在线 | 成人欧美在线 | 久久美女精品 | 国产精品久久久久久久久软件 | 麻豆免费在线播放 | 国产成人黄色 | 日韩av片无码一区二区不卡电影 | 色偷偷888欧美精品久久久 | 91成人精品在线 | 99免费在线视频观看 | 青青河边草免费观看 | 亚州国产精品视频 | 99视频+国产日韩欧美 | 欧美日韩不卡一区二区 | 久久免费视频一区 | 97人人澡人人爽人人模亚洲 | 欧美一级片在线免费观看 | 在线观看国产一区二区 | 午夜.dj高清免费观看视频 | 亚洲精品国产片 | 93久久精品日日躁夜夜躁欧美 | 黄色福利视频网站 | 色综合天天综合网国产成人网 | 免费在线观看a v | 免费高清在线视频一区· | 国产精品孕妇 | 久久久在线视频 | 丁香花在线观看免费完整版视频 | 婷婷在线视频 | 成人免费xxxxxx视频 | 国产小视频在线观看免费 | 在线观看视频91 | 国产 日韩 欧美 在线 | 欧美日韩精品综合 | 超碰日韩在线 | 四虎免费在线观看 | 免费国产在线精品 | 91精品免费 | av一级免费 | 国产福利av在线 | 婷婷狠狠操 | 久久96 | 99久久电影| 国产精品永久久久久久久久久 | 激情综合五月天 | 婷婷激情在线 | 国内精品久久久久久久影视麻豆 | 日韩网站中文字幕 | 国产精品6 | 精品一区二区在线免费观看 | 综合久久影院 | 草免费视频 | 久久成人在线视频 | 国内精品久久久久久久久久久 | 午夜精品久久一牛影视 | 97超碰资源网 | 日韩伦理片一区二区三区 | 久久久免费播放 | 免费在线观看成人av | 亚洲乱亚洲乱妇 | 久久综合福利 | 91精品国产综合久久福利 | 天堂入口网站 | 91九色在线观看视频 | 久久在线视频在线 | 五月婷香蕉久色在线看 | 日韩黄色中文字幕 | 一本一道久久a久久综合蜜桃 | 黄色av电影一级片 | 999电影免费在线观看 | 黄色免费高清视频 | 99久精品| 天天射日 | 日韩欧美综合精品 | 麻豆国产精品永久免费视频 | 午夜精品一区二区三区在线观看 | 四虎成人精品永久免费av | 成年人免费电影在线观看 | 欧美性脚交 | 天天干天天摸 | 久久精品网址 | 日本精品午夜 | 黄色av电影在线观看 | 久操中文字幕在线观看 | 久久er99热精品一区二区 | 亚洲va男人天堂 | 精品国产一区二区三区四区vr | 91麻豆精品国产自产在线游戏 | 麻豆视频免费在线观看 | 欧美日韩一区二区三区在线免费观看 | 婷婷综合久久 | 狠狠黄 | 97超碰中文字幕 | 在线一区二区三区 | 欧美日韩免费在线视频 | 一区二区三区视频在线 | 在线免费观看的av网站 | 国产成人不卡 | 久久成人欧美 | 99久久激情| 国产精品一区在线观看 | 亚洲综合视频在线 | 国产午夜精品一区二区三区在线观看 | 天天玩天天操天天射 | 日韩亚洲国产中文字幕 | 中文字幕资源站 | 欧美黄在线| 一区二区三区在线观看 | av高清在线观看 | 天天要夜夜操 | 国产一区二区三区免费视频 | 精品久久免费 | 国产剧情久久 | 国产黄色在线看 | 97在线视频免费看 | 中文字幕中文字幕在线一区 | av天天干 | 韩国精品在线观看 | 欧美激情亚洲综合 | 国产99久久久精品视频 | 在线国产中文 | 天天综合亚洲 | 色就是色综合 | 五月婷婷视频在线 | 久久精品国产一区二区 | 国产精品视频久久久 | 亚洲成av人片一区二区梦乃 | 在线播放 一区 | 欧美一区影院 | 一区二区影院 | 97看片 | 99精品影视 | 在线观看黄色小视频 | 久久精品视频免费 | 人人舔人人爽 | 日韩午夜在线 | 超碰免费av| 久久免费看 | 91热在线 | 黄色小说在线观看视频 | 成人黄色视 | 黄色一级动作片 | 日日干日日色 | 久久久蜜桃一区二区 | 日韩精品中文字幕在线 | 91免费在线视频 | 免费在线观看视频一区 | 中文在线免费看视频 | 亚洲va综合va国产va中文 | 高清久久久 | 24小时日本在线www免费的 | 九色在线视频 | 日韩精品最新在线观看 | 91精品国产乱码久久 | 99热这里只有精品国产首页 | 免费日韩 精品中文字幕视频在线 | 亚洲免费观看视频 | 国产99久久久国产精品成人免费 | 午夜精品一区二区三区免费 | 三级av在线免费观看 | www.com.日本一级 | 久久成人麻豆午夜电影 | 500部大龄熟乱视频使用方法 | 久久这里只有精品首页 | 六月色婷婷 | 国产一级视频在线观看 | 四虎小视频 | 日韩一区二区三区免费电影 | 91中文字幕 | 日韩激情av在线 | 一本一道波多野毛片中文在线 | 日本在线观看一区二区三区 | 国产3p视频 | 国产一区二区视频在线 | 亚州精品天堂中文字幕 | 一区二区视频在线看 | 精品国产一区二区三区久久久久久 | 91精品国自产拍天天拍 | 免费看片网址 | 99热精品视 | 91桃色免费观看 | 国产精品美女在线观看 | 欧美日韩中文国产一区发布 | a级免费观看 | 久久久久国产精品厨房 | 天天鲁一鲁摸一摸爽一爽 | av一区二区在线观看中文字幕 | 成人在线一区二区三区 | 亚洲一级国产 | 久久狠狠亚洲综合 | 人人澡人摸人人添学生av | 亚洲成人第一区 | www.99热精品 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 国精产品999国精产 久久久久 | 成人av一区二区三区 | 国产精品一区二区中文字幕 | 国产视频 久久久 | 久久久免费看视频 | 日韩一区二区三区高清免费看看 | 日韩欧美综合 | 二区在线播放 | 在线播放视频一区 | 少妇bbbb| 5月丁香婷婷综合 | 在线免费黄色片 | 欧美一区二区三区在线播放 | 99免费在线 | 久久久亚洲网站 | 日日摸日日添日日躁av | 伊人五月综合 | 黄色免费观看网址 | 色 中文字幕 | 丝袜+亚洲+另类+欧美+变态 | 狠狠狠狠狠狠狠干 | 五月天六月色 | 毛片精品免费在线观看 | 国产91av视频在线观看 | 99精品一区二区 | 亚洲精品乱码久久久久久高潮 | 国产精品无av码在线观看 | 久久a免费视频 | 久久精品日产第一区二区三区乱码 | 免费a视频 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 丁香五婷 | 亚洲视频一区二区三区在线观看 | 天天操天天射天天 | 国产成人精品日本亚洲999 | 欧美午夜a| 成人在线观看免费 | 久久黄色小说视频 | 五月开心色 | 日韩视频中文字幕 | 97精品国产97久久久久久免费 | 国产精品九九久久久久久久 | 最新av免费在线观看 | 久久精品理论 | 又湿又紧又大又爽a视频国产 | 日本久久免费电影 | 久久精品久久久精品美女 | 99在线观看免费视频精品观看 | 一区电影| 久久99久久99 | 欧美大码xxxx | 国内精品久久久 | 日韩高清在线观看 | 久久久久电影网站 | 日本性xxx | 国产专区一 | 999在线视频| 深夜免费网站 | 黄色在线观看网站 | 97香蕉超级碰碰久久免费软件 | 69国产精品视频免费观看 | 91.dizhi永久地址最新 | 91免费在线 | 亚州欧美精品 | 日韩免费电影一区二区三区 | 日韩中文字幕免费视频 | 国产乱对白刺激视频在线观看女王 | 亚洲日韩中文字幕 | 综合精品久久久 | 一区二区三区手机在线观看 | 亚洲爱av | 国产精品在线看 | 超碰在线日韩 | 色综合久久久 | 成人av在线直播 | 欧美日韩二三区 | 一区二区三区电影 | 欧美淫aaa免费观看 日韩激情免费视频 | 911久久| 久久久久亚洲精品中文字幕 | 色婷婷88av视频一二三区 | 欧美日韩视频在线观看一区二区 | 婷婷国产在线观看 | 一区三区视频 | 免费av在线网站 | 色欧美成人精品a∨在线观看 | 在线观看免费av网站 | 最新久久久 | 黄色性av| 97超碰网| 天天曰 | 久久手机免费视频 | 国产成人一区二区三区在线观看 | 国产精品欧美日韩在线观看 | 欧美日韩精品在线播放 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 国产99久久久久久免费看 | 人人添人人 | 免费亚洲精品视频 | 久艹在线播放 | 亚洲国内精品视频 | 91麻豆精品国产自产在线游戏 | 在线观看成人小视频 | 成人黄在线观看 | 日本精品二区 | 日韩在线高清免费视频 | 99999精品 | 国产97在线播放 | 色搞搞 | 天堂网一区二区 | 午夜aaaa | 精品欧美一区二区精品久久 | 国产系列精品av | 久久精国产| 中文字幕制服丝袜av久久 | 亚洲精品免费在线播放 | 国产高清免费视频 | 欧美日韩一区二区免费在线观看 | 欧美久久久久久久久久久久久 | 99婷婷 | 日韩精品免费在线 | 狠狠色丁香婷婷综合基地 | 色操插 | 在线观看国产91 | 天天操夜夜操天天射 | 国产精品99久久久 | 久久精品欧美 | 国产69精品久久app免费版 | 久久亚洲综合国产精品99麻豆的功能介绍 | 免费观看丰满少妇做爰 | 99热在线国产精品 | 人人爽人人爽人人片 | 久久视频网 | 亚洲国产成人精品久久 | 久久99国产精品免费网站 | 免费日韩三级 | 久草精品视频在线看网站免费 | 久久免费视频一区 | 亚洲婷婷综合色高清在线 | 中文亚洲欧美日韩 | 国产成人av片 | 成 人 黄 色 视频 免费观看 | 中文字幕中文 | 热久久免费视频 | 高清精品久久 | 欧美天堂久久 | 国产精品久久久久久久久费观看 | 五月婷婷黄色 | 在线视频日韩精品 | 天堂网av 在线 | 久久99久久99精品免费看小说 | 久久久久久久av | 天天爱天天草 | 天堂在线一区 | 一级精品视频在线观看宜春院 | 91精品国产综合久久婷婷香蕉 | 久久一本综合 | 精品99在线观看 | 国产视频首页 | 97超碰国产精品 | 日韩午夜av | 亚洲va男人天堂 | 99爱精品视频 | 成人av中文字幕 | 国产精品一区二区久久久久 | 欧美日韩一区二区三区不卡 | 久久亚洲私人国产精品va | 欧美在线视频二区 | 久久精品九色 | 天天操天天操天天操天天操天天操天天操 | 中文字幕一区二区三区四区视频 | 婷婷久久五月 | 久久久久综合 | 一本一本久久a久久 | 日韩色在线 | 天天爽夜夜爽人人爽一区二区 | 日韩综合视频在线观看 | 在线天堂日本 | 色婷婷啪啪免费在线电影观看 | 中文字幕色婷婷在线视频 | 伊人激情网 | 国产精品地址 | 在线观看国产永久免费视频 | 国产高清视频在线播放 | 亚洲精品免费在线观看 | 日韩v在线91成人自拍 | 亚洲va欧洲va国产va不卡 | 91亚洲激情 | 国产精品久久久久久久免费大片 | 国产91免费在线观看 | 久久成人国产精品免费软件 | 在线免费视频a | 欧美久久电影 | 亚洲理论在线 | 中文字幕国产一区二区 | 一级国产视频 | 91色国产在线 | 麻豆高清免费国产一区 | 成年人网站免费在线观看 | 日韩毛片在线免费观看 | 亚洲国产av精品毛片鲁大师 | 三级在线播放视频 | 久久99热这里只有精品 | 国产精品大片免费观看 | 在线看黄色的网站 | 中文字幕一二三区 | 久久国产剧场电影 | 在线视频app | 又爽又黄在线观看 | 国产三级av在线 | 久热国产视频 | 1024手机基地在线观看 | 91大神免费视频 | 色99中文字幕 | 国产欧美日韩精品一区二区免费 | 一本之道乱码区 | 激情六月婷婷久久 | 最新一区二区三区 | 国产精品三级视频 | 99视频久久| 99精品视频在线看 | 中文字幕文字幕一区二区 | 深爱激情亚洲 | 丝袜足交在线 | 国产美女精品久久久 | 国内精品在线一区 | 91精品国产成| 日韩三级视频在线观看 | 日韩激情视频在线观看 | 精品久久久99 | 久久久久久久久久久久久久免费看 | 蜜臀av免费一区二区三区 | 麻豆国产精品va在线观看不卡 | 夜夜操狠狠干 | 探花视频在线观看免费版 | 免费成人av在线看 | 黄色大全免费网站 | 国产亚洲精品久久久久久久久久久久 | 精品毛片久久久久久 | 玖玖色在线观看 | 亚洲在线免费视频 | 国产在线观看黄 | 久久乐九色婷婷综合色狠狠182 | 四虎海外影库www4hu | 在线观看亚洲国产精品 | 干天天| 国产精品一区久久久久 | 成年在线观看 | 欧美成人黄色片 | 欧美视频在线观看免费网址 | 国产福利小视频在线 | 亚洲三级在线播放 | 亚洲精品乱码久久久久久9色 | 中文字幕在线免费播放 | 福利视频区 | 精品一区久久 | 国产伦精品一区二区三区免费 | av福利第一导航 | 丁香六月色 | av免费在线观看1 | 久久综合偷偷噜噜噜色 | 最近中文字幕完整视频高清1 | 久久看片网站 | 婷婷丁香激情综合 | 国产99亚洲 | 国产麻豆剧传媒免费观看 | 一区二区三区四区免费视频 | 999电影免费在线观看2020 | 中文字幕亚洲高清 | 国内视频在线 | www.com.日本一级 | 99久久成人 | 麻豆91在线看 | 99久久er热在这里只有精品66 | 婷婷六月天丁香 | 在线一区电影 | 午夜视频亚洲 | 99久久夜色精品国产亚洲 | 国产精品99免视看9 国产精品毛片一区视频 | 91精品999 | 91精品国产综合久久久久久久 | 国产99一区视频免费 | 日韩欧美69 | 五月婷婷激情综合 | 久久国产精品视频观看 | 99免费观看视频 | 一区二区久久久久 | 天天操狠狠操 | 国产精品3 | 国产精品一区二区在线免费观看 | 狠狠插狠狠干 | 黄色三级在线观看 | 美州a亚洲一视本频v色道 | 叶爱av在线 | 在线看片成人 | 久久艹综合| 午夜骚影| 中文区中文字幕免费看 | 91精品啪在线观看国产81旧版 | 亚洲精品一区中文字幕乱码 | 国产精品免费在线视频 | 中文字幕一区二区三区乱码在线 | 日韩在线观看视频网站 | 亚洲每日更新 | 一区二区精品视频 | 人人舔人人射 | 六月丁香激情综合色啪小说 | 91亚色视频 | 国产精品久久久久久久午夜 | 国产午夜在线观看 | 色婷婷av国产精品 | 91成品人影院 | 欧美一区二区三区四区夜夜大片 | 深夜福利视频一区二区 | 97电影在线观看 | 在线播放 日韩专区 | 日韩久久久久久 | 免费在线观看午夜视频 | 国产精品久久久久婷婷二区次 | 国产91精品在线播放 | 最新av免费| 伊人日日干 | 亚洲免费黄色 | 一区二区三区动漫 | 91九色免费视频 | av成人亚洲 | 亚洲精品美女视频 | 在线国产视频观看 | 91亚洲精品国偷拍自产在线观看 | 97成人精品视频在线观看 | 色婷婷午夜 | 色综合天天在线 | 亚洲美女在线一区 | 久久精品99国产国产 | 91热| 91精品国产99久久久久久久 | 黄网站免费久久 | 亚洲激情综合 | 国内精品在线观看视频 | 国产美女精品人人做人人爽 | 日韩夜夜爽| 成人欧美一区二区三区在线观看 | 日韩精品视频在线观看网址 | 在线视频精品 | 国产高清视频免费 | 黄色av一区 | 亚洲最新在线 | 成人片在线播放 | 久久综合之合合综合久久 | 99久久电影| 精品国产91亚洲一区二区三区www | 精品久久久国产 | 久久综合狠狠综合久久综合88 | 日韩av一区二区在线播放 | 五月婷婷丁香六月 | 99久久久国产精品免费观看 | 免费视频黄 | 婷婷在线不卡 | 91精品国产自产在线观看永久 | 亚洲欧洲xxxx | 美国三级黄色大片 | 国产精品99久久99久久久二8 | 亚洲精品国产精品国 | 亚洲精品av在线 | 久久久99精品免费观看app | 欧美日韩在线网站 | 久久影视中文字幕 | 国产高清精 | 亚洲精品一区二区在线观看 | 青青草国产精品 | 久久视讯 | 国产成人免费网站 | 在线免费黄色av | 在线va视频 | 久久女教师 | 久久与婷婷 | 国产免费又爽又刺激在线观看 | 久久激情视频 久久 | 日韩av中文 | 日本韩国精品在线 | 99视频免费在线观看 | 中文区中文字幕免费看 | 69国产盗摄一区二区三区五区 | 国产人成看黄久久久久久久久 | 91精品在线视频观看 | 国产免费视频一区二区裸体 | 欧美夫妻性生活电影 | 激情五月视频 | 丁香激情五月 | 免费观看丰满少妇做爰 | 国产伦精品一区二区三区高清 | 久久久久久久久久久久久国产精品 | 成人免费影院 | 日韩综合第一页 | 亚洲精品美女久久久 | 亚洲综合成人在线 | 在线观看精品一区 | 国产91精品看黄网站在线观看动漫 | 黄色91在线观看 | 91精品看片| 婷婷看片| 久久免费观看视频 | 99视频在线精品免费观看2 | 精品一区二区视频 | 国产精品大片免费观看 | 亚洲高清网站 | 国产精品破处视频 | 色婷婷狠狠干 | 日韩伦理片一区二区三区 | 五月婷婷综合久久 | 精品一区二区三区电影 | 国产精品免费在线播放 | 蜜臀av免费一区二区三区 | 手机看片中文字幕 | 亚洲 欧洲 国产 日本 综合 | 色综合天天 | 婷婷成人综合 | 97国产在线观看 | av在线播放中文字幕 | 97成人在线免费视频 | 五月开心网| 免费黄色小网站 | 国产精品 日韩精品 | www久久久久 | 国产精品18久久久久久久 | 国产免费成人 | 国产一区在线免费观看 | 久久精品直播 | av免费观看网址 | 一区二区三区影院 | 91久草视频 | 麻豆国产精品视频 | 久草视频网| 色综合久久久 | 亚洲国产成人久久 | 欧美成人日韩 | 国产污视频在线观看 | 国产精品一区在线观看 | 嫩草av在线 | 国产视频 亚洲视频 | 国产xxxx做受性欧美88 | 激情视频一区二区三区 | 国产黄在线| 一区二区成人国产精品 | 91人人人 | 在线视频手机国产 | 99久久精品日本一区二区免费 | 日日夜夜中文字幕 | 精品国产伦一区二区三区观看方式 | 欧美精品在线一区二区 | 日韩在线观看一区二区三区 | 99热播精品 | 青青河边草免费观看 | av电影免费在线看 | 久久精品中文字幕一区二区三区 | 日本久久成人中文字幕电影 | 综合网伊人 | 毛片888| 中文字幕乱在线伦视频中文字幕乱码在线 | 亚洲午夜久久久影院 | 日韩一级理论片 | 国产小视频在线 | 欧美精品在线观看免费 | 色香蕉在线视频 | 日本黄色免费大片 | 99精品在线观看视频 | 少妇性xxx | 久久久精品在线观看 | 国产裸体bbb视频 | 国产色一区 | 亚洲午夜精品电影 | 六月婷婷色 | 麻豆国产精品视频 | www.色就是色| 一级淫片在线观看 | 亚洲午夜精品一区二区三区电影院 | 国产午夜精品久久久久久久久久 | 日韩在线视频看看 | 免费视频久久久久 | 色婷婷av在线 | av在线a| 999电影免费在线观看2020 | 日韩欧美大片免费观看 | 九热在线 | 91精品亚洲影视在线观看 | 免费福利在线视频 | 免费观看一区二区三区视频 | 五月综合色婷婷 | 免费在线观看av网址 | 亚洲精品视频在线观看免费视频 | 久久久久免费精品国产小说色大师 | 亚洲日韩中文字幕 | 在线免费观看国产精品 | 在线观看日韩免费视频 | 欧美aaa一级 | 首页中文字幕 | 午夜精品一区二区三区在线视频 | 日韩欧美成人网 | 91麻豆免费视频 | 久久激情网站 | 国产四虎在线 | 黄色影院在线播放 | 免费看片成年人 | 国产伦理久久精品久久久久_ | 96国产在线| 国产一区二区在线免费播放 | av三级av| 色诱亚洲精品久久久久久 | 亚洲精品在线免费 | 国产一级精品绿帽视频 | 精品国产免费久久 | 国产剧情一区二区在线观看 | 中文字幕在线网址 | 91视频高清 | 狠狠色狠狠综合久久 | 免费观看午夜视频 | 欧美日韩一区久久 | 国产黄色大片 | 黄色小说在线观看视频 | av在线官网| 久久精品在线视频 | 人人看黄色 | 欧美日韩一区二区在线 | 免费成人av在线看 | 五月婷在线 | 久久久久久国产精品亚洲78 | 久久免费av电影 | 激情久久小说 | 手机成人免费视频 | 在线观看的av | 91精彩视频 | 久久精品8 | 99精品免费久久久久久久久 | 97日日| 亚洲综合在线五月天 | 色噜噜日韩精品一区二区三区视频 | 久久国产精品99久久久久 | 日本视频不卡 | 午夜av一区 | 一二三区视频在线 | 久久久黄视频 | 日韩乱色精品一区二区 | 日韩xxxx视频 | 久久精品最新 | 婷婷视频 | 日日天天干 | 日韩网站在线免费观看 | a电影免费看 | 成年人免费在线观看网站 | 伊人www22综合色 | 在线观看 国产 | a国产精品 | 免费观看全黄做爰大片国产 | 久热免费在线 | 一级黄色免费网站 | 午夜视频在线观看一区二区 | 久久亚洲美女 | 亚洲高清视频一区二区三区 | 久草在线电影网 | 国产资源在线免费观看 | av电影在线免费 | 国产无遮挡猛进猛出免费软件 | 欧美综合在线观看 | 日b视频在线观看网址 | av一级片| 久久免费福利视频 | 日韩高清在线观看 | 缴情综合网五月天 | 在线精品国产 | 欧美一级在线观看视频 | 亚洲艳情| 欧美aa级 | 日日夜夜狠狠干 | 五月天亚洲综合小说网 | 99久久精品一区二区成人 | 波多野结衣动态图 | 中文字幕a在线 | 欧美久久久一区二区三区 | 国产亚洲视频在线观看 | 99精品视频在线播放免费 | 91精品推荐 | 国产黄在线免费观看 | 91精品国产九九九久久久亚洲 | 热热热热热色 | www黄免费| 91久久国产自产拍夜夜嗨 | 久久久一本精品99久久精品66 | 欧美一区二区在线 | 黄色免费网站 | 国产麻豆精品久久一二三 | 婷婷丁香狠狠爱 | 亚洲永久免费av | 黄色成人影院 | 国产中文字幕视频在线观看 | 超级碰碰视频 | 一本一本久久a久久 | 麻豆传媒视频在线免费观看 | 久久久九色精品国产一区二区三区 | 天天操综合 | 国产成人一区二区三区 | 国产一二三四在线视频 | 国产剧情一区二区在线观看 | 99热99re6国产在线播放 | 亚州国产精品久久久 | 三上悠亚一区二区在线观看 | 亚洲精品玖玖玖av在线看 | 精品亚洲成a人在线观看 | japanese黑人亚洲人4k | 国产生活一级片 | 91免费高清 | 久久免费视频网站 | 婷婷去俺也去六月色 | 天天射天天操天天色 | 国产资源在线免费观看 | 成人一级片免费看 | 在线播放一区 | 最近中文字幕视频网 | 国产在线一卡 | 中文字幕久久亚洲 | 免费在线激情电影 | 在线韩国电影免费观影完整版 | 国产精品久久久久久久久久久久冷 | 97超碰免费在线观看 | 久久久久久久久久久影视 | 粉嫩av一区二区三区免费 | 久久久 精品 | www.久久成人 | 久久99操 | 美女视频网站久久 | 综合伊人av | 国产女教师精品久久av | 西西44人体做爰大胆视频 | 日韩精品中文字幕在线播放 | 爱爱av在线| 亚洲国产高清在线观看视频 | 国产在线专区 | 99久久婷婷国产综合精品 | 国产一级电影在线 | 国产中文字幕视频 | 亚洲国内精品在线 | 欧美精品少妇xxxxx喷水 | 久久6精品 | 久久欧美精品 | a黄色一级| 精品久久久久久亚洲综合网站 | 亚州日韩中文字幕 | 久精品一区 | 五月激情站 | 久久久久久久影院 | 又色又爽又激情的59视频 | 国产精品美女在线观看 | 国产精品99久久99久久久二8 | 在线观看国产福利片 | 免费看成人 | 狠狠色丁香久久婷婷综 | 99精品视频在线免费观看 | 在线免费观看视频一区二区三区 | 天天干 天天摸 天天操 | 69久久夜色精品国产69 | 99久久99久久精品国产片果冰 | 国产v视频 | 国产亚洲精品久久19p | 欧美午夜寂寞影院 | 狠狠狠色丁香婷婷综合激情 | 亚洲国产一区在线观看 | 日韩中文字幕第一页 | 日韩电影一区二区三区在线观看 | 97成人超碰 | 久久视频免费 | 国产精品网红直播 | avhd高清在线谜片 | 久久久久久久久久久免费 | 人人爽爽人人 | 日韩av中文在线 | 四虎成人精品在永久免费 | 久久免费a| 日韩丝袜| 国产免费激情久久 | 日韩一区二区三区在线看 | 五月天天色 | 三级在线国产 | 天天天天射 | 国产午夜精品久久 | 高清久久久久久 | 亚洲高清不卡av | 欧美精品一区二区在线播放 | 最新av网址在线 | av中文字幕在线观看网站 | 国产不卡高清 | 国产一级电影 | 黄网站大全 | 91麻豆免费看 | 国产96在线观看 | 国产手机在线观看视频 | 国产精品高清在线 | 日韩欧美精品一区二区三区经典 | 欧美大香线蕉线伊人久久 | 国产精品成人久久久久 | 九九久久久久久久久激情 | 成人av网址大全 | 日韩电影一区二区在线观看 | 国产成人一区二区三区在线观看 | 久久亚洲电影 | 国产中文在线字幕 | 久久99久久久久 | 99精品偷拍视频一区二区三区 | 久久视频精品在线观看 | 国产在线中文 | 亚洲国产精品免费 | 97av影院| 久久免费播放视频 | 久久亚洲区 | 国产免费不卡 | 日韩在线观看三区 | 91系列在线 | 99超碰在线观看 | 99久久激情视频 | 国产97视频在线 | 久久精品网址 | 中文av在线播放 | 日韩不卡高清视频 | 欧美精品九九99久久 | 欧美日韩久久一区 | 人人射 | av高清在线 | 中文字幕 第二区 | 久久不见久久见免费影院 | 麻豆免费在线视频 | 久久久久成人免费 | 美女视频永久黄网站免费观看国产 | 精品久久一二三区 | 国产精品久久久久久久久久三级 | 久久在线观看视频 | 日韩在线不卡视频 | 91视频在线免费看 | 久久婷婷一区二区三区 | 超碰97人 | www视频在线免费观看 | 色婷婷激情网 | 九九免费在线观看 | 国产精品久久麻豆 | 国产视频色 | 日韩在线电影 | 欧美日韩一区二区视频在线观看 | 天天想夜夜操 |