LKD3
第三章 进程
1. Unix操作系统的抽象:进程和文件
2. 进程包括两个因素:可运行代码,和资源(打开的文件,挂起的信号,内核内部数据,处理器状态,地址空间)
3. 线程是进程中活动的对象。
4. 线程有独立的程序计数器,进程栈,和一组进程寄存器。
5. 内核调度的对象是线程,传统的Unix系统中,一个进程仅仅包括一个线程。
6. Linux系统中,线程只是是一个特殊的进程。
7. 进程的两种虚拟机制:虚拟处理器和虚拟内存。线程之间,共享虚拟内存,但拥有自己的虚拟处理器。
8. fork()从系统调用返回两次,一次回到父进程,一次回到子进程。
9. 用exec*能够创建新的地址空间,把新的程序加载。
10. 进程退出后是僵死状态,直到wait()和waitpid为止。
--------------------------------------------------------------
1. 任务队列,是task_struct的链表,称为进程描写叙述符,定义于linux/sched.h中
2. sizeof(task_struct)在32bit RISC机器上有1.7KB的大小
3. Linux通过slab分配器分配task_struct的结构。
4. 在2.6曾经的内核中,task_struct放在内核栈的末尾,如今是用在栈的顶端或者底端,创建新的结构thread_info来计算。
struct thread_info{
struct task_struct *task;
struct exec_domain *exec_domain;
unsigned long flags;
unsigned long status;
__u32 cpu;
__s32 preempt_count;
mm_segment_t addr_limit;
struct restart_block restart_block;
unsinged long pervious_esp;
__u8 supervisor_stack[0]
}
5. 内核通过唯一的标志值PID来标志每一个进程。
6. current 宏来查找正在执行的进程的进程描写叙述符的速度尤为重要。不同的体系结构做法不同。
x86:PPC等
7. 五中进程状态
8. set_task_state(task,state)来改变进程的状态,set_current_state(state)
9. 进程上下文:"内核代表进程执行"
10. 进程家族树:init进程和inittab脚本,init_task是静态分配的。
一次訪问子进程
list_for_each(list,¤t->children){
task = list_entry(list,struct task_struct,sibling);
}
找到init 进程
for(task = current;task != &init_task;task = task->parent)
;
下一个进程
list_entry(task->tasks.next,struct task_struct,tasks);<==>next_tasks(task)
前一个进程
list_entry(task->tasks.prev,struct task_struct,tasks);<==>prev_tasks(task)
for_each_task(task){
/*task指向下一个元素*/
}
----------------------------------------------------------------------
1. 其它操作系统的spawn机制。在新的地址空间创建进程,读入运行文件,运行
2. Unix的方法,fork():拷贝当前进程创建一个子进程
exec:读取可运行文件,将其加载地址空间运行
3. 写时拷贝:推迟拷贝的技术。由于这些数据可能根本用不到,比方,fork之后马上调用exec
4. fork->clone->do_fork()->copy_process(),内核有意选择子进程先运行,防止写时复制
5. vfork不拷贝父进程的页表项。子进程作为父进程的一个单独的线程在他的地址空间运行。父进程被堵塞,直到子进程退出或者调用exec().
-----------------------------------------------------------------------------
1. Linux的线程在内核看来,是一个进程。与某些进程共享地址空间的进程
2. 线程的创建和进程相似,仅仅是传递一些不同的flags
clone(CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND,0)
3. 内核线程,独立运行于内核空间的标准进程,没有独立的地址空间,仅仅在内核空间运行,能够被调度和抢占
4. 内核线程仅仅能由其它的内核线程创建
kernel_thread(init (*fn)(void *),void *arg,unsigned long flags)
5. 一般要求一直运行下去.....
--------------------------------------------------------------------------
1.进程的终结:exit,从main返回,遇到异常或者不能处理也不能忽略的信号。abort.
2.do_exit():kernel/exit.c
设置标志PF_EXITING,del_timer_sync, acct_process, _exit_mm,exit_sem,_exit_files,_exit_fs,exit_namespace,exit_sighand,exit_code,exit_notify(),最后调用schedule()
3.wait 组函数,调用wait4()系统的调用,-〉release_task.
4.do_exit的notify_parent来通过forget_original_parent来寻找父进程:
LKD3的更多相关文章
- CVE-2015-8660分析
0x00测试环境 使用环境 备注 操作系统 Ubuntu15.04 虚拟机 内核版本 3.19.0-15-generic 漏洞来源 /fs/overlayfs/inode.c Before 201 ...
- Linux 内核学习经验总结
Linux 内核学习经验总结 学习内核,每个人都有自己的学习方法,仁者见仁智者见智.以下是我在学习过程中总结出来的东西,对自身来说,我认为比较有效率,拿出来跟大家交流一下. 内核学习,一偏之见:疏漏难 ...
- TRAFFIC ANALYSIS EXERCISE - Ransomer
catalogue . SCENARIO . QUESTIONS . Analysis:10.3.14.134 . Analysis:10.3.14.131 1. SCENARIO The pcap ...
- Linux内核学习之中断 中断本质【转】
转自:http://www.linuxidc.com/Linux/2011-11/47657.htm [中断概述] 中断本质上是一种特殊的电信号,由硬件设备发向处理器.异常和中断的不同是异常在产生时必 ...
- 路飞学城Python-Day43
前端 ...
- linux 内核 tasklets 原理以及工作队列
如果某种应用并不需要在多个CPU上并行执行,那么软中断其实是没有必要的.因此诞生了弥补以上两个要求的tasklet.它具有以下特性: a)一种特定类型的tasklet只能运行在一个CPU上,不能并行, ...
随机推荐
- .NET 条件查询实现--类似网上商城宝贝搜索
需要实现的效果:点击表格列头:弹出一个层,用户可以输入当前列头的查询条件,点击确定之后,把该列头的查询信息显示在页面顶部,用户可以叉掉这个查询条件,恢复到查询之前的数据. 大致实现的效果图: 项目背景 ...
- OSG选中效果展示
<OpenSceneGraph三维渲染引擎编程指南>书中选中高亮效果示例.osgFX特效 2.得到鼠标的位置 osgFX特效1.高亮,在开头的时候写了: 2.线框: #include< ...
- ODI学习笔记2--ODI产品架构
ODI学习笔记2--ODI产品架构 ODI产品架构: ODI提供了以下几种管理工具:Designer 用于定义数据转换逻辑,这是最常用的开发工具,大部分的开发任务,包括data store的定义,in ...
- 侯捷C++ Type traits(类型萃取
泛型編程編出來的代碼,適用於任何「吻合某種條件限制」的資料型別.這已成為撰寫可復用代碼時的一個重要選擇.然而,總有一些時候,泛型不夠好 — 有時候是因為不同的型別差距過大,難以產生一致的泛化實作版本. ...
- Openstack命令收集
查看rabbitmq 队列 rabbitmqctl list_queues 查看keystone的用户 keystone user-list 查看keystone endpoint keystone ...
- JavaEE Tutorials (12) - 创建和使用基于字符串的Criteria查询
12.1基于字符串的Criteria API查询概述17812.2创建基于字符串的查询17812.3执行基于字符串的查询179
- openStack icehouse for centos6.4 production Env 实战
production Env brief Overview: Management Node: controller.cc 10.114.100.115 Neutron Network Node: ...
- Amazon S3 API
一.概述 Amazon s3,全称为Amazon Simple Storage Service.EC2和S3是Amazon最早推出的两项云服务. REST,这也是比较火的一种Web服务架构.简单来说 ...
- ASP.NET -- repeater控件的使用
转载自网络-原网址[http://blog.csdn.net/haitaodoit/article/details/7021214] repeater绑定数据: protected void Page ...
- 【LINUX】SHELL syntax error:unexpected end of file
解决思路: DOS下文件和Linux下文件格式差异问题导致的. DOS下的文本文件是以\r\n作为断行标志的,表示成十六进制就是0D 0A.而Unix下的文本文件是以\n作为断行标志的,表示成十六进制 ...