linux课程第六周实验及总结

实验及学习总结

1.进程描述符task_struct数据结构

  • 进程的作用:

    将信号、进程间通信、内存管理和文件系统联系起来

  • 操作系统的三大功能:

    进程管理、内存管理、文件系统

  • 内核通过唯一的进程标识PID来区别每个进程

  • Linux为每个进程分配一个8KB大小的内存区域,用于存放该进程两个不同的数据结构:Thread_info和进程的内核堆栈
  • task_struct结构的大体框架:

  • 进程描述符中的state域描述了进程的当前状态:
    • task_running
    • task_interruprtion
    • task_uninterruption
    • task_traced
    • task_stopped

2.进程的创建

fork、vfork和clone三个系统调用都可以创建一个新进程,而且都是通过调用do_fork来实现进程的创建
1号进程是所有用户态进程的祖先,0号进程是所有内核线程的祖先
  • 进程的创建大致步骤:
    1. 调用dup_task_struct()为新进程分配内核栈,task_struct等,其中的内容与父进程相同。
    2. check新进程(进程数目是否超出上限等)
    3. 清理新进程的信息(比如PID置0等),使之与父进程区别开。
    4. 新进程状态置为 TASK_UNINTERRUPTIBLE
    5. 更新task_struct的flags成员。
    6. 调用alloc_pid()为新进程分配一个有效的PID
    7. 根据clone()的参数标志,拷贝或共享相应的信息
    8. 做一些扫尾工作并返回新进程指针
    • 从堆栈来看:
  • 那么上图中的schedule_tuil做了什么呢?我们可以从实验中看到:

  • 建一个新进程在内核中的执行过程
    • 复制一个PCB——task_struct,见copy_process内部
      • err = arch_dup_task_struct(tsk, orig);

    • 给新进程分配一个新的内核堆栈

      • ti = alloc_thread_info_node(tsk, node);

      • tsk->stack = ti;

      • setup_thread_stack(tsk, orig); //这里只是复制thread_info,而非复制内核堆栈。

    • 从用户态的代码看fork():函数返回了两次,即在父子进程中各返回一次

      • *childregs = *current_pt_regs(); //复制内核堆
      • childregs->ax = 0; //为什么子进程的fork返回0,这里就是原因!
      • p->thread.sp = (unsigned long) childregs; //调度到子进程时的内核栈顶
      • p->thread.ip = (unsigned long) ret_from_fork; //调度到子进程时的第一条指令地址

20135302魏静静——linux课程第六周实验及总结的更多相关文章

  1. 20135302魏静静——linux课程第三周实验及总结

    linux课程第三周实验及总结 一.实验:跟踪分析Linux内核的启动过程 使用gdb跟踪调试内核从start_kernel到init进程启动 使用实验楼的虚拟机打开shell cd LinuxKer ...

  2. 20135302魏静静——linux课程第五周实验及总结

    linux课程第五周实验及总结 一.学习总结 给MenuOS增加time和time-asm命令(四步操作命令) rm menu -rf 强制删除git clone http://github.com/ ...

  3. 20135302魏静静——linux课程第七周实验及总结

    linux课程第七周实验及总结 实验及学习总结 1. 编译链接的过程和ELF可执行文件格式(以hello为例) GNU编译系统编译源码: 首先,运行C预处理器(cpp),将.c文件翻译成.i文件——g ...

  4. 20135302魏静静——linux课程第八周实验及总结

    linux课程第八周实验及总结 实验及学习总结 1. 进程切换在内核中的实现 linux中进程切换是很常见的一个操作,而这个操作是在内核中实现的. 实现的时机有以下三个时机: 中断处理过程(包括时钟中 ...

  5. 20135302魏静静——Linux课程期中总结

    Linux期中总结 Linux课程第一周实验及总结:[http://www.cnblogs.com/20135302wei/p/5218607.html] 冯诺依曼体系结构的核心思想是存储程序计算机. ...

  6. 20135302魏静静——linux课程第四周实验及总结

    linux课程第四周实验及总结 一.实验 我选择的是第20号系统调用,getpid 代码如下: /* getpid.c */ #include <unistd.h> #include &l ...

  7. 20135302魏静静Linux内核分析第二周学习总结

    操作系统是如何工作的 1. 小结:计算机是怎样工作的 三个法宝 存储程序计算机.函数调用堆栈.中断机制 两把宝剑 中断上下文.进程上下文的切换 2. 堆栈 堆栈是C语言程序运行时必须的一个记录调用路径 ...

  8. Linux分析第六周——进程的描述和进程的创建

    Linux分析第六周--进程的描述和进程的创建 李雪琦+原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/US ...

  9. 201521123122 《java程序设计》 第六周实验总结

    201521123122 <java程序设计>第六周实验总结 1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想 ...

随机推荐

  1. XStream别名;元素转属性;去除集合属性(剥皮);忽略不需要元素

    city package xstream; public class City { private String name; private String description; public St ...

  2. LeetCode 笔记系列九 Search in Rotated Sorted Array

    题目: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7  ...

  3. Servlet------>jsp jstl核心标签库

    这里不需要刻意记,在jar里,c.tld文件都有,可以自己找源码看

  4. [iOS微博项目 - 4.2] - 设置转发微博背景

    github: https://github.com/hellovoidworld/HVWWeibo A.转发微博部分的淡灰色背景 1.需求 转发微博部分需要设置背景色 使用图片作为背景   2.思路 ...

  5. nginx分发请求的2种方式:1、指明server_name;2、通过location过滤uri来分发请求;

    user nginx; worker_processes 8; # = cpu num; error_log /data/nginx/log/error/error.log warn; # warn, ...

  6. [genome shell]标题栏优化

    参考地址:https://wiki.archlinux.org/index.php/GNOME_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)#.E4.BB.8E.E5. ...

  7. java基础03变量和基本数据类型

    package cn.bdqn.test; /** * * @author 小豆腐 * * 变量:会变化的量?? * 一个数据在内存中存储空间的表示!在运行期间可以动态改变! * * 关键字:在jav ...

  8. leadcode 541. Reverse String II

    package leadcode; /** * 541. Reverse String II * Easy * 199 * 575 * * * Given a string and an intege ...

  9. Python在向CSV文件写中文时乱码的处理办法

    前言 python2最大的坑在于中文编码问题,遇到中文报错首先加u,再各种encode.decode.当list.tuple.dict里面有中文时,打印出来的是Unicode编码,这个是无解的.对中文 ...

  10. python 将日期戳(五位数时间)转换为标准时间

    5位数日期戳 读取 .mat 文件处理里面数据时,发现里面的日期数据全部都是 “5位数” 数字,很不解: 后来查到可以在excel中通过设置单元格调回标准日期格式,如下: 选中日期戳,右键选择 “格式 ...