20135302魏静静——linux课程第六周实验及总结
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号进程是所有内核线程的祖先
进程的创建大致步骤:
- 调用dup_task_struct()为新进程分配内核栈,task_struct等,其中的内容与父进程相同。
- check新进程(进程数目是否超出上限等)
- 清理新进程的信息(比如PID置0等),使之与父进程区别开。
- 新进程状态置为 TASK_UNINTERRUPTIBLE
- 更新task_struct的flags成员。
- 调用alloc_pid()为新进程分配一个有效的PID
- 根据clone()的参数标志,拷贝或共享相应的信息
- 做一些扫尾工作并返回新进程指针
从堆栈来看:
那么上图中的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课程第六周实验及总结相关推荐
- 20135302魏静静——linux课程第三周实验及总结
linux课程第三周实验及总结 一.实验:跟踪分析Linux内核的启动过程 使用gdb跟踪调试内核从start_kernel到init进程启动 使用实验楼的虚拟机打开shell cd LinuxKer ...
- Python课程第六周笔记及作业练习
Python第六周 笔记 作业 练习 笔记 组合数据类型 三种基本数据类型: (1) 集合类型 (2) 序列类型:元组类型和列表类型 (3) 字典类型 集合类型及操作 (1) 集合类型定义 集合是多个 ...
- python第六周实验_机器学习 | 吴恩达机器学习第六周编程作业(Python版)
实验指导书 下载密码:ovyt 本篇博客主要讲解,吴恩达机器学习第六周的编程作业,作业内容主要是实现一个正则化的线性回归算法,涉及本周讲的模型选择问题,绘制学习曲线判断高偏差/高方差问题.原始实 ...
- 201771010110孔维滢《面向对象程序设计Java》第十六周实验总结
理论知识部分: 1.程序与进程: 程序是一段静态的代码,它是应用程序执行的蓝本. 进程是程序的一次动态执行,它对应了从代码加载.执行至执行完毕的一个完整过程. 2.多线程 多线程是进程执行过程中产生的 ...
- Linux系统管理第六周作业【Linux微职位】
1.请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情) CentOS系统启动流程如下: POST --> Boot Sequence(BIOS) --> Boot Lo ...
- HCIA网络课程第六周作业
(1)请提交配置好stp后,根桥交换机的display stp brief截图 (2)请写出STP的接口状态 (3)请写出RSTP对STP所做出的改进 RSTP定义了新的两种端口角色:备份端口(Bac ...
- 【带你快速了解人工智能开发Pandas基础课程第六周】
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.Dataframe的分组聚合运算 二.DatamFrame常用统计值以及排序方法 三.DatamFrame的数据分 ...
- 十六周实验报告 任务二
源程序: #include <iostream> #include <fstream> #include <iomanip> #include <string ...
- 【服务计算】第十六周实验报告
文章目录 Docker容器实践 准备Docker环境 运行第一个容器 Docker基本操作 显示本地镜像库内容 获得帮助 显示运行中容器 显示所有容器(包含已中止) 继续运行原容器并进入 检查dock ...
最新文章
- 她92年的,27岁,当上浙大博导。
- 别吵吵内卷了,看看人家虚拟人:连续直播70天都没工资
- TensorFlow实现人脸检测和人脸识别
- Java基础-特殊数据类型:枚举
- TF之NN:利用DNN算法(SGD+softmax+cross_entropy)对mnist手写数字图片识别训练集(TF自带函数下载)实现87.4%识别
- 【小白学习PyTorch教程】八、使用图像数据增强手段,提升CIFAR-10 数据集精确度
- java中的23中设计模式
- dataset.xsd的定义(vs2008)
- java rsync上传_Rsync自动同步工具
- 标签打印软件如何连接标签打印机
- 实对称矩阵的若干性质与详细证明
- javaweb response
- iTunes 未能备份iphone,因为无法将备份存储在电脑上
- Latex的安装与使用
- 离焦、球差、像散等成像结果
- 关于Halcon的离心机试管槽定位
- 2021 安装centos
- Matlab【路径规划】—— 无人机药品配送路线最优化
- Elasticsearch学习2 SpringBoot整合 测试复杂检索
- linux服务器网卡重启后会还原,详解CentOS重启后resolv.conf被重置的解决方案
热门文章
- ajax返回类型探讨
- 炼油机出来的什么油_小型精炼油设备10来万一套供不应求,油作坊提高油品质量才有出路...
- python bp神经网络 异或_基于python的BP神经网络及异或实现过程解析
- hive一次加载多个文件_0738-6.2.0-如何在Hive中使用多分隔符
- GO恶意样本实例分析
- python Typing模块-类型注解
- C#求空间两点之间的距离
- spark on yarn
- Feature Tools:可自动构造机器学习特征的Python库
- python将某个列表按元素值分成多个子列表