开启辅助访问 切换到窄版

打印 上一主题 下一主题

linux进程管理和内存分配

[复制链接]
作者:新天地1688 
版块:
嵌入式操作系统 linux 发布时间:2020-5-4 15:18:23
8780
楼主
跳转到指定楼层
| 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、进程相关概念
进程:正在运行中的程序
内核功用:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等
Process:运行中的程序的一个副本,是被载入内存的一个指令集合
进程 ID(Process ID,PID)号码被用来标记各个进程
通常从执行进程的用户来继承,存在生命周期
task struct 任务结构表:Linux 内核存储进程信息的数据结构格式
task list 任务列表:多个任务的 task struct 组成的链表
进程创建:
都由其父进程创建,父好关系,CoW(写时复制,不发生改变时父子都指向同一文件;发生改变时,则复制)
init:第一个进程(centos6:init,centos7:systemd)
守护进程:随着计算机的开启、关闭而随之开启、关闭。
2、进程,线程和协程:


注:一个进程里至少有一个线程;线程之间由操作系统进行调度,包括进程中使用的资源也由操作系统进行调度;协程相当于线程中的语句块,由线程控制。
3、Page Frame:页框,用存储页面数据,存储 Page,每个进程要使用的分配空间
虚拟内存(线性内存):进程运行的时候以为自己拥有了全部的内存空间
物理地址空间和线性地址空间:
MMU:负责转换线性和物理地址(虚拟内存和物理内存)
TLB:翻译后备缓冲器,用于保存虚拟地址和物理地址映射关系的缓存
LRU:近期最少使用算法,释放内存
4、用户空间和内核空间:


5、进程之间基本状态和转换:


创建状态:进程在创建时需要申请一个空白 PCB(进程控制块),向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态。
就绪状态:进程已准备好,已分配到所需资源,只要分配到 CPU 就能够立即运行。
执行状态:进程处于就绪状态被调度后,进程进入执行状态。
阻塞状态:正在执行的进程由于某些事件(I/O 请求,申请缓存区失败)而暂时无法运行,进程受到阻塞,在满足请求时进入就绪状态等待系统调用。
终止状态:进程结束,或出现错误,或被系统终止,进入终止状态,无法再执行。
状态之间转换六种情况:
运行 → 就绪:1,主要是进程占用 CPU 的时间过长,而系统分配给该进程占用 CPU 的时间是有限的;2,在采用抢先式优先级调度算法的系统中,当有更高优先级的进程要运行时,该进程就被迫让出 CPU,该进程便由执行状态转变为就绪状态。
就绪 → 运行:运行的进程的时间片用完,调度就转到就绪队列中选择合适的进程分配 CPU。
运行 → 阻塞:正在执行的进程因发生某等待事件而无法执行,则进程由执行状态变为阻塞状态如发生了 I/O 请求。
阻塞 → 就绪:进程所等待的事件已经发生,就进入就绪队列。
以下两种状态是不可能发生的:
阻塞 → 运行:即使给阻塞进程分配 CPU,也无法执行,操作系统在进行调度时,不会从阻塞队列进行挑选,而是从就绪队列中选取。
就绪 → 阻塞:就绪态根本就没有执行,谈不上进入阻塞态。
6、IPC 进程间通信:
同一主机:
pipe 管道,一个写入管道文件,一个读(单向)
socket 套接字文件,进程间交换数据(双工工作方式)
signal 信号
shm shared memory,共享内存
semaphore 信号量,一种计数器,分配资源
不同主机:
socket ip 和端口号
RPC 远程过程调用
MQ 消息队列,如:Kafka , RabbitMQ,ActiveMQ
7、进程优先级


实时进程(realtime),基于 FIFO 先进先出或 RR 轮询
非实时进程:nice 按时间片分配进程
取 139 个队列,将相同优先级的放在一个队列中,运行一个时间片后从运行队列转至过期队列。轮回运行队列和过期队列互调,再运行。


进程优先级:
系统优先级:数字越小,优先级越高0-139:各有 140 个运行队列和过期队列实时优先级:99-0 值最大优先级最高
nice 值:-20 到 19,对应系统优先级 100-139
Big 0:时间复杂度,用时和规模的关系
0(1),O(logn),O(n)线性,O(n^2)抛物线,O(2^n)
8、进程状态:
Linux 内核:抢占式多任务,按时间片分配任务
进程类型:
守护进程:daemon,在系统引|导过程中启动的进程,和终端无关进程
前台进程:跟终端相关,通过终端启动的进程,用户执行命令等
注意:两者可相互转化
进程状态:
运行态:running
就绪态:ready
睡眠态:
可中断:interruptable
不可中断:uninterruptable
停止态:stopped,暂停于内存,但不会被调度,除非手动启动
僵死态:zombie,结束进程,父进程结束前,子进程不关闭
9、进程工具
9.1 系统管理工具:
进程的分类:
CPU-Bound:CPU 密集型,非交互
编译安装、大量计算等
IO-Bound:IO 密集型,交互
拷贝大文件等 DMA:直接内存访问
Linux 系统状态的查看及管理工具:
pstree,ps,pidof,pgrep,top,htop,glance,pmap,vmstat,dstat,kill,pkill,job,bg,fg,nohup
Linux 系统各进程的相关信息均保存在 /proc/PID 目录下的各文件中
9.2 进程管理工具 PS 详解:


ps [OPTION]... 支持三种选项: UNIX 选项 如-A -e BSD 选项 如 a GNU 选项 如--help
选项:默认显示当前终端中的进程 a 选项包括所有终端中的进程 x 选项包括不链接终端的进程 u 选项显示进程所有者的信息(有效用户) f 选项显示进程树,相当于--forest k|--sort 属性对属性排序,属性前加-表示倒序 o 属性...选项显示定制的信息 pid、cmd、%cpu、%mem L 显示支持的属性列





ps axo pid,%cpu,%mem,tty k %cpu -C cmdlist 指定命令,多个命令用,分隔,ps -C dd -L 显示线程 -e 显示所有进程,相当于-A -f 显示完整格式程序信息 -F 显示更完整格式的进程信息 -H 以进程层级格式显示进程相关信息 -u userlist 指定有效的用户 ID 或名称 -U userlist 指定真正的用户 ID 或名称 -g gid 或 groupname 指定有效的 gid 或组名称 -G gid 或 groupname 指定真正的 gid 或组名称 -p pid 显示指 pid 的进程 --ppid pid 显示属于 pid 的子进程 -M 显示 SELinux 信息,相当于 Z




PS 输出属性: VSZ:Virtual memory SiZe,虚拟内存集,线性内存 RSS:ReSident Size,常驻内存集 STAT:进程状态 R:running S:interruptable sleeping,可中断的休眠 D:uninterruptable sleeping,不可中断的休眠 T:stopped,停止态 Z:zombie,僵尸态 +:前台进程 |:多线程进程 L:内存分页并带锁 N:低优先级进程  /data/m.txt # 重定向找回文件

查看所有网络连接:
lsof -i -n
lsof -i@127.0.0.1
通过参数 -i 查看网络连接的情况,包括连接的ip、端口等以及一些服务的连接情况,例如:sshd等。也可以通过指定 ip 查看该 ip 的网络连接情况。
查看端口连接情况:
lsof -i :80 -n
通过参数 -i:端口 可以查看端口的占用情况,-i参数还有查看协议,ip的连接情况等
查看指定进程打开的网络连接:
lsof -i -n -a -p 9527
参数-i、-a、-p等,-i查看网络连接情况,-a查看存在的进程,-p指定进程
查看指定状态的网络连接:
lsof -n -P -i TCP -s TCP:ESTABLISHED
-n:no host names,-P:no port names,-i TCP指定协议,-s指定协议状态通过多个参数可以清晰的查看网络连接情况、协议连接情况等


15、进程管理工具
kill 命令:向进程发送控制信号,以实现对进程管理每个信号对应一个数字,信号名称以 SIG 开头(可省略),不区分大小写


显示当前系统可用信号:kill-I 或者 trap -l 常用信号: man 7 signal 0) 信号检查某个进程是否正常 1) SIGHUP 无须关闭进程而让其重读配置文件 2) SIGINT 中止正在运行的进程,相当于 Ctrl+C 3) SIGQUIT 相当于 ctrl+\ 9) SIGKILL 强制杀死正在运行的进程 15) SIGTERM 终止正在运行的进程,默认 18) SIGCONT 继续运行 19) SIGSTOP 后台休眠 指定信号的方法: (1)信号的数字标识:1,2,9 (2)信号完整名称:SIGHUP (3)信号的简写名称: HUP
示例: 先 ps aux 查到该进程 ID,kill -1 [进程 ID],发信号 kill -2 `pidof bc` # 中止 bc 程序 按 PID:kill [-SIGNAL] pid ... kill -n SIGNAL pid kill -S SIGNAL pid 按名称:killall [-SIGNAL] comm... # 例:killall httpd 按模式:pkill [options] pattern # 支持正则 -SIGNAL -u uid:effective user,生效者 -U uid:realuser,真正发起运行命令者 -t terminal:与指定终端相关的进程 -l:显示进程名(pgrep 可用) -a:显示完整格式的进程名(pgrep 可用) -P pid:显示指定进程的子进程


16、作业管理
Linux 的作业控制:
前台作业:通过终端启动,且启动后一直占据终端
后台作业:可通过终端启动,但启动后即转入后台运行(释放终端)
让作业运行于后台:
(1)运行中的作业:Ctrl+z,停止状态
(2)尚未启动的作业:COMMAND &
后台作业虽然被送往后台运行,但其依然与终端相关;退出终端,将关闭后台作业。如果希望送往后台后,剥离与终端的关系:
nohup COMMAND &> /dev/null & screen ; COMMAND
查看当前终端所有作业: jobs
作业控制:
fg [[%]JOB_NUM]:把指定的后台作业调回前台 bg [[%]JOB_ NUM]:让送往后台的作业在后台继续运行 kill [%JOB_ NUM]:终止指定的作业 killall -19 ping # 19 信号将后台变为后台休眠状态 killall -18 ping # 18 信号将后台休眠变为后台执行
并行运行:同时运行多个进程,提高效率


方法 1: vi all.sh f1.sh& f2.sh& f3.sh&
方法 2: (f1.sh&);(f2.sh&);(f3.sh&)
方法 3: { f1.sh& f2.sh& f3.sh& } { ping 127.1& ping 127.2& ping 127.3& }


原文:http://www.cnblogs.com/zyybky/p/12819564.html
作者:我听过

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表