第三章 进程
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. hadoop搭建杂记:Linux下hadoop的安装配置

    VirtualBox搭建伪分布式模式:hadoop的下载与配置 VirtualBox搭建伪分布式模式:hadoop的下载与配置 由于个人机子略渣,无法部署XWindow环境,直接用的Shell来操作, ...

  2. 机器学习算法实现(R&Python code)

    Machine Learning Algorithms Machine Learning Algorithms (Python and R) 明天考试,今天就来简单写写机器学习的算法 Types Su ...

  3. R与数据分析旧笔记(十八完结) 因子分析

    因子分析 因子分析 降维的一种方法,是主成分分析的推广和发展 是用于分析隐藏在表面现象背后的因子作用的统计模型.试图用最少的个数的不可测的公共因子的线性函数与特殊因子之和来描述原来观测的每一分量 因子 ...

  4. 0617 python 基础04

    控制流--for 循环 >>> range(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 换行输出 >>> for i in range(1 ...

  5. 【LeetCode题意分析&解答】39. Combination Sum

    Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C wher ...

  6. python自学笔记(一)简单了解python

    脚本解释型语言的内部机制 python先将脚本编译成字节码文件(pyc,pyo) python虚拟机解释并运行字节码文件 编译型语言的内部机制 先将源代码编译成机器码(机器能读懂的代码),生成可执行文 ...

  7. 写了个小爬虫,为何用上代理ip总是出现错误。

    import urllib.request import re import os import random import threading def url_open(url): #在第8到第12 ...

  8. iOS 使用xib创建cell的两种初始化方式

    曾几何时,被自己坑过,为了防止下次继续被自己坑,我决定了!在每个我能看到的地方,都把问题写一遍!!! 方法一: ? 1 2 3 4 第一步: [self.collectionView register ...

  9. querySelector $() getElementBy区别

    参考 http://stackoverflow.com/questions/14377590/queryselector-and-queryselectorall-vs-getelementsbycl ...

  10. 深度探索QT窗口系统(五篇)

    窗口作为界面编程中最重要的部分,没有窗口就没有界面,是窗口让我们摆脱了DOS时代,按钮是一个窗口,文本框是一个窗口,标签页是一个窗口,...一个窗口可以由多个窗口组成,每天我们都在与窗口打交道,当你打 ...