• 2019-2020-1 20199302《Linux内核原理与分析》第七周作业


    第六章 进程的描述和进程的创建

    (一)进程的描述

    1、OS的三大管理功能:(1)进程管理(进程)(2)内存管理(虚拟内存)(3)文件系统(文件)
    2、进程的描述:进程控制块PCB
    3、在Linux内核中,struct task_struct描述进程,其中的变量state为进程状态,stack是堆栈。结构关系:进程状态,进程双向链表的管理,控制台tty,文件系统fs的描述,进程打开文件的文件描述符:files、内存管理的描述mm,进程间通讯的信号signal的描述等。
    4、Linux进程的状态与操作系统原理中的进程状态的主要区别在于,Linux内核中的就绪态和运行态都
    被称作TASK_RUNNING,在阻塞态的进程分为两种,一种是TASK_INTERUPTIBLE,可以被信号以及wake_up()唤醒,另一种是TASK_UNINTERUPTIBLE只能被wake_up()唤醒。i

    5、进程的标识符PID,在进程描述符中用pid和tgid标识进程。
    6、双向链表struct list_head tasks用于管理进程数据结构。

    (二)进程的创建

    1、init_task是第一个进程(0号进程)的进程描述结构体变量,它的初始化通过硬编码的方式固定下来,而其他进程的初始化都是通过do_fork复制父进程的方式初始化的。
    2、内存管理相关代码。
    mm和active_mm是和进程地址空间、内存管理相关的数据结构指针,包含多个数据段,代码段,堆栈段。
    3、进程之间的父子、兄弟关系
    struct task_struct数据结构中记录当前进程的父进程real_parent、parent,记录当前进程的子进程的是双向链表struct list_head children,记录当前进程的兄弟进程的是双向链表struct list_head sibling。父子兄弟之间复杂的链表关系都通过指针或者双向链表关联起来。
    4、保存进程上下文中CPU相关一些状态信息的数据结构
    struct thread_struct保存进程上下文中CPU相关的一些状态信息的数据结构。其中最重要的是sp和ip,在x86-32位系统中,sp用来保存进程上下文中的ESP寄存器状态,ip用来保存进程上下文中的EIP机寄存器状态。
    5、进程的创建和过程分析
    进程的创建大概就是把当前进程的描述符等相关进程资源复制一份,产生一个子进程,根据子进程的需要对复制的进程描述符做一些修改,然后将创建好的子进程放入运行队列(对应操作系统中的就绪队列)。

    (三)分析进程创建过程


    给menuOS添加断点,分别在sys_clone do_fork dup_task_struct copy_process``copy_thread处


    在命令行中输入fork发现停在sys_clone处,说明系统调用函数是sys_clone继续执行会停在do_fork中

  • 相关阅读:
    zabbix 对/etc/ssh/sshd_config文件的监控 但status为unknowen
    Kotlin从零到精通Android开发
    谷歌官方 构建您的第一个应用 Kotlin版
    android studio 运行按钮为灰色的解决办法之一
    webapi发布到windows 2012的iis8里 出错
    Asp.net MVC WebApi项目的自动接口文档及测试功能打开方法
    Asp.net Web Api开发(第四篇)Help Page配置和扩展
    关于SNMP的MIB文件的语法简述
    Visual Stdio 2017增加SVN支持
    ffmpeg 多个音频合并 截取 拆分
  • 原文地址:https://www.cnblogs.com/eosmomo/p/11784233.html
Copyright © 2020-2023  润新知