从程序到进程做了什么事情?

(1)未执行的程序是静态文件,存放在磁盘里面,当程序开始执行时,内核将程序读入内存,为程序镜像分配内存空间。
(2)内核为该进程分配进程标志符PID。
(3)内核为该进程保存PID及相应的进程状态信息。
(4)每一个进程在内核当中都有一个维护进程相关内容的进程控制块(pcb),linux下的pcb是一个stack_struct的结构体。

进程运行的虚拟内存

进程基础知识

栈是由高地址向低地址生长的,而堆是由低地址向高地址生长的。

虚拟内存分段&变量存储空间

段名 组成 来源
代码段 .text 可执行文件
数据段 .data bss 可执行文件
堆栈段 heap stack 请求
变量 位置
经过初始化的全局变量和静态变量 .data
未经初始化的全局变量和静态变量 .bss
函数内部声明的局部变量 stack
const修饰的全局变量 .text
const修饰的局部变量 stack
字符串常量 .text

.bss(Block Started by Symbol)存放程序中未初始化的全局变量和静态变量,程序执行之前BSS段会自动清0。

进程的状态

(1)初始态
(2)就绪态 (等待cpu,抢时间碎片,这个时间很短很短,你几乎察觉不到。)
(3)运行态 (此时进程已经获得cpu了,有执行权。)
(4)挂起态(sleep的时候就是挂起态,此时没有执行权。
终止态)
(5)终止态

相关文章: