文章目录
进程相当于一个APP,线程相当于APP中的某个功能,进程中的线程可以共享资源
🎯进程:
定义:
一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程
程序 VS 进程程序:静态的代码
进程:动态的执行过程
静态程序通过操作系统在内存中让CPU执行起来形成动态的执行过程
联系:
- 程序是产生进程的基础
- 进程是程序功能的体现
- 程序的每次运行构成不同的进程
- 通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可包括多个程序
区别:
- 进程是动态的,程序是静态的
- 进程是暂时的,程序是永久的
- 进程与程序的组成不同,进程的组成包括程序、数据和进程控制块(这些程序不包含)
组成:
一个程序的所有状态信息
- 程序的代码
- 程序处理的数据
- 程序计数器,值指向下一条将运行的指令
- 一组通用寄存器
- 一组系统资源
特点:
- 动态性
- 并发性
- 独立性
- 制约性
进程控制结构:
进程控制块(PCB):操作系统管理控制进程运行所用的信息集合,是进程存在的唯一标识
PCB含有的三类信息:
- 进程标识信息
- 处理机状态信息保存区
- 用户可见寄存器
- 控制和状态寄存器
- 栈指针
- 进程控制信息
- 调度和状态信息
- 进程间通信信息
- 存储管理信息
- 进程所用资源
- 有关数据结构连接信息
PCB的组织方式:链表、索引表
进程状态:
生命期管理:
-
进程创建
创建的主要事件:
- 系统初始化
- 用户请求创建一个新进程
- 正在运行的进程执行了创建进程的系统调用
-
进程运行
选择一个就绪进程,让它占用CPU并执行
-
进程等待(阻塞)
阻塞的主要事件:
- 请求并等待系统服务,无法马上完成
- 启动某种操作,无法马上完成
- 需要的数据没有到达
进程只能被自己阻塞
-
进程唤醒
唤醒的原因:
- 被阻塞进程需要的资源可被满足
- 被阻塞进程等待的事件到达
- 将该进程的PCB插入到就绪队列
进程只能被别的进程或操作系统唤醒
-
进程结束
结束情形:
- 正常退出(自愿的)
- 错误退出(自愿的)
- 致命错误(强制性的)
- 被其他进程所杀(强制性的)
状态变化模型:
三种基本状态:
- 运行状态(Running)
- 就绪状态(Ready)
- 等待状态/阻塞状态(Blocked)
其他基本状态:
-
创建状态(New)
-
结束状态(Exit)
-
僵尸状态(Zombie)

挂起模型:
挂起状态:(进程没有占用内存空间)
- 阻塞挂起状态(Blocked-suspend)
- 就绪挂起状态(Ready-suspend)
状态队列:
- 就绪队列
- 阻塞队列
上下文切换:
进程切换时,将进程A的上下文信息保存在PCB中,把进程B的PCB中保存的上下文信息恢复到CPU中
上下文信息:寄存器、CPU状态、内存地址空间
进程控制:
-
创建进程
fork():复制父进程的内存、地址空间、寄存器状态,创建子进程
vfork():创建进程时,不需要创建一个相同的内存映像,减少开销
-
加载和执行进程
exec():加载程序取代当前运行的进程
-
等待和终止进程
wait():被父进程用来等待子进程的结束
exit():结束进程
🚩线程:
定义:
进程当中的一条执行流程(进程=资源管理+线程)
特征:
- 线程之间可以并发地执行
- 线程之间共享相同的地址空间
缺点:
一个线程崩溃,会导致其所属进程的所有线程崩溃,安全性得不到保障
浏览器一个页面就是一个进程,安全性比较高
若为线程,一个页面被破坏,可能导致所有页面都打不开
单线程和多线程所需的资源:

线程和进程的比较:
| 比较 | ||||
|---|---|---|---|---|
| 进程 | 资源分配单位 | 拥有完整的资源平台 | 具有三种基本状态和状态转换 | 并发执行时间长,开间开销大 |
| 线程 | CPU调度单位 | 独享必不可少的资源,如寄存器、堆栈 | 具有三种基本状态和状态转换 | 并发执行的时间短,空间开销小 |
线程实现:
-
用户线程:在用户空间实现(操作系统看不到)
由线程库来完成线程的创建、终止和管理
缺点:
1.当一个线程发起系统调用而阻塞,则整个进程在等待
2.当一个线程开始运行后,除非主动交出CPU的使用权,否则它所在的进程当中的其他线程将无法运行
3.由于时间片是分配给进程的,在多线程执行时,每个线程得到的时间片较少,执行会较慢
-
内核线程:在内核中实现(操作系统可以看到)
由操作系统来完成线程的创建、终止和管理
缺点:开销大
-
轻量级进程:在内核中实现,支持用户线程
一个进程可有一个或多个轻量级进程,每个量级进程由一个单独的内核线程来支持
2万+

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



