进程和线程小结
来源:互联网 发布:徐州网络运营管理 编辑:程序博客网 时间:2024/05/14 03:47
为了提高处理效率,经常需要进行进程、多线程编程,所以面试时也常问到类似问题,基本概念得了解。
1、进程
1.1 定义:一个具有独立能力的程序(一组操作序列)对某个数据集(接受程序规定操作的一组存储单元的内容)在处理机上的执行过程和分配资源的基本单位。
引入目的:使多个程序并发执行,以改善资源利用率及提高系统吞吐量。
功能:控制和协调各程序段执行过程中的软、硬件资源的共享和竞争,是描述各程序段执行过程和共享资源的基本单位。
结构特征:程序段、数据段、进程控制块(PCB)。
PCB:进程是系统中所有资源分配时的基本单位,进程拥有一个完整的虚拟地址空间,进程不依赖于线程而独立存在。
状态转换图(如下):
1.2 原语:系统态下执行的某一些具有特定功能的程序段。分为机器指令级(执行期间不允许中断),和功能级(作为原语的程序段不允许执行)。
用于进程控制的原语有:创建原语、撤销原语、阻塞原语、唤醒原语。
创建原语:用于进程的创建,或者由系统程序统一创建,或者由父进程创建。
撤销原语:进程撤销后,释放各种资源,包括PCB结构本身。撤销的原因大致有三种,一是已完成功能而正常终止;二是因错误导致非正常终止;三是祖先进程要求撤销。
阻塞原语:一般是进程自己调用阻塞原语。
唤醒原语:用来唤醒进程,或者由系统进程唤醒,或者由事件发生而唤醒。
公用信号量 sem 初值>0
sem大于等于0:可供并发进程使用的资源实体数。
sem小于0:正在等待使用临界区的进程数。
P、V原语:类名为S的临界区
when S do P(sem) 临界区 V(sem) od
P: sem--
v:sem++
P、V过程以原语实现,因为执行期间不允许中断。
具体操作流程如下图:
1.3 进程互斥:资源共享引起的制约。
互斥:不允许两个以上共享资源的并发进程同时进入临界区。(进行加锁实现)
间接制约:受公有资源制约而不是进程直接制约。(使用P、V原语,互传信号实现)
直接制约:并发进程互相共享对方的私有资源而引起的。(使用P、V原语,加锁实现)
临界区:不允许多个并发进程交叉执行的一段程序,或访问公用数据的那段程序。
原因:由属于不同并发进程的程序段共享公用数据或公用数据变量而引起的,不能靠增加硬件来解决。
1.4 进程同步:合作进程间相互发送信号(消息或事件)
生产者-消费者问题既是互斥又是同步问题。
设mutex为有界缓冲区的个数;avail为有界缓冲区中的空单元数;full为有界缓冲区的非空单元数。
deposit(data): remove(data):
begin begin
p(avail) P(full)
p(mutex) P(mutex)
送数据入缓冲单元 取数据
V(full) V(avail)
V(mutex) V(mutex)
end end
注意:V原语次序可以任意,P原语不可以。
1.5 进程通信
低级通信:控制信息的传送(目的:控制进程执行速度)
高级通信:大批量数据的传送(目的:交换信息)
进程的通信方式:主从式(即关系固定为主和从)、会话式(通信时有固定连接关系)、消息或邮箱机制(古关系平等,通常传送大量信息时使用此方式)、共享存储区方式(无数据移动)
1.6 消息缓冲机制
发送进程:由send系统调用,空缓冲区(公用的)、接受进程消息链链尾。
接收进程:由receive系统调用,copy出消息,释放缓冲区。
send(m): receive(m):
begin begin
申请缓冲区 p(SM)
p(mutex) p(mutex)
m送入缓冲区 摘下消息队列中消息n
缓冲区挂入接收进程消息队列 将n拷贝到接受区
v(mutex) 释放缓冲区
v(SM) v(mutex)
end end
邮箱通信:无处理时间上的限制,不像缓冲区系统那样被系统内所有进程共享。邮箱通信机制是同步制约关系而不是互斥关系,因为只有一个发送、一个接收进程使用的邮箱。
1.7 死锁
产生原因:(1)资源竞争(2)进程推进顺序非法(请求释放顺序不当)
必要条件:(1)互斥条件(2)不剥夺条件(3)部分分配(4)环路条件
同时满足以上四条就会死锁,不满足任意一条,都可解除死锁。
死锁并不是立即就发生的,而是当所有未执行完的多个进程因得不到资源而阻塞时,系统才会进入死锁状态。
解决死锁的方法:预防、避免、检测与恢复。
2 、线程
引入的目的:提高系统的执行效率,减少处理机的空转时间和调度切换(保护现场信息)的时间,以及系统管理。
TCB:线程控制块,不能独立存在,需要依赖进程。
多线程结构:
分类:用户级线程、系统级线程(也叫核心级线程)
基本状态:执行、就绪、阻塞(没有进程中的挂起状态)
基本操作:派生(spawn)、阻塞(block)、激活(unblock)、调度(schedule)、结束(finish)
状态转换图:
3、处理机调度
调度策略主要衡量指标:周转时间、吞吐率、响应时间、设备利用率
作业:任务的实体。一个作业总是由一个以上的多个进程组成。而进程是执行实体。
作业的状态:提交态、收容(后备)态、执行态、完成态。
分类:(1)作业调度:宏观/高级调度
(2)交换调度:涉及内存管理和扩充
(3)进程调度:微观/低级调度
(4)线程调度
常用进程/作业调度算法:
(1)先来先服务算法(FCFS):不利于短作业、等待时间长。
(2)轮转法(RR:round robin):只能用来调度可抢占资源,时间片长度q=R/Nmax,其中,R指系统对响应时间的要求,Nmax指就绪队列中所允许的最大进程数。
(3)多级反馈轮转法:区别对待各个进程,给予不同优先级和时间片。
(4)优先级法:确定优先级,常用方法有静态法(执行前确定)、动态法(执行过程中动态变化,开销比较大)。
(5)最短作业优先法(SJF):优点是吞吐量大,缺点是长作业可能没机会执行。
(6)最高响应比优先法(HRN):响应比R=(W+T)/T=1+W/T,其中W为作业等待时间,T为作业执行时间。
- 进程和线程小结
- 进程和线程小结
- 进程间通信和线程通信小结
- 关于线程和进程的一些小结
- 进程&线程小结
- 进程和线程的学习小结(一)
- 关于学习进程控制和线程控制的小结
- 黑马程序员——java小结_010_进程和线程
- 进程、线程小结(1)
- 进程、线程小结(2)
- 进程 线程 作业 管程 小结
- 进程与线程常见问题小结
- 进程间、线程间通信方式小结
- 进程间、线程间通信方式小结
- 进程间、线程间通信方式小结
- 进程间、线程间通信方式小结
- 进程间、线程间通信方式小结
- 进程间、线程间通信方式小结
- 安卓学习之“马路杀手”
- QString操作
- 【资源管理器老是重,win7资源管理器重启的解决办法】
- flash builder与myeclipse结合(使用blazeds通信)
- Nested exception is org.codehaus.xfire.fault.XFireFault: Couldn't send message..
- 进程和线程小结
- Oracle OS认证与口令文件认证详解(贝塔中的DBA)
- MIME类型
- 黑马程序员 java 动态代理类
- FFMpeg框架代码阅读
- Socket深度探究4PHP(三)
- python手记(19)
- Unity3d的类视图
- Qt 编写DLL 并调用