Linux进程与它的仓库空间[操作系统]
本文“Linux进程与它的仓库空间[操作系统]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
一)概述
.仓库是一个用户空间的内存区域,进程利用仓库作为暂时存储.
.仓库中存放的是函数中的部分变量,在函数的生命周期中可以将变量压入仓库,编译器需求确保仓库指针在函数退出前恢复到初始位置,也就是说,内存是自动分配和释放的.
.C/C++把存储在仓库中的部分变量当作automatic存储,并利用auto关键字,这是部分变量的默许存储方法,所以目前没有人用auto关键词.
.与动态存储相对映的静态存储,也就是用static定义的部分变量,它不用仓库来存储,而是利用数据段来存储.
.仓库的基地址位于用户空间的最高虚拟地址四周,并从那边向下延伸.
.一个进程开始时,仓库的最大值就不能改变,假如占用的空间超越了仓库大小,那么就会招致仓库溢出.
二)进程的内存组织情势
进程被分为三个区域:文本,数据和仓库.
1)文本区域:
文本区域也叫做代码段,是由程序肯定的,它包含代码(指令)和只读数据,该区域普通被标志为只读,任何对其写入的操作会招致段错误.
2)数据区域:
数据区域也叫做数据段,它包含已初始化和未初始化的数据,静态变量存储在这个区域中,它的大小可以用系统调用brk(2)来改变.
3)仓库区域:
仓库区域也叫仓库段,它用于给部分变量动态分配空间,一样函数传送参数和函数返回值也要用到仓库.
仓库也可向下增长(向内存低地址)也可以向上增长,这依靠于具体的实现,普通都是向下增长的,而SP(仓库指针)也是指向仓库的最后地址.
4)内存的分配区域:
按照前面所述,仓库是位于最高虚拟地址四周,而数据段则位于仓库段之后,最后是代码段.
三)仓库着色
当两个线程或进程利用相同的仓库虚拟地址时,它们会争取同一个cache行,招致竞争和降级行为.
仓库着色的技术使每一个进程的基址都不相同,通过随机分配仓库基址,多个进程会利用差别的cache行来避免.
四)仓库的限制
仓库空间的最大值是由setrlimit系统调用肯定的,也可以通过bash内建的ulimit号令来设定和查看.
比方:
查看当前可以利用的最大仓库(以KB为单位)
ulimit -s
8192
设定为最大的利用仓库为15KB
ulimit -s 15
此时履行ls将会得到一个段错误.
ls -l /etc/
total 1040
Segmentation fault
通过用strace跟踪ls号令,将发现有以下的系统调用
getrlimit(RLIMIT_STACK, {rlim_cur=15*1024, rlim_max=15*1024}) = 0
阐明当前可用的仓库空间,已经不足以运行strace号令了.
五)常驻内存和锁定内存
常驻内存专指存储在RAM中的内存部份,不包含存储在交换区和未存储的进程的内存.
锁定内存是常驻内存的子集,它指被进程明确地锁定到RAM的虚拟内存中,不能用于交换,并一向常驻于RAM中.
以上是“Linux进程与它的仓库空间[操作系统]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |