进程与线程
一、进程特征和概念
前提:允许多个程序并发执行。
1.概念
PCB(process control block)进程控制块,系统利用 PCB 来描述进程的基本情况和运行状 态,进而控制和管理进程。
PCB是进程存在的唯一标志。
进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
2.特征
- 动态性:进程是程序的一次执行,所以他是有生命周期的。(基本特征)
- 并发性:引入进程的目的就是为了程序能够并发执行。
- 独立性:一个进程就是一个独立的个体
- 异步性:由于进程的相互制约,使得进程具有执行的间断性。
- 结构性:一个进程实体由程序段、数据段和进程控制块三部分组成。
二、进程的状态与转换
- 创建态
- 就绪态
- 运行态
- 阻塞态
- 结束态
几个比较重要的转换:
就绪态→运行态:获得处理机资源(时间片)。
运行态→就绪态:获得的时间片用完,或者在可剥夺的操作系统中被更高优先级的进程抢走时间片。
运行态→阻塞态:请求某一资源,或者等待某一事件发生。
进程以系统调用的形式请求操作系统提供服务,这是一种特殊的、由运行用户态程序调用操作系统内核过程的形式。
阻塞态→就绪态:等待的事件到来时。
三、进程控制
1.进程的创建
允许一个进程创建另一个进程,就是父进程和子进程。
创建过程如下:
1)分配唯一进程标志号,申请一个空白的PCB(有限的)。没有就创建失败了。
2)分配资源,分配用户栈和内存资源,若资源不足就处于阻塞态,直到有资源被释放。
3)初始化PCB。(标志信息、处理机状态信息、处理机控制信息、设置进程的优先级等。)
4)如果就绪队列未满,就插入就绪队列,等待被调度。
2.进程的终止
通常引起终止的事件
- 正常结束
- 异常结束
- 外界干预
终止过程:
1)根据标志符检索PCB,读取该进程状态。
2)如处于执行状态,立即终止执行,处理器资源也分出去。
3)若还有子孙进程,则终止其子进程。
4)将该进程的资源还给父进程(没有就还给操作系统)。
5)将PCB从所在队列(链表)删除。
3.进程的阻塞与唤醒
阻塞:
1)找到PCB
2)若为运行态,则保护现场,然后转为阻塞态
3)将该PCB插入等待队列,交出处理机资源
唤醒:
1)在等待队列中找到PCB
2)将其从队列中移出,设置为就绪态
3)插入就绪队列,等待调度
4.进程切换
进程切换是指处理机从一个进程的运行转到另一个进程上运行。
1)保存处理机上下文,包括程序计数器和其他寄存器
2)更新 PCB 信息
3)把进程的 PCB 移入相应的队列,如就绪、在某事件阻塞等队列。
4)选择另一个进程执行,并更新其 PCB
5)更新内存管理的数据结构。
6)恢复处理机上下文
四、进程的组织
一个进程由以下三部分组成,最核心的就是PCB
1.进程控制块
PCB是进程实体的一部分,是进程存在的唯一标志。
主要包括:描述信息、进程控制和管理信息、资源分配清单、和处理机关信息等。
1)描述信息:PID进程标识符,UID用户标识符。
2)进程控制和管理信息:进程当前的状态,优先级等信息。
3)资源分配清单:说明有关内存地址的状况。
4)处理机相关信息:主要指处理机中各寄存器的值。
2.程序段
3.数据段
五、进程的通信
管道可以理解为共享存储的优化和发展 ,因为在共享存储中,若某进程要访问共享存储空间, 则必须没有其他进程在该共享存储空间中进行写操作,否则访问行为就会被阻塞。管道通信中,存储空间进化成了缓冲区,缓冲区只允许一边写入、另一边读出,因此只要缓冲区中有数据,进程就能从缓冲区中读出,而不必担心会因为其他进程在其中进行写操作而遭到阻塞。
六、线程概念和多线程模型
1.概念
线程由线程ID、程序计数器、寄存器集合和堆栈组成。
线程是进程中的一个实体。
有了线程这个概念后,进程作为除了CPU之外的系统资源分配单元,而线程则作为处理机的分配单元。
2.线程和进程的比较
1)调度
线程是独立调度的基本单位,进程是拥有资源的基本单位。
也就是说,一个进程内的线程可以切换到另一个进程内的一个线程,但是资源不能。
2)拥有资源
线程不拥有系统资源
3)并发性
多个进程可以并发执行,多个线程也可以并发执行。
4)系统开销
创建和撤销进程时,涉及到很多系统资源的分配和回收。但是线程不拥有系统资源,创建和撤销系统则不需要付出那么大的开销。同样,线程间的切换也比进程间的切换更容易实现。
5)地址空间和其他资源
进程之间互相独立。
线程之间共享该进程的资源。
6)通信
进程间通信需要互斥手段的辅助。
线程可以直接读写进程数据段来实现通信。
3.线程的属性
1)线程不拥有系统资源,但拥有唯一的标识符和一个线程控制块。
2)不同的线程可以执行相同的程序
3)同一进程中各个线程共享该进程所拥有的资源
4)线程是处理机的独立调度单元,多个线程可以并发执行。
5)线程生命周期也会有阻塞、就绪、运行等状态
4.线程的实现方式
分为两大类:
用户级线程、内核级线程
5.多线程模型
1)多对一:
多个用户级线程映射到一个内核级线程
2)一对一
一个用户级线程映射到一个内核级线程
3)多对多
n个用户级线程映射到m个内核级线程