`
love19820823
  • 浏览: 933755 次
文章分类
社区版块
存档分类
最新评论

《深入理解Linux内核》--第三章 进程:读书笔记

 
阅读更多

最大体会关注的是进程的权限、父进程子进程的关系、进程与线程的关系 以及 进程线程的生命周期。
一、进程、轻量级进程,线程
进程拥有自己独立空间。
轻量级进程:两个轻量级进程基本上可以共享一些资源,诸如地址空间、打开的文件等。(之所以说轻量级,就是说偏向线程,可以共享一些资源,但是又不是完全的线程。)
线程,内核看做是简单的进程。
为什么要轻量级进程而非线程,例子:象棋程序的控制图像化棋盘部分、思考下一步移动的思考部分。两部分如果都是进程则不能共享数据(进程间共享数据困难,当然也可以通过各种方式做到);如果都是线程,则一个在运行,另一个则阻塞(同一进程内的多线程之间阻塞);运用轻量级进程可以保证 共享部分数据 和 运行 兼顾。

1)进程描述符 中thread_info,

未命名6
运用联合结构表示了一个进程的线程描述符和内核栈:
union thread_union{
struct thread_info thread_info;
unsigned long stack[2048]; /*对4k的栈数组下表是1024 ,long是4byte */
}
thread_info 从低地址向高处增长,堆栈stack从高地址往低地址增长,esp指向当前栈顶。
2)双向链表结构
list_head数据结构是双向链表结构,next,prev指针。
遍历进程链表的宏:
#define for_each_process(p)/
for(p=&init_task;(p=list_entry(p)->tasks.next,struct task_struct,tasks)!=&init_task;)
3)pidhash表及链表
散列表强调的是空间而不是在固定的时间内找到表中的最后一个元素。(当然hash能够很快找到对应的元素)
#define pid_hashfn(x) hash_long((unsigned long) x,pidhash_shift);
这里的pidhash_shift 值一般取11。
unsigned long hash_long(unsigned long val, unsigned int bits)
{
unsigned long hash=val *0x9e370001UL;
return hash>>(32-bits);
}
0x9e370001=2 654 404 609=2^31+2^29-2^25+2^22-2^19-2^16+1.
是接近黄金比例的2^32的一个素数。(也称为 “魔数常量”)
未命名6
二、进程间的关系
real_parent,指向创建了P进程的描述符,若不存在,则指向init(1)进程
parent ,指向P的当期父进程(与real_parent 不同发生在,监控P时ptrace()系统调用)
children
sibling, 指向兄弟进程,(注意的是sibling.prev或sibling.next 可能指向parent)

三、进程生命周期
1)创建进程,有三种方式可以创建:
(1)写时复制技术允许父子进程读相同的物理页。只要两者之一试图写一个物理页,内核就将
把这个页的内容拷贝到一个新的物理页,并把新的物理页分配给正在写的进程
(2)轻量级级进程:允许父子进程共享每进程(per-process)在内核的很多数据结构。
(3)vfork(),阻塞父进程的执行,直到子进程退出或执行一个新的其他程序。
注意的三个系统调用:clone()、fork()、vfork()
2)撤销进程(由自己撤销)
exit_group();线程组
exit();
3)进程删除(由父进程删除)
父进程wait()哪些僵死进程,如果wait()成功则删除子进程。如果父进程先结束,则会有很多僵死进程,这些孤儿进程会将父进程指向init(),init()负责wait()操作。

进程切换:1)切换页全局目录以安装一个新的地址空间;
2)切换内核态堆栈 和 硬件上下文,因为硬件上下文 提供了内核执行新进程所需要的所有信
息。这一步由 switch_to 宏执行。

四、其它

TSS(Task State Segment)
TSSD(Task State Segment Descriptor)


FPU、MMX和XMM寄存器的加载使用需要另外程序操作
union i387_unio{
struct i387_fsave_struct fsave;
struct i387_fxsave_struct fxsave;
struct i387_soft_struct soft;
};

内核线程 只运行在内核态,只使用大于PAGE_OFFSET(3G)的线性地址空间。其他普通进程在用户态或内核态都可以访问4G的线性地址空间。

进程0 (idle进程 或 swapper进程),是Linux在初始化阶段从无到有创建的一个内核线程。(祖先)
进程1 (init进程,在整个系统运行中一直存活),内核初始化后由内核线程 变为 普通进程,拥有
per-process内核数据结构,创建和监控在操作系统外层执行的所有进程的活动。

分享到:
评论

相关推荐

    若干源程序资料12.rar

    2012-06-11 21:44 6,947,979 Linux内核完全注释V3.0书签版(带源码).rar 2012-06-11 21:31 11,599 MATLAB仿真程序OFDM程序.txt 2012-06-11 21:37 14,584,477 msdn for vb6.0简体中文版.zip 2012-06-11 21:02 12,288 ...

    Linux命令笔记

    第三部分:用户权限 用户权限/用户管理命令 1:useradd 添加新用户 语法:useradd [选项] 用户名 2:passwd 设置用户密码 语法:passwd [选项] 用户名 3:usermod 修改用户信息 语法:usermod [选项] 用户名 4:chage ...

    深度探索Linux操作系统:系统构建和原理解析.王柏生(带详细书签).part2.rar

    它颠覆和摒弃了传统的从阅读Linux内核源代码着手学习Linux操作系统原理的方式,而是基于实践,以从零开始构建一个完整的Linux操作系统的过程为依托,指引读者在实践中去探索操作系统的本质。这种方式的妙处在于,让...

    linux管理员指南

    而技巧性很强的编译某个Linux内核的任务将在第10章进行详细的介绍,这一章的内容不仅介绍整个过程的每一个步骤,还对每一步做了解释。在第二部分的结尾,我们用了一章的篇幅介绍基本的系统安全措施。 ?第三部分 在第...

    Linux从入门到精通

    9.6 内核守护进程配置 9.6.1 改变模组选项 9.6.2 改变模组 9.6.3 增加模组 9.6.4 重起动kerneld 10 Glint 10.1 启动glint 10.2 显示软件包 10.2.1 上下文相关菜单 10.2.2 选择软件包 10.2.3 查看可用...

    《Linux从入门到精通》

    9.6 内核守护进程配置 9.6.1 改变模组选项 9.6.2 改变模组 9.6.3 增加模组 9.6.4 重起动kerneld 10 Glint 10.1 启动glint 10.2 显示软件包 10.2.1 上下文相关菜单 10.2.2 选择软件包 10.2.3 查看可用...

    Google Android SDK开发范例大全(完整版)

    每个 Android 应用程序都在 Dalvik VM 的一个实例中运行,这个实例驻留在一个由 Linux 内核管理的进程中,如下图所示。 图 2. Dalvik VM Android 应用程序由一个或多个组件组成: 活动 具有可视 UI 的应用...

    linux从入门到精通.chm

    9.6 内核守护进程配置 9.6.1 改变模组选项 9.6.2 改变模组 9.6.3 增加模组 9.6.4 重起动kerneld 10 Glint 10.1 启动glint 10.2 显示软件包 10.2.1 上下文相关菜单 10.2.2 选择软件包 10.2.3 查看可用...

    2005详细介绍Linux从入门到精通

    9.6 内核守护进程配置 9.6.1 改变模组选项 9.6.2 改变模组 9.6.3 增加模组 9.6.4 重起动kerneld 10 Glint 10.1 启动glint 10.2 显示软件包 10.2.1 上下文相关菜单 10.2.2 选择软件包 10.2.3 查看可用...

    用于控制华硕 ROG 笔记本电脑的守护程序和工具。 取代 rog-core。

    启用第三方应用程序以通过 dbus 方法使用上述内容为了让新用户尽可能轻松地完成上述操作尊重用户资源:小、轻、快第 3 点意味着支持的发行版列表非常狭窄——明确支持 Fedora,而 Ubuntu 和 openSUSE 是 2 级支持。...

    自己动手写操作系统(含源代码).part2

    第三,实践类的操作系统书籍还是太少了,以至于你要想看看别人是怎么做的,除了读以《操作系统:设计与实现》为代表的极少数书籍之外,就是一头扎进源代码中,而结果有时相当令人气馁。我自己也气馁过,所以我在第二...

    自己动手写操作系统(含源代码).part1

    第三,实践类的操作系统书籍还是太少了,以至于你要想看看别人是怎么做的,除了读以《操作系统:设计与实现》为代表的极少数书籍之外,就是一头扎进源代码中,而结果有时相当令人气馁。我自己也气馁过,所以我在第二...

    计算机基础应用培训课件.pptx

    培训内容 第一部分 系统基础知识 第二部分 办公软件 第三部分 系统维护 2 计算机基础应用培训课件全文共101页,当前为第2页。 第一部分 系统基本操作 1-1 计算机工作原理 3 计算机基础应用培训课件全文共101页,...

Global site tag (gtag.js) - Google Analytics