一、什么是线程,什么是进程?
线程是CPU调度和分派的基本单位,不拥有系统资源(–线程ID,TCB线程控制块)
进程是资源调度的基本单位,拥有系统资源,(PCB进程控制块)
二、进程控制通过什么方式?
通过操作系统核心态原语实现(原语特点:不可中断),这样的操作叫做原子操作。
原语采用开关中断实现
【阻塞原语和唤醒原语两两会同时出现】
关于进程
各进程内存地址空间相互独立;
进程不能直接访问地址空间,可以互斥访问共享空间
管道:
特点:半双工通信,互斥访问
用于连续读写进程,没写满不允许读操作,没读完不许写操作,读操作只能有一个
间接通信:“信箱”
关于线程
用户级线程:
线程管理由应用程序完成
内核级线程:
线程管理由操作系统内核完成
【内核级线程才是CPU分配的单位】
用户级线程与核心态线程有三种关系:
多对一(一为核心级线程);一对一(并发性强:开销大);多对多
什么是调度?
调度就是遵循某种规则来决定顺序的进行
作业调度:
调入 | 建立PCB |
---|---|
调出 | 撤销PCB |
中级调度:
提高内存利用率,系统吞吐量
操纵系统内核临界区处理临界资源会影响调度
关于CPU利用率的计算
CPU利用率=T(cpu忙碌时间)/T(总时间)
作业周转时间=完成时间-提交时间
T(带权周转)=T(作业周转)/T(实际运行)
调度算法:
FCFS;先来先服务
等待时间越长,优先级越高;是非抢占式算法
SJF;
短作业优先算法
运行时间越高,优先级越低;
会造成进程“饥饿”:某个进程一直分配不到所要的资源
HRRN
运用时间片轮转技术,是抢占式算法,通过时钟中断实现
优先级调度算法有:
多级反馈队列调度算法:
根据优先级从高到底和时间片从高到低分为第一级队列,第二级队列,第三级队列。。。。。
进程的互斥
进程对临界资源的互斥访问
单标志法:
一个进程赋予权力给进程
实现方式(eg:int turn=0;)
双标志法:
flag[2]数组实现
PeterSon算法,(不符合“让权等待”)
【补充】
【补充】
中断屏蔽的实现
····
关中断
临界区
开中断
····
TestAndSet指令:
其实就是同步的是手段。textandset就是传入两个值与一个内存地址,让比较值与内存地址中的值相比较,如果一样就交换,不一样就不交换。返回值是内存地址中的值,整个过程是原子的。【Swap指令通过硬件实现的】
信号量机制:(PV操作)P和V是来源于两个荷兰语词汇,P—— passeren,中文译为"通过";
V—— vrijgeven,中文译为"释放"。
而信号量则是当生产者写入后会设置资源数(也就是信号量),使其增加。以此来提醒消费者来读取,而当消费者读取后会将信号量减少。信号量有一个当前值与最大值。当前值不能小于零或者大于最大值,这就保证了reader不会读取无效内存,writer不会越界写值,发生缓冲区溢出。
wait(S)——P
sign(S)——V
S整形信号量代表某种资源数量(缺点:让权等待)
记录型信号量【实现系统资源的“申请”与“释放"】
int value 剩余资源
queue等待队列,
block()
wake()
信号也可以实现进程的互斥