zoukankan      html  css  js  c++  java
  • 2019-2020-1 20199301《Linux内核原理与分析》第七周作业

    第六章

    进程的描述和进程的创建

    学习笔记

    1.操作系统的三大管理功能:

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

    2.操作系统最核心的功能是进程管理。

    3.为了管理进程,内核要描述进程的结构,也成为进程描述符,进程描述符提供了进程相关的所有信息。

    • task_struct数据结构非常庞大

    4.就绪态和运行态都是TASK_RUNNING

    5.操作系统原理中的进程有就绪态、运行态、阻塞态这三种基本状态,与实际的Linux内核管理的进程状态不同

    • Linux内核中是否在运行取决于它有没有获得CPU的控制权
    • 一个正在运行的进程在等待特定的事件或资源时会进入阻塞态。
    • 阻塞态分为两种TASK_INTERRUPTIBLE(可以被信号和wake_up()唤醒)和TASK_UNINTERRUPTIBLE(只能被wake_up()唤醒)。

    6.进程的标识符PID也很重要,在进程描述中用pid和tgid标识进程。

    7.struct list_head tasks 用于管理进程数据结构的双向链表

    8.fork.vfork和clone这三个系统调用和kernel_thread内核函数都可以创建一个新进程,而且都是通过do_fork函数来创建进程的,只是传递的参数不同。

    实验

    • 删掉menu,克隆一份新的,把test.cgei覆盖掉。

    • 在sys_clone,do_fork,dup_task_struck,copy_process,copy_thread,ret_from_fork处设置断点

    • 在MenuOS中执行fork,就会发现fork函数停在了父进程中

    • 继续执行 停在了do_fork的位置
    • 继续追踪

    • 在copy_thread中得到初始化

    总结

    Linux中,fork、vfork和clone三个系统调用都是通过调用do_fork来实现进程的创建,而fork()系统调用产生的子进程在系统调用处理过程中从ret_from_fork处开始执行。fork会产生父子进程,在父进程中,返回值是子进程的进程号;在子进程中,返回值为0。因此可通过返回值来判断当前进程是父进程还是子进程。使用fork函数得到的子进程是父进程的一个复制品,它从父进程处复制了整个进程的地址空间,包括进程上下文,进程堆栈,内存信息,打开的文件描述符,信号控制设定,进程优先级,进程组号,当前工作目录,根目录,资源限制,控制终端等。而子进程所独有的只是它的进程号,资源使用和计时器等。可以看出,使用fork函数的代价是很大的,它复制了父进程中的代码段,数据段和堆栈段里的大部分内容,使得fork函数的执行速度并不快。

  • 相关阅读:
    OpenStack(queens)最小化搭建记录——控制与计算共两个节点
    CentOS7 minimal(最小化安装)后增加的软件安装
    redis
    layui 单击事件,选中 checkbox f
    DLL 引用查询工具
    自定义JS Map 函数
    修改MSSQL字段类型
    苹果ATS特性服务器配置指南 HTTPS 安卓可以用 IOS 报错。
    基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系。
    不能将多个项传入“Microsoft.Build.Framework.ITaskItem”类型的参数
  • 原文地址:https://www.cnblogs.com/lsqz/p/11743171.html
Copyright © 2011-2022 走看看