linux 4.12内核学习之进程命名空间和进程标识符

术语:

C标准库进程术语

对应的linux内核的进程术语

包含多个线程的进程线程组
只有一个线程的进程进程或者任务
线程共享用户虚拟地址空间的进程

结构体描述符task_struct

结构体路径D:\linux4.12\linux-4.12.1\include\linux\sched.h,里面定义的数据比较多,这里就不一一介绍了,

struct nsproxy  *nsproxy;

这个是指向命名空间的指针,

结构体定义文件D:\linux4.12\linux-4.12.1\include\linux\nsproxy.h

struct nsproxy {
	atomic_t count;
	struct uts_namespace *uts_ns;
	struct ipc_namespace *ipc_ns;
	struct mnt_namespace *mnt_ns;
	struct pid_namespace *pid_ns_for_children;
	struct net 	     *net_ns;
	struct cgroup_namespace *cgroup_ns;
};

为什么要有命名空间呢?

不同的进程不能使用相同的内存资源,那他是怎么隔离的呢?没错,就是通过命名空间,大家可以把命名空间想象成内存分段,每一个段相互不干扰,当然也可以使用相同的段,这就是使用相同的资源。

 

标识符(struct pid)

进程表示符:进程所属的进程号命名空间到根的每层命名空间,都会给进程分配一个标识符

线程组标识符:线程组中主进程称为组长,组长的pid为整个组的标识符,组内每个进程的tgid等于组长的pid,组内所有进程的group_leader都指向组长的描述符

进程组标识符:多个进程也可以组成进程组,进程组表示符是进程组长的标识符,可以调用setpgid创建或者加入新的进程组,进程组简化了向组内其他进程发送信号的操作。

会话标识符:多个进程组可以组成一个会话,调用setsid创建新的会话,会话标识符是创建该会话的进程标识符,创建会话的进程是会话的首进程,linux登录时创建一个会话,登录shell是会话首进程,使用的终端叫控制终端,shell成为控制进程,shell退出时,所有属于这个会话的进程都会终止

pid是全局进程号

struct pid_link            pids[PIDTYPE_MAX];

pids[PIDTYPE_PID].pid指向结构体pid

pids[PIDTYPE_PGID].pid指向进程组组长pid

pids[PIDTYPE_SID].pid指向会话首进程pid

这个是进程标识符结构体

struct pid
{
	atomic_t count;
	unsigned int level;
	/* lists of tasks that use this pid */
	struct hlist_head tasks[PIDTYPE_MAX];
	struct rcu_head rcu;
	struct upid numbers[1];
};

count是引用计数

level命名空间层次

numbers的长度是命名空间+1,

numbers[i].nr存放进程号,

number[i].ns指向进程号命名空间结构体,

numbers[i].pid_chain用来把进程号加入进程号散列表pid_hash。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值