主要内容 进程描述符 冬进程切换 进程的创建和删除 进程调度 1958 嵌入式系统实验室 11123/09 Linux操作系统分析 2/92 EMBEDDED SYSTEM LABORATORY 5uE料DUAN0 ITUTE FOR AOVANCED5 FUOY OF U百TC
11/23/09 Linux操作系统分析 2/92 主要内容 ❖进程描述符 ❖进程切换 ❖进程的创建和删除 ❖进程调度
进程的创建 冬许多进程可以并发的运行同一程序,这些进程共享 内存中程序正文的单一副本,但每个进程有自己的 单独的数据和堆栈区 一个进程可以在任何时刻可以执行新的程序,并且 在它的生命周期中可以运行几个程序 又如,只要用户输入一条命令,shelli进程就创建一 个新进程 嵌入式系统实验室 11123/09 Linux操作系统分析 3/92 EMBEDDED SYSTEM LABORATORY 5uE料DUN0 ITUTE FOR AOVANCED5 FUOY OF U百TD
11/23/09 Linux操作系统分析 3/92 进程的创建 ❖许多进程可以并发的运行同一程序,这些进程共享 内存中程序正文的单一副本,但每个进程有自己的 单独的数据和堆栈区 ❖一个进程可以在任何时刻可以执行新的程序,并且 在它的生命周期中可以运行几个程序 ❖又如,只要用户输入一条命令,shell进程就创建一 个新进程
传统的UX操作系统采用统一的方式来创建进程 >子进程复制父进程所拥有的资源 冬缺点: >创建过程慢、效率低 >事实上,子进程复制的很多资源是不会使用到的 冬现代UX内核通过引入三种不同的机制来解决这个 问题 ence and Te 嵌入式系统实验室 11123/09 Linux操作系统分析 4/92 EMBEDDED SYSTEM LABORATORY 5uE料DUN0 ITUTE FOR AOVANCED5 UOY DF U百TC
11/23/09 Linux操作系统分析 4/92 ❖传统的UNIX操作系统采用统一的方式来创建进程 ➢ 子进程复制父进程所拥有的资源 ❖缺点: ➢ 创建过程慢、效率低 ➢ 事实上,子进程复制的很多资源是不会使用到的 ❖现代UNIX内核通过引入三种不同的机制来解决这个 问题
l、写时复制技术,Copy-On-Writing,COW 写时复制技术允许父子进程能读相同的物理页。 >只要两者有一个进程试图写一个物理页,内核就把这 个页的内容拷贝到一个新的物理页,并把这个新的物 理页分配给正在写的进程 1958 嵌入式系统实验室 11123/09 Linux操作系统分析 5/92 EMBEDDED SYSTEM LABORATORY 5uE料DUAN0 ITUTE FOR AOVANCED5 FUOY OF U百TC
11/23/09 Linux操作系统分析 5/92 ❖1、写时复制技术,Copy-On-Writing,COW 写时复制技术允许父子进程能读相同的物理页。 ➢只要两者有一个进程试图写一个物理页,内核就把这 个页的内容拷贝到一个新的物理页,并把这个新的物 理页分配给正在写的进程
冬2、轻量级进程允许父子进程共享许多数据结构 >页表 >打开的文件列表 >信号处理 3、vfork >使用fok创建的新进程能够共享父进程的内存地址空间。 父进程在这个过程中被阻塞,直到子进程退出或者执行一 个新的程序 F Science and Technoloa 11123/09 Linux操作系统分析 嵌入式系统实验室 6/92 EMBEDDED SYSTEM LABORATORY 5uE料DUAN0 ITUTE FOR AOVANCED5 FUOY OF U百TC
11/23/09 Linux操作系统分析 6/92 ❖2、轻量级进程允许父子进程共享许多数据结构 ➢ 页表 ➢ 打开的文件列表 ➢ 信号处理 ❖3、vfork ➢ 使用vfork创建的新进程能够共享父进程的内存地址空间。 父进程在这个过程中被阻塞,直到子进程退出或者执行一 个新的程序
Linux的进程创建 冬Linux提供了几个系统调用来创建和终止进程,以及 执行新程序 >Fork,vfork和clone系统调用创建新进程 ●其中,clone创建轻量级进程,必须指定要共享的资源 >exec系统调用执行一个新程序 >ext系统调用终止进程(进程也可以因收到信号而终止) ersity of science and technol 嵌入式系统实验室 11123/09 Linux操作系统分析 7192 EMBEDDED SYSTEM LABORATORY 5uE料DUN0 ITUTE FOR AOVANCED5 UOY DF U百TC
11/23/09 Linux操作系统分析 7/92 Linux的进程创建 ❖Linux提供了几个系统调用来创建和终止进程,以及 执行新程序 ➢ Fork,vfork和clone系统调用创建新进程 ⚫ 其中,clone创建轻量级进程,必须指定要共享的资源 ➢ exec系统调用执行一个新程序 ➢ exit系统调用终止进程(进程也可以因收到信号而终止)
fork fok系统调用创建一个新进程 >调用fok的进程称为父进程 >新进程是子进程 >子进程几乎就是父进程的完全复制。它的地址空间是父进 程的复制,一开始也是运行同一程序。 ork系统调用为父子进程返回不同的值 11123/09 Linux操作系统分析 嵌入式系统实验室 8/92 EMBEDDED SYSTEM LABORATORY 5uE料DUAN0 ITUTE FOR AOVANCED5 FUOY OF U百TC
11/23/09 Linux操作系统分析 8/92 fork ❖ fork系统调用创建一个新进程 ➢ 调用fork的进程称为父进程 ➢ 新进程是子进程 ➢ 子进程几乎就是父进程的完全复制。它的地址空间是父进 程的复制,一开始也是运行同一程序。 ❖ fork系统调用为父子进程返回不同的值
exec 很多情况下,子进程从fork返回后很多会调用exec来开始 执行新的程序 >这种情况下,子进程根本不需要读或者修改父进程拥有的 所有资源。 > 所以fork中地址空间的复制依赖于Copy On Write:技术,降 低fork的开销 1958 嵌入式系统实验室 11123/09 Linux操作系统分析 9/92 EMBEDDED SYSTEM LABORATORY 5uE料DUN0 ITUTE FOR AOVANCED5 UOY DF U百TC
11/23/09 Linux操作系统分析 9/92 exec ❖ 很多情况下,子进程从fork返回后很多会调用exec来开始 执行新的程序 ➢ 这种情况下,子进程根本不需要读或者修改父进程拥有的 所有资源。 ➢ 所以fork中地址空间的复制依赖于Copy On Write技术,降 低fork的开销
使用fork和exec的例子 If (result=fork()==0){ /*子进程代码*/ 大 if(execve(“new_program”,.)<O) perror(execve failed"); exit(1); }else if (result<0){ 1958 perror(“fork failed /*result==子进程的pid,父进程将会从这里继续执行*/ o Science and Technol 嵌入式系统实验室 11123/09 Linux操作系统分析 10/92 EMBEDDED SYSTEM LABORATORY 百uE料DUAN0 ITUTE FOR AOVANCED5 FUOY DF U百TC
11/23/09 Linux操作系统分析 10/92 使用fork和exec的例子 If (result = fork() == 0){ /* 子进程代码 */ … if (execve(“new_program”,…)<0) perror(“execve failed”); exit(1); }else if (result<0){ perror(“fork failed”) } /* result==子进程的pid,父进程将会从这里继续执行*/ …
冬分开这两个系统调用是有好处的 >比如服务器可以fok许多进程执行同一个程序 >有时程序只是简单的exec,执行一个新程序 >在fork和exec之间,子进程可以有选择的执行一系列操作以确保 程序以所希望的状态运行 ●重定向输入输出 ●关闭不需要的打开文件 8 ●改变UD或是进程组 ●重置信号处理程序 冬若单一的系统调用试图完成所有这些功能将是笨重而低效的 >现有的fork-exec框架灵活性更强 >清晰,模块化强 SScience and Technolv 11123/09 Linux操作系统分析 嵌入式系统实验室 11/92 EMBEDDED SYSTEM LABORATORY 5uE料DUAN0 ITUTE FOR AOVANCED5 FUOY OF U百TC
11/23/09 Linux操作系统分析 11/92 ❖ 分开这两个系统调用是有好处的 ➢ 比如服务器可以fork许多进程执行同一个程序 ➢ 有时程序只是简单的exec,执行一个新程序 ➢ 在fork和exec之间,子进程可以有选择的执行一系列操作以确保 程序以所希望的状态运行 ⚫ 重定向输入输出 ⚫ 关闭不需要的打开文件 ⚫ 改变UID或是进程组 ⚫ 重置信号处理程序 ❖ 若单一的系统调用试图完成所有这些功能将是笨重而低效的 ➢ 现有的fork-exec框架灵活性更强 ➢ 清晰,模块化强