宋宝华Linux培训笔记-Linux进程管理
1、cpu进程状态
linux中进程状态如下图:
浅度睡眠为进程等待资源或中断响应,即使资源没有拿到也可以被唤醒;深度睡眠为进程等待资源,拿到资源后进入就绪状态。
僵死状态为进程死亡,但还没有被父进程执行wait操作,此时进程中只剩下task_struct,其他资源已经被释放,当父进程执行完wait操作后,子进程的僵死状态被清除。如果一个父进程死了,那该父进程下面的子进程将被托孤给离该父进程最近的收割进程,该进程内含有wait操作,监控子进程。
暂停状态是进程暂时被挂起,ctrl+Z可以暂停进程,按fg继续执行进程。可用于作业控制。
2、进程描述符
Linux进程描述符采用task_struct结构体描述,该结构体内含有五个部分:
Linux中针对task_struct进行调度。多线程应用中同一个进程创建的多个线程它们pid和进程的pid一样,但是每个线程拥有不同的tid。
Linux对于进程描述符有三种表现形式,task_struct双向链表,进程树,哈希表。可以通过这三种数据格式描述同一个进程。
3、linux进程创建
创建进程有三种方式
Fork 创建子进程,将父进程的资源复制一份给子进程,task_struct内五项内容不共享,fork的返回值为0,必须要有mmu进行页表管理
Vfork 创建子进程,父进程和子进程共享mm,其他四项内容不共享,没有mmu的方式下使用
Clone(pthread_create) 创建子线程,资源共享,task_struct内五项内容共享。
三个函数最终都是调用do_fork。
在fork时,父进程和子进程最终会有不一样的物理地址,必须要有mmu才行。
4、进程生命周期
系统上电以后最早的进程为进程0,当进程0创建完进程1(init)后变化为idle进程,该进程在linux中优先级最低,当执行到该进程时,表明系统很闲,进入省电状态WFI
5、linux进程调度
进程类型分为I/O消耗性,CPU消耗性。
I/O消耗性是能够及时响应I/O中断消息,用户体验好,类似于手机。
CPU消耗性是运算好,用户体验差。
一个进程是I/O消耗性或是CPU消耗性只有进程运行过程中才能知道,不是由用户创建时选定的。
6、linux进程调度
linux进程分为两个类别
0-99采用SCHED_FIFO或SCHED_RR模式,直接抢占,数字越小优先级越高(linux内部用99-数字),现在也可以设定rt_period_us或rt_runtime_us,指定抢占式进程最多不超过一个固定值,比如1ms中最多执行0.95ms
100-139采用SCHED_OTHER模式,非抢占,每个进程都有时间来执行,通过nice来判断进程优先级。
Nice -20 对应 100,优先级高,每次被分到更多的时间片执行
Nice 19 对应 139,优先级低,分到的时间片较少
可以通过renice –n -5 –g pidof设定某个pidof的nice值。
切换FIFO RR或者OTHER命令为
Chrt –a –f –p 50 pid 修改为FIFO
Chrt –a –r –p [1..99] pid 修改为RR
Chrt –a –o –p -0 1024 修改为OTHER
后续linux采用CFS红黑树方式进行OTHER内存调度,每次选取VT值最小的进程进行调度
进程的virtual time=physical time/权重
权重和nice相关,nice值越小权重越大,得到的vt越小,但是如果pt执行的次数越多,pt越大,vt也会变大。
新内核中加入组的概念,不同组直接采用CFS调度,组内采用CFS调度。加入组的概念后可以进行CPU流量控制,每个组设置不同,获得的CPU资源不同。
创建组:/sys/fs/cgroup/cpu内创建mkdir A,mkdir B
将进程加入该组:sh –c ‘echo pod > cgroup.procs’
修改组内的配置 sh –c ‘echo 100 > cpu.shares’ shares越大,该组cpu拿到的时间片越多
Sh –c ‘echo 1000> cpu_cfs_quota_us’ 值越大,该组cpu每一个时间片内拿到的时间越多
7、smp负载均衡
负载均衡为硬件自动实现,RR和FIFO自动均分到每个核上执行,每个核进行推拉操作获取进程,每个核的调度算法都一样。可以通过命令指定将任务放到哪个核上。
Pthread_attr_setaffinity_np()内含有设置CPU掩码,指定在哪个CPU上面跑。0X1为CPU1,0x2为CPU2。
宋宝华Linux培训笔记-Linux进程管理相关推荐
- linux内核笔记二 进程管理
三.系统的进程管理 1.系统的进程运转方式 系统时间 (jiffies 系统滴答) cpu内部有一个RTC(系统的定时器),会在上电的时候调用mktime函数算出1970年一月一日0时开始到当前开机点 ...
- 宋宝华:slab在内核内存管理和用户态Memcached的双重存在
很多基础的概念,将跨越软件的层次而存在.比如slab,对于内核人员,我们都知道slab是buddy之上的一层. 因为buddy作为Linux内核最底层的内存管理器,它分配1页,2页,4页,2^n页,但 ...
- 宋宝华Linux培训笔记-Linux多线程
1.POSIX标准多线程 发送给进程下一组线程的信号将被共享,被其中任意一个线程处理.同一进程创建的线程同生死,如果收到一个kill信号,这一组task_struce都会退出. 2.NPTL模型 内核 ...
- 【Linux 内核笔记】进程管理
文章目录 进程创建 进程终结 孤儿进程 小结 clone()-fork()-exec()-exit() 子进程结束ZOMBIE 父进程wait4() 进程描述符task_struct进程所有信息 由t ...
- Linux学习笔记_12_进程管理(ps, top)服务管理(service)查看系统网络(netstat)
1. 进程的基本介绍 在 LINUX 中, 每个执行的程序(代码) 都称为一个进程. 每一个进程都分配一个 ID 号. 每一个进程, 都会对应一个父进程, 而这个父进程可以复制多个子进程. 例如 ww ...
- 宋宝华:评Linux 5.13内核
目录 Misc cgroup Landlock安全模块 系统调用的堆栈随机化 printk无锁ringbuffer的进一步优化 BPF可调用内核函数 公共的IO PAGE Fault支持 Linux ...
- 宋宝华:LEP(Linux易用剖析器) 是什么,为什么以及怎么办(2)
LEP(LINUX EASY PROFILING) 是Linuxer之LEP项目组(Barry Song,Mac Xu,陈松等以及陈莉君教授/西邮Linux 3+1实验室)正在致力于打造的一个开源项目 ...
- linux pdf 宋宝华,51CTO博客-专业IT技术博客创作平台-技术成就梦想
原创 宋宝华 Linux阅码场 2018-04-10 前言 网上关于BIO和块设备读写流程的文章何止千万,但是能够让你彻底读懂读明白的文章实在难找,可以说是越读越糊涂! 我曾经跨过山和大海 也穿过人山 ...
- 宋宝华: 用off-cpu火焰图进行Linux性能分析
在<宋宝华:火焰图:全局视野的Linux性能剖析>一文中,我们主要看了on-cpu火焰图,理解了系统的CPU的走向的分析.但是,很多时候,单纯地看on-cpu的情况(什么代码在耗费CPU) ...
最新文章
- 全球 35 大开源公司都在这里!
- AD5933测量容性负载时的神秘振荡信号
- java static 变量 初始化一次_关于java static变量初始化的疑问
- 【软件开发底层知识修炼】二十五 ABI之函数调用约定二之函数返回值为结构体时的约定
- java 调用dll内存泄露_对 精致码农大佬 说的 Task.Run 会存在 内存泄漏 的思考
- 12步让你的web1.0变成web2.0
- Ubuntu 禁止集成noueavu驱动并安装NVIDIA显卡驱动
- 谷歌最新版本浏览器如何兼容flash插件
- 软考试题合格率如何?
- 路由器WDS桥接教程
- [转]一个计算机高手的成长
- 一个公司存在不同职位,不同职位计算工资的方法也不相同。工资可能是固定的,也可能根据销售额或工作量来计算。假设公司有三种职务:经理、计件工人和计时工人:他们的工资组成分别为:
- 内网穿透软件对比——cpolar : 花生壳(下)
- oracle配置话清单,oracle 几个常用话语
- 如何提高接口自动化测试的有效性覆盖和案例有效性
- python N位水仙花数
- VsCode 使用less
- SnapMotion for Mac(视频截图工具)
- ERR_SPDY_PROTOCOL_ERROR错误解决
- 副业项目做什么比较靠谱,如何知道自己适合做什么?
热门文章
- 如何编写无法维护的代码
- 计算机内存不足黑屏怎么办,win10内存不足会黑屏吗_win10电脑内存不足黑屏了怎么办...
- 每日新闻:华为获首个微模块产品PUE测试证书;Linux发布Acumos AI开源架构平台;商汤技联手华侨城中学打造智能实验学校...
- 关于图片转base64的加密解密
- 怎么更新opengl.dll文件_iOS 13更新体验:测试版升级教程!
- 如何把很多照片拼成一张照片_如何能把多张照片拼凑在一张上图片上
- 中国医科大学计算机试题,中国医科大学《计算机应用基础》在线作业和参考答案...
- 爬虫爬取豆瓣电影排行,保存到excel和SQLite
- 群晖经典第三方套件_使用群晖第三方套件进行IPV6的DDNS
- Block Recurrent Transformer:结合了LSTM和Transformer优点的强大模型