线性linux查看进程

linux查看进程  时间:2021-02-26  阅读:()
Linux操作系统分析中国科学技术大学计算机系陈香兰(0512-87161312)xlanchen@ustc.
edu.
cnAutumn2009进程地址空间内核态和用户态分配内存的不同内核中的函数以直接了当的方式获得动态内存内核是操作系统中优先级最高的成分.
内核信任自己采用我们上次课介绍的页面级内存分配和小内存分配线性空间(3GB~4GB)线性空间(<3GB)物理内存:highmem物理内存:DMA物理内存:Normal内核态和用户态分配内存的不同给用户态进程分配内存时请求被认为是不紧迫的用户进程不可信任因此,当用户态进程请求动态内存时,并没有立即获得实际的物理页框,而仅仅获得对一个新的线性地址区间的使用权这个线性地址区间会成为进程地址空间的一部分,称作线性区(memoryareas)进程地址空间进程最多能访问4GB的线性地址空间但进程在访问某个线性空间之前,必须获得该线性空间的许可因此,一个进程的地址空间是由允许该进程访问的全部线性地址组成内核使用线性区资源来表示线性地址空间每个线性区由起始线性地址、长度和一些存取权限描述与进程地址空间相关的描述符线性区的开始和结束都必须4KB对齐进程获得新线性区的一些典型情况:刚刚创建的新进程使用exec系统调用装载一个新的程序运行将一个文件(或部分)映射到进程地址空间中当用户堆栈不够用的时候,扩展堆栈对应的线性区……与创建、删除线性区相关的系统调用brk()改变进程堆的大小execve()Loadsanewexecutablefile,thuschangingtheprocessaddressspace_exit()Terminatesthecurrentprocessanddestroysitsaddressspacefork()Createsanewprocess,andthusanewaddressspacemmap()Createsamemorymappingforafile,mmap2()thusenlargingtheprocessaddressspacemremap()扩大或缩小线性区remap_file_pages()Createsanon-linearmappingforafilemunmap()Destroysamemorymappingforafile,thuscontractingtheprocessaddressspaceshmat()Attachesasharedmemoryregionshmdt()Detachesasharedmemoryregion线性区(memoryarea)比如0x08048000——0x0804C000这段线性地址空间被分配给了一个进程,进程就可以访问这段地址空间进程只能访问某个有效的memoryarea.
进一步讲,这个area可以被标志为只读或者不可执行(nonexecutable)如果进程试图访问一个有效的area之外的地址或者用不正确的方式访问一个有效的area,内核将通过段异常(segmentationfault)杀死这个进程线性区中可以包含各种内容可执行文件代码段的内存映射,就是.
textsection数据段的内存映射,.
datasectionzeropage的内存映射用来包含未初始化的全局变量,.
bsssection为库函数和链接器附加的代码、数据、bss段文件的内存映射共享内存的映射匿名内存区域的映射,比如通过malloc()函数申请的内存区域进程地址空间中所有有效的线性地址都确定的存在于一个area中memoryareas不重叠进程中每个单独的area对应一个不同内存区:堆栈、二进制代码、全局变量、文件映射等等增加或删除一个线性区task_struct中的内存描述符参见include/linux/mm_types.
h主要数据项的说明参见ULK3中文版354页Include/linux/sched.
h:task_struct分配一个内存描述符copy_mm函数用来在fork()调用中从父进程拷贝内存描述符其中间接调用mm_alloc_pgd来分配一个新的页表而mm_struct数据结构本身的空间是从mm_cachep指向的slab缓存中通过allocate_mm()宏分配得到的如果父进程在fork()创建子进程时,通过一些标志指明要和子进程共享地址空间.
那么,只需要kernel/fork.
c:copy_mmdo_forkcopy_processcopy_mmmm_alloc_pgd释放一个内存描述符在进程退出时,exit_mm()函数被调用首先做一些清除工作,更新一些内核全局统计数据接着调用mmput(),这个函数减内存描述符的mm_users域如果mm_users域变成了0,就调用mmdrop()函数来减mm_count域如果mm_count域变成了0,就由free_mm()宏调用kmem_cache_free()函数把mm_struct返还给mm_cachp指向slab缓存kernel/exit.
c:exit_mmdo_exitexit_mmKernel/fork.
c线性区(memoryareas)每个线性区由一个vm_area_struct结构来表示这个结构描述了一段给定的内存区间区间中的地址都有同样的属性,比如同样的存取权限和相关的操作函数用这个结构可以表示各种线性区,比如映射可执行的二进制代码的线形区、用作用户态堆栈的线形区等等include/linux/mm_types.
h线性区的存取权限vm_flags域描述有关这个线性区全部页的信息.
例如,进程访问每个页的权限是什么.
还有一些标志描述线性区自身,例如它应该如何增长VM_READ,VM_WRITE,VM_EXECVM_SHAREDVM_RESERVEDVM_GROWSUPinclude/linux/mm.
h线性区的链表和红黑树通过内存描述符中的两个域mmap和mm_rb都可以访问线性区.
事实上,它们都指向了同一个vm_area_struct结构,只是链接的方式不同mmap指向的线性区链表用来遍历整个进程的地址空间红黑树mm_rb用来定位一个给定的线性地址落在进程地址空间中的哪一个线性区中mmap_cache用来缓存最近用过的线性区处理线性区内核进程需要对一个线性区进行处理,比如确定一个给定线性地址是否存在于一个线性地址空间中find_vma(),查找一个线性地址两个参数:进程内存描述符的地址mm和线性地址addrfind_vma_intersection(),查找一个与给定地址区间重叠的线性区get_unmapped_area(),查找一个空闲的地址区间arch_get_unmapped_areashm_get_unmapped_areainsert_vm_struct(),向内存描述符链表中插入一个线性区mm/mmap.
cinclude/linux/mm.
hmm/mmap.
cmm/mmap.
c创建一个线性区间mmap()和do_mmap(),创建一个线性区根据file参数映射指定的文件中偏移量为offset,长度为len的一段内容addr参数指明从何处开始查找一段可用的空闲线性地址区间Prot参数指定这个区间所包含的页的存取权限flags参数指定这个创建的线性区本身的一些标志staticinlineunsignedlongdo_mmap(structfile*file,unsignedlongaddr,unsignedlonglen,unsignedlongprot,unsignedlongflag,unsignedlongoffset)include/linux/mm.
h删除一个线性区间munmap()和do_munmap()do_munmap()函数从进程地址空间中删除一段线性空间mm参数指向了当前进程的内存描述符addr参数为线性区的起始地址len参数指明要删除的区间大小intdo_munmap(structmm_struct*mm,unsignedlongaddr,size_tlen)mm/mmap.
c缺页异常(i386中14号异常)如前所述,内核只是通过mmap()等调用分配了一些线性地址空间给进程,并没有真正的把实际的物理页框分配给进程当进程试图访问这些分配给它的地址空间时,比如一段线性地址空间映射的是二进制代码,则进程被调度执行的时候会跳转到这个地址上去执行.
此时,并没有物理页框对应于这些线性地址,从而会引发一个缺页异常缺页异常处理程序do_page_fault缺页异常处理程序处理缺页异常.
它可以判断出这是不是一个合法的缺页异常,如果是,则负责给这段线性地址分配一些物理页框并把磁盘中对应的文件写入这些物理页框这样进程得以正常运行.
Thanks!
Theend.

10gbiz首月半价月付2.36美元,香港/洛杉矶VPS、硅谷独立服务器/站群服务器

收到10gbiz发来的7月份优惠方案,中国香港、美国洛杉矶机房VPS主机4折优惠码,优惠后洛杉矶VPS月付2.36美元起,香港VPS月付2.75美元起。这是一家2020年成立的主机商,提供的产品包括独立服务器租用和VPS主机等,数据中心在美国洛杉矶、圣何塞和中国香港。商家VPS主机基于KVM架构,支持使用PayPal或者支付宝付款。洛杉矶VPS架构CPU内存硬盘带宽系统价格单核512MB10GB1...

华纳云新人下单立减40元/香港云服务器月付60元起,香港双向CN2(GIA)

华纳云(HNCloud Limited)是一家专业的全球数据中心基础服务提供商,总部在香港,隶属于香港联合通讯国际有限公司,拥有香港政府颁发的商业登记证明,保证用户的安全性和合规性。 华纳云是APNIC 和 ARIN 会员单位。主要提供数据中心基础服务、互联网业务解决方案, 以及香港服务器租用、香港服务器托管、香港云服务器、美国云服务器,云计算、云安全技术研发等产品和服务。其中云服务器基于成熟的 ...

Megalayer(月599元)限时8月香港和美国大带宽服务器

第一、香港服务器机房这里我们可以看到有提供四个大带宽方案,是全向带宽和国际带宽,前者适合除了中国大陆地区的全网地区用户可以用,后者国际带宽适合欧美地区业务。如果我们是需要大陆地区速度CN2优化的,那就需要选择常规的优化带宽方案,参考这里。CPU内存硬盘带宽流量价格选择E3-12308GB240GB SSD50M全向带宽不限999元/月方案选择E3-12308GB240GB SSD100M国际带宽不...

linux查看进程为你推荐
缓冲区溢出教程如何防止高手使用缓冲区溢出?拂晓雅阁?英特尔和AMD有什么区别啊?微信如何建群微信怎么建立群照片转手绘怎么把图片P成手绘godaddyGodaddy域名怎么接受人人逛街人人逛街网是正品吗lockdowndiphone4s 完美越狱5.1.1时出现Could not connect to lockdownd。求救啊!!iphone6上市时间苹果6什么时候出来网络广告投放网络广告的投放目的是什么?三星s8什么时候上市三星s8什么时候上市 三星s8上市时间
域名备案流程 如何申请免费域名 香港ufo 站群服务器 美国主机论坛 远程登陆工具 北京主机 彩虹ip 亚洲小于500m 湖南服务器托管 php空间推荐 me空间社区 阿里校园 微软服务器操作系统 优酷黄金会员账号共享 万网主机管理 空间登录首页 1元域名 美国迈阿密 重庆联通服务器托管 更多