进程的描述与控制
进程的基本概念
PCB(Process Control Block)
进程控制块,描述进程的基本情况和活动过程,进而控制和管理进程
-
作用:
-
独立运行基本单位的标志
-
实现间断性运行方式
-
提供进程管理所需要的信息
-
提供进程调度所需要的信息
-
实现与其他进程的同步与通信
-
-
内容:
-
进程标识符
-
处理机状态
-
进程调度信息
-
进程控制信息
-
-
组织方式:
-
线性方式
-
链接方式
-
索引方式
-
-
进程实体:程序段,相关的数据段和PCB
-
进程定义
-
进程是程序的一次执行
-
进程是一个程序及其数据在处理机上顺序执行时所发生的活动
-
进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位
-
-
特征:动态性,并发性,独立性,异步性
进程状态转换图
进程控制
内核的定义和功能
处理机状态分为系统态和用户态,区别主要在于权限的大小
-
内核的功能
-
支撑功能
-
中断处理
-
时钟管理
-
原语操作
-
-
资源管理功能
-
进程管理
-
存储器管理
-
设备管理
-
-
创建进程和进程的各种状态
-
Unix:父进程子进程,Windows:句柄,控制权
-
引起创建进程的事件:
-
用户登录
-
作业调度
-
提供服务
-
应用请求
-
-
过程:
-
创建空白PCB
-
为新进程分配所需的资源
-
初始化PCB
-
将新进程插入就绪队列(许可)
-
-
进程的终止
-
引起进程终止(Termination of Process)的事件:
-
正常结束
-
异常结束:异常事件发生
-
外界干预
-
-
过程:
-
-
进程的阻塞和唤醒
-
引起事件:
-
向系统请求共享资源失败
-
等待某种操作完成,如I/O操作
-
新数据尚未到达
-
等待新任务的到达
-
-
阻塞原语block,唤醒原语wakeup
-
-
进程的挂起与激活
-
挂起原语suspend,激活原语active
-
进程同步
-
同步机制应遵循的原则:空闲让进,忙则等待,有限等待,让权等待
-
关中断
-
Test-and-Set指令:测试并上锁
-
Swap指令
信号量机制
-
整型信号量
wait(S){ while(S<=0); S--; } signal(S){ S++; }
-
记录型信号量:增加了进程链表指针list并使用原语block,wakeup,就不会一直忙等
-
And型信号量:一个进程需要多种(种类上)临界资源,这种情况要么全给,要么一个都不给(并挂到第一个缺乏资源的等待队列上)
-
信号量集:检查条件,允许时,一次分配多个(数量上)资源,否则不分配
-
管程:进程同步工具
-
条件变量:使得被阻塞的进程及时放弃管程使用权
x.wait()
和x.signal()
-
经典进程同步问题
-
生产者-消费者问题:输入与计算,计算与输出
-
使用mutex实现进程对缓存池临界资源的互斥使用
-
wait,signal:信号量empty,full来协调生产者和消费者,empty和full初始值分别为n, 0
-
对mutex和empty,full的执行顺序要预防死锁(期末考会考),即占着茅坑要有屎拉
-
-
哲学家进餐问题:五个哲学家围着圆桌坐,得到左右筷子进餐,筷子是临界资源
-
不会有相邻的两个哲学家同时进餐,但会发生死锁问题
-
解决办法:
-
-
读者写者问题:有reader,writer要等待,reader之间可同时进行,writer不能和其他writer或reader同步进行,对readercount变量要进行互斥使用
-
变形:规定最大reader数量,利用信号量L,初值RN(最多读者数量),执行wait(L,1,1)
-
进程通信
进程通信的类型
-
共享存储器系统
-
共享数据结构
-
共享存储区
-
-
管道通信系统:连接读、写进程的共享文件
-
互斥,同步,确定对方是否存在
-
-
消息传递系统:直接通信(利用操作系统通信原语)和间接通信(邮箱为中间实体)
-
客户机-服务器系统
-
套接字:一个通信标识类型的数据结构
-
远程过程调用和远程方法调用
-
消息传递通信的实现方式
-
直接通信原语:
-
对称寻址方式:
-
send(receiver, message)
-
receive(sender, message)
-
-
非对称寻址方式:
-
send(P, message)
-
receive(id, message)
-
-
消息的格式:定长/变长
-
进程的同步方式:发送进程和接收进程各自是否阻塞
-
通信链路:单向通信链路,双向通信链路
-
-
直接通信实例:
-
消息缓冲区和PCB中有关通信的数据项
-
-
发送原语send:
发送进程申请缓冲区i,复制消息a到缓冲区i,获得接受进程PCB标识符j,将缓冲区插入接受进程的消息队列j.mq
-
接受原语receive
-
信箱通信(间接)
-
信箱通信原语
-
Send(mailbox, message)
-
Receive(mailbox, message)
-
-
类型:私用邮箱,公用邮箱,共享邮箱
-
线程
-
定义:调度和分配的基本单位,能独立运行的基本单位,但不是资源分配的基本单位(是进程)
-
同一个进程的多个线程共享进程的资源
-
线程控制块TCB
线程的实现方式
-
内核支持线程KST (Kernel Supported Thread)
-
优缺点:
-
-
用户级线程ULT (User Level Threads)
-
内核感知不到用户级线程的存在
-
优缺点:
-
-
组合方式:用户线程连接内核支持线程
-
具体实现方法
-
内核支持线程的实现
-
创建进程时,分配任务数据区PTDA (Per Task Data Area),包含若干个TCB空间
-
创建线程时,将信息填入TCB,并分配必要资源
-
-
用户级线程的实现
-
中间系统
-
运行时系统(Runtime System):用于管理和控制线程的函数(过程)的集合
-
内核控制线程:
-
轻型进程LWP (Light Weight Process):可通过系统调用获得内核提供的服务,组成的缓存池为“线程池”
-
LWP会连接到内核级线程上
-
-
-
-
-
线程的创建和终止
-
初始化线程利用线程创建函数创建新进程
-
虽已被终止但尚未释放资源的线程可以被需要它的线程所调用
-