linux用户进程分析

       经过实验3的介绍,我们需要来点实在的,所以将我们理解的流程 用于 linux 系统的 分析 换句话说,通过类比的方式去进行描述与理解linux相关的部分。本节的内容很详实,而且也分析了很久,所以长话短说,静静的去感受与理解linux内核代码的实现。当然,我们实验的系统代码很简单而且直接,但是linux内核经过20多年的发展,更有成千上万的开发者共同维护,所以对于代码的书写会更加精练,对于基础相对薄弱的程序员去理解有一些障碍,但是反过来说,更有利于我们语言知识的提高。

    如下的介绍方法是对应于实验中的3个部分进行分别说明,而对于这3个部分主要以分析代码的结构与流程来介绍,而对于细节的实现还需要去认真查看代码。本文只对核心的部分进行介绍,引导读者从基本的部分去学习与理解linux内核的部分代码。

一)进程管理:

    在浩如烟海的代码中,如何寻找,太麻烦了。所以我们需要使用其他人的分析结果参考了《深入理解Linux内核第3版》的部分章节,然后根据相关介绍有针对性的查看代码。但是我们分析的对象是kernel4.0.2.跟原文中有些出入。当然对于去理解linux内核的程序员,当然这本书是不可多得的参考资料,但是实际使用的linux内核却是发展的,所以还是需要我们触类旁通的理解之。

    根据实验3的内容我们首先需要找到对进程的抽象描述,即核心数据结构,由于其结构很是复杂,就不在博客中列出,而是放在附件的源码中。内核的核心数据结构task_struct——include/linux/sched.h(1286)。当我们打开该数据结构时,第1感觉肯定是定义太复杂了,从什么地方入手呢?我们可以从两个方面入手去理解:其一为从经典的操作系统教程中找寻进程的描述,然后以之为切入点对应分析(可以参考的教程为《操作系统精髓与设计原理第6版》),其二为从简单的操作系统模型去把握核心的部分去分析,然后以此为基础去逐步扩展着分析。当然,我们介绍的是第2种方法,因为我们已经知道了一个简单的操作系统模型。

    根据实验3的进程属性分析我们可以将进程属性分为如下几部分:

  1. 进程标识符(pid,stack

    内核有两种方式识别进程:其一为unix标准的id号(见结构体元素:pid_t pid);其二通过进程的描述符地址,每个进程都会分配唯一的一个进程描述符。对于进程id号,需要被循环使用,它被结构体pid_namespace(pid_namespace.h)中的pidmap所指向的page进行管理,用该页帧的每个bit位来表示已经使用的pid号。

    对于进程描述符地址,因为进程描述符与每个进程是一一对应的,当内核需要对进程进行操作时,首先需要得到进程描述符地址,然后对其数据进行操作;对于此linux内核用了一种 巧妙的方式来进行操作,这种方式是基于每个进程在内核状态都有自己唯一的堆栈,将进程执行的必要状态(线程相关状态)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值