第二章 进程
进程的定义
为了程序能并发执行,需要对每个任务进行描述,就需要一个进程的概念。
为了每个进程能够独立的郧西,引入了一个进程控制块(Process Control Block PCB)。
系统使用PCB来描述一个进程的状态。
一个进程由 程序段,相关数据段,PCB三部分构成
进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
进程的三种基本状态:
就绪 执行 阻塞
就绪的进程可随时进入执行
执行的进程可以由于时间片耗尽进入就绪或者等待某个事件的响应而进入阻塞
阻塞的进程可以因为得到某件事的响应而进入就绪态
创建一个进程,进程先进入就绪态
结束一个进程,进程是由运行态进入结束的
PCB的作用是使一个在多道程序环境下不能独立运行的程序称为一个能独立运行的基本单位。
1 作为独立运行的基本单位的标志
2 能实现间断性运行方式
3 提供进程管理所需要的信息
4 提供进程管理所需要的信息
5 实现与其他进程的同步和通信
PCB中包含:
1 进程标识符
2 处理机状态
3 进程调度信息
4 进程控制信息
进程控制块PCB的组织方式
1 线性方式 所有的PCB在一张表中,每次查找需要扫描整张表
2 链接方式 把具有相同状态的PCB放在一个链表中
3 索引方式 根据不同的PCB状态建立几张索引表,索引表指向真正的PCB
2.3 进程控制
为了放置OS及关键数据遭到破坏,通常将处理机的执行状态分为 内核态和用户态。
OS内核包含两大方面的功能:
1 支持功能
1) 中断处理
2) 时钟管理
3)原子操作
2 资源管理功能
1)进程管理
2)存储器管理
3)设备管理
2.4 进程同步
硬件同步机制
1 关闭中断
只要不允许中断,那么就不会被其他进程干扰,一个进程就可以在这一段时间占有所有资源,不用担心读写竞争或脏数据。
2 利用Test-and-Set指令实现互斥
就是对一个bool值的锁进行加锁,然后进入临界区,运行完再解锁,其中这个加锁操作是原子指令。
3 利用Swap指令实现进程互斥
软件同步机制
1 整型信号量
就是通过原子操作判断,操作一个表示资源或状态的整数。用完这个资源再释放。
2 记录型信号量
整型信号量是忙等待的操作,记录型信号量通过将等待的进程搞成一个链表,实现“让权等待”。
这样每当有一个资源释放时,链表中第一个等待的进程就能获得资源,避免了忙等待。
3 AND型信号量
进程要使用的共享资源有可能不只是一个,那么如果没有规定拿资源的顺序,就有可能导致死锁。
比如:
1号进程需要A,B两个资源,它先申请了A资源B还没来的及申请。
2号进程需要A,B两个资源,它先申请了B资源A还没来得及申请。
那么此时就产生了死锁。
为了避免死锁,除了按一定顺序拿资源,还有一种就是用原子操作一下子申请到所有资源。
就是每个进程一下子拿到所有需要的资源,不然就等待,这个就是AND型信号量。
4 信号量集
对AND型信号量进行扩充,可以一次申请多个同一资源。
5 管程机制
代表共享资源的数据结构以及对该共享数据结果的实施操作的一组过程组成的资源管理程序共同构成了一个操作系统的资源管理模块,称为管程。
管程被请求和释放资源的进程调用。
管程每次只准许一个进程进入管程,执行管程的内部过程,从而实现了进程互斥。
2.6进程通信
1 共享存储器系统
通过共享存储区来进行通信
2 管道通信
向管道(共享文件 pipe文件)提供输入的发送进程以字符流的形式将大量的文件数据送入管道。而接受管道输出的接受进程则从管道读取数据。
3 消息传递系统
通过操作系统提供的一组通信命令(原语)再进程间进行消息传递。
4 客户机-服务器系统
通过socket传递消息
2.7线程
线程是为了减少程序在并发执行时所付出的时空开销,就是减少上下文切换。
线程的三个运行状态:执行状态,就绪状态,阻塞状态。
线程控制块TCB。
TCB包括:
1 线程标识符
2 一组寄存器
3 线程运行状态
4 优先级
5 线程专有存储区
6 信号屏蔽
7 堆栈指针
2.8线程的实现
1 内核支持线程(KST kernel supported threads)
2 用户级线程(ULT User Level Threads)
3 组合模式