Linux操作系统分析进程精品PPT课件
合集下载
LINUX内核进程管理PPT幻灯片
![LINUX内核进程管理PPT幻灯片](https://img.taocdn.com/s3/m/647965a2cc7931b765ce15b6.png)
❖ suid和sgid是根据POSIX标准引入的,在系统调用改变uid 和gid时,用于保留真正的uid和gid。
❖ fsuid和fsgid称为文件系统的uid和gid,用于对文件系统操
作时的合法性检查,是LINUX独特的标识类型。它们一般分
别和euid和egid一致,但在NFS文件系统中NFS服务器需要
SIGSTP、SIGTTIN 或SIGTTOU)的反应; 其二是受到父进程ptrace调用的控制,
而暂时将处理机交给控制进程。
35
◆ ZOMBIE: 僵尸状态。 表示进程结束但尚未消亡的一种状态。 此时进程已经结束运行并释放大部分资
源,但尚未释放进程控制块。
36
进程调度
调度程序(scheduler)用来实现进程状态 之间的转换。
0 1 //等待资源 2 4 //等待信号 8
29
◆ RUNNING: 正在运行,或者在就绪队列中等待运行
的进程。 也就是上面提到的运行态和就绪态进程
的综合。 一个进程处于RUNNING状态,并不代表
它一定在被执行。
31
由于在多任务系统中,各个就绪进程需 要并发执行,所以在某个特定时刻,这些处 于RUNNING状态的进程之中,只有一个能 够得到处理机,而其他进程必须在一个就绪 队列中等待。
4
2. 动态性
进程与程序的区别在于,程序只是一个静态的 指令集合,而进程是一个正在系统中活动的指令集 合。
在进程中加入了时间的概念。进程具有自己的 生命周期和各种不同的状态,这些概念在程序中都 是不具备的。
5
由于以上两个性质,又可以衍生出进程 的第三个重要特性,即并发性。
若干个进程可以在单处理机状态上并发 执行。注意并发性(concurrency)和多处理机 并行(parallel)是两个不同的概念。
LINUX内核进程管理PPT幻灯片
![LINUX内核进程管理PPT幻灯片](https://img.taocdn.com/s3/m/647965a2cc7931b765ce15b6.png)
信号发生时,内核中断当前的进程,进 程执行处理函数来响应信号,结束后恢复正 常的进程处理。
信号有自己的名称和特定的编号,见表 3-1所示。
Hale Waihona Puke 19进程状态进程是一个动态的实体,故而它是有生 命的。
从创建到消亡,是一个进程的整个生命 周期。
在这个周期中,进程可能会经历各种不 同的状态。
一般来说,所有进程都要经历以下3种状 态。
❖ suid和sgid是根据POSIX标准引入的,在系统调用改变uid 和gid时,用于保留真正的uid和gid。
❖ fsuid和fsgid称为文件系统的uid和gid,用于对文件系统操
作时的合法性检查,是LINUX独特的标识类型。它们一般分
别和euid和egid一致,但在NFS文件系统中NFS服务器需要
16
3 进程的状态和调度
17
Linux系统信号
信号主要用于通知进程异步事件的发生。 在Linux中可以识别29种不同的信号,这些信号 中的大部分都有了预先定义好的意义,
进程可以显式的用kill或killpg系统调用来 向另一个进程发信号。
18
进程可以通过提供信号处理函数来取代 对于任意信号的缺省反应,这种缺省反应一 般都是终止进程。
uid=euid=fsuid, gid=egid=fsgid。
10
进程标识:
❖ uid和gid是运行进程的用户标识和用户组标识。
❖ euid和egid又称为有效的uid和gid。出于系统安全权限的考 虑,运行程序时要检查euid和egid的合法性。通常,uid等 于euid,gid等于egid。有时候,系统会赋予一般用户暂时 拥有root的uid和gid(作为用户进程的euid和egid),以便 于进行运作。
信号有自己的名称和特定的编号,见表 3-1所示。
Hale Waihona Puke 19进程状态进程是一个动态的实体,故而它是有生 命的。
从创建到消亡,是一个进程的整个生命 周期。
在这个周期中,进程可能会经历各种不 同的状态。
一般来说,所有进程都要经历以下3种状 态。
❖ suid和sgid是根据POSIX标准引入的,在系统调用改变uid 和gid时,用于保留真正的uid和gid。
❖ fsuid和fsgid称为文件系统的uid和gid,用于对文件系统操
作时的合法性检查,是LINUX独特的标识类型。它们一般分
别和euid和egid一致,但在NFS文件系统中NFS服务器需要
16
3 进程的状态和调度
17
Linux系统信号
信号主要用于通知进程异步事件的发生。 在Linux中可以识别29种不同的信号,这些信号 中的大部分都有了预先定义好的意义,
进程可以显式的用kill或killpg系统调用来 向另一个进程发信号。
18
进程可以通过提供信号处理函数来取代 对于任意信号的缺省反应,这种缺省反应一 般都是终止进程。
uid=euid=fsuid, gid=egid=fsgid。
10
进程标识:
❖ uid和gid是运行进程的用户标识和用户组标识。
❖ euid和egid又称为有效的uid和gid。出于系统安全权限的考 虑,运行程序时要检查euid和egid的合法性。通常,uid等 于euid,gid等于egid。有时候,系统会赋予一般用户暂时 拥有root的uid和gid(作为用户进程的euid和egid),以便 于进行运作。
Linux内核分析 第4章 进程和进程调度PPT课件
![Linux内核分析 第4章 进程和进程调度PPT课件](https://img.taocdn.com/s3/m/6f4eb6162e3f5727a5e962d6.png)
Linux操作系统分析
16
系统调用fork()的特点
➢ 子进程继承父进程的所有资源(PCB和内核堆栈除 外),并共享父进程的虚存空间
➢ 写时拷贝 (copy on write):子进程在创建后共享父 进程的虚存内存空间,只是在两个进程中某一个进程 需要向虚拟内存写入数据时才拷贝相应部分的虚拟内 存。
priority是进程优先级。
它还表示分配给进程使用CPU的时间片数。
counter是进程使用CPU运行时间的计数值。随时钟滴答 减1。
counter=0时,进程的时间片已用完。 所有进程的counter=0 时,根据各自priority重新赋值
Linux操作系统分析
42
调度权值的计算
#define PF_USEDFPU 0x00100000 /* task used FPU this quantum (SMP) */
Linux操作系统分析
10
进程PCB的组织形式
➢ 哈希表:pidhash_next, pidhash_pprev
#define PIDHASH_SZ (4096>>2) Extern struct task_struct *pidhash[PIDHASH_SZ]; #define pid_hashfn(x) ((((x)>>8^(x))&(PIDHASH_SZ-1))
printf("parent process PID:%d\n",(int)getpid()); else
printf("child process PID:%d\n",(int)getpid()); }
Linux操作系统分析
33
课件Linux操作系统分析-PPT课件
![课件Linux操作系统分析-PPT课件](https://img.taocdn.com/s3/m/001ffa1d43323968001c9210.png)
使用PID (Process ID,PID)
每个进程的PID都存放在进程描述符的pid域中 0~32767 新pid的产生:get_pid
+1 循环
Linux Operating Systems Analysis 9
xlanchen@2007.9.25
获得一个进程的pid
系统调用getpidsys_getpid 关于进程组
比如current->pid返回在CPU上正在执行的进程的 PID
xlanchen@2007.9.25
Linux Operating Systems Analysis
14
进程链表
为了对给定类型的进程(比如所有在可运行状 态下的进程)进行有效的搜索,内核维护了几 个进程链表 所有进程链表
xlanchen@2007.9.25
在进程描述符中:
Linux Operating S和REMOVE_LINKS宏用来分别在 进程链表中插入和删除一个进程描述符。
xlanchen@2007.9.25
Linux Operating Systems Analysis
16
for_each_task宏扫描整个进程链表
进程描述符 进程的内核堆栈 进程处于内核态时使用, 不同于用户态堆栈 内核控制路径所用的堆栈 很少,因此对栈和描述符 来说,8KB足够了
xlanchen@2007.9.25
Linux Operating Systems Analysis
11
Task_union
C语言允许用如下的一个union结构来方便的表 示这样的一个混合体
linux操作系统课件7进程
![linux操作系统课件7进程](https://img.taocdn.com/s3/m/667c95573c1ec5da50e2707d.png)
fork示例
编译并运行这个程序: $gcc -o fork_test fork_test.c $./fork_test PID before fork():1991 I am the parent process, my process ID is 1991 I am the child pro world. hello wold. 再运行一遍,输出结果可能不同。 读者考虑一下为什么?
进程介绍-进程状态
一般操作系统中进程有三个最基本的状态 运行态
阻塞态
就绪态
进程控制块
为了描述和控制进程的运行,系统为每个进程定 义了一个数据结构 —进程控制块 (process control block,PCB),它是进程实体的一部分,是操作系统 中最重要的记录型数据结构。 进程控制块中记录了操作系统所需的、用于描述 进程当前情况以及控制进程运行的全部信息。操作系 统是根据进程控制块来对并发执行的进程进行控制和 管理的。
进程
进程介绍
进程控制块
进程的组织方式
进程调度 进程的创建
与进程相关的系统调用及其应用 与调度相关的系统调用及应用
并行与并发
现代计算机系统提供多道程序运行环境,这种环境可以由 多处理器结构构成,也可以由单处理器结构构成。 并行(Parallelism):多个程序在不同的处理器上同时运行。 并发(Concurrency):多个程序在单个处理器上按照一定 规则进行切换, 轮流运行。由于切换迅速,给用户的感觉 是每个用户独占自己的cpu,宏观上面看起来并行。
fork示例
#include <stdio.h> main() { int pid; /*此时仅有一个进程*/ printf(“PID before fork():%d\n”,(int)getpid()); pid=fork( ); /*此时已经有两个进程在同时运行*/ if(pid<0) printf("error in fork!"); else if(pid==0) printf("I am the child process, my process ID is%d\n",getpid()); else printf("I am the parent process, my process ID is%d\n",getpid()); printf(“hello world.\n”); }
Linux系统进程安全管精品PPT课件
![Linux系统进程安全管精品PPT课件](https://img.taocdn.com/s3/m/321affee580216fc710afd75.png)
PROC文件系统是一个虚拟的文件系统,通过文件系统的接口实现,用于输出系统的运 行状态。它以文件系统的形式,为操作系统本身和应用进程之间的通信提供了一个界面, 使应用程序能够安全、方便地获得系统当前的运行状况和内核的内部数据信息,并可以 修改某些系统的配置信息。另外,由于PROC以文件系统的接口实现,因此用户可以像 访问普通文件一样对其进行访问,但它只存在于内存之中,并不存在于真正的物理磁盘 当中。所以,当系统重启和电源关闭的时候,该系统中的数据和信息将全部消失。
统任务,如httpd、named等。
3.进程的属性
3.进程的属性
uptime:系统启动时间、已经运行的时间
和三个平均负载值(最近1秒,5秒,15秒的 负载值)。
processes:自最近一次刷新以来的运行
进程总数。
CPU states:显示用户模式,系统模式,
优先级进程(只有优先级为负的列入考虑) 和闲置等各种情况所占用CPU时间的百分比。
SIZE:该进程的代码大小加上数据大小再 加上堆栈空间大小的总数。单位是KB。
RSS:该进程占用的物理内存的总数量, 单位是KB。
SHARE:该进程使用共享内存的数量。 STAT :S代表休眠状态;D代表不可中断
的休眠状态;R代表运行状态;Z代表僵死 状态;T代表停止或跟踪状态。
TIME:该进程自启动以来所占用的总 CPU时间。如果进入的是累计模式,那么 该时间还包括这个进程子进程所占用的时 间。且标题会变成CTIME。
top
-b
批处理
-c
显示完整的治命令
-I
忽略失效过程
-s
保密模式
-S
累积模式
-i<时间> 设置间隔时间
-u<用户名> 指定用户名
统任务,如httpd、named等。
3.进程的属性
3.进程的属性
uptime:系统启动时间、已经运行的时间
和三个平均负载值(最近1秒,5秒,15秒的 负载值)。
processes:自最近一次刷新以来的运行
进程总数。
CPU states:显示用户模式,系统模式,
优先级进程(只有优先级为负的列入考虑) 和闲置等各种情况所占用CPU时间的百分比。
SIZE:该进程的代码大小加上数据大小再 加上堆栈空间大小的总数。单位是KB。
RSS:该进程占用的物理内存的总数量, 单位是KB。
SHARE:该进程使用共享内存的数量。 STAT :S代表休眠状态;D代表不可中断
的休眠状态;R代表运行状态;Z代表僵死 状态;T代表停止或跟踪状态。
TIME:该进程自启动以来所占用的总 CPU时间。如果进入的是累计模式,那么 该时间还包括这个进程子进程所占用的时 间。且标题会变成CTIME。
top
-b
批处理
-c
显示完整的治命令
-I
忽略失效过程
-s
保密模式
-S
累积模式
-i<时间> 设置间隔时间
-u<用户名> 指定用户名
Linux操作系统分析进程地址空间精品PPT课件
![Linux操作系统分析进程地址空间精品PPT课件](https://img.taocdn.com/s3/m/ce7a41e2960590c69ec376b2.png)
参见include/linux/mm_types.h 主要数据项的说明参见ULK3中文版354页
2020/10/28
Linux OS analysis
13
分配一个内存描述符
❖ copy_mm函数用来在fork()调用中从父进程拷贝内存描述符
➢ 其中间接调用mm_alloc_pgd来分配一个新的页表
❖ 如果进程试图访问一个有效的area之外的地址或者用不 正确的方式访问一个有效的area,内核将通过段异常 (segmentation fault)杀死这个进程
2020/10/28
Linux OS analysis
9
❖ 线性区中可以包含各种内容
➢ 可执行文件代码段的内存映射,就是.text section ➢ 数据段的内存映射,.data section ➢ zero page的内存映射用来包含未初始化的全局变量,.bss
线 性 空 间 ( 3GB~4GB)
2020/10/28
Linux OS analysis
3
内核态和用户态分配内存的不同
❖ 给用户态进程分配内存时
➢ 请求被认为是不紧迫的 ➢ 用户进程不可信任
❖ 因此,当用户态进程请求动态内存时,并没有立 即获得实际的物理页框,而仅仅获得对一个新的 线性地址区间的使用权
➢ 刚刚创建的新进程 ➢ 使用exec系统调用装载一个新的程序运行 ➢ 将一个文件(或部分)映射到进程地址空间中 ➢ 当用户堆栈不够用的时候,扩展堆栈对应的线性区 ➢ ……
2020/10/28
Linux OS analysis
7
与创建、删除线性区相关的系统调用
❖ brk( ) ❖ execve( )
Terminates the current process and destroys its address space
2020/10/28
Linux OS analysis
13
分配一个内存描述符
❖ copy_mm函数用来在fork()调用中从父进程拷贝内存描述符
➢ 其中间接调用mm_alloc_pgd来分配一个新的页表
❖ 如果进程试图访问一个有效的area之外的地址或者用不 正确的方式访问一个有效的area,内核将通过段异常 (segmentation fault)杀死这个进程
2020/10/28
Linux OS analysis
9
❖ 线性区中可以包含各种内容
➢ 可执行文件代码段的内存映射,就是.text section ➢ 数据段的内存映射,.data section ➢ zero page的内存映射用来包含未初始化的全局变量,.bss
线 性 空 间 ( 3GB~4GB)
2020/10/28
Linux OS analysis
3
内核态和用户态分配内存的不同
❖ 给用户态进程分配内存时
➢ 请求被认为是不紧迫的 ➢ 用户进程不可信任
❖ 因此,当用户态进程请求动态内存时,并没有立 即获得实际的物理页框,而仅仅获得对一个新的 线性地址区间的使用权
➢ 刚刚创建的新进程 ➢ 使用exec系统调用装载一个新的程序运行 ➢ 将一个文件(或部分)映射到进程地址空间中 ➢ 当用户堆栈不够用的时候,扩展堆栈对应的线性区 ➢ ……
2020/10/28
Linux OS analysis
7
与创建、删除线性区相关的系统调用
❖ brk( ) ❖ execve( )
Terminates the current process and destroys its address space
linux进程管理PPT课件
![linux进程管理PPT课件](https://img.taocdn.com/s3/m/2667d5d83c1ec5da50e270f9.png)
12.05.2020
.
10
Linux kill命令的格式
kill [-s 信号|-p ] [-a] 进程号...
kill -l [信号]
12.05.2020
.
7
Linux的命令ps显示的信息项
UID 进程属主的用户ID号 PID 进程ID号 PPID 父进程的ID号 C 进程最近使用CPU的估算。 STIME 进程开始时间,以“小时:分:秒”的形式给出 TTY 该进程建立时所对应的终端,“?”表示该进程不占用终端 TIME 报告进程累计使用的CPU时间。注意,尽管觉得有些命令(如sh) 已经运转了很长时间,但是它们真正使用CPU的时间往往很短。所以, 该字段的值往往是0:00 CMD 是command(命令)的缩写,往往表示进程所对应的命令名
Linux进程管理
计算机系
2009.3
Linux操作系统
Linux是一个多用户、多任务的操作系统, 这就意味着多个用户可以同时使用一个操作 系统,而每个用户又可以同时运行多个命令。 在这样的系统中,各种计算机资源(如文件、 内存、CPU等)的分配和管理都以进程为单 位。为了协调多个进程对这些共享资源的访 问,操作系统要跟踪所有进程的活动,以及 它们对系统资源的使用情况,实施对进程和 资源的动态管理。
12.05.2020
.
3
Linux进程状态转换
停止态
TASK_STOPPED
进程跟踪系统调用 执行syscall_trace()
sys_exit() schedule()
未申请到所需资源
sleep_on() schedule()
正在运行态 拥有cpu
僵死态
TASK_ZOMBIE
Linux操作系统课件ppt--第13次 进程管理
![Linux操作系统课件ppt--第13次 进程管理](https://img.taocdn.com/s3/m/ae631f6da417866fb84a8e63.png)
进程的控制命令— kill命令
用kill命令来杀死程序产生的进程来结束程序的运行。 格式1 :
kill PID
格式2 : kill -9 PID
“-9”为SIGKILL信号,属于强制结束 。
进程的前台与后台控制
前台与后台运行含义 前台与后台运行相关命令 command command & jobs命令可以查看挂起到后台的进程 fg命令将后台挂起的进程恢复到前台来运行,格式为:
STAT
STIME
进程当前状态
进程开始执行的时间
%CPU
NI
占用的CPU时间与总时间的百分比
进程的优先级
进程状态含义
符号
S W
含义
睡眠状态 进程没有驻留页
符号
Z D
含义
僵尸状态 不间断睡眠
R
I
运行或准备运行状态
空闲
T
N
停止或追踪
低优先级的任务
进程的控制命令 —free命令
free命令 显示系统内存的使用情况,包括内存总量、已经使用内 存数量,空闲内存数量等信息。
选项 -a
-e -l
说明 显示所有用户进程
显示包括系统进程 的所有程 显示进程的详细列 表
选项 -f
-x -u
说明 显示进程的详细信 息
显示没有控制终端 的进程 显示用户名和启动 时间等信息
ps输出信息的含义
选项 UID 说明 进程所有者的用户名 选项 VSZ 说明 进程占用的虚拟内存空间(KB)
进程的控制命令—top命令
实时监控系统进程 top环境中常用的功能 排序 监视指定用户 指定刷新时间 删除指定的进程 查阅帮助 退出top环境
Linux操作系统分析.pptx
![Linux操作系统分析.pptx](https://img.taocdn.com/s3/m/1cccd1ccb0717fd5360cdca5.png)
2019-11-25
6/14
请各位同学在下周上课之前,将分组名单通过 email的形式告知助教
助教联系方法:
裴建国:ustcowen@ 冯晓静:bangyan@
实验室地址:亲民楼316 电话:87161316
2019-11-25
了解Linux中文件、IO等内容,掌握文件、设备 的层次概念
2019-11-25
3/14
Text & Reference book
Understanding the Linux Kernel (O‘reilly) (中文版:深入 理解Linux内核)
课程主要参考2版,基于2.4.18内核的
一共点x次名 请假要有假条 原则上只允许病假(附就诊证明,证明可延后);
事假必须有班主任在假条上签署意见
攻略四、关于考试
攻略五、关于课程反馈(附加分)
每位同学在课程中或结束后,进行课程反馈 意见中肯 欢迎多提批评意见,最好还有改进建议
2019-11-25
12/14
“宝剑锋从磨砺出, 梅花香自苦寒来”
Linux操作系统分析
中国科学技术大学计算机系 xxx
关于《Linux操作系统分析》
为什么要开这门课? 这门课学什么? 如何学好这门课? 如何获得高分?
2019-11-25
2/14
目标
掌握Linux操作系统基本概念,进一步加深对操 作系统原理的理解
掌握一种典型的操作系统——Linux的内核构造 及其主要功能模块,从代码角度理解操作系统原 理相关的关键算法
7/14
课程反馈
请各位同学及时将课程相关的反馈信息通过 email反馈给我
Linux操作系统(2)(PPT分析)
![Linux操作系统(2)(PPT分析)](https://img.taocdn.com/s3/m/b288f0cceff9aef8951e068c.png)
2021-01-04
5
停止态
被唤醒
收到停止命 令而暂停
未申请到 所需资源
不可中断等等态
所需资源 已满足
僵死态
运行态
进程终止
未申请到 所需资源
进程调度
时间片到
就绪态
等等态
所需资源 已满足
2021-01-04
6
8.2.3 进程状态的切换时机
第一类是隐式地主动放弃CPU。这往往是因为需 要的资源目前不能获取,如执行read()、 selec()等系统调用的过程中。
2021-01-04
18
2. Linux进程间的消息队列进行通信
Linux进程间的通信也可以通过消息队列 进行。消息队列可以是单消息队列,也可以 是多消息队列(按消息类型);既可以单向, 也可以双向通信;既可以仅和两个进程有关, 也可以被多个进程使用。
2021-01-04
19
8.3 Linux 存储器管理
8.3.1 Linux的虚拟内存管理 Linux的虚拟内存管理功能可以概括为以
下几点。 (1) 地址空间扩充。 (2) 进程保护。 (3) 内存映射。 (4) 物理内存分配。
2021-01-04
20
8.3.2 Linux系统采用三级页表
PGD表项下标
PMD表项下标
PT下标
页内偏移量
PGD基地址
物理地址
2021-01-04
10
4. 进程上下文切换
改变进程上下文的工作很复杂,是由系统 调用execve()实现的。它用一个可执行文件 的副本覆盖该进程的内存空间。
2021-01-04
11
8.2.5 Linux 线程
Linux并不确切区分进程与线程,或者说 没有真正意义上的线程概念,但通过clone() 系统调用,可以支持轻量级进程 (Lightweight Process)。
处理机理之Linux进程管理-PPT课件
![处理机理之Linux进程管理-PPT课件](https://img.taocdn.com/s3/m/ebc8bf3225c52cc58ad6be15.png)
Linux进程管理
张惠娟 副教授
Ms.zhj163
1
内容
• 进程组成
• 进程环境 • 进程管理内容 • 进程控制块 • 进程状态 • 进程调度 • 进程控制 • 进程通信
2
进程组成
Linux是一个多任务多用户操作系统,采用进 程模型。
进程都具有一定的功能和权限,运行在各 自独立的虚拟地址空间,彼此独立,且通过 通信机制实现同步互斥,通过调度程序实现 合理调度。
27
进程调度
时机2
当前进程时间片用完时
时机3
进程从系统调用返回到用户态时
时机4
中断处理后,进程返回到用户态时。
28
进程控制
系统初始化后,建立第一个task_struct数 据结构INIT_TASK。
新进程创建时,系统从内存分配新 task_struct,占据1680个字节。
10
进程控制块
进程标识 进程状态和标志
11
进程控制块
进程的族亲关系
12
进程控制块
进程间链接信息
进程调度信息
13
进程控制块
进程的时间信息
#define TASK_ZOMBIE
4
#define TASK_STOPPED
8
#define TASK_SWAPPING
16
17
18
进程调度
调度方法 调度策略 调度参数 调度方法 调度时机
19
进程调度
调度方法
Linux进程调度方式 采用抢占调度方式 (内核不抢占)
进程分为普通进程和实时进程,分别采 用不同的调度策略,实时进程的优先级 高于普通进程。
24
进程调度
张惠娟 副教授
Ms.zhj163
1
内容
• 进程组成
• 进程环境 • 进程管理内容 • 进程控制块 • 进程状态 • 进程调度 • 进程控制 • 进程通信
2
进程组成
Linux是一个多任务多用户操作系统,采用进 程模型。
进程都具有一定的功能和权限,运行在各 自独立的虚拟地址空间,彼此独立,且通过 通信机制实现同步互斥,通过调度程序实现 合理调度。
27
进程调度
时机2
当前进程时间片用完时
时机3
进程从系统调用返回到用户态时
时机4
中断处理后,进程返回到用户态时。
28
进程控制
系统初始化后,建立第一个task_struct数 据结构INIT_TASK。
新进程创建时,系统从内存分配新 task_struct,占据1680个字节。
10
进程控制块
进程标识 进程状态和标志
11
进程控制块
进程的族亲关系
12
进程控制块
进程间链接信息
进程调度信息
13
进程控制块
进程的时间信息
#define TASK_ZOMBIE
4
#define TASK_STOPPED
8
#define TASK_SWAPPING
16
17
18
进程调度
调度方法 调度策略 调度参数 调度方法 调度时机
19
进程调度
调度方法
Linux进程调度方式 采用抢占调度方式 (内核不抢占)
进程分为普通进程和实时进程,分别采 用不同的调度策略,实时进程的优先级 高于普通进程。
24
进程调度
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2020/10/11
Struct pid的cache
关于名字空间的更多信息,参见: Linux操作系统分析 Nsproxy1.3c以及pid_namespace.ch
Init_pid_ns
2020/10/11
在start_kernel中,调用pidmap_init进行合理的初始化
在kernel_init中,被修改为init进程
2020/10/11
Linux操作系统分析
10
进程的PID
❖进程的pid字段
include/linux/types.h
Pid最大值,参见kernel/pid.c
include/asm-XXX/posix_typesYYY.h
顺序使用 && 循环使用
include/linux/threads.h
2020/10/11
线程
❖ 进程是执行程序的一个实例 ❖ 进程和程序的区别
➢ 几个进程可以并发的执行一个程序 ➢ 一个进程可以顺序的执行几个程序
❖ 线程和进程的区别 ❖ Linux 2.4内核以及之前的版本都不支持线程
➢ 2.6内核中有thread,但仍不是线程
❖ Linux中的线程是在用户态实现的,不是本课程的内容
❖ 但Linux内核对用户态线程有一定的辅助支持
Linux操作系统分析
17进程Biblioteka 进程的内核堆栈❖Linux为每个进程分配一个8KB大小的内存区域 ,用于存放该进程两个不同的数据结构:
➢ Thread_info ➢ 进程的内核堆栈
• 进程处于内核态时使用, 不同于用户态堆栈
• 内核控制路径所用的堆栈 很少,因此对栈和Thread_info 来说,8KB足够了
❖举例:
➢ 比如current->pid返回在CPU上正在执行的进程的PID
2020/10/11
Linux操作系统分析
24
进程链表
❖为了对给定类型的进程(比如所有在可运行状态 下的进程)进行有效的搜索,内核维护了几个进 程链表
2020/10/11
Linux操作系统分析
5
进程描述符
❖为了管理进程,内核必须对每个进程进行清晰的 描述。
❖进程描述符提供了内核所需了解的进程信息
➢ 源码include/linux/sched.h定义 struct task_struct
➢ 数据结构很庞大
基本信息 管理信息 控制信息
2020/10/11
Linux操作系统分析
Linux的进程
主要内容
❖进程描述符 ❖进程切换 ❖进程的创建和删除 ❖进程调度
2020/10/11
Linux操作系统分析
3
主要内容
❖进程描述符 ❖进程切换 ❖进程的创建和删除 ❖进程调度
2020/10/11
Linux操作系统分析
4
进程和线程
❖ 多道程序对操作系统的需求进程 ❖ 进一步提高并发度,对操作系统的需求
EXIT_DEAD 或者
TASK_DEAD
2020/10/11
Linux操作系统分析
9
标识一个进程
❖使用进程描述符地址
➢ 进程和进程描述符之间有非常严格的一一对应关系, 使得用32位进程描述符地址标识进程非常方便
❖使用PID (Process ID,PID)
➢ 每个进程的PID都存放在进程描述符的pid域中
Linux操作系统分析
11
stuct pid
❖阅读include/linux/pid.h中
➢ “What is struct pid?”
2020/10/11
Linux操作系统分析
12
Pid的管理和分配
❖创建一个进程时,
do_forkcopy_processalloc_pid
Pid位图
❖Pid名字空间
以及include/asm-x86/thread_info_32.h
2020/10/11
Linux操作系统分析
19
❖ 进程描述符的分配/回收/访问
❖ Thread_info的分配/回收/访问
➢ alloc_thread_info ➢ free_thread_info
2020/10/11
Linux操作系统分析
Linux操作系统分析
6
2020/10/11
Linux操作系统分析
7
Linux2.6进程的状态
2020/10/11
include/linux/sched.h
Linux操作系统分析
简单过一下,与状态相关的一些宏 1)组合状态 2)状态判断 3)状态设置
8
进程状态转换图
EXIT_ZOMBIE 或者
kernel/pid.c
kernel/pid.c
2020/10/11
Linux操作系统分析
16
用户如何获得一个进程的pid
❖系统调用getpid
❖关于进程组
➢ 使用组链表 ➢ 所有进程共享组内第一个进程的pid
数据:tgid
❖单独一个进程可以看成只有一个进程的组
❖getpid返回组pid
2020/10/11
2020/10/11
Linux操作系统分析
Thread_info
18
Thread_union
❖C语言允许用如下的一个union结构来方便的表示 这样的一个混合体
include/linux/sched.h
thread_info由体系结构相关部分定义 阅读include/asm-x86/thread_info.h
2020/10/11
8191=8192-1=0x2000-1=0x1fff Linux操作系统取分析反:0xffffe20200(最后13位为0)
Current宏
2020/10/11
Linux操作系统分析
23
Current宏的使用
❖Current宏可以看成当前进程的进程描述符指针 ,在内核中直接使用
Linux操作系统分析
14
分配第一个位图页 初始化struct pid的cache
2020/10/11
Linux操作系统分析
15
❖阅读alloc_pid、 alloc_pidmap函数
❖ 掌握基于位图的pid分配方法
❖last_pid+1,或者下一个bit0,或者一个新的map的第 一个bit或者从头开始(300以后)
20
2020/10/11
Linux操作系统分析
21
current_thread_info
❖从刚才看到的thread_info和内核态堆栈之间的配 对,内核可以很容易的从esp寄存器的值获得当 前在CPU上运行的进程的描述符指针
❖因为这个内存区是8KB=213大小,内核必须做的 就是让esp有13位的有效位,以获得进程描述符 的基地址