内核的功用:
进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等
进程的概念:
Process:
运行中的程序的一个副本,是被载入内存的一个指令集合
进程ID(Process ID ,PID )号码被用来标记各个进程
UID 、GID 、和SELinux 语境决定对文件系统的存取和访问权限
通常从执行进程的用户来继承
存在生命周期
进程中可以包括一个或多个线程(thread),内存空间共享
task struct(结构):
Linux内核存储进程信息的数据结构格式
task list:
多个任务的task struct 组成的链表
进程创建:
init :第一个进程
父子关系
进程:都由其父进程创建,CoW(写时复制),fork(), clone()
进程优先级:
系统优先级:
数字越小,优先级越高
0-139(CentOS4,5)
各有140个运行队列和过期队列
0-98 ,99(CentOS6)
实时优先级: 99-0
值越大优先级越高
静态优先级:100-139
进程默认启动时的nice 值为0 ,优先级为120
只有根用户才能降低nice 值(提高优先性)
nice 值(动态优先级):
-20到19,对应系统优先级100-139 或99
BigO:
时间复杂度,用时和规模的关系
O(1), O(logn), O(n) 线性, O(n^2) 抛物线, O(2^n)
时间片:
0-99的时间片到了,还继续运行,而99以后,时间片到后,就开始等待
进程优先级调整:
进程优先级通过nice值进行调整,进程优先级=老的进程的优先级+nice值。
nice值是有正负的,当给定的nice 值为负数时,那么新的进程优先级值就越小,进程就被优先处理。
nice值在-20~19,root用户可以随意调整自己和其他用户进程的nice值,且范围为-20到19。
普通用户只能调整自己进程的nice值,且范围为0-19,也就是说普通用户只能减少自身进程的优先级,而不能增大优先级,这主要是为了避免用户抢占资源。
需注意的是,对于普通用户来说,你当前进程的nice值为5,那么他所能调整的nice值范围只能是5到19,而且不能小于5的值。
调整进程的nice值的方法:
1、对于尚未启动的进程
nice -n N command ##N表示nice值,范围-20~19
2、对于已经启动并处于运行中的进程
renice -n N PID
3、如果修改一个进程的nice值,那么它的子进程的nice值也会继承其新的nice值,也就是说nice值可以在父进程向子进程传递。
进程内存:
Page Frame:
页框,用存储页面数据,存储Page 4k
LRU :
Least Recently Used ,近期最少使用算法, 释放内存物理地址空间和线性地址空间
MMU:
Memory Management Unit,负责转换线性和物理地址
TLB:
Translation Lookaside Buffer,翻译后备缓冲器,用于保存虚拟地址和物理地址映射关系的缓存
IPC:
Inter Process Communication(进程间的通信)
同一主机:
使用signal(信号)
shm:shared memory(共享内存空间)
semaphore(旗语):信号量,一种计数器
不同主机:
使用rpc(remote procedure call(远程过程调用))
socket(套接字):IP 和端口号
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
进程类型:
根据进程与系统终端的关系:
守护进程:
daemon,在系统引导过程中启动的进程,和终端无关进程,(window中叫作服务)
前台进程:
跟终端相关,通过终端启动的进程
注意:两者可相互转化
根据进程占用资源的多少:
cpu密集型,是对cpu 占用率高的进程, CPU-Bound :CPU 密集型,非交互
IO密集型,是等待i/o时间长的进程,IO-Bound :IO 密集型,交互
进程状态:
Linux内核进行的是抢占式多任务
运行态:running
就绪态:ready
睡眠态:
可中断:interruptable
不可中断:uninterruptable
停止态:stopped,暂停于内存,但不会被调度,除非手动启动
僵死态:zombie,结束进程,父进程结束前,子进程不关闭
作业管理
登录系统后的每个工作进程都是当前bash的子进程,每个子进程也能同时运行。
Linux 的作业控制
前台作业:通过终端启动,且启动后,在停止之前一直占据终端;
后台作业:可通过终端启动,但启动后即转入后台运行(释放终端)
注意:
此两类方式相关作业,仍然与终端相关;这意味着,终端终止,将会导致与此终端相关的所有作业被终止。
后台作业虽然被送往后台运行,但其依然与终端相关;退出终端,将关闭后台作业。
让作业运行于后台
运行中的作业: Ctrl+z --->后台休眠
后台休眠变成后台执行
jobs
bg jobid
后台执行变位前台执行
jobs
fg jobid
尚未启动的作业: COMMAND &
在6上,终端断开后,仍然执行;
而在7上,终端断开后,就不再执行了。
作业控制:
# fg [JOB_NUM]:把指定的后台作业调回前台
# bg [JOB_NUM]:让送往后台的作业在后台继续运行
# kill [JOB_NUM]:终止指定的作业
如果希望送往后后,剥离与终端的关系
#nohup COMMAND &
nohup会stdout到nohup.out文件中,但可以重定向到/dev/null:nohup COMMAND & >/dev/null &
#screen;COMMAND(这是切换了个终端,然后执行命令)
创建新screen 会话
screen –S [SESSION]
加入screen 会话
screen –x [SESSION]
退出并关闭screen 会话
exit
剥离当前screen 会话
Ctrl+a,d
显示所有已经打开的screen 会话
screen -ls
恢复某screen 会话
screen -r [SESSION]
程序的并行运行
方法1
vi all.sh
f1.sh&
f2.sh&
f3.sh&
方法2
(f1.sh&);(f2.sh&);(f3.sh&)
方法3
{ f1.sh& f2.sh& f3.sh& }
管理临时文件
CentOS6 使用/etc/cron.daily/tmpwatch定时清除临时文件
CentOS7 使用systemd-tmpfiles-setup 服务实现
配置文件:
/etc/tmpfiles.d/*.conf
/run/tmpfiles.d/*.conf
/usr/lib/tmpfiles/*.conf
/usr/lib/tmpfiles.d/tmp.conf
/tmp 1777 root root 10d
/var/tmp 1777 root root 30d
命令行使用systemd-tmpfiles命令进程管理临时文件