Linux内核分析(第六周)
进程的控制与创建
一、进程的描述
1.操作系统内核的三大功能:进程管理(核心),内存管理,文件系统;
2.状态:
fork() task_zombit(终止)
task_running(就绪;但是没有运行) task_running(正在运行)
task_Intertupt
task_Uninterrupt
3.标识pid
4.struct list_head 进程双向链表
struct mm_struct 地址空间有关
二、进程的创建
1.概览
1. fork()用户态创建子进程
2. fork()在父进程和子进程中各返回一次
2.理解方法
1. fork()是一个系统调用
2. fork() vfork() clone()最终都可以在do_fork来实现进程的创建
3.复制当前进程实现创建新进程
3.浏览相关关键代码
1.复制、给新进程分配、修改PID、进程链表等;
2.sys_fork sys_clone sys_vfork 最终都return do_fork
3.alloc_thread_info_node 地址空间,分配实际内核空间
4.p=dup_init_task 复制进程
5.childregs= *current_pt_regs();复制内核堆栈
6.return_from_fork(返回用户态)
拷贝内核堆栈数据和指定新进程的第一条指令进程
4.gdb跟踪调试
三、实验
1.准备工作
rm menu -fs
clone xxxxxx
cd menu
mv test_fork.c
make rootfs
2.目的
阅读理解task_struct数据结构;分析fork函数对应的内核处理过程sys_clone,理解创建一个新进程如何创建和修改task_struct数据结构;使用gdb跟踪分析一个fork系统调用内核处理函数sys_clone,验证对Linux系统创建的理解;进程是从哪里开始执行的;在 Linux 内核中,供用户创建进程的系统调用fork()函数的响应函数是 sys_fork()、sys_clone()、sys_vfork()。这三个函数都是通过调用内核函数 do_fork() 来实现的.
3.gdb跟踪调试
设置断点
b do_fork
b dup_task_struct
b copy_process
b copy_thread
b ret_from_fork
实验截图

task_struct数据库结构很庞大,Linux进程的状态与操作系统原理中描述的进程状态有所不同,比如就绪态和运行态都是TASK_RUNNING。简略的双向循环链表。程序创建的进程具有父子关系
系统调用内核处理函数sys_clone创建一个新进程,通过调用do_fork来实现进程的创建,Linux通过复制父进程的PCB来创建进程,再对其进行相应修改。
子进程在内核中fork返回,在内核中开始执行,当子进程开始运行的时候,其ret_from_fork将做一系列工作,然后返回到用户态。
Linux内核分析(第六周)的更多相关文章
- LINUX内核分析第六周学习总结——进程的描述与创建
LINUX内核分析第六周学习总结--进程的描述与创建 标签(空格分隔): 20135321余佳源 余佳源 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc ...
- linux内核分析第六周学习笔记
LINUX内核分析第六周学习总结 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.c ...
- LINUX内核分析第六周学习总结——进程的描述和进程的创建
LINUX内核分析第六周学习总结——进程的描述和进程的创建 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/cours ...
- Linux内核分析第六周学习笔记——分析Linux内核创建一个新进程的过程
Linux内核分析第六周学习笔记--分析Linux内核创建一个新进程的过程 zl + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...
- Linux内核分析第六周学习总结:进程的描述和进程的创建
韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.进程的描述 ...
- "Linux内核分析"第六周实验报告
张文俊 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 1.进程的描述 ...
- linux内核分析 第六周
一.进程的描述 为了管理进程,内核必须对每个进程进行清晰的描述,进程描述符提供了内核所需了解的进程信息. 1.进程控制块PCB--task_struct 进程状态 进程打开的文件 进程优先级信息 2. ...
- Linux内核分析——第六周学习笔记20135308
第六周 进程的描述和进程的创建 一.进程描述符task_struct数据结构 1.操作系统三大功能 进程管理 内存管理 文件系统 2.进程控制块PCB——task_struct 也叫进程描述符,为了管 ...
- linux内核分析 第六周读书笔记
第三章 进程管理 3.1 进程 进程:处于执行期的程序 线程是在进程活动中的对象:内核调度的对象是线程而不是进程,在Linux系统中,并不区分线程和进程 在现代操作系统中, 进程提供两种虚拟机制:虚拟 ...
- linux内核分析第六周-分析Linux内核创建一个新进程的过程
Linux内核对进程管理是操作系统的重要任务之一. 此次实验就是了解内核创建一个新进程的大致过程. 为了简单,使用fork再用户态创建一个进程.代码如下: 下面是准备工作 cd LinuxKer ...
随机推荐
- 页面元素固定在页面底部的纯css代码(兼容IE6)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- MySql详解(四)
MySql详解(四) MySql的DML操作 插入: 一.方式一 语法: insert into 表名(字段名,...) values(值,...); 特点: 1.要求值的类型和字段的类型要一致或兼容 ...
- BZOJ4245:[ONTAK2015]OR-XOR(贪心)
Description 给定一个长度为n的序列a[1],a[2],...,a[n],请将它划分为m段连续的区间,设第i段的费用c[i]为该段内所有数字的异或和,则总费用为c[1] or c[2] or ...
- docker tomcat 已主机名为日志输出路径
目的:所有的日志输出到共享存储目录中 方法:将 tomcat 的日志放置到 /data/logs/主机名/ 下, 1. 修改tomcat/conf下的logging.properties [root ...
- CentOS7.5搭建Flask环境python3.6+mysql+redis+virtualenv
wget安装环境装备 yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncur ...
- linux 设置默认网关永久
.永久添加 1 2 vim /etc/sysconfig/network GATEWAY=192.168.1.4
- rpm yum apt-get redhat centos ubuntu
rpm是由红帽公司开发的软件包管理方式,使用rpm我们可以方便的进行软件的安装.查询.卸载.升级等工作.但是rpm软件包之间的依赖性问题往往会很繁琐,尤其是软件由多个rpm包组成时.Yum(全称为 Y ...
- Oracle中Error while performing database login with the XXXdriver; Listener refused the connection with the following error; ORA-12505,TNS:listener does not currently know of SID given inconnect descrip
一次连接数据库怎么也连接不上,查了多方面资料,终于找到答案,总结 首先应该保证数据库的服务启动 在myeclipse的数据库视图中点 右键->new 弹出database driver的窗口, ...
- iscsi target IET架构
IET(iSCSI Enterprise Target)是内核态实现的iscsi target,相比于用户态实现的target(比如tgt),iet比较稳定,并且也算是历史悠久,io都直接经过内核态, ...
- Liunx-cp命令
1. 复制当前目录的test文件夹 到/201904 目录 出现如下截图问题是因为test目录下还有文件,所以得加-r,使用递归拷贝.我现在用这个命令拷贝文件都加-r了,不管有文件还是没文件 2.复制 ...