《进程控制开发》PPT课件.ppt
《《进程控制开发》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《进程控制开发》PPT课件.ppt(68页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第7章章 进程控制进程控制 Linux进程概述进程概述 Linux进程控制编程进程控制编程 Linux守护进程守护进程实验实验 进程的定义进程的定义进程的参考定义有如下几种:进程的参考定义有如下几种:1、进程是程序的一次执行过程;、进程是程序的一次执行过程;2、进程、进程=PCB+程序程序+数据;数据;3、进程是一个可拥有资源的独立实体,同、进程是一个可拥有资源的独立实体,同时又是一个可以独立调度的基本单位。时又是一个可以独立调度的基本单位。PCB程序程序段段私有私有数据块数据块进程的定义进程的定义进程与程序的区别进程与程序的区别 动态性与静态动态性与静态动态性与静态动态性与静态 进程由进程
2、由进程由进程由“创建创建创建创建”而产生,由而产生,由而产生,由而产生,由“调度调度调度调度”而执行;由而执行;由而执行;由而执行;由得不到资源而得不到资源而得不到资源而得不到资源而阻塞阻塞阻塞阻塞;由撤消而消亡。而程序是静;由撤消而消亡。而程序是静;由撤消而消亡。而程序是静;由撤消而消亡。而程序是静态的,是完成某个特定功能的指令的有序序列,态的,是完成某个特定功能的指令的有序序列,态的,是完成某个特定功能的指令的有序序列,态的,是完成某个特定功能的指令的有序序列,我们把程序看成是一个菜谱,而进程则是按照菜我们把程序看成是一个菜谱,而进程则是按照菜我们把程序看成是一个菜谱,而进程则是按照菜我们
3、把程序看成是一个菜谱,而进程则是按照菜谱进行烹调的过程。谱进行烹调的过程。谱进行烹调的过程。谱进行烹调的过程。结构特征结构特征结构特征结构特征 从结构上看,每个进程是由从结构上看,每个进程是由从结构上看,每个进程是由从结构上看,每个进程是由程序段、数据段和进程序段、数据段和进程序段、数据段和进程序段、数据段和进程控制块三程控制块三程控制块三程控制块三部分组成,总称部分组成,总称部分组成,总称部分组成,总称“进程映像进程映像进程映像进程映像”。程序。程序。程序。程序无控制块。无控制块。无控制块。无控制块。进程与程序的区别进程与程序的区别 并发性并发性并发性并发性 多个进程实体,同存于内存中,能在
4、一段时间内多个进程实体,同存于内存中,能在一段时间内多个进程实体,同存于内存中,能在一段时间内多个进程实体,同存于内存中,能在一段时间内同时执行;程序是不能并发执行的同时执行;程序是不能并发执行的同时执行;程序是不能并发执行的同时执行;程序是不能并发执行的,只有建立了只有建立了只有建立了只有建立了进程,才能并发执行。进程,才能并发执行。进程,才能并发执行。进程,才能并发执行。独立性。独立性。独立性。独立性。进程是系统进行资源分配和调度的一个独立单位;进程是系统进行资源分配和调度的一个独立单位;进程是系统进行资源分配和调度的一个独立单位;进程是系统进行资源分配和调度的一个独立单位;程序则不是。程
5、序则不是。程序则不是。程序则不是。进程具有创建其它进程的功能进程具有创建其它进程的功能小结进程的状态进程的状态运行运行就绪就绪阻塞阻塞进程进程调度调度I/O完成完成时时 间间片片 用用完完等待等待I/O完成完成进程的状态及转变进程的状态及转变进程通常有进程通常有3种状态。种状态。执行态:该进程执行态:该进程正在运行,即进程正在运行,即进程正在占用正在占用CPU。就绪态:进程已就绪态:进程已经具备执行的一切经具备执行的一切条件,正在等待分条件,正在等待分配配CPU的处理时间的处理时间片。片。等待态:进程不等待态:进程不能使用能使用CPU,若等,若等待事件发生(等待待事件发生(等待的资源分配到)则
6、的资源分配到)则可将其唤醒。可将其唤醒。进程状态值说明TASK_RUNNING0就绪TASK_INTERRUPTIBLE1浅度睡眠TASK_UNINTERRUPTIBLE2深度睡眠TASK_ZOMBIE4僵死TASK_STOPPED8暂停Linux进程状态进程状态LinuxLinux进程状态及转换进程状态及转换 fork()TASK_RUNNING就绪TASK_INTERRUPTIBLE浅度睡眠TASK_UNINTERRUPTIBLE深度睡眠TASK_STOPPED暂停TASK_ZOMBIE僵死占有CPU运行do_exit()schedule()ptrace()schedule()时间片耗尽时
7、间片耗尽等待资源到位等待资源到位sleep_on()schedule()等待资源到位等待资源到位interruptible_sleep_on()schedule()资源到位资源到位wake_up_interruptible()或收到信号wake_up()资源到位资源到位wake_up()收到信号SIGCONTwake_up()TASK_RUNNING进程控制块进程控制块进程控制块是进程存在的标志,每一进程都进程控制块是进程存在的标志,每一进程都有一进程控制块,有一进程控制块,Linux中用数据结构中用数据结构task_struct表示,并将指向每个进程控制块表示,并将指向每个进程控制块的指针保
8、存在一个数组的指针保存在一个数组task中,数组下标的中,数组下标的最大值为最大值为512,表明,表明Linux允许的进程数最多允许的进程数最多可有可有 512个。个。Linux进程控制块也叫进程描述符进程控制块也叫进程描述符(Process Descriptor)进程控制块信息分类进程控制块信息分类状态信息状态信息描述进程状态的变化。描述进程状态的变化。链接信息链接信息描述进程的父子关系。描述进程的父子关系。各种标识符各种标识符用简单数字对进程进行标识。用简单数字对进程进行标识。进程间通信信息进程间通信信息描述多个进程在同一任务上协作工描述多个进程在同一任务上协作工作。作。时间和定时器信息时
9、间和定时器信息描述进程在生存周期内使用描述进程在生存周期内使用CPU时间的统计、计费等信息。时间的统计、计费等信息。调度信息调度信息描述进程优先级、调度策略等信息。描述进程优先级、调度策略等信息。文件系统信息文件系统信息对进程使用文件情况进行记录。对进程使用文件情况进行记录。虚拟内存信息虚拟内存信息描述每个进程拥有的地址空间。描述每个进程拥有的地址空间。处理器环境信息处理器环境信息描述进程的执行环境描述进程的执行环境(处理器的寄存处理器的寄存器及堆栈等器及堆栈等)struct task_struct volatile long state;struct thread_info*thread_i
10、nfo;atomic_t usage;unsigned long flags;unsigned long ptrace;int lock_depth;#if defined(CONFIG_SMP)&defined(_ARCH_WANT_UNLOCKED_CTXSW)int oncpu;#endifint prio,static_prio;struct list_head run_list;prio_array_t*array;unsigned short ioprio;unsigned long sleep_avg;LinuxLinux进程控制块数据结构进程控制块数据结构 unsigned l
11、ong long timestamp,last_ran;unsigned long long sched_time;int activated;unsigned long policy;cpumask_t cpus_allowed;unsigned int time_slice,first_time_slice;#ifdef CONFIG_SCHEDSTATSstruct sched_info sched_info;#endifstruct list_head tasks;struct list_head ptrace_children;struct list_head ptrace_list
12、;struct mm_struct*mm,*active_mm;struct linux_binfmt*binfmt;LinuxLinux进程控制块数据结构进程控制块数据结构 long exit_state;int exit_code,exit_signal;int pdeath_signal;unsigned long personality;unsigned did_exec:1;pid_t pid;pid_t tgid;struct task_struct*real_parent;struct task_struct*parent;struct list_head children;st
13、ruct list_head sibling;struct task_struct*group_leader;LinuxLinux进程控制块数据结构进程控制块数据结构struct pid pidsPIDTYPE_MAX;struct completion*vfork_done;int _user*set_child_tid;int _user*clear_child_tid;unsigned long rt_priority;cputime_t utime,stime;unsigned long nvcsw,nivcsw;struct timespec start_time;unsigned
14、long min_flt,maj_flt;cputime_t it_prof_expires,it_virt_expires;unsigned long long it_sched_expires;struct list_head cpu_timers3;uid_t uid,euid,suid,fsuid;gid_t gid,egid,sgid,fsgid;struct group_info*group_info;LinuxLinux进程控制块数据结构进程控制块数据结构kernel_cap_t cap_effective,cap_inheritable,cap_permitted;unsign
15、ed keep_capabilities:1;struct user_struct*user;#ifdef CONFIG_KEYSstruct key*thread_keyring;unsigned char jit_keyring;#endifint oomkilladj;char commTASK_COMM_LEN;int link_count,total_link_count;struct sysv_sem sysvsem;struct thread_struct thread;struct fs_struct*fs;LinuxLinux进程控制块数据结构进程控制块数据结构 struct
16、 files_struct*files;struct namespace*namespace;struct signal_struct*signal;struct sighand_struct*sighand;sigset_t blocked,real_blocked;struct sigpending pending;unsigned long sas_ss_sp;size_t sas_ss_size;int(*notifier)(void*priv);void*notifier_data;sigset_t*notifier_mask;void*security;struct audit_c
17、ontext*audit_context;seccomp_t seccomp;u32 parent_exec_id;u32 self_exec_id;LinuxLinux进程控制块数据结构进程控制块数据结构spinlock_t alloc_lock;spinlock_t proc_lock;void*journal_info;struct reclaim_state*reclaim_state;struct dentry*proc_dentry;struct backing_dev_info*backing_dev_info;struct io_context*io_context;unsig
18、ned long ptrace_message;siginfo_t*last_siginfo;wait_queue_t*io_wait;u64 rchar,wchar,syscr,syscw;LinuxLinux进程控制块数据结构进程控制块数据结构#if defined(CONFIG_BSD_PROCESS_ACCT)u64 acct_rss_mem1;u64 acct_vm_mem1;clock_t acct_stimexpd;#endif#ifdef CONFIG_NUMA struct mempolicy*mempolicy;short il_next;#endif#ifdef CONF
19、IG_CPUSETSstruct cpuset*cpuset;nodemask_t mems_allowed;int cpuset_mems_generation;#endifatomic_t fs_excl;LinuxLinux进程控制块数据结构进程控制块数据结构每个进程都有一个唯一的标识符每个进程都有一个唯一的标识符PID,内核通过这,内核通过这个标识符来识别不同的进程,用户程序通过个标识符来识别不同的进程,用户程序通过PID对对进程发号施令进程发号施令,PID是是32位的无符号整数,它被顺位的无符号整数,它被顺序编号序编号,1、2、.、32767每个进程都属于某个用户组。每个进程都属于某
20、个用户组。task_struct结构中还定义有用户标识符结构中还定义有用户标识符UID(User Identifier)和组标识符)和组标识符GID(Group Identifier)这两种标识符用于系统的安全控制这两种标识符用于系统的安全控制,系统通过这系统通过这两种标识符控制进程对系统中文件和设备的访问。两种标识符控制进程对系统中文件和设备的访问。进程标识符进程标识符PIDLinux下进程地址空间下进程地址空间Linux系统是一个多进程的系统,每个进程都是一系统是一个多进程的系统,每个进程都是一个独立的运行单位,运行在独立的虚拟地址空间,个独立的运行单位,运行在独立的虚拟地址空间,即使一个
21、进程发生异常,它也不会影响到系统中即使一个进程发生异常,它也不会影响到系统中的其他进程。的其他进程。Linux下进程地址空间包含下进程地址空间包含3个段,分别为个段,分别为“数据数据段段”、“代码段代码段”和和“堆栈段堆栈段”。数据段数据段:存放全局变量、常数以及动态分配的数据。数:存放全局变量、常数以及动态分配的数据。数据段又可以再分成据段又可以再分成普通数据段普通数据段(包括可读可写(包括可读可写/只读数据只读数据段,存放静态初始化的全局变量或常量)、段,存放静态初始化的全局变量或常量)、BSS数据段数据段(存放未初始化的全局变量)以及(存放未初始化的全局变量)以及堆堆(存放动态分配的(存
22、放动态分配的数据)。数据)。代码段代码段:存放程序代码。:存放程序代码。堆栈段堆栈段:存放子程序的返回地址、参数以及程序的局部:存放子程序的返回地址、参数以及程序的局部变量等。变量等。Linux下进程地址空间下进程地址空间堆栈堆栈堆堆数据段数据段(可读/只读)代码段代码段存放传递参数及环境变量存放传递参数及环境变量BSS 数据段数据段 低地址低地址高地址高地址Linux下进程的运特模式下进程的运特模式在在Linux系统中,进程的执行模式划分为用户模式和内核系统中,进程的执行模式划分为用户模式和内核模式模式用户模式:若进程执行的是用户程序、应用程序或用户模式:若进程执行的是用户程序、应用程序或者
23、内核之外的系统程序,则处在该模式下,也称为者内核之外的系统程序,则处在该模式下,也称为用户态用户态内核模式:用户程序执行中出现系统调用或者发生内核模式:用户程序执行中出现系统调用或者发生中断事件,就要运行核心程序,进程模式就转变为中断事件,就要运行核心程序,进程模式就转变为内核模式,也称进入核心态内核模式,也称进入核心态内核模式下运行的进程可以执行机器的特权指令,访问内核模式下运行的进程可以执行机器的特权指令,访问受操作系统保护的资源受操作系统保护的资源第第7章章 进程控制进程控制 Linux进程概述进程概述 Linux进程控制编程进程控制编程 Linux守护进程守护进程实验实验 创建进程创建
24、进程fork()fork1.c.#include#include#include int main()pid_t pid;char*message;int n;printf(“fork program startingn”);pid=fork();switch(pid)case-1:perror(“fork failed”);exit(1);case 0:message=“This is the child”;n=5;break;default:message=“This is the parent”;n=3;break;for(;n 0;n-)puts(message);sleep(1);e
25、xit(0);示例补示例补1$./fork1fork program startingThis is the parentThis is the childThis is the parentThis is the childThis is the parentThis is the child$This is the childThis is the childfork()从已存在的进程中创建一个称为子进从已存在的进程中创建一个称为子进程的新进程,而原进程称为父进程。程的新进程,而原进程称为父进程。fork()使用使用“写时复制写时复制”技术产生新进程。技术产生新进程。即只复制父进程的控制块
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 进程控制开发 进程 控制 开发 PPT 课件
限制150内