【教学课件】第9章Linux系统.ppt

上传人:wuy****n92 文档编号:69866326 上传时间:2023-01-10 格式:PPT 页数:132 大小:1.67MB
返回 下载 相关 举报
【教学课件】第9章Linux系统.ppt_第1页
第1页 / 共132页
【教学课件】第9章Linux系统.ppt_第2页
第2页 / 共132页
点击查看更多>>
资源描述

《【教学课件】第9章Linux系统.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第9章Linux系统.ppt(132页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第9章章 Linux系统系统LinuxLinux系统系统系统系统LinuxLinux系统概述系统概述系统概述系统概述LinuxLinux的特权级与中断处理的特权级与中断处理的特权级与中断处理的特权级与中断处理LinuxLinux系统功能调用系统功能调用系统功能调用系统功能调用LinuxLinux系统的进程管理系统的进程管理系统的进程管理系统的进程管理LinuxLinux系统的存储管理系统的存储管理系统的存储管理系统的存储管理LinuxLinux系统的设备驱动系统的设备驱动系统的设备驱动系统的设备驱动LinuxLinux文件文件文件文件系统系统系统系统1LinuxLinux系统系统系统系统主要

2、内容主要内容主要内容主要内容 Linux系统概述系统概述LinuxLinux系统系统系统系统 LinuxLinux系统概述系统概述系统概述系统概述1.Linux系统的定义系统的定义 Linux Linux系统是一个类系统是一个类系统是一个类系统是一个类UNIXUNIX的操作系统,与的操作系统,与的操作系统,与的操作系统,与UNIXUNIX完全兼容,完全兼容,完全兼容,完全兼容,在操作系统功能、使用方法等方面极为相似。在操作系统功能、使用方法等方面极为相似。在操作系统功能、使用方法等方面极为相似。在操作系统功能、使用方法等方面极为相似。(1)(1)什么是什么是什么是什么是LinuxLinux操作

3、系统操作系统操作系统操作系统 Linux Linux是一个多用户、多任务操作系统是一个多用户、多任务操作系统 (2)Linux (2)Linux与与与与UNIXUNIX操作系统的不同点操作系统的不同点操作系统的不同点操作系统的不同点 源代码编写方式源代码编写方式源代码编写方式源代码编写方式 商业模式商业模式商业模式商业模式 开发模式开发模式开发模式开发模式 2LinuxLinux系统系统系统系统 LinuxLinux系统概述系统概述系统概述系统概述(4)Linux系统的特点系统的特点 单体结构内核单体结构内核单体结构内核单体结构内核 可抢占式内核可抢占式内核可抢占式内核可抢占式内核 多线程应用

4、程序的支持多线程应用程序的支持多线程应用程序的支持多线程应用程序的支持 多处理机支持多处理机支持多处理机支持多处理机支持 支持多种文件系统支持多种文件系统支持多种文件系统支持多种文件系统 (3)Linux (3)Linux系统的组成系统的组成系统的组成系统的组成 LinuxLinux操作系统包括操作系统包括LinuxLinux内核,还包括内核,还包括shellshell、带有多窗口、带有多窗口 管理器的管理器的 X-Windows X-Windows图形用户接口、文本编辑器、高级语图形用户接口、文本编辑器、高级语 言编译器等应用软件。言编译器等应用软件。3LinuxLinux系统系统系统系统

5、LinuxLinux系统概述系统概述系统概述系统概述2.Linux系统的内核结构系统的内核结构 (1)Linux内核的组成内核的组成 LinuxLinux内核包含最基础、最核心的概念,提供系统其他部内核包含最基础、最核心的概念,提供系统其他部 分必须的服务支持。分必须的服务支持。组成组成组成组成进程调度程序、主存管理程序进程调度程序、主存管理程序负责网络、进程间通信的服务程序负责网络、进程间通信的服务程序中断处理程序和设备驱动等核心服务程序中断处理程序和设备驱动等核心服务程序4LinuxLinux系统系统系统系统 LinuxLinux系统概述系统概述系统概述系统概述5(2)Linux系统的核心

6、结构系统的核心结构系系 统统 调调 用用 界界 面面程程 序序 库库进程通信进程通信进程调度进程调度存储管理存储管理文件子系统文件子系统高速缓冲高速缓冲字符设备字符设备 块设备块设备 设备驱动程序设备驱动程序用户程序用户程序 硬硬 件件 控控 制制 硬硬 件件 用户级用户级核心级核心级硬件层硬件层进程管理与存储管理进程管理与存储管理网络管理网络管理网络协议网络协议网络驱动网络驱动Linux系统的核心结构示意图LinuxLinux系统系统系统系统 LinuxLinux系统概述系统概述系统概述系统概述 Linux系统的特权级与中断处理系统的特权级与中断处理LinuxLinux系统系统系统系统 Li

7、nuxLinux系统的特权级与中断处理系统的特权级与中断处理系统的特权级与中断处理系统的特权级与中断处理61.Linux系统的特权级系统的特权级LinuxLinux系统使用两个级别系统使用两个级别(处理机提供四个特权级处理机提供四个特权级):特权级特权级0 0 核态核态(内核模式内核模式)特权级特权级3 3 用户态用户态(用户模式用户模式)2.Linux系统中断处理的上半部和下半部系统中断处理的上半部和下半部 (1)(1)为什么要区分上半部和下半部为什么要区分上半部和下半部为什么要区分上半部和下半部为什么要区分上半部和下半部LinuxLinux系统系统系统系统 LinuxLinux系统的特权级

8、与中断处理系统的特权级与中断处理系统的特权级与中断处理系统的特权级与中断处理为提高中断处理的效率,中断处理程序的执行必须快速、简洁。为为提高中断处理的效率,中断处理程序的执行必须快速、简洁。为此,此,LinuxLinux系统将中断处理程序分为两部分。系统将中断处理程序分为两部分。将中断响应后必须立即处理的工作即刻执行,这就是中断处理程序将中断响应后必须立即处理的工作即刻执行,这就是中断处理程序的上半部的上半部(tophalf)(tophalf)。将更多的处理工作向后推迟执行,这就是中断处理程序序的下半部将更多的处理工作向后推迟执行,这就是中断处理程序序的下半部(bottom half)(bot

9、tom half)。7 (2)(2)中断处理程序的上半部中断处理程序的上半部中断处理程序的上半部中断处理程序的上半部上半部是中断处理中有严格时间限制的工作,是关键而上半部是中断处理中有严格时间限制的工作,是关键而 紧迫的部分紧迫的部分;上半部的工作是不可被打断的,即在屏蔽所有中断的情上半部的工作是不可被打断的,即在屏蔽所有中断的情 况下进行的。例:与硬件设备应答或使硬件复位的工作。况下进行的。例:与硬件设备应答或使硬件复位的工作。(3)(3)中断处理程序的下半部中断处理程序的下半部中断处理程序的下半部中断处理程序的下半部下半部处理那些可以稍后完成的工作;下半部处理那些可以稍后完成的工作;下半部

10、的执行是可以打断的,即是在开中断的情况下执下半部的执行是可以打断的,即是在开中断的情况下执 行。行。LinuxLinux系统系统系统系统 LinuxLinux系统的特权级与中断处理系统的特权级与中断处理系统的特权级与中断处理系统的特权级与中断处理8 3.中断处理下半部的实现机制中断处理下半部的实现机制 Linux Linux系统中,用于实现实现将工作推后执行的内核机制称为系统中,用于实现实现将工作推后执行的内核机制称为 “下半部机制下半部机制”,下半部机制主要有,下半部机制主要有tasklettasklet和工作队列两种。和工作队列两种。(1)tasklet (1)tasklet taskle

11、ttasklet通过软中断实现通过软中断实现通过软中断实现通过软中断实现 一个软中断被标记后才能执行,称为触发软中断。一个软中断被标记后才能执行,称为触发软中断。待处理的软中断会在以下时机被检查和执行:待处理的软中断会在以下时机被检查和执行:从一个硬件中断返回时;从一个硬件中断返回时;在在ksoftirqdksoftirqd内核线程中;内核线程中;在显示检查和执行待处理的软中断的代码中。在显示检查和执行待处理的软中断的代码中。LinuxLinux系统系统系统系统 LinuxLinux系统的特权级与中断处理系统的特权级与中断处理系统的特权级与中断处理系统的特权级与中断处理9 TaskletTas

12、klet软中断软中断软中断软中断 tasklettasklet的软中断表示是的软中断表示是的软中断表示是的软中断表示是TASKLET_SOFTIRQTASKLET_SOFTIRQ;TaskleTaskle由结构体由结构体由结构体由结构体tasklet_structtasklet_struct结构表示结构表示结构表示结构表示 struct tasklet_structstruct tasklet_struct struct tasklet_struct*next;/*struct tasklet_struct*next;/*链表中的下一个链表中的下一个taskle*/taskle*/unsign

13、et long state;/*taskle unsignet long state;/*taskle的状态的状态*/*/atomic_t count;/*atomic_t count;/*引用计数器引用计数器*/*/void(*func)(unsigned long);/*taskle void(*func)(unsigned long);/*taskle的处理函数的处理函数*/*/unsigned long data;/*unsigned long data;/*给给taskletaskle处理函数的参数处理函数的参数*/*/tasklet tasklet由由由由tasklet_sched

14、ule()tasklet_schedule()函数调度函数调度函数调度函数调度 LinuxLinux系统系统系统系统 LinuxLinux系统的特权级与中断处理系统的特权级与中断处理系统的特权级与中断处理系统的特权级与中断处理10 (2)(2)工作队列工作队列工作队列工作队列 工作队列机制将中断处理程序的下半部交给一个内核线工作队列机制将中断处理程序的下半部交给一个内核线 程去执行。程去执行。下半部是在进程上下文下半部是在进程上下文(用户地址空间用户地址空间)执行,可以睡眠执行,可以睡眠和和 被重新调度。被重新调度。注:这一点与上述的注:这一点与上述的tasklettasklet不同。如果下半

15、部工作需要睡不同。如果下半部工作需要睡 眠眠(如需要执行阻塞式如需要执行阻塞式I/OI/O操作时,或要等待信号灯操作时,或要等待信号灯)时应时应 选择工作队列机制;否则可选择选择工作队列机制;否则可选择tasklettasklet机制。机制。LinuxLinux系统系统系统系统 LinuxLinux系统的特权级与中断处理系统的特权级与中断处理系统的特权级与中断处理系统的特权级与中断处理11 工作者线程工作者线程工作者线程工作者线程 该线程接收由各内核中断处理程序交给它的下半部。该线程接收由各内核中断处理程序交给它的下半部。该线程内核线程实现的。执行的函数是该线程内核线程实现的。执行的函数是 w

16、ork_thread()work_thread(),对应的数据结构是工作队列链表。对应的数据结构是工作队列链表。工作队列链表工作队列链表工作队列链表工作队列链表 由若干个由若干个work_structwork_struct结构组成。结构组成。work_structwork_struct结构结构LinuxLinux系统系统系统系统 LinuxLinux系统的特权级与中断处理系统的特权级与中断处理系统的特权级与中断处理系统的特权级与中断处理12 work_structwork_struct结构结构 每个每个work_structwork_struct结构描述如下结构描述如下 struct work

17、_structstruct work_struct unsigned long pending;/*unsigned long pending;/*该工作正在等待处理?该工作正在等待处理?*/*/struct list_head entry;/*struct list_head entry;/*勾链字勾链字*/*/void(*func)(void*);/*void(*func)(void*);/*该工作的处理函数该工作的处理函数*/*/void*data;/*void*data;/*传递该该处理函数的参数传递该该处理函数的参数*/*/void*wq_data;/*void*wq_data;/*

18、内部使用内部使用*/*/struct timer_list timer;/*struct timer_list timer;/*延迟的工作队列所用的定时器延迟的工作队列所用的定时器*/*/LinuxLinux系统系统系统系统 LinuxLinux系统的特权级与中断处理系统的特权级与中断处理系统的特权级与中断处理系统的特权级与中断处理13 执行函数执行函数执行函数执行函数work_thread()work_thread()work_thread()work_thread()执行一个死循环;执行一个死循环;若工作队列链表不空时,执行链表上的所有工作。工若工作队列链表不空时,执行链表上的所有工作。工

19、 作被执行完毕,它就将相应的作被执行完毕,它就将相应的work_structwork_struct对象从链表对象从链表 上移走;上移走;当链表为空时,它进入睡眠状态;当链表为空时,它进入睡眠状态;当有下半部插入到队列时,函数是当有下半部插入到队列时,函数是work_thread()work_thread()被唤醒,将继续处理新加入的下半部被唤醒,将继续处理新加入的下半部 。LinuxLinux系统系统系统系统 LinuxLinux系统的特权级与中断处理系统的特权级与中断处理系统的特权级与中断处理系统的特权级与中断处理Linux系统的系统的功能调用功能调用LinuxLinux系统系统系统系统Li

20、nuxLinux系统功能调用系统功能调用系统功能调用系统功能调用141.Linux系统功能调用的过程系统功能调用的过程在在LinuxLinux系统中,系统中,系统调用通过异常类型实现;系统调用通过异常类型实现;当执行了当执行了int 0 x80int 0 x80指令而发生的软件中断;指令而发生的软件中断;系统自动将用户态切换为核心态来处理该事件,执行自系统自动将用户态切换为核心态来处理该事件,执行自陷处理程序陷处理程序(系统调用处理程序系统调用处理程序)。LinuxLinux系统系统系统系统LinuxLinux系统功能调用系统功能调用系统功能调用系统功能调用15(1)(1)系统功能调用过程系统

21、功能调用过程系统功能调用过程系统功能调用过程 abc();abc();syscall;system_call:sys_abc SYSEXITsysabc()用户态用户态核心态核心态用户程序系统调用 在libc标准库中的封装例程系统调用处理程序系统调用服务例程Linux系统调用过程LinuxLinux系统系统系统系统LinuxLinux系统功能调用系统功能调用系统功能调用系统功能调用16(2)(2)例:例:例:例:getuidgetuid系统调用过程系统调用过程系统调用过程系统调用过程 int main()getuid();int getuid(void)long_res;int$0 x80;E

22、NTRY(system_call)pushl%esx SAVE_ALL GET_CURRENT(%ebx)call sys_getuid16 RESTORE_ALLasmlinkage longsys_getuid16(void)return high2lowuid (current_uid);用户程序用户程序系统调用处理程序系统调用处理程序标准标准C库库内核例程内核例程getuid系统调用过程LinuxLinux系统系统系统系统LinuxLinux系统功能调用系统功能调用系统功能调用系统功能调用172.Linux系统功能调用的实现机制系统功能调用的实现机制 (1)Linux (1)Linux

23、系统调用的进入系统调用的进入系统调用的进入系统调用的进入 LinuxLinux系统的软中断指令是系统的软中断指令是系统的软中断指令是系统的软中断指令是int 0 x80int 0 x80汇编语言指令汇编语言指令汇编语言指令汇编语言指令 该指令的执行会发生中断该指令的执行会发生中断该指令的执行会发生中断该指令的执行会发生中断 处理机的状态由用户态自陷到内核态处理机的状态由用户态自陷到内核态处理机的状态由用户态自陷到内核态处理机的状态由用户态自陷到内核态 从从从从system_call()system_call()开始执行系统调用处理程序。开始执行系统调用处理程序。开始执行系统调用处理程序。开始执

24、行系统调用处理程序。当系统调用处理完毕后,通过当系统调用处理完毕后,通过当系统调用处理完毕后,通过当系统调用处理完毕后,通过iretiret汇编语言指令返回到用汇编语言指令返回到用汇编语言指令返回到用汇编语言指令返回到用 户态。户态。户态。户态。LinuxLinux系统系统系统系统LinuxLinux系统功能调用系统功能调用系统功能调用系统功能调用18 (2)(2)系统调用号系统调用号系统调用号系统调用号 linuxlinux中,每个系统调用被赋予一个唯一的系统调用号中,每个系统调用被赋予一个唯一的系统调用号 系统调用号定义在系统调用号定义在include/asm-i386/unistd.hi

25、nclude/asm-i386/unistd.h头文件中头文件中 系统调用号格式如下系统调用号格式如下#define _NR_restart_syscall 0#define _NR_restart_syscall 0#define _NR_exit#define _NR_exit 1 1#define _NR_fork#define _NR_fork 2 2#define _NR_read#define _NR_read 3 3#define _NR_write#define _NR_write 4 4#define _NR_open#define _NR_open 5 5#define _

26、NR_mq_getsetattr 282#define _NR_mq_getsetattr 282 LinuxLinux系统系统系统系统LinuxLinux系统功能调用系统功能调用系统功能调用系统功能调用19 (3)(3)系统调用表系统调用表系统调用表系统调用表 系统调用表记录了内核中所有已注册过的系统调用,系统调用表记录了内核中所有已注册过的系统调用,它是系统调用的跳转表。它是系统调用的跳转表。系统调用表系统调用表是一个函数指针数组,表中依次保存所有是一个函数指针数组,表中依次保存所有 系统调用的函数指针系统调用的函数指针 LinuxLinux系统调用表保存在系统调用表保存在arch/i38

27、6/kernel/arch/i386/kernel/下的下的entry.Sentry.S中中LinuxLinux系统系统系统系统LinuxLinux系统功能调用系统功能调用系统功能调用系统功能调用20 系统调用表格式如下系统调用表格式如下系统调用表格式如下系统调用表格式如下 ENTRY(sys_call_table)ENTRY(sys_call_table).long sys_restart_syscall /*0*/.long sys_restart_syscall /*0*/.long sys_exit /*1*/.long sys_exit /*1*/.long sys_fork.lon

28、g sys_fork /*2*/*2*/.long sys_read.long sys_read /*3*/*3*/.long sys_write.long sys_write /*4*/*4*/.long sys_open.long sys_open /*5*/*5*/.long sys_mq_getsetattr /*282*/.long sys_mq_getsetattr /*282*/LinuxLinux系统系统系统系统LinuxLinux系统功能调用系统功能调用系统功能调用系统功能调用21(4)(4)系统调用处理程序系统调用处理程序系统调用处理程序系统调用处理程序 系统调用处理程序是

29、系统调用处理程序是系统调用处理程序是系统调用处理程序是system_call()system_call(),主要工作如下,主要工作如下,主要工作如下,主要工作如下宏宏SAVE_ALLSAVE_ALL保护现场;保护现场;正确性检查正确性检查 ;依依eaxeax中所包含的系统调用号,调用其对应的服务例中所包含的系统调用号,调用其对应的服务例 程;程;系统服务例程结束时,通过宏系统服务例程结束时,通过宏RESTORE_ALLRESTORE_ALL恢复寄恢复寄 存器;存器;最后通过最后通过iretiret指令返回。指令返回。LinuxLinux系统系统系统系统LinuxLinux系统功能调用系统功能调

30、用系统功能调用系统功能调用223.增加一个新的增加一个新的系统功能调用的方法系统功能调用的方法 (1)(1)添加新的服务例程添加新的服务例程添加新的服务例程添加新的服务例程 在在/usr/src/linux/kernel/sys.c/usr/src/linux/kernel/sys.c文件中增加一个新的函文件中增加一个新的函数,数,该函数的名字是该函数的名字是sys_mysyscall sys_mysyscall 例:例:例:例:一个简单的系统调用,其功能是返回一个整型值一个简单的系统调用,其功能是返回一个整型值 asmlinkage int sys_mycall(int number)asm

31、linkage int sys_mycall(int number)return number;return number;LinuxLinux系统系统系统系统LinuxLinux系统功能调用系统功能调用系统功能调用系统功能调用23 (2)(2)增加新的系统功能调用号增加新的系统功能调用号增加新的系统功能调用号增加新的系统功能调用号 在文件在文件在文件在文件include/asm-i386/unistd.hinclude/asm-i386/unistd.hinclude/asm-i386/unistd.hinclude/asm-i386/unistd.h中添加一项中添加一项中添加一项中添加一项

32、#define _NR_mysyscall XX#define _NR_mysyscall XX XX XX XX XX为新增加的系统调用号,此数字选一未用值为新增加的系统调用号,此数字选一未用值为新增加的系统调用号,此数字选一未用值为新增加的系统调用号,此数字选一未用值。例例例例#define _NR_restart_syscall 0#define _NR_restart_syscall 0#define _NR_exit#define _NR_exit1 1#define _NR_mq_getsetattr 282#define _NR_mq_getsetattr 282#define

33、_NR_mysyscall 283#define _NR_mysyscall 283 LinuxLinux系统系统系统系统LinuxLinux系统功能调用系统功能调用系统功能调用系统功能调用24 (3)(3)修改系统调用表修改系统调用表修改系统调用表修改系统调用表 在文件在文件/arch/i386/kernel/entry.S/arch/i386/kernel/entry.S中的系统调用表中的系统调用表sys_call_tablesys_call_table中添加新增的系统调用中添加新增的系统调用sys_call_tablesys_call_table数组包含指向内核中每个系统调用的指针数组包

34、含指向内核中每个系统调用的指针 例例例例 ENTRY(sys_call_table)ENTRY(sys_call_table).long sys_restart_syscall /*0*/.long sys_restart_syscall /*0*/.long sys_exit /*1*/.long sys_exit /*1*/.long sys_mq_getsetattr /*282*/.long sys_mq_getsetattr /*282*/.long sys_mysyscall /*283*/.long sys_mysyscall /*283*/LinuxLinux系统系统系统系统L

35、inuxLinux系统功能调用系统功能调用系统功能调用系统功能调用25 (4)(4)重新编译内核并启动新内核重新编译内核并启动新内核重新编译内核并启动新内核重新编译内核并启动新内核 为使新的系统调用生效,需要重建为使新的系统调用生效,需要重建LinuxLinux的内核。的内核。这需要以超级用户身份登录后重新编译内核。这需要以超级用户身份登录后重新编译内核。(5)(5)在用户程序中访问新的系统调用在用户程序中访问新的系统调用在用户程序中访问新的系统调用在用户程序中访问新的系统调用 在用户程序中,测试新增加的系统调用是否能正确使用。在用户程序中,测试新增加的系统调用是否能正确使用。LinuxLin

36、ux系统系统系统系统LinuxLinux系统功能调用系统功能调用系统功能调用系统功能调用Linux系统的系统的进程管理进程管理LinuxLinux系统系统系统系统LinuxLinux系统的进程管理系统的进程管理系统的进程管理系统的进程管理261.Linux系统进程与线程系统进程与线程 (1)Linux (1)Linux系统中的进程系统中的进程系统中的进程系统中的进程 进程是程序在处理机上的一次执行过程。进程是处于执行进程是程序在处理机上的一次执行过程。进程是处于执行 期的程序,它是分配系统资源和调度的实体。期的程序,它是分配系统资源和调度的实体。进程包括可执行的程序代码、打开的文件、挂起的信号

37、、进程包括可执行的程序代码、打开的文件、挂起的信号、内核数据、地址空间、处理机状态、一个或多个可执行内核数据、地址空间、处理机状态、一个或多个可执行 的线程等。的线程等。(2)Linux (2)Linux系统中的线程系统中的线程系统中的线程系统中的线程 Linux Linux系统将线程看作是一种特殊的进程。线程被视为一系统将线程看作是一种特殊的进程。线程被视为一 个与其他进程共享某些资源的进程。个与其他进程共享某些资源的进程。LinuxLinux系统系统系统系统LinuxLinux系统的进程管理系统的进程管理系统的进程管理系统的进程管理272.Linux系统的进程描述符系统的进程描述符 Lin

38、ux Linux内核使用进程描述符内核使用进程描述符(又称为进程控制块又称为进程控制块)来描述一个来描述一个 进程的完整信息。进程的完整信息。(1)(1)进程控制块的结构进程控制块的结构进程控制块的结构进程控制块的结构 LinuxLinux系统系统系统系统LinuxLinux系统的进程管理系统的进程管理系统的进程管理系统的进程管理28指向进程基本控制块的指针进程状态state进程标识进程调度有关的字段进程亲属关系的字段指向当前目录的指针指向文件描述符的指针指向主存描述符的指针指向信号结构的指针指向tty结构的指针task_structthread_info当前目录文件描述符主存描述符所接收的信

39、号与进程相关的tty指向进程队列priopidtgidpgrpsessinthread_inforun_listttyreal_parentparentchildrensiblingfsfilesmmsignal进程控制块的结构进程控制块的结构进程控制块的结构进程控制块的结构 进程控制块结构LinuxLinux系统系统LinuxLinux系统的进程管理系统的进程管理29(2)(2)进程控制块的主要内容进程控制块的主要内容进程控制块的主要内容进程控制块的主要内容 进程标识符进程标识符进程标识符进程标识符 进程标识符进程标识符process ID process ID 进程描述符中的标识符字段字段

40、名字段名字段名字段名说明说明说明说明pidpid进程的进程的PIDPIDtgidtgid线程组领头进程的线程组领头进程的PIDPIDpgrppgrp进程组领头的进程进程组领头的进程PIDPIDsessionsession会话领头进程的会话领头进程的PIDPIDLinuxLinux系统系统系统系统LinuxLinux系统的进程管理系统的进程管理系统的进程管理系统的进程管理30 进程状态进程状态进程状态进程状态 反映进程当前状态,包括以下几种可能的状态反映进程当前状态,包括以下几种可能的状态 可运行状态可运行状态 TASK_RUNNING TASK_RUNNING 可中断的等待状态可中断的等待状态

41、 TASK_INTERRUPTIBLE TASK_INTERRUPTIBLE 不可中断的等待状态不可中断的等待状态 TASK_UNINTERRUPTIBLE TASK_UNINTERRUPTIBLE 暂停状态暂停状态 TASK_STOPPED TASK_STOPPED 终止状态终止状态 TXIT_ZOMBIE TXIT_ZOMBIELinuxLinux系统系统系统系统LinuxLinux系统的进程管理系统的进程管理系统的进程管理系统的进程管理31 进程基本信息进程基本信息进程基本信息进程基本信息 每个进程都有一个进程基本信息块。在进程描述符的每个进程都有一个进程基本信息块。在进程描述符的thr

42、ead_infothread_info字段中包含了指向该结构的指针字段中包含了指向该结构的指针 与进程调度有关的信息与进程调度有关的信息与进程调度有关的信息与进程调度有关的信息 可运行进程链表可运行进程链表(最多可有最多可有140140个个)进程的亲属关系进程的亲属关系进程的亲属关系进程的亲属关系 进程描述符中的亲属关系字段字段名字段名字段名字段名说明说明说明说明real_parentreal_parent指向创建指向创建p p进程的父进程的描述符,若该父进程不再存在,进程的父进程的描述符,若该父进程不再存在,就指向就指向1 1#进程进程parentparent指向指向p p进程的当前父进程,

43、它的值通常与进程的当前父进程,它的值通常与real_parentreal_parent一致,一致,偶尔也可不同偶尔也可不同childrenchildren链表的头部,链表中的所有进程都是链表的头部,链表中的所有进程都是p p进程创建的子进程进程创建的子进程siblingsibling指向兄弟进程链表中的下一个或前一个元素的指针指向兄弟进程链表中的下一个或前一个元素的指针LinuxLinux系统系统系统系统LinuxLinux系统的进程管理系统的进程管理系统的进程管理系统的进程管理32 其他字段其他字段其他字段其他字段 在进程描述符的在进程描述符的thread_infothread_info字段

44、中包含了指向各种结构的字段中包含了指向各种结构的 指针。指针。fs fs 指向当前目录结构指向当前目录结构 fs_steuct fs_steuct files files 指向文件描述符结构指向文件描述符结构 files_struct files_struct mm mm 指向主存描述符结构指向主存描述符结构 mm_struct mm_struct signal signal 指向信号结构指向信号结构 signal_struct signal_struct tty tty 指向进程相关的指向进程相关的 tty_struct tty_struct结构结构LinuxLinux系统系统系统系统Lin

45、uxLinux系统的进程管理系统的进程管理系统的进程管理系统的进程管理33 (1)TASK_RUNNING(1)TASK_RUNNING(可运行状态可运行状态可运行状态可运行状态)它或者正在执行,运行状态它或者正在执行,运行状态它或者正在执行,运行状态它或者正在执行,运行状态 或者在运行队列中等待执行,就绪状态或者在运行队列中等待执行,就绪状态或者在运行队列中等待执行,就绪状态或者在运行队列中等待执行,就绪状态 (2)TASK_INTERRUPTIBLE(2)TASK_INTERRUPTIBLE(可中断的等待状态可中断的等待状态可中断的等待状态可中断的等待状态)进程正在等待某一事件的发生进程正

46、在等待某一事件的发生(如某一硬件中断或一个信如某一硬件中断或一个信 号号),它处于挂起或称睡眠状态。,它处于挂起或称睡眠状态。(3)TASK_UNINTERRUPTIBLE(3)TASK_UNINTERRUPTIBLE(不可中断的等待不可中断的等待不可中断的等待不可中断的等待 状态状态状态状态)除了不会因为接收到信号而被唤醒从而投入运行外,这个除了不会因为接收到信号而被唤醒从而投入运行外,这个 状态与可中断等待状态相同。状态与可中断等待状态相同。3.Linux系统进程状态及变迁系统进程状态及变迁LinuxLinux系统系统系统系统LinuxLinux系统的进程管理系统的进程管理系统的进程管理系

47、统的进程管理34(4)TASK_ZOMBIE(4)TASK_ZOMBIE(僵死状态僵死状态僵死状态僵死状态)表示进程已经结束,但其父进程还没有调用表示进程已经结束,但其父进程还没有调用wait4()wait4()系统系统 调用。子进程的进程描述符在此之前仍然被保留调用。子进程的进程描述符在此之前仍然被保留(5)TASK_STOPPED(5)TASK_STOPPED(停止停止停止停止)表示进程停止执行,进程没有投入运行也不能投入运行。表示进程停止执行,进程没有投入运行也不能投入运行。通常这种状态发生在接收到通常这种状态发生在接收到SIGSTOPSIGSTOP、SIGTSTPSIGTSTP、SIG

48、TTIN SIGTTIN、SIGTTOUSIGTTOU等信号的时候。等信号的时候。LinuxLinux系统系统系统系统LinuxLinux系统的进程管理系统的进程管理系统的进程管理系统的进程管理35(6)Linux(6)Linux系统进程状态的变迁系统进程状态的变迁系统进程状态的变迁系统进程状态的变迁 运行运行TASKUNNING进程调度等待某事件等待的事件发生 创建创建新进程新进程 就绪就绪TASKUNNING 进程进程 终止终止 等待等待TASKINTERRUPTIBLETASKUNINTERRUPTIBLE被抢占创建进程完成Linux系统进程状态变迁图LinuxLinux系统系统系统系统

49、LinuxLinux系统的进程管理系统的进程管理系统的进程管理系统的进程管理36 (1)(1)进程创建进程创建进程创建进程创建 Linux Linux系统用系统用fork()fork()系统调用创建一个进程。系统调用创建一个进程。写时拷贝写时拷贝写时拷贝写时拷贝 在创建新进程时内核不复制父进程的整个地址空间,在创建新进程时内核不复制父进程的整个地址空间,而是让父进程和子进程以读方式共享同一拷贝而是让父进程和子进程以读方式共享同一拷贝 只有当一方真正需要写入时,数据才被复制,这时,只有当一方真正需要写入时,数据才被复制,这时,父、子进程才拥有各自的拷贝父、子进程才拥有各自的拷贝4.Linux系统

50、进程创建与终止系统进程创建与终止 系统提供系统提供系统提供系统提供fork()fork()和和和和clone()clone()系统调用系统调用系统调用系统调用 fork()fork()用来创建一般进程用来创建一般进程 clone()clone()用来创建轻量级进程用来创建轻量级进程(线程线程)LinuxLinux系统系统系统系统LinuxLinux系统的进程管理系统的进程管理系统的进程管理系统的进程管理37(2)(2)进程终止进程终止进程终止进程终止 Linux Linux系统提供系统提供exit()exit()系统调用以终止某一个进程。其主要系统调用以终止某一个进程。其主要 功能由功能由do

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁