20135320赵瀚青LINUX第六周学习笔记
2016-03-30 22:53
549 查看
赵瀚青原创作品转载请注明出处《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
概述
这周主要讲解的是进程。首先老师就讲解了PCB进程结构块的数据结构,PCB进程控制块的代码包含了很多信息,最开始就是进程的状态信息,然后是进程状态符,进程调度相关信息等等很多部分。然后老师讲解了用fork()创建进程的过程,然后用gdb调试,跟踪创建进程的过程。
本周学习的内容在上个学期娄老师的课程中有涉及,所以难度不是非常大,但是老师的讲解更加详细,更加细致,也更加深入。对于我们理解操作系统中的进程有着非常重要的作用。
课本内容总结
一、进程的描述
为了管理进程,内核必须对每个进程进行清晰的描述,进程描述符提供了内核所需了解的进程信息。1. 进程控制块PCB——task_struct
操作系统的三大管理功能进程管理
内存管理
文件系统
PCB task_struct中包含
进程状态进程打开的文件
进程优先级信息
struct task_struct数据结构很庞大
二、进程的创建
进程借助创建原语实现创建一个新进程。首先为被创建进程在进程表集中区建立一个PCB--UNIX系统还要为进程创建U区和内存映像,从进程表索取一个空白PCB表目,记录它的下标;然后,把调用者提供的所有参数(见PCB块的内容),操作系统分配给新进程的PID和调用者的PID,就绪状态和CPU记账数据填入该PCB块;最后,把此PCB块分别列置到就绪队列RQ和进程隶属关系族群中。
UNIX系统使用fork()函数创建新进程时,为子进程复制EP进程的内存映像并不是主要目标。这时,若用exec()执行一个新程序,则子进程的正文段将全部更换,而数据段也将更新。
创建原语可描述如下:
Procedurecreate(n,S0,K0,M0,R0,acc) begin i:=getinternalname(n);//进程表下标 i.id:=n;i.priority:=K0;//进程PID,进程优先级 i.CPUstate=S0;i.mainstore:=M0;//初始CPU状态,内存地址 i.resources:=R0;i.status:=readys;//资源清单,就绪状态 j:=EP;i.parent:=j;i.progeny:=φ;//父进程是EP进程,子进程空 j.progeny:=i;//进程隶属关系 i.sdata=RQ;insert(RQ,i);//到就绪进程队列排队 continue end
三、实验内容
实验内容概述
阅读理解task_struct数据结构;分析fork函数对应的内核处理过程sys_clone,理解创建一个新进程如何创建和修改task_struct数据结构;
使用gdb跟踪分析一个fork系统调用内核处理函数sys_clone
实验步骤
1、启动MenuOS
cd LinuxKernel rm menu -rf git clone https://github.com/mengning/menu.git cd menu mv test_fork.c test.c make rootfs
2、2. gdb调试fork命令
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S
在新窗口中启动调试:
$ gdb $ file linux-3.18.6/vmlinux $ target remote:1234
并设置断点
- b sys_clone - b do_fork - b dup_task_struct - b copy_process - b copy_thread - b ret_from_for
在Menu系统中输入fork指令,可以看到只输出了fork功能的描述,在断点处sys_clone处停止了。继续运行,观察每个断点出的结果。
总结
创建一个新进程的执行过程1.通过调用do_fork来实现进程的创建; 2.复制父进程PCB--task_struct来创建一个新进程,要给新进程分配一个新的内核堆栈; 3.修改复制过来的进程数据,比如pid、进程链表等等执行copy_process和copy_thread 4、成功创建新进程
相关文章推荐
- 《Linux内核分析》第六周学习总结
- 分析Linux内核创建一个新进程的过程
- git linux
- Linux入门学习(五)
- 在linux终端下用命令编辑一个文件并保存
- 用MacOS X的Terminal远程连接CentOS 7
- 《Linux内核》课本读书笔记 第三章
- 查看linux服务器上的一些统计数据
- Linux 命令 解压到制定目录
- Linux内核分析-创建新进程的过程
- 20135220谈愈敏Linux Book_3
- Linux内存共享
- Linux多线程学习笔记
- Linux学习笔记6
- Centos7 平台中对于scikit安装教程的学习
- 【那年那人那linux】“正则表达式”初窥之二则问题
- Linux下Gcc生成和使用静态库和动态库详解
- Centos 源配置 163,epel,mysql
- 20135316Linux内核学习笔记第六周
- linux配置java环境变量