1、进程状态
(1)进程描述 符中的state域 描述了进程的当前 状态 ,一共为5种之一:
TASK_RUNNNG(运行),TASK_INTERRUPTIBLE(可中断),TASK_UNITERRUPTIBLE,(不可中断进程必须在等待时不受干扰 或等待事件 很快会发生时出现)_TASK_TRACED(被其他进程跟踪的进程),_ASK_STOPPED(进程停止 运行)
2、将指定 进程设为某种状态。
set_current_state(state)和set_task_state(curent,state)
3、进程家庭树
unix系统的进程 之间存在在一个明显的继承,在LINUX系统中也是如此,所有进程都是PID为1的init进程的后代。每个 task_struct都有一个指向父进程task_struct的parent的指针,包含一个children的子进程链表。
而init的进程符是init_task静态分配的。
因为任务 队列本来主浊一个双向的循环链表。
这2个过程分别通过next_task(task)宏和prev_task(task)宏实现。for_each_process(task)宏提供了依次访问整个任务队列的能力 。

struct task_struct *task;
for_each_process(task){//打印每个任务的名称 和PIDprintk("%s[%d]\n",task->comm,task->pid);
}

一个拥有大量进程的系统中通过重复遍历所有的进程代价是巨大的。
4、进程创建
传统的fork()系统调用直接把所有资源复制给新创建的进程,而linux的fork使用写时拷贝页来实现 ,让父进程与子进程共享 一个数据拷贝,直到需要写入时,数据才被复制,因数如果fork后,立即exec(读取可执行文件将其载入地址空间开始运行),则不需要复制,实际只是复制了父进程的页表和给子进程创建唯一的进程描述符
clone系统调用实现 fork()
do_fork完成了创建中的大部分工作 ,定义在kernel/fork,c中。调用 copy_process函数,
(1)调用 dup_ task_struct()为新进程创建一个内核栈、thread_info结构和task_sruct,这些值与当前进程的值相同。子进程与父进程的描述符是完全相同的。
(2)检查并确保新创建 这个子进程后,用户所拥有的进程数目没有超过给它分配的资源的限制。
(3)子进程着手使自己与父进程区别,进程描述符内许多成员清0
(4)子进程状态 被 设为TASK_UNITERRUPTIBLE,保证不能运行,因为后续还需要继续设置
(5)调用 copy_flags更新 task_sruct的flags成员。
(6)调用 alloc_pid()为新进程分配一个有效的PID
(7)根据传递给clone() 的参数标志,拷贝和共享 文件系统信息、信号 处理函数、进程地址空间等,以供进程内所有线程共享。
(8)收尾工作 ,并返回一个指向子进程的指针。
此外,vfork和fork功能相同 ,但不拷贝进程的页表。了进程 在父进程的线程内运行,父进程被阻塞,直至子进程退出或执行exec。

linux内核杂记(3)-进程(2)相关推荐

  1. linux内核杂记(3)-进程(1)

    1.进程指执行中的程序及其相关资源 2.LINUX的线程是一种特殊的进程,线程有独立的程序计数器.进程栈和一组进程寄存器. 3.内核提供虚拟内存和虚拟处理器 4.fork复制现在进程,产生一个新进程, ...

  2. linux内核杂记(5)-进程终结

    1.进程的析构是由自身引起的,发生在进程调用exit()系统调用时,既可能显式地调用 这个系统调用,也可能隐匿地从某个程序的主函数 返回. 当进程接受到它既不能处理也不能忽略的信号或异常时,它还可能被 ...

  3. Linux内核之话说进程

    前言 回望笔者之前发的数篇技术博客,中规中矩,阅读量更是不尽人意,看来没帮到多少人,不行,文风要改,要大改.于是乎,笔者金荣摇身一变,化作Linux OS的一个进程,我是一个进程,我来讲述我的故事. ...

  4. Linux内核中的进程组及会话

    Linux内核中的进程组及会话 将阐述Linux内核中的如下几个概念 1) 进程组 2) 会话 3) 控制终端 前面的概念来源于前人,我只是站在前人的肩膀上结合内核中的实现加深概念理解. 1.概念: ...

  5. linux 进程管理 ppt,Linux内核结构与进程管理.ppt

    Linux内核结构与进程管理.ppt Linux 内核结构与进程管理,Linux系统结构Linux kernel 开放源代码的linux操作系统内核,目前版本为2.6,Linux内核组成1. 进程调度 ...

  6. linux内核打开文件数,放开Linux内核对用户进程可打开文件数和TCP连接的限制

    一. 检查linux内核 uname -a lsb_release -a 二.用户进程可打开文件数限制 1)vim /etc/security/limits.conf *       -      n ...

  7. linux内核arc4算法,linux内核中与进程相关的数据结构(基于linux-mainline-rc4)

    1.进程描述符 struct task_struct { volatile long state; ....... struct list_head tasks; ....... struct mm_ ...

  8. 修改linux内核达到隐藏进程目的(2.6.28)

    修改linux内核达到隐藏进程目的(2.6.28) 要求: 高级操作系统与分布式系统作业 ps和top命令列出了unix中当前所有进程的相关信息,作业要求在linux中增加两个系统调用,功能如下: h ...

  9. Linux内核学习008——进程管理(四)

    Linux内核学习007--进程管理(四) 进程家族树 Unix系统的进程之间存在一个明显的继承关系,所有的进程都是PID为1的init进程的后代.内核在系统启动的最后阶段启动init进程,然后ini ...

最新文章

  1. 放张载玻片就能放大一万倍,普通光学显微镜都馋哭了 | Nature子刊
  2. kill掉多个进程linux中的sudo,linux下批量kill进程的方法
  3. c# 找出目录下的所有子目录_Linux操作系统文件目录
  4. 统计学经典书籍分享【PDF下载】
  5. mysql_表_操作
  6. 游戏外挂是怎么炼成的
  7. 春晚红包:挺住的百度和崩坏的应用商店
  8. 忘记root密码后怎么解决?克隆虚拟机后如何实现两台linux相互登录?
  9. 【TSP】基于matlab自适应动态邻域布谷鸟混合算法求解旅行商问题【含Matlab源码 1513期】
  10. 对序列化器、“对象”的理解
  11. js 编写一个程序实现统计一串字符串中的英文小写字母个数!
  12. 流行音乐网站 /音乐网站/音乐播放系统
  13. clip-path应用
  14. 1+2+3+...∞=-1/12?——杨子曰数学
  15. 计算机考研数学和英语考什么,考研英语几与数学几的区别?
  16. Vcastr 3.0 开源的在线FLV播放器
  17. kotlin “${ }”是什么意思?
  18. 2022数维杯国际数学建模C题代码+思路+报告
  19. 电脑中WPS卸载后Office文档显示无法识别的图标
  20. excel导出java.lang.ArrayIndexOutOfBoundsException: 0 POI导出excel报错数组下标越界0

热门文章

  1. windows server 2016 docker 之创建使用虚拟交换机
  2. NOIP2001-普及组复赛-第一题-数的计算
  3. leetcode:Minimum Depth of Binary Tree【Python版】
  4. python时间转换
  5. 二、mysql数据类型
  6. grunt 0.4.1构建工具入门实践(转)
  7. 多对多关联查询sql语句
  8. linux的管道 |和grep命令以及一些其他命令(diff,echo,cat,date,time,wc,which,whereis,gzip,zcat,unzip,sort)...
  9. 复合数据类型,英文词频统计
  10. [leetcode]83.Remove Duplicates from Sorted List