进程的虚拟地址空间 && 进程管理命令

进程是资源分配的最小单位

线程是程序执行的最小单位(资源调度的最小单位)

进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,虚拟地址空间的大小由计算机的硬件平台决定,比如32位的平台决定了虚拟地址空间为4G
这4G空间的分配如下:

进程的虚拟地址空间 && 进程管理命令

1.内核空间

驻留在内存内,是操作系统的一部分,内核空间为内核保留,不允许应用程序读写该区域或调用内核代码。

2 栈(stack)

包括以下内容和用途:
1 函数的返回值和参数。
2 临时变量,包括非静态局部变量,以及编译器自动生成的临时变量。
3 保存上下文:包括函数调用前后需保持不变的寄存器。

  • ESP和EBP寄存器介绍(未完成)

3 内存映射段(mmap)

该区域用于映射可执行文件用到的动态链接库。若可执行文件依赖共享库,则系统会为这些动态库在从0x40000000开始的地址分配相应空间,并在程序装载时将其载入到该空间。在Linux 内核中,共享库的起始地址被往上移动至更靠近栈区的位置。

4 堆(heap)

堆用于存放进程运行时动态分配的内存段,可动态扩张或缩减。堆中内容是匿名的,不能按名字直接访问,只能通过指针间接访问。当进程调用malloc©/new(C++)等函数分配内存时,新分配的内存动态添加到堆上(扩张);当调用free©/delete(C++)等函数释放内存时,被释放的内存从堆中剔除(缩减) 。

5 .BSS段

.BSS(Block Started by Symbol)段中通常存放程序中以下符号:
1 未初始化的全局变量和静态局部变量
2 初始值为0的全局变量和静态局部变量(依赖于编译器实现)
3 未定义且初值不为0的符号(该初值即common block的大小)

6 数据段(.Data)

数据段通常用于存放程序中已初始化且初值不为0的全局变量和静态局部变量。数据段属于静态内存分配(静态存储区),可读可写。

7 代码段(text)

代码段也称正文段或文本段,通常用于存放程序执行代码(即CPU执行的机器指令)。一般C语言执行语句都编译成机器代码保存在代码段。通常代码段是可共享的,因此频繁执行的程序只需要在内存中拥有一份拷贝即可。代码段通常属于只读,以防止其他程序意外地修改其指令(对该段的写操作将导致段错误)。某些架构也允许代码段为可写,即允许修改程序。

8 保留区

位于虚拟地址空间的最低部分,未赋予物理地址。任何对它的引用都是非法的,用于捕捉使用空指针和小整型值指针引用内存的异常情况。

进程管理命令

pstree
:树状结构显示进程
进程的虚拟地址空间 && 进程管理命令
ps
:报告程序状况
进程的虚拟地址空间 && 进程管理命令
ps -A
:显示所有程序
ps -ef
:显示所有程序,并以ASCII字符显示树状结构,表达程序间的相互关系进程的虚拟地址空间 && 进程管理命令
kill pid
:结束pid进程
还没写完明天再肝