linux进程管理分析
更新时间:2023-09-12 14:04:01 阅读量: 综合文库 文档下载
Linux
作者:陈颖
邮箱:chxxxyg@163.com
博客: http://chxxxyg.blog.163.com/
目录
一 进程管理原理分析概述 ...................................................................................................... 1
二 进程创建 .............................................................................................................................. 2
1 进程管理相关结构 ......................................................................................................... 2 2 进程与线程之间的关系 ................................................................................................. 4 3 进程创建 ......................................................................................................................... 5
三 进程调度 ............................................................................................................................ 14
1进程调度相关结构 ........................................................................................................ 14 2 优先级与负荷权重 ....................................................................................................... 16
2.1优先级的计算 ........................................................................................................... 16 2.2 负荷权重的计算 ...................................................................................................... 17
3核心调度器 .................................................................................................................... 18
3.1 周期性调度器 .......................................................................................................... 18 3.2 主调度器 ................................................................................................................. 19
4 完全公平调度类 ........................................................................................................... 22
4.1 数据结构 ................................................................................................................. 22 4.2 完全公平调度类操作方法 ........................................................................................ 22
4.2.1 虚拟时间计算 ................................................................................................ 22
4.2.2 延迟计算...................................................................................................... 23 4.2.3 完全公平调度类操作方法实现 ...................................................................... 25
4.2.3.1 时间更新.............................................................................................. 26 4.2.3.2 创建新进程时的处理 ............................................................................ 28 4.2.3.3 将进程插入就绪队列 ............................................................................ 29
5 实时调度类 ................................................................................................................... 31
5.1 数据结构 ................................................................................................................. 31 5.2 实时调度类 ............................................................................................................. 32
6 负载均衡 ....................................................................................................................... 34
四 程序的运行 ........................................................................................................................ 37
1 可执行文件 ................................................................................................................... 37 2 程序的运行 ................................................................................................................... 38
linux进程管理分析 陈颖
一 进程管理原理分析概述
进程创建之后将被插入就绪队列接受调度投入运行,新进程运行之初,它的地址空间与其父进程相同,为运行新的程序它需要调用exec函数将新的可执行程序加载到进程空间,从而运行不同于父进程的程序。
进程创建:
用户空间的进程创建是通过调用系统调用fork、clone、vfork来实现 的,对于这些系统调用内核都是通过函数do_fork来处理的,它们的不同在 于它们传入的参数clone_flags不一样,它决定了新进程与父进程共享那些资 源。在函数do_fork中,为新进程分配了一个进程描述结构task_struct,并且为新进程分配了两页的栈空间,在栈空间的底部存放着一个thread_info结构, 该结构保存了特定于CPU的一些信息。然后再clone_flags中标志的位共享或是重 新分配一些资源,初始化一些调度相关的信息。最后将新进程插入就绪队列 等到调度。
进程调度:
进程可能处于以下几种状态:运行,等待,睡眠。运行状态即是此刻正在执行;等待状态就是正出于就绪队列中等待调度;睡眠状态不在就绪队列中,在没被唤醒之前不能得到调度。就绪队列是管理等待调度进程的结构。
一个CPU只有一个就绪队列rq,然而这个就绪队列并不直接管理进程,它又包含子就绪队列,例如完全公平就绪队列、实时就绪队列。进程的调度主要基于两个调度器:周期性调度器和主调度器。周期性调度器是在内核频率HZ中断中统计一些进程时间信息,并判断进程是否需要调度,如果需要就发起调度请求;主调度器是进程主动放弃CPU控制权,切换到其他进程运行,在住调度器中做了很多进程上下文切换的工作。
上层调度器并不直接对进程进行操作,而是通过进程所属调度类对进城进行操作。调度类主要有两种:完全公平调度类、实时调度类。内核中用0到139来表示进程优先级,0到99供实时进程使用,100到139供普通进程使用,在用户空间对应-20到19的nice值。完全公平调度类提供类一些方法,这些方法对完全公平队列上的进程进行插入、移除、时间统计等操作。在完全公平队列上进程是按虚拟时间大小通过红黑树排序的,虚拟时间越小的进程排在红黑树越靠左边,得到运行的可能就越大。虚拟时间跟进程权重紧密相关,而权重又跟进程优先级相对应。随着时间的推移,权重越大的进程虚拟时间增加越慢,向右移动的速度就越慢,得到调度的机会就越多,所以优先级越高的进程得到运行的机会就越大。实时进程类与完全公平调度类大体相同,不同的是在实时就绪队列上,有100个链表头,分别挂接100个不同优先级的实时进程。选择下一个进程运行时,从小到大扫描链表找出第一个进程运行。实时进程包含SCHED_RR和SCHED_FIFO,它们在同优先级队列中都是先进先出,不过SCHED_RR有时间片,时间片用完后重新分配时间片将进程放入优先级队列尾,然后就调度其他进程运行。SCHED_FIFO进程一旦调度运行就可以一直运行下去,除非主动放弃CPU控制权。
在SMP多处理器系统中还要实现负载均衡,将忙碌CPU队列上的进程移动到空闲CPU上。 运行新程序:
第 1 页 共 40 页
linux进程管理分析 陈颖
新进程运行之初,它的地址空间与其父进程相同,为运行新的程序它需要调用exec函数将新的可执行程序加载到进程空间,从而运行不同于父进程的程序。
二 进程创建
1 进程管理相关结构
task_struct是一个庞大的结构体,它包含了进程管理的全部信息。这些信息主要包含以下几个方面: ※状态和执行信息,(如带决信号、使用的二进制格式、进程ID、指向父进程以及其他有关 进程的指针、优先级和程序执行有关的时间信息); ※虚拟内存信息;
※用户ID、组ID以及权限;
※进程处理的文件和对应的文件系统信息; ※线程相关的信息; ※进程间通信相关信息; ※进程所用的信号处理程序;
struct task_struct {
volatile long state; 进程状态 void *stack; 指向thread_info结构 atomic_t usage;
unsigned int flags;
unsigned int ptrace; 进程跟踪相关
......
int on_rq; 被插入进程调度队列中时置1
int prio, static_prio, normal_prio; 进程优先级、静态优先级、普通优先级 unsigned int rt_priority; 事实进程优先级
const struct sched_class *sched_class; 指向调度类指针
struct sched_entity se; 每个普通进程或是调度组都抽象成一个调度实体se struct sched_rt_entity rt; 实时进程调度实体
......
unsigned int policy; 调度策略SCHED_NORMAL、SCHED_RR和SCHED_FIFO等 int nr_cpus_allowed;
cpumask_t cpus_allowed;在多处理器上,用于限制进程可以在哪些CPU上运行 ......
struct mm_struct *mm, *active_mm; 进程虚拟存储空间 ......
int exit_state; 进程退出状态
int exit_code, exit_signal; 进程退出时发送的信号 int pdeath_signal; 父进程终止时发送的信号
......
pid_t pid; 进程全局ID(对应的有PID命名空间中的局部ID)
第 2 页 共 40 页
linux进程管理分析 陈颖
pid_t tgid; 线程组ID
......
struct task_struct __rcu *real_parent; 指向真实的父进程(如果父进程终止了,该进程被寄养到其他进程,它的当前父进程由parent指向)
struct task_struct __rcu *parent;进程退出时信号SIGCHLD所发送的进程。 下面几个字段都成了进程的关系图
struct list_head children; 本进程的所有子进程 struct list_head sibling; 兄弟进程
struct task_struct *group_leader; 指向进程组的组长进程
......
这个 task_struct可能是一个普通进程,也可能是个组长进程或是会话首进程。 struct pid_link pids[PIDTYPE_MAX];
struct list_head thread_group;
struct completion *vfork_done; 在有vfork创建进程时该完成量保证了子进程先运行 ......
unsigned long nvcsw, nivcsw; 自愿/非自愿上下文切换计数 struct timespec start_time; 进程创建时间 struct timespec real_start_time; /* boot based time */ ......
const struct cred __rcu *real_cred; 进程权能相关 const struct cred __rcu *cred;
char comm[TASK_COMM_LEN]; 可执行文件名 ......
struct thread_struct thread; 处理器特有数据 struct fs_struct *fs; 文件系统信息
struct files_struct *files; 打开的文件信息 struct nsproxy *nsproxy; 命名空间
struct signal_struct *signal; 进程信号描述符
struct sighand_struct *sighand; 进程信号处理函数
sigset_t blocked, real_blocked; 被阻塞信号的掩码,real_blocked表示临时掩码 sigset_t saved_sigmask; /* restored if set_restore_sigmask() was used */ struct sigpending pending; 存放挂起信号
......
};
无论是进程还是线程它们都有一个task_struct结构和1页或2页的栈空间,在栈空间的底部有一个结构体thread_info,叫做线程描述符,其各成员含义说明如下: struct thread_info {
unsigned long flags;
int preempt_count; 为0的时候内核可执行抢占否则不能 mm_segment_t addr_limit; 指定了进程可以使用的虚拟地址的上限 struct task_struct *task; 指向进程的task_struct结构
第 3 页 共 40 页
正在阅读:
linux进程管理分析09-12
教育科学学院-朋辈心理辅导大赛策划案06-12
大人物和普通个人在历史发展中的作用06-11
2017年高考物理高考题和高考模拟题分项版汇编专题03机械能和动量含解析09-08
高中生物探究 探索生长素类似物促进插条生根的最适浓度教案 新课标 人教版 必修311-29
钓鱼注意事项09-04
先进党员村支部书记个人典型材料01-10
中科院历年试题09-10
中医基础理论试题08-14
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 进程
- 分析
- linux
- 管理
- 医学美学概论-教案汇总
- 我用了五个办法,让妹子放心跟我回家
- 专题2.3 热点题型二 分析作品情感含蕴主旨-奇招制胜2017年高考语文热点+题型全突破 含解析 精品
- 《国家税收》练习题
- 苏教版九上语文复习第五次默写
- 2018烟台化学中考试题
- “国学达人”挑战赛题库
- 初中学生的案例分析
- 2018-2024年中国住宅建筑建设行业市场运营态势研究报告(目录) - 图文
- 高三数学第一轮复习 二次函数的最值问题讲义(五)
- 信访稳控工作应急预案
- 钢笔字的训练方法 - 图文
- 定标报告(范本)
- 将净利润调节为经营活动现金流量净额的三种方法财会实务精品文档
- 上海市实验学校2013届第二次月考
- 管理学精要
- 统计学参考答案(2011-2012-1.A)
- 九年级语文上册 6我的叔叔于勒时学案无答案 苏教版
- 关爱学生,为人师表
- 世界著名海峡、运河地理复习精品 - 附地图