进程: 是指一个具有独立功能的程序在一个数据集合上的一次运行活动,即每个程序模块和它执行时所处理的数据,组成了进程。
进程与程序的区别
1. 进程是动态的,程序是静态的
2. 进程有生命周期的,程序是永久的
3. 一个程序可以包含多个进程,一个进程也可以包含多个程序(调用其它程序)
一个程序是由指令加数据组成一个静态的文件放在外部存储上(如硬盘),在必要的时候,cpu运行这个程序,那么由cpu的控制指令从外部存储加载至内存,并且完成运算的这么一个过程,叫做进程,进程是有生命周期的。
线性内存:线性地址,在linux的32位系统中,逻辑上假设每个进程都是独占4G内存,其中 1G分配给内核使用,其余的3G内存由进程使用。而在真实的内存中就是把内存本身划分成一个个的页框,每个页框都是固定大小的存储单元(4K),当进程使用内存时,根据需要会分配给n个页框对应给虚拟地址的页面给进程使用,而且各个页框之间可能是不相临的,不连续的,但对进程本身来看,是连续的,保存存在数据结构中的内存。把线性地址中的页面映身到真实的物理地址,是MMU(Merrory Management Unit内存管理单元)的功能,为了改进虚拟地址到物理地址转换的速率,把每个页面转换后保存到缓存中去,这个过程叫TLB(后备缓冲器,或叫页面缓存)
进程切换,上下文切换(Context Switch): 在单核单个cpu当中,一次只能有一个任务在cpu中运行,当一个进程没有运行完成就进行任务切换。在切换时,一个进程存储在处理器各寄存器中的中间数据叫做进程的上下文,所以进程的 切换实质上就是被中止运行进程与待运行进程上下文的切换。在进程未占用处理器时,进程 的上下文是存储在进程的私有堆栈中的。
保存现场:在进程切换前,把进程A的当前运行信息,如程序执行到的当前位置,程序状态字,所有的寄存器值保存到进程A的PCB(Process Control Block)中。
恢复现场:从进程B的PCB中获取进程的执行信息,将这些信息写入相应的寄存器中,程序计数器指向进程B将执行的下一条指令。进程B可能第一次开始执行,也可能是被中断过的进程,恢复执行。不论是哪种情况,进程B的执行信息都能在其PCB中找到。
进程切换与模式切换: 进程切换是作用于进程之间的一种操作。当分派程序收回前进程的CPU并把它分派给某个就绪进程时,叫进程切换。 模式切换是进程内部所引用的一种操作。当用户程序转入系统调用如I/O操作,或系统调用转入程序时,叫模式切换。进程切换一定会有模式切换,模式切换就不一定有进程切换。
进程所拥有的常见状态:
Stopped : 停止状态
Ready : 就绪状态,准备运行
Running(Executing) : 正在运行(执行)状态
Sleeping : 睡眠状态,睡眠状态有两种;
Uninterruptible Sleeping: 不可中断睡眠状态 当一个进程需要调用额外的I/O资源(硬盘资源)时,由于I/O资源速度太慢,进程一定会转入睡眠状态,当I/O没有执行完时,进程不可以再被调入CPU执行,叫不可中断睡眠状态
Interruptible Sleeping : 可中断睡眠状态 当一个进程不是由于额外I/O进入睡眠状态,而时处于随时可以唤醒状态,叫可中断睡眠状态
Zombie : 僵死进程,正常执行完成的进程,但内存没有被释放的进程。除了INIT进程外,每个进程都有其父进程,当进程结束时由父进程负责回收其子进程的资源,如果当父进程意外终止时,子进程无法释放其所占的资源,叫做Zombie。
进程优先级:在linux中有0-139共140个优先级,数字越小,优先级越高。其中0-99的优先级是由内核调整的,100-139可以由用户调整 nice(-20 -- 19)值来调整优先级,普通用户只能调大nice值用来降低其优先级,root用户可以调整 对应的nice值来提高或降低进程的优先级。一般默认进程的nice值是0。
进程管理命令:
pstree : 进程树,显示以树结构的进程列表。用这个命令可以了解进程的层次结构。如图所示,init进程是第一个进程
ps : Process Stat 显示系统当前进程状态的命令;
PID : 进程ID,进程开始后指派给此进程的唯一标识符。PPID:父进程ID,创建了当前进程的父进程的PID。
COW : copy on write 写时复制,父进程创建子进程时,为了推迟甚至避免拷贝数据的技术,内核此时并不复制整个进程的地址空间,而是让父子进程共享同一个地址空间。只 用在需要写入的时候才会复制地址空间,从而使各个进程拥有各自的地址空间。也就是说,资源的复制是在需要写入的时候才会进行,在此之前,只有以只读方式共 享。这种技术使地址空间上的页的拷贝被推迟到实际发生写入的时候。
ps命令的参数:
a : 显示所有跟终端有关的进程
u:显示用户信息,以用户为中心显示进程的想在关信息
x: 显示所有跟终端无关的进程
命令显示效果如图
PID 进程号 VSZ 虚拟内存集 RSS 常驻内存集
TTY 显示与终端相关的信息 ?表示与终端无关, TIME 运行时长
STAT 进程状态 TIME 运行时长 COMMAND 进程命令
ps 的另外一组参数 -elf
PRI 显示的是进程的优先级 NI nice值,可以调整nice值来更新进程的优先级
PSR 运行在哪个CPU上
top 命令: 显示正在运行的系统的进程的实时视图,默认每隔5秒钟刷新一次
top 前五行是统计信息区,是系统整体的统计信息
1. 第一行是任务队列信息,和uptime 命令的执行结果,显示当前时间,up 运行时间,user 当前登陆用户,load average 系统负载,即任务队列的平均长度。三个值为1min 5min 15min 钟前到现在的平均值。
2. 第二、三行为进程和CPU信息,当有多个CPU时,这些内容会超过两行,按数字1 可以展开每个CPU的信息,不展开显示的是CPU的平均值。
Tasks 进程总数 running 正在运行的进程数 sleeping 睡眠的进程数
stopped 停止的进程数 zombie 僵死的进程数 CPU(s):0.0% us 用户空间占用的cpu百分比(平均值) sy 内核空间占用cpu百分比 ni 用户进程空间内改变过优先级的进程占用cpu百分比 id 空闲cpu 百分比 wa 等待I/O所未CPU时间百分比
hi 硬件中断所占cpu时间百分比 st 虚拟机所占cpu 时间百分比
3. 第四、五行为内存信息
Mem 物理内存总量 used 使用的物理内存总量 free 空闲内存总量 buffers 用做内核缓存的内存量
Swap 交换区总量 used 使用的交换区的总量 free 空闲交换区总量 cached 缓冲的交换区的问题。
进程信息:
PID USER PR(优先级) NI VIRT(虚拟内存级) RES(常驻内存级) SHR(共享内存) S(状态) %CPU %MEM TIME+(进程所占CPU的时间总计,单位是百分之1秒) COMMAND (命令名/命令行)
top命令参数
-d # : 指定信息刷新时间间隔,单位是秒,top默认的刷时为5秒, top –d 3表示每隔3秒种刷新一次。
-s : 使top命令在安全模式中运行,这将去除交互命令所带来的潜在危险
-b : 批模式, 翻屏显示信息,不再实时刷新,因为实时刷新时有可能一屏显示不会所有的进程。但会一直翻屏显示,除非ctrl +c 终止
-n # : 在批模式中,后面加-n # ,表示只显示#屏,如top –b –n 3 只显示top命令一共3屏的信息。
交互式命令
top :
M : 根据驻留内存大小 进行排序
P: 根据CPU使用百分比大小进行排序
T: 根据时间/累计时间进行排序
l : 切换显示平均负载和启动时间信息。即显示隐藏第一行的信息
m: 切换显示内存信息。即显示隐藏内存行
t : 切换显示进程和CPU状态信息。即显示影藏CPU行
c : 是否显示完整的命令行信息
k : 终止某个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。
q : 退出程序。