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上,不能并行, ...
随机推荐
- mysql中中文字符串的截取
SET NAMES 'utf8'; SET v_length = character_length(citys); SET citys = left(citys COLLATE utf8_bin, v ...
- 深刻理解一句js
最近有点小懒,不想写东西,也不想看东西,看东西还老跑神,这是肿么了呢? 盯着显示器某一刻能把它看透,就是不想挪下眼睛 无意中看到了这行代码 [].forEach.call($$("*&quo ...
- input 输入框获得/失去焦点时隐藏/显示文字(jquery版)
input输入框在获得或失去焦点时隐藏或显示文字,这样的焦点效果想必很多朋友在填写form表格的时候都曾见识过吧,本文使用jquery实现以下,感兴趣的朋友可以参考下哈 大家可以看效果图的搜索输入框, ...
- Asp MVC 中处理JSON 日期类型
注:时间有点忙,直接copy 过来的,要查看原址: http://www.developer.com/net/dealing-with-json-dates-in-asp.net-mvc.html I ...
- 【转】Centos 设置IP地址的几种方式
对于很多刚刚接触linux的朋友来说,如何设置linux系统的IP地址,作为第一步,下面小编以centos系统为例,给大家演示如何给centos设置IP地址,如何修改linux 系统IP地址? 查看I ...
- angular checkbox required
Here is the fiddle http://jsfiddle.net/lumixraku/xgLz7d4j/2/ html <body ng-app="app"> ...
- MFG 常用英文单字
Semiconductor 导体.绝缘体和半导体主要依据导电系数的大小,决定了电子的移动速度. 导体:金.银.铜.铁.人.水……导电系数大,传导容易 绝缘体:塑料.木头.皮革.纸……导电系数小.传导不 ...
- spring+springMVC集成(annotation方式)
spring+springMVC集成(annotation方式) SpringMVC+Spring4.0+Hibernate 简单的整合 MyBatis3整合Spring3.SpringMVC3
- C++的类型萃取技术
应该说,迭代器就是一种智能指针,因此,它也就拥有了一般指针的所有特点——能够对其进行*和->操作.但是在遍历容器的时候,不可避免的要对遍历的容器内部有所了解,所以,设计一个迭代器也就自然而然的变 ...
- Android 五大布局(LinearLayout、FrameLayout、AbsoulteLayout、RelativeLayout、TableLayout )
前言 欢迎大家我分享和推荐好用的代码段~~ 声明 欢迎转载,但请保留文章原始出处: CSDN:http://www.csdn.net ...