内核功能:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等;
一、进程(Process)
进程:运行的程序;
进程编号:PID;
1.程序与进程关系
程序(磁盘文件)——进程(磁盘文件副本);
互斥机制(可能有):同一个程序——不允许开启多个进程;
2.以什么身份来运行程序
UID、GID、和SELinux语境决定对文件系统的存取和访问权限,通常从执行进程的用户来继承;
3.进程在内存中,存在生命周期;
4.进程之间以链表形式关联;
task struct:Linux内核存储进程信息的数据结构格式;
task list:多个任务的的task struct组成的链表;
二、创建进程
1.第一个进程(init)
centos7:第一个进程是systemd;
centos6:第一个进程是init;
进程:都由其父进程创建;父子关系;
创建方式:CoW——写时复制;
例子:100进程和101进程
没更之前,指向同一个空间;
更改后,100进程指向原来空间,101进程指向新开的子进程的空间;
三、进程优先级
Paste_Image.png
1.分类
system优先级:0(最高)——139(最低);数字越小,优先级越高;
realtime(实时)优先级——内核:99(最高)——0(最低);值越大,优先级越高;
nice优先级:-20(最高)——19(最低);nice值越大,优先级越小;
TOP(PR)优先级:RT——RT(最高)——0——39(最低)
例如:时间片
1s——5ms/时间片——200个时间片
1——150个——优先级高
2——50个——优先级低
各有140个运行队列和过期(等待)队列
Paste_Image.png
2.Big O
Big O:时间复杂度,用时和规模的关系;
O(1):无论规模多大,所耗时间相同;
O(logn),O(n)线性,O(n^2)抛物线,O(2^n)
Paste_Image.png
四、进程内存
1.Page Frame:页(框)~单位~内存空间~存储Page 4k;
2.LRU(Least Recently Used)
LRU:近期最少使用算法,释放内存;急需——放到内存里,不急需——释放内存;
Paste_Image.png
新数据放在最上面;
旧数据被新数据依次往下压;
旧数据被重新使用,就会回到最上面;
数据超过空间容量,就会丢弃旧数据;旧数据(不常用)优先淘汰;
设置:使用几次,优先调到最上面;
假设序列为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
3.物理地址空间和线性地址空间
MMU(Memory Management Unit):负责转换线性和物理地址;
TLB:保存虚拟地址和物理地址映射关系的缓存;
VSZ(Virtual memory SiZe):虚拟内存集——线性内存(操作系统许诺分配给你的内存空间);
RSS(ReSidentSize):常驻内存集(真正使用的内存空间);
Paste_Image.png
4.
(1)IPC(Inter Process Communication)
同一主机
signal:发信号;
shm:shared memory共享内存(oracle数据库);
semaphore:信号量,一种计数器;
Paste_Image.png
(2)rpc(remote procedure call)
不同主机
socket:IP和端口号;
Paste_Image.png
socket——基于远程主机(http成为主流);
Paste_Image.png
文件socket——基于本机
windows:"win键+R"——输入命令services.msc
Paste_Image.png
1——3——socket机制
1——2——文件socket机制
Paste_Image.png
五、进程状态
1.Linux内核:抢占式多任务(主流操作系统——抢占式);
2.进程类型
(1)守护进程(daemon):开机运行,和终端无关进程~ssh;
(2)前台进程(+):开机不运行,与终端相关,通过终端启动的进程~pstree;
前台执行程序:占用终端,不结束此进程,就不能运行其他程序;
注意:两者可相互转化;
(3)CPU-Bound:CPU密集型,非交互(CPU忙,不一定运行的程序多);
(4)IO-Bound:IO密集型,交互(磁盘的读写操作);
3.进程状态(STAT)
(1)运行态(R):running(内核)
(2)就绪态:ready
(3)睡眠态:可中断(S):interruptable~可唤醒
不可中断(D):uninterruptable~IO操作(磁盘读写)~CPU进程
(4)停止态(T):stopped,暂停于内存,但不会被调度;
可以手动启动,从上次停止的地方继续运行(备份);
程序1耗资源~~想运行程序2~~停止程序1,先运行程序2~~程序2运行完成~~运行程序1;
(5)僵死态(Z):zombie,结束进程,父进程结束前,子进程不关闭;
已死程序~占用资源,不释放资源;
解决方法:杀死父进程||重启;
4.
N:低优先级进程
<:高优先级进程
s:session leader,会话(子进程)发起者
l:多线程进程
TIME:累计时间片
进程(process):不同进程——不共享内存;
线程(thread):每个线程——相互独立、共享内存、协作;
实验:http~apache(观察进程的线程)
yum -y install httpd
systemctl start httpd
ps auxf|grep httpd = pstree -p 观察进程有多个线程
vim /etc/httpd/conf.modules.d/00-mpm.conf
更改文件:
LoadModule mpm_prefork_ 加#注释掉
LoadModule mpm_worker_ 去掉#,使之生效
systemctl restart httpd
pstree -p {}在pstree中是线程