12- 15 进程数据结构

任务 task
-由task_struct来管理
-任务ID,有pid,tgid
-PID &TPID区别
getpid获取的是进程描述符task_struct的tgid(thread group identifier),而pid(process identifier)是系统管理所有进程的id
信号处理
处理状态:
-blocked被阻断,不处理
-pending 等待,不处理
-sighand 通过信号函数进行处理
 
任务状态:(2的几何方)
#define TASK_DEAD 64
#define TASK_WAKEKILL 128
#define TASK_WAKING 256
#define TASK_PARKED 512
#define TASK_NOLOAD 1024
#define TASK_NEW 2048
#define TASK_STATE_MAX 4096
睡眠状态:
-可中断睡眠方式;
-不可中断睡眠方式
 
 
 
一、查看运行状态信息
1.显示CPU前10个进程;
ps auxw|head -1;ps auxw|sort -rn -k3|head -10
2.显示Mem前10个进程
ps auxw|head -1;ps auxw|sort -rn -k4|head -10
3.dstat 用法
dstat -c
4.top
二、进程间关系
-parent 进程
-children 进程
-sibling进程
 
三、进程权限
objective/subjective
cred/real_cred ##cred<-> subjective; Real_cred<->objective
1)用户和用户组控制权限
- uid,gid
-euid ,egid
-fsuid,fsgid
2) capabilities 可以让普通用户获得更高权限,同时又不赋予root权限;
-cap_permited
-cap_effective
-cap_inheritable
-cap_bset
-cap_ambient ##解决cap_inheritable短板。
 
四、内存管理
mm_struct
1.用户态函数栈
-后进先出原则,即函数调用通过栈完成;
-入栈(push)和出栈(POP) 都是从栈顶进入,栈都是从高地址往低地址,往下增长的结构
 
-32位 叫ESP(栈顶) 和EBP(栈基),用的全部是函数栈;
-64位叫 RSP 和RBP,前6个使用寄存器;其他用函数栈;
-栈都是在内存空间完成
 
2. 内核态函数栈, 和进程运行有关。
- 32位;定义:arch/x86/include/asm/page_32_types.h
-PAGE_SIZE:4K;8k
-64位;定义:arch/x86/include/asm/page_64_types.h
-PAGE_SIZE:8k,16k,起始地址为8192的整数倍
-内核的代码Union将Thread_info和stack 放在一起,代码路径:include/linux/sched.h
-代码最高地址端,存放在另一个结构,pt_regs内;
-32位内核栈用thread_info来关联task_struct, 64位用per-CPU

猜你喜欢

转载自www.cnblogs.com/JaPer/p/10937174.html