一.进程和线程
1.进程的基本概念;
1) 进程:是程序动态执行的过程,包括创建,调度,消亡
2)程序:存放在外存中的i一段数据的集合
二.进程创建
1.进程空间分布
1)每个进程运行起来后,操作系统开辟0-4G虚拟内存空间
2)进程用户空间:文本端(文本区)+数据段(数据区)+系统数据端(堆区,栈区)
3)进程空间:用户空间+内核空间(不允许用户访问)
4)文本段:字符串常量、已初始化全局变量/静态变量,未初始化全局变量/静态变量
5)系统数据段:堆区(malloc空间),栈区(局部变量,函数运行)
a.栈区:未经初始化值为随机值,执行到变量定义开辟内存空间,超过变量作用域回收变量空间。
b.堆区:malloc申请堆区空间,free释放堆区空间,避免产生内存泄漏
c.

2.虚拟地址和物理地址
1)虚拟地址:所有能够被用户看到的地址均为虚拟地址,表示用户可以寻址的范围
2)物理地址: 内存释放数据对应的实际硬件物理地址
3)MMU:实际地址和物理地址之间的映射由内存映射单元(MMU)完成

3.多进程存储
1)存储方式:
a.多个进程空间在操作系统中存储时,空间是独立的(物理地址独立)
b.多个进程在操作系统中共用一个虚拟内存空间(虚拟地址是共享的)
4.多进程的调度
1)常见进程调度算法
(1)先来先执行,后来后执行
(2)高优先级调度算法
(3)时间片轮转调度算法
2)多进程调度本质
(1)宏观并行,微观串行
(2)宏观分析:一个CPU同时执行多个进程任务
(3)微观分析:一个CPU在多个任务中高速切换保障多任务执行
5.进程相关的命令
1)top

2)ps-ef
3)ps-aux

4)后台执行进程任务

5)jobs

6)fg

7)nice/rnice

8)kill/killall

6.进程的状态

三.进程相关函数接口
1.fork

注意:子进程拷贝父进程文本端,数据端,系统数据端
进程的PID不一样
fork的返回值不一样,父进程返回子进程的PID,子进程中返回0
PID:一定是>0
父子进程空间独立,同一份代码中的变量和数据都会在父子进程中各有一份,修改自己空 间的数据不会影响对方的

2.getpid和getppid

3.exit与_exit

注意:在主函数中调用exit和return功能保持一致
return在函数内部将结束该函数
exit在函数内部会将进程结束
exit在结束前刷新缓存区
_exit不会刷新缓存区
4.进程回收
1)wait

注意:wait具有等待阻塞的功能,等到有子进程结束才会回收子进程继续向下执行
2)waitpid
四.进程消亡
1.孤儿进程:
1)如果父进程先结束,子进程会成为孤儿进程,被init进程收养
2)僵尸进程:
是每个进程结束必然会经历的阶段
产生原因:子进程结束后,父进程没有回收子进程空间,导致进程执行结束,空间依然被占用的状态
3)如何避免产生僵尸进程
(1)让父进程先结束,子进程会成为孤儿进程,孤儿进程被init进程收养,子进程在结束,init进程回收进程空间
(2)子进程结束,父进程回收子进程空间,避免产生僵尸进程

221

被折叠的 条评论
为什么被折叠?



