欢迎来到天天文库
浏览记录
ID:59429681
大小:813.50 KB
页数:31页
时间:2020-09-18
《进程管理ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Linux进程管理1主要内容进程内存空间1进程控制块及进程组织2进程调度进程相关系统调用432一、进程内存空间进程管理与内存管理密不可分,进程的建立过程就直接涉及内存空间的问题思考以下名词:虚拟地址空间内核空间用户空间进程332位平台上线性地址是4GB大小虚拟地址空间也可以说就是程序员看到的内存空间。32位linux虚拟地址空间的大小就是4GB。41.虚拟地址空间虚拟地址空间:一个程序编译、连接后形成的地址空间就是一个虚拟地址空间。每个进程可以拥有4GB的虚拟地址空间(虚拟内存)linux内核将4GB空间的高1GB供内核使用,
2、称内核空间低3GB供各个进程使用,称用户空间(地址空间)理解:用户空间各自独立,每个进程通过系统调用进入内核,所以内核空间是进程共享的?参看课本第4章4.1回顾:IA32内存寻址、虚拟地址、线性地址、物理地址(第2章)5内核空间(1GB)进程1的用户空间3GB进程2的用户空间3GB进程n的用户空间3GB虚拟地址空间、内核空间和用户空间图解0xFFFFFFFF1G0xC0000000-------------------0xBFFFFFFF3G0x00000000内核程序虚拟地址编址都从0xC0000000开始0xFFFFFF
3、FF内存------------内核0x00000000注意,在虚拟地址空间中内核在高地址部分,而在实际内存中,内核被映射到低地址部分物理地址=虚拟地址x-0xC0000000虚拟地址空间用户程序虚拟地址编址都从0x00000000开始,3G范围内62.内核空间内核代码和数据称为“内核映象”。内核被编译连接形成内核的虚拟地址,占用的是虚拟地址空间中从3G到4G的高1G的线性空间。内核虚地址到物理地址的映射关系简单物理地址=虚拟地址-0xC0000000(PAGE_OFFSET)实际上内核也有自己的内核页目录项和页表,可理解为页
4、从内存0块开始正好一一对应,映射效果等价于上式7从不同进程的角度看3G到4G的线性空间是有着同样的内核页目录项和页表的,从而对应同样的物理内存空间。不同的进程通过系统调用可以访问内核空间;而不同进程中访问该空间的虚拟地址对应的内容一样,所以可说3G到4G的内核空间是所有进程共享的。进程之间的差异体现在0到3G用户空间所对应的页目录项和页表。83.进程的用户空间进程的用户空间中存放的是用户程序的代码和数据。每个进程最大拥有3G字节私有虚存空间利用分页机制,根据每个进程的页表进行用户空间的内存映射。9每个进程经编译、链接后形成的二
5、进制映像文件有一个代码段和数据段进程运行时须有自己独占的堆栈空洞部分:进程运行时调用malloc()动态分配的空间——堆进程的整个用户空间并不全部装入,而是通过请页机制,部分映射装入堆栈段空洞数据段代码段进程的用户空间(3G)创建进程两个关键问题:空间、PCB10二、进程控制块及其组织1.结构的定义进程控制块:对进程进行全面描述的数据结构Linux中把对进程的描述结构叫做task_struct:task_struct{longstate;/*进程状态*/intpid,uid,gid;/*一些标识符*/structtask_st
6、ruct*parent,*child,*o_sibling,*y_sibling/*一些亲属关系*/…}11状态信息-描述进程动态的变化。链接信息-描述进程的父/子关系。各种标识符-用简单数字对进程进行标识。进程间通信信息-描述多个进程在同一任务上协作工作。时间和定时器信息-描述进程在生存周期内使用CPU时间的统计、计费等信息。调度信息-描述进程优先级、调度策略等信息。文件系统信息-对进程使用文件情况进行记录。虚拟内存信息-描述每个进程拥有的地址空间。处理器环境信息-描述进程的执行环境(处理器的寄存器及堆栈等)可下载一个内核版
7、本,对照看看。结构体定义所在的头文件:linux/include/sched.h不同的内核版本,对此结构体的定义会不同122.控制块的存放建立新进程时linux为新进程分配一个task_struct结构,然后将指针保存在task数组中。数组长度就是linux最多并发进程数。task_struct实际保存位置是进程的内核栈的底端。通过栈寄存器ESP可访问到当前进程的PCB信息为了节省内核空间,栈底也可能只保存task_struct的一个属性thread_info,其他struct信息通过指针thread_info::task保存
8、在栈外。13C语言联合结构表示这样一个混合结构:uniontask_union{structtask_structtask;unsignedlongstack[2408];};Linux调用alloc_task_struct()函数分配8KB的task_union内存区,调用
此文档下载收益归作者所有