从程序到进程做了什么事情?
(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)终止态