一、概述
堆栈是一个用户空间的内存区域,进程使用
堆栈作为
临时存储。
堆栈中存放的是函数中的局部变量,在函数的生命周期中可将变量压入堆栈,编译器需确保堆栈指针在函数退出前恢复到初始位置,即是说,内存是自动分配和释放的。
C/C++把存储在堆栈中的局部变量当作automatic存储,并使用auto关键字,这是局部变量的默认存储方式,所以现在没人用auto关键词。
与动态存储相对应的
静态存储,即用static定义的局部变量,不用堆栈来存储,而是使用
数据段。
堆栈的基地址位于用户空间的最高虚拟地址附近,并从那里向下延伸。
一个进程开始,堆栈的最大值就不能改变,如果占用的空间超过了堆栈大小,就导致堆栈溢出。
二、进程的内存组织形式
进程被分为三个区域:
文本、
数据和
堆栈
1) 文本区域
文本区域也叫做
代码段,由程序确定,包括代码(指令)和只读数据。该区域通常被标记为只读,任何对其写入的操作会导致段错误。
2) 数据区域
数据区域也叫做
数据段,包括已初始化和未初始化的数据,静态变量存储在这个区域中。
3) 堆栈区域
堆栈区域也叫
堆栈段,它用于给局部变量动态分配空间,同样函数传递参数和函数返回值也要用到堆栈。
堆栈也可向下增长(向内存低地址)也可以向上增长,依赖于具体的实现。通常是向下增长,而SP(堆栈指针)也是指向堆栈的最后地址。
4) 内存的分配区域
通常
堆栈位于最高虚拟地址附近,而数据段位于
堆栈段之后,最后是
代码段。
三、堆栈着色
当两个线程或进程使用相同的堆栈虚拟地址时,它们会争夺同一个cache行,导致竞争和降级行为。
堆栈着色的技术使每一个进程的基址都不相同,通过随机分配堆栈基址,多个进程会使用不同的cache行来避免。
四、常驻内存和锁定内存
常驻内存专指存储在RAM中的内存部分,不包括存储在交换区和未存储的进程的内存。
锁定内存是常驻内存的子集,它指被进程明确地锁定到RAM的虚拟内存中,不能用于交换,并一直常驻于RAM中。
分享到:
相关推荐
线程是进程的一条执行路径,它包含独立的堆栈和CPU寄存器状态,每个线程共享其所 附属的进程的所有的资源,包括打开的文件、页表(因此也就共享整个用户态地址空间)、信号标识及动态分配的内存等等。线程和进程的...
我们知道,在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式。而运行于一个进程中的多个线程,它们彼此之间使用...
我们知道,在Linux系统下,启动一个新的进程必须分配给它独立的地址空 间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式。而运行于一个进程中的多个线程,它们彼此之间使用...
每个进程通常都有一个完全独立的地址空间,即进程间的内存区域是隔离的。这意味着一个进程不能直接访问另一个进程的变量和数据结构。如果进程间需要通信(IPC,进程间通信),必须使用操作系统提供的机制,如管道、...
使用fork()函数得到的子进程是父进程的一个复制品,它从父进程处继承了整个进程的地址空间,包括进程的上下文、代码段、进程堆栈、内存信息、打开的文件描述符、符号控制设定、进程优先级、进程组号、当前工作目录、...
第4章 进程与进程调度 4.1 进程四要素 4.2 进程三部曲:创建、执行与消亡 4.3 系统调用fork()、vfork()与clone() 4.4 系统调用execve() 4.5 系统调用exit()与wait4() 4.6 进程的调度与切换 4.7 强制性...
我们知道,在Linux系统下,启动一个新的进程必须分配给它独立的地址空 间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式。而运行于一个进程中的多个线程,它们彼此之间使用...
第4章 进程与进程调度 4.1 进程四要素 4.2 进程三部曲:创建、执行与消亡 4.3 系统调用fork()、vfork()与clone() 4.4 系统调用execve() 4.5 系统调用exit()与wait4() 4.6 进程的调度与切换 4.7 强制性调度 ...
Linux中进程和线程的对比与区别 1.概念 进程:正在运行中的程序。 线程:进程中的一条执行路径。 2.区别 (1)通常在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源。在引入线程的操作系统中,...
5.3.2 Linux进程调度时机 5.3.3 进程调度的依据 5.3.4 进程可运行程度的衡量 5.3.5 进程调度的实现 5.4 进程切换 5.4.1 硬件支持 5.4.2 进程切换 第六章 Linux内存管理 6.1 Linux的内存管理概述 6.1.1 ...
Firejail是一个SUID沙箱程序,它使用Linux名称空间,seccomp-bpf和Linux功能来限制不受信任的应用程序的运行环境,从而降低了违反安全性的风险。 它允许进程及其所有后代对全局共享的内核资源(例如,网络堆栈,进程...
VIPT 该进程的代码大小加上数据大小再加上堆栈空间大小的总数。单位是KB。 RES 该进程占用的物理 该进程的状态。其中S代表休眠状态;D代表不可中断的休眠状态;R代表运行状态; Z代表僵死状态;T代表停止或跟踪状态。 ...
第4章 进程与进程调度 4.1 进程四要素 4.2 进程三部曲:创建、执行与消亡 4.3 系统调用fork()、vfork()与clone() 4.4 系统调用execve() 4.5 系统调用exit()与wait4() 4.6 进程的调度与切换 4.7 强制性...
线程和进程的关系:线程是属于进程的,线程运行在进程空间内,同时进程所产生的线程共享同一用户内存空间,并当进程退出时该进程所产生的线程都会被强制退出并清除。一个进程至少需要一个线程作为它的指令执行体...
20:Windows线程的系统空间堆栈.pdf 21:Windows进程的用户空间.pdf 22:Windows线程的调度和运行.pdf 23:关于TLS.pdf 24:Windows的结构化异常处理(一).pdf 25:Windows的结构化异常处理(二).pdf 26:Windows的...
第4章 进程与进程调度 4.1 进程四要素 4.2 进程三部曲:创建、执行与消亡 4.3 系统调用fork()、vfork()与clone() 4.4 系统调用execve() 4.5 系统调用exit()与wait4() 4.6 进程的调度与切换 4.7 强制性...
Firejail 是一个 SUID 程序,它通过使用 Linux 命名空间和 seccomp-bpf 限制不受信任的应用程序的运行环境来降低安全漏洞的风险。 它允许进程及其所有后代拥有自己的全局共享内核资源的私有视图,例如网络堆栈、进程...
Linux下一个进程在内存里有三部份的数据,就是“数据段”,“堆栈段”和“代码段”,其实学过汇编语言的人一定知道,一般的CPU象I386,都有上述三种段寄存器,以方便操作系统的运行。“代码段”,顾名思义,就是...
第1章 预备知识 1.1 Linux内核简介 ...第4章 进程与进程调度 第5章 文件系统 第6章 传统的Unix进程间通信 第7章 基于socket的进程间通信 第八章 设备驱动 第9章 多处理器的SMP系统结构 第10章 系统的引导和初始化
总的来说,思想是让子进程accept并处理请求,父进程通过子进程发来的信息控制请求数与子进程数之间的关系。 代码如下: 代码如下: #include #include #include #include #include #include #include #...