一、什么是进程
1.程序和进程间的区别
程序:程序是静态的,它是一些保存在磁盘上的指令的有序集合,没有任何执行的概念
进程:进程是动态的,它是程序执行的过程,正在运行的程序,进程是程序执行和资源管理的最小单位
2.进程是程序执行和资源管理的最小单位
也就是说每个进程都有独立的虚拟资源空间,当进程被创建时,OS会给每个进程都分配4G的虚拟内存空间,1G的内核空间和3G的用户空间
1G的内核空间:即PCB相关的信息,这些资源只有通过系统调用才能使用,这一资源在当前进程退出,只能由另一进程(父进程)来回收,若无回收,会造成僵尸进程.为了更好的管理Linux所访问的资源,在系统内核文件include/linux/sched.h中定义一个结构体struct task_struct专门管理进程的资源,每个进程都有一个唯一的结构体。
3G的用户空间:进程的代码段,数据段,堆栈以及可以共享访问的库的内存空间,这些资源进程可以直接访问,该资源在进程退出时释放。
二、进程的分类
1.交互式进程:交互式进程(经常使用),可以在前台运行,也可以在后台运行比如:shell命令进程,文本编辑器,图形应用程序运行等
2.批处理进程:这类进程不必与用户进行交互,因此通常在后台运行,不会优先被调度比如:编译器的编译操作,数据库的搜索引擎等
3.守护进程:这类进程一直在后台运行,和任何终端都不关联。通常系统启动时开始执行,系统关闭时才结束比如各种服务等
三、进程的状态
1.运行态: R 进程当前正在运行,或者正在运行队列中等待调度(就绪态)
2.等待态
可中断的等待 S sleep(1)
不可中断的等待 D
3.停止态 T 进程的执行被暂停,当进程收到SIGSTOP,SIGTSTP,SIGTTIN,SIGTTOU等信号。
4.死亡态 X这是最终状态
5.僵尸态 Z 是个错误,需要我们去处理
优先级:IN 的值-20到19 ,值越大,优先级越低,普通用户设置优先级最大为0,nice 按用户指定的优先级运行进程,renice 改变正在运行进程的优先级
四、进程相关函数
如图:图片压缩严重,见谅
五、进程间的通信方式
UNIX平台进程通信方式
早期进程间通信方式
AT&T的贝尔实验室,对Unix早期的进程间通信进行了改进和扩充,形成了“system V IPC”,其通信进程主要局限在单个计算机内
BSD(加州大学伯克利分校的伯克利软件发布中心),跳过了该限制,形成了基于套接字(socket)的进程间通信机制
六、进程间通信的相关函数
一、什么是线程
1.线程是轻量级的进程。
2.什么时候用多线程,什么时候多进程?
1)创建和销毁较频繁使用线程,因为创建进程花销大。
2)需要大量数据传送使用线程,因为多线程切换速度快,不需要跨越进程边界。
3)安全稳定选进程;快速频繁选线程;
3.线程之间除了栈区的内容其他都是共享的
二、线程的相关函数