进程知识
1.进程和程序的区别:
- 程序是静态的,它是保存在磁盘上的指令的有序集合,没有任何执行的概念
- 进程是一个动态的概念,它是程序执行的过程,包括了动态创建、调度和销毁的整个过程
2.进程的执行方式:
-
并行执行 : 表示多个任务能够同时执行,依赖于物理的支持,比如 cpu 是 8 核芯,则可以同时执行 8 个任务
-
并发执行 (重点): 在同一时间段有多个任务在同时执行,由操作系统调度算法来实现,比较典型的就是时间片轮转
3.进程的空间分配 :
- 进程建立之后,系统则要为这个进程分配相应的空间,32位Linux系统中,会为每个进程分配 4G 的空间。4G的进程空间主要分为两部分,高位1G是内核空间,低位3G是用户空间。
用户空间又具体分为如下区间:
- stack : 存放非静态的局部变变量
- heap : 动态申请的内存
- bss : 未初始化过的全局变量(包括初始化为0的,未初始化过的静态变量(包括初始为0)
- data : 初始化过并且值不为0的全局变量,初始化过的不为0静态变量
- rodata : 只读变量(字符串之类)
- txt : 程序文本段(包括函数,符号常量)
4.进程的状态管理
进程的状态管理的三态模型:
一个进程从创建而产生至撤销而消亡的整个生命期间,有时占有处理器执行,有时虽可运行但分不到处理器、有时虽有空闲处理器但因等待某个事件的发生而无法执行,这一切都说明进程和程序不相同,它是活动的且有状态变化的,这可以用一组状态加以刻画。为了便于管理进程,一般来说,
按进程在执行过程中的不同情况至少要定义三种不同的进程状态:
(1)运行(running)态:进程占有处理器正在运行。
(2)就绪(ready)态:进程具备运行条件,等待系统分配处理器以便运行。
(3)等待(wait)态:又称为阻塞(blocked)态或睡眠(sleep)态,指进程不具备运行条件**
正在等待某个事件的完成。通常,一个进程在创建后将处于就绪状态。每个进程在执行过程中,任意时刻当且仅当处于上述三种状态之一。同时,在一个进程执行过程中,它的状态将会发生改变。引起进程状态转换的具体原因如下:
(1)运行态一一等待态:等待使用资源或某事件发生,如等待外设传输;等待人工干预。
(2)等待态一一就绪态:资源得到满足或某事件己经发生,如外设传输结束;人工干预完成。
(3)运行态一一就绪态:运行时间片到,或出现有更高优先权进程。
(4)就绪态一一运行态:CPU空闲时被调度选中一个就绪进程执行。
进程的状态管理的五态模型:
***(1)运行态(TASK_RUNNING) : 此时进程或者正在运行,或者准备运行,就绪或者正在进行都属于运行态
(2)睡眠态(TASK_SLEEP): 此时进程在等待一个事件的发生或某种系统资源
- 可中断的睡眠(TASK_INTERRUPT) : 可以被信号唤醒或者等待事件或者资源就绪
- 不可中断的睡眠(TASK_UNTERRUPT) : 只能等待特定的事件或者资源就绪
(3)停止态(TASK_STOPPED) : 进程暂停接受某种处理。例如:gdb调试断点信息处理。
(4)僵尸态(TASK_ZOMBIE):进程已经结束但是还没有释放进程资源***