第三章 进程
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,&current->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的更多相关文章

  1. CVE-2015-8660分析

    0x00测试环境   使用环境 备注 操作系统 Ubuntu15.04 虚拟机 内核版本 3.19.0-15-generic 漏洞来源 /fs/overlayfs/inode.c Before 201 ...

  2. Linux 内核学习经验总结

    Linux 内核学习经验总结 学习内核,每个人都有自己的学习方法,仁者见仁智者见智.以下是我在学习过程中总结出来的东西,对自身来说,我认为比较有效率,拿出来跟大家交流一下. 内核学习,一偏之见:疏漏难 ...

  3. TRAFFIC ANALYSIS EXERCISE - Ransomer

    catalogue . SCENARIO . QUESTIONS . Analysis:10.3.14.134 . Analysis:10.3.14.131 1. SCENARIO The pcap ...

  4. Linux内核学习之中断 中断本质【转】

    转自:http://www.linuxidc.com/Linux/2011-11/47657.htm [中断概述] 中断本质上是一种特殊的电信号,由硬件设备发向处理器.异常和中断的不同是异常在产生时必 ...

  5. 路飞学城Python-Day43

    前端                                                                                                  ...

  6. linux 内核 tasklets 原理以及工作队列

    如果某种应用并不需要在多个CPU上并行执行,那么软中断其实是没有必要的.因此诞生了弥补以上两个要求的tasklet.它具有以下特性: a)一种特定类型的tasklet只能运行在一个CPU上,不能并行, ...

随机推荐

  1. web server服务器

    使用最多的 web server服务器软件有两个:微软的信息服务器(iis),和Apache. 通俗的讲,Web服务器传送(serves)页面使浏览器可以浏览,然而应用程序服务器提供的是客户端应用程序 ...

  2. (Problem 40)Champernowne's constant

    An irrational decimal fraction is created by concatenating the positive integers: 0.1234567891011213 ...

  3. asp.net core + angular2 的环境配置

    国内整个对 asp.net core  和 angular2这些新出来的关注度不是太好.跟国外比很大差距. 我在试着去做这个整合的时候也碰到不少问题. 最后通过查阅大量资料才弄明白. 我想肯定也会有类 ...

  4. QTreeView处理大量数据(使用1000万条数据,每次都只是部分刷新)

    如何使QTreeView快速显示1000万条数据,并且内存占用量少呢?这个问题困扰我很久,在网上找了好多相关资料,都没有找到合理的解决方案,今天在这里把我的解决方案提供给朋友们,供大家相互学习. 我开 ...

  5. Window下 Qt 编译MySQL驱动(居然用到了动态库格式转换工具)

    一步步在Window下开发Qt 今天开始安装MySQL,看了些关于MySQL安装的博文,方法大致相同,但是遇到的细节问题各有不同,或者没有讲全面,下面来说说个人的安装过程及遇到的问题. 1.首先下载, ...

  6. css vertical-align全解

    CSS 的属性 vertical-align 指定了内联(inline)元素或表格单元格(table-cell)元素的垂直对齐方式.  要记住:vertical-align不影响块级元素中内容的对齐. ...

  7. [转]maven入门

    http://wentao365.iteye.com/blog/903396 Maven是一个采用纯Java编写的开 源项目管理工具.Maven采用了一种被称之为project object mode ...

  8. Michael Kors成了时尚行业的公敌-股票频道-和讯网

    Michael Kors成了时尚行业的公敌-股票频道-和讯网 Michael Kors成了时尚行业的公敌 字号   评论 邮件 纠错 2014年03月03日17:32 来源:财经天下    全球消费不 ...

  9. HDU 4740 The Donkey of Gui Zhou (模拟)

    由于一开始考虑的很不周到,找到很多bug.....越改越长,不忍直视. 不是写模拟的料...................... 反正撞墙或者碰到已经走过的点就会转向,转向后还碰到这两种情况就会傻站 ...

  10. C++ Primer 学习笔记_88_用于大型程序的工具 --异常处理[续1]

    用于大型程序的工具 --异常处理[续1] 四.又一次抛出 有可能单个catch不能全然处理一个异常.在进行了一些校正行动之后,catch可能确定该异常必须由函数调用链中更上层的函数来处理,catch能 ...