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; //调度到子进程时的第一条指令地址

转载于:https://www.cnblogs.com/20135302wei/p/5329518.html

20135302魏静静——linux课程第六周实验及总结相关推荐

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

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

  2. Python课程第六周笔记及作业练习

    Python第六周 笔记 作业 练习 笔记 组合数据类型 三种基本数据类型: (1) 集合类型 (2) 序列类型:元组类型和列表类型 (3) 字典类型 集合类型及操作 (1) 集合类型定义 集合是多个 ...

  3. python第六周实验_机器学习 | 吴恩达机器学习第六周编程作业(Python版)

    实验指导书    下载密码:ovyt 本篇博客主要讲解,吴恩达机器学习第六周的编程作业,作业内容主要是实现一个正则化的线性回归算法,涉及本周讲的模型选择问题,绘制学习曲线判断高偏差/高方差问题.原始实 ...

  4. 201771010110孔维滢《面向对象程序设计Java》第十六周实验总结

    理论知识部分: 1.程序与进程: 程序是一段静态的代码,它是应用程序执行的蓝本. 进程是程序的一次动态执行,它对应了从代码加载.执行至执行完毕的一个完整过程. 2.多线程 多线程是进程执行过程中产生的 ...

  5. Linux系统管理第六周作业【Linux微职位】

    1.请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情) CentOS系统启动流程如下: POST --> Boot Sequence(BIOS) --> Boot Lo ...

  6. HCIA网络课程第六周作业

    (1)请提交配置好stp后,根桥交换机的display stp brief截图 (2)请写出STP的接口状态 (3)请写出RSTP对STP所做出的改进 RSTP定义了新的两种端口角色:备份端口(Bac ...

  7. 【带你快速了解人工智能开发Pandas基础课程第六周】

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.Dataframe的分组聚合运算 二.DatamFrame常用统计值以及排序方法 三.DatamFrame的数据分 ...

  8. 十六周实验报告 任务二

    源程序: #include <iostream> #include <fstream> #include <iomanip> #include <string ...

  9. 【服务计算】第十六周实验报告

    文章目录 Docker容器实践 准备Docker环境 运行第一个容器 Docker基本操作 显示本地镜像库内容 获得帮助 显示运行中容器 显示所有容器(包含已中止) 继续运行原容器并进入 检查dock ...

最新文章

  1. 她92年的,27岁,当上浙大博导。
  2. 别吵吵内卷了,看看人家虚拟人:连续直播70天都没工资
  3. TensorFlow实现人脸检测和人脸识别
  4. Java基础-特殊数据类型:枚举
  5. TF之NN:利用DNN算法(SGD+softmax+cross_entropy)对mnist手写数字图片识别训练集(TF自带函数下载)实现87.4%识别
  6. 【小白学习PyTorch教程】八、使用图像数据增强手段,提升CIFAR-10 数据集精确度
  7. java中的23中设计模式
  8. dataset.xsd的定义(vs2008)
  9. java rsync上传_Rsync自动同步工具
  10. 标签打印软件如何连接标签打印机
  11. 实对称矩阵的若干性质与详细证明
  12. javaweb response
  13. iTunes 未能备份iphone,因为无法将备份存储在电脑上
  14. Latex的安装与使用
  15. 离焦、球差、像散等成像结果
  16. 关于Halcon的离心机试管槽定位
  17. 2021 安装centos
  18. Matlab【路径规划】—— 无人机药品配送路线最优化
  19. Elasticsearch学习2 SpringBoot整合 测试复杂检索
  20. linux服务器网卡重启后会还原,详解CentOS重启后resolv.conf被重置的解决方案

热门文章

  1. ajax返回类型探讨
  2. 炼油机出来的什么油_小型精炼油设备10来万一套供不应求,油作坊提高油品质量才有出路...
  3. python bp神经网络 异或_基于python的BP神经网络及异或实现过程解析
  4. hive一次加载多个文件_0738-6.2.0-如何在Hive中使用多分隔符
  5. GO恶意样本实例分析
  6. python Typing模块-类型注解
  7. C#求空间两点之间的距离
  8. spark on yarn
  9. Feature Tools:可自动构造机器学习特征的Python库
  10. python将某个列表按元素值分成多个子列表