【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
进程、系统性能和计划任务
- 进程管理和内存分配
- 进程管理工具
- 进程管理和性能相关工具
- 进程信号和前后台管理
- 计划任务实现
进程管理和内存分配
进程概念
- 内核功用:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等
- Process: 运行中的程序的一个副本,是被载入内存的一个指令集合
- 进程ID(Process ID,PID)号码被用来标记各个进程
- UID、GID、和SELinux语境决定对文件系统的存取和访问权限
- 通常从执行进程的用户来继承
- 存在生命周期
- task struct:Linux内核存储进程信息的数据结构格式
- task list:多个任务的的task struct组成的链表
- 进程创建:
- init:第一个进程
- 进程:都由其父进程创建,父子关系,CoW
fork(), clone()
进程,线程和协程
进程相关概念
- Page Frame: 页框,用存储页面数据,存储Page 4k
- 物理地址空间和线性地址空间
- MMU:Memory Management Unit 负责转换线性和物理地址
- TLB:Translation Lookaside Buffer 翻译后备缓冲器
- 用于保存虚拟地址和物理地址映射关系的缓存
- LRU:Least Recently Used 近期最少使用算法,释放内存
用户和内核空间
进程的基本状态和转换
进程的基本状态
- 创建状态:进程在创建时需要申请一个空白PCB(process control block进程控
制块),向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完
成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态 - 就绪状态:进程已准备好,已分配到所需资源,只要分配到CPU就能够立即运行
- 执行状态:进程处于就绪状态被调度后,进程进入执行状态
- 阻塞状态:正在执行的进程由于某些事件(I/O请求,申请缓存区失败)而暂时
无法运行,进程受到阻塞。在满足请求时进入就绪状态等待系统调用 - 终止状态:进程结束,或出现错误,或被系统终止,进入终止状态。无法再执行
状态之间转换六种情况
- 运行——>就绪:1,主要是进程占用CPU的时间过长,而系统分配给该进程占
用CPU的时间是有限的;2,在采用抢先式优先级调度算法的系统中,当有更高
优先级的进程要运行时,该进程就被迫让出CPU,该进程便由执行状态转变为
就绪状态 - 就绪——>运行:运行的进程的时间片用完,调度就转到就绪队列中选择合适
的进程分配CPU - 运行——>阻塞:正在执行的进程因发生某等待事件而无法执行,则进程由执
行状态变为阻塞状态,如发生了I/O请求 - 阻塞——>就绪:进程所等待的事件已经发生,就进入就绪队列
- 以下两种状态是不可能发生的:
- 阻塞——>运行:即使给阻塞进程分配CPU,也无法执行,操作系统在进行调
度时不会从阻塞队列进行挑选,而是从就绪队列中选取 - 就绪——>阻塞:就绪态根本就没有执行,谈不上进入阻塞态
- 阻塞——>运行:即使给阻塞进程分配CPU,也无法执行,操作系统在进行调
LRU算法
- 假设序列为 4 3 4 2 3 1 4 2
物理块有3个,则- 第1轮 4调入内存 4
- 第2轮 3调入内存 3 4
- 第3轮 4调入内存 4 3
- 第4轮 2调入内存 2 4 3
- 第5轮 3调入内存 3 2 4
- 第6轮 1调入内存 1 3 2
- 第7轮 4调入内存 4 1 3
- 第8轮 2调入内存 2 4 1
IPC进程间通信
- IPC: Inter Process Communication
- 同一主机:
- pipe 管道
- socket 套接字文件
- signal 信号
- shm shared memory
- semaphore 信号量,一种计数器
- 不同主机:
- socket IP和端口号
- RPC remote procedure call
- MQ 消息队列,如:Kafka,RabbitMQ,ActiveMQ
- 同一主机:
进程优先级
- 进程优先级:
- 系统优先级:数字越小,优先级越高
0-139:各有140个运行队列和过期队列
实时优先级: 99-0 值最大优先级最高
nice值:-20到19,对应系统优先级100-139 - Big O:时间复杂度,用时和规模的关系
O(1), O(logn), O(n)线性, O(n^2)抛物线, O(2^n)
- 系统优先级:数字越小,优先级越高
进程状态
- Linux内核:抢占式多任务
- 进程类型:
- 守护进程: daemon,在系统引导过程中启动的进程,和终端无关进程
- 前台进程:跟终端相关,通过终端启动的进程
- 注意:两者可相互转化
- 进程状态:
- 运行态:running
- 就绪态:ready
- 睡眠态:
- 可中断:interruptable
- 不可中断:uninterruptable
- 停止态:stopped,暂停于内存,但不会被调度,除非手动启动
- 僵死态:zombie,结束进程,父进程结束前,子进程不关闭
来源:oschina
链接:https://my.oschina.net/u/4270793/blog/3143218