目录
进程的空间分配
在系统为进程创建4G的空间后,这个空间会分为两个部分,1G内核,3G用户
用户空间可分为
stack : 存放非静态的局部变量
heap : 动态申请的内存
bss : 未初始化过的全局变量(包括初始化为0的,未初始化过的静态变量(包括初始化为0)
data : 初始化过并且值不为0的全局变量,初始化过的不为0静态变量
rodata : 只读变量(字符串之类)
text : 程序文本段(包括函数,符号常量)
虚拟地址与物理地址
上篇提到过,每个进程会有4G的虚拟地址空间
为什么要用虚拟地址?
直接访问物理地址,会导致地址空间没有隔离,很容易导致数据被修改
通过虚拟地址空间可以实现每个进程空间都是独立的,操作系统会映射到不用的物理地址区间,在 访问时互不干扰.
如何将虚拟地址和物理地址联系起来呢?
映射
可以理解为物理地址是一个指针,虚拟地址是二级指针用来保存物理地址,通过虚拟地址可以进入物理地址空间(个人理解)
在cpu中有一个硬件 MMU(内存管理单元),负责虚拟地址与物理地址的映射管理以及虚拟地址访问
进程的一些命令
1.ps -ef 显示当前进程的状态
// 显示所有进程的详细信息 ps -aux
可以与其它命令一起使用 :使用 ps -ef | grep "可执行文件名" 查找进程
2.top
实时显示进程的信息
不显示任何闲或无用进程 top -i
更数指定次数后,退出top命令 top -n(数字)
有兴趣的盆友可以看看(本人也是从老师那复制过来的)
%Cpu(s):CPU使用率 0.7 us:用户空间占用CPU时间的百分比(大部分进程都运行在用户态,通常都是希望用户空间CPU 越高越好)
0.5 sy:内核空间占用CPU时间的百分比(Linux内核态占用的CPU时间,系统CPU占用越高,表明 系统某部分存在瓶颈。通常这个值越低越好)
0.0 ni:占用CPU时间的百分比(ni是nice的缩写,进程用户态的优先级,如果调整过优先级,那 么展示的就是调整过nice值的进程消耗掉的CPU时间,如果系统中没有进程被调整过nice值,那么 ni就显示为0)
98.8 id:空闲CPU占用率,等待进程运行 0.0
wa:等待输入输出的CPU时间百分比(CPU的处理速度是很快的,磁盘IO操作是非常慢的。
wa 表示CPU在等待IO操作完成所花费的时间。系统不应该花费大量的时间来等待IO操作,否则就说明 IO存在瓶颈)
0.0 hi:CPU硬中断时间百分比(硬中断是硬盘、网卡等硬件设备发送给CPU的中断消息 )
0.0 si:CPU软中断时间百分比(软中断是由程序发出的中断 )
0.0 st:被强制等待(involuntary wait)虚拟CPU的时间,此时Hypervisor在为另一个虚拟 处理器服务。
PID:进程号
USER:进程所有者
PR:进程的优先级,越小优先级越高
NI:nice值,负值表示高优先级,正值表示低优先级
VIRT:进程使用的虚拟内存,单位是kb
RES:进程使用的物理内存,单位kb
SHR:进程使用的共享内存,单位kb
进程状态(S表示休眠,R表示正在运行, Z表示僵死状态,I表示空闲状态)
3.pstree
pstree 命令是将所有的进程以树型结构的方式进行展示
4.kill
kill 命令是用于结束进程的命令或者用于显示相关信号
终止进程 kill -9 进程号