1.原因: 因为程序的并发执行的特征,引入了进程的概念。
2.首先程序有两种执行方式:顺序执行 并发执行
顺序执行时的特征:
顺序性:处理机的操作严格按照程序所规定的顺序执行
封闭性: 程序运行时占用处理机的全部资源,只有该程序才能改变本机的资源状态
可在现性:只要改程序的初始条件相同并且所处的环境不变,不管该程序重复执行多少次,最后的结果是相同的
并发执行时的特征:
间断性:由于程序并发的原因,A程序可能会受到B程序的影响
失去封闭性:系统的资源不再是只供一个程序使用,而是多个程序共享资源
不可再现性:由于程序在执行过程中会受到其他程序的影响,所以结果会受到一定的影响
进程定义:就是为了解决程序并发执行时的不可再现性引入了进程的概念,并且对并发的程序加以描述和控制
特征:
结构特征:PCB 数据块 程序块
动态性, 并发性, 独立性, 异步性
进程是进程实体的运行过程,是系统进行资源分配和调度的一个基本单位
三种基本状态:就绪 执行 阻塞
就绪----调度----->执行 执行----时间片完------>就绪
执行-----I/O请求------>阻塞 阻塞---事件完成------->就绪
还有 挂起 激活 创建 终止
进程控制块(PCB):
其实就是一个数据结构,是进程实体的一部分。
内容:记录了OS所需要的,用于描述进程当前情况以及控制进程运行的全部信息
作用:让一个进程与其他进程并发运行
信息:进程标识符,处理及状态,进程调度信息,进程控制信息
组织方式:链接,索引
是进程管理中最基本的功能
原语:若干条指令组成,用于完成一个功能的过程。
进程创建(create()):
1.申请空白PCB
2.为进程分配资源
3.初始化PCB信息
4.将进程插入就绪队列
引起创建的原因:
1.用户登录
2.作业调度
3.提供服务
4.应用请求
进程终止():
1.查看PCB中进程当前状态
2.若是执行状态,则改为终止,并设调度为真,以便调度其他进程
3.看他有没有子进程或父进程,若有子进程则终止
4.归还资源给系统或父进程
5.将PCB移除队列
引起终止的原因:
1.正常结束
2.异常结束
3.外界干预 比如:父进程要求,父进程终止, OS干预等
进程阻塞(block()):
1.查看进程当前状态,如是执行状态,改为阻塞
2.将PCB插入阻塞队列
3.保存进程当前运性的处理机状态(PCB),设调度为真
引起阻塞的原因:
1.新数据未到达
2.无新任务做
3.启动某种操作
4.OS要求
进程唤醒(wokeup()):
与阻塞相反
进程挂起(suspend()):
1.查看进程状态,若为执行,改为静止就绪。若为就绪,改为静止就绪。若为阻塞,就改为静止阻塞
2.保存PCB
3.设调度为真
激活与之相反
使并发的进程能有效地共享资源,相互合作,相互协调,实现可再现性
进程之间的两种关系:
间接制约关系:两进程共享临界资源
直接制约关系:两进程之间合作
临界资源:进程之间采用互斥方式,共享资源
临界区:访问临界资源的那段代码成称为临界区
同步的原则:
1.空闲等待
2.忙则等待
3.有限等待
4.让权等待
解决同步问题的方法(实际上是解决共享临界资源的问题):信号量机制
1.整形信号量 表示资源的数目
2.记录型信号量 除了表示资源数目外,还有进程链表指针L,用于链接上述所有进程
3.AND型信号量 同时申请多个临界资源
4.信号量集 同时申请多个临界资源且每一个临界资源都申请多个
利用信号量实现资源互斥
管程:另一种解决同步问题的方法
由于信号量机制的两个缺点:
1.麻烦 大量同步操作分散在各进程中
2.死锁 因为同步操作不当引起死锁
引入新的同步工具:管程
一、 管程的概念
二、 管程的特征
管程是一个基本的软件模块,可以被单独编译。
管程中封装了数据及对于数据的操作,这点有点像面向对象编程语言中的类。
管程外的进程或其他软件模块只能通过管程对外的接口来访问管程提供的操作,管程内部的实现细节对外界是透明的。
任何一个时刻,管程只能由一个进程使用。进入管程时的互斥由编译器负责完成。
进程通信(IPC,Inter-Porcess Communcation)是进程进行通信和同步的机制。
IPC提供两个基本操作:发送(send message)接收(receive message)
进程通信流程:在通信进程之间建立通信链路通过send/receive交换信息
进程通信方式:直接通信: 进程必须正确命名对方,比如send(p,message)向p发送信息,receive(q,message)从q中接收信息
通信链路有如下属性:自动建立连接;一条链路恰好对应一对通信进程;每对进程之间只有一个链接存在;链路可以是单向的,但是通常为双向的
间接通信: 通过OS维护的消息队列实现进程之间的通信(接收发送信息) 每个消息队列都有一个唯一标识,只有共享了相同消息队列的进程才能够通信
线程是指进程内的一个执行单元,也是进程内的可调度实体。每个进程至少需要一个线程。
与进程的区别:
地址空间:进程内的一个执行单元,进程至少一个线程,他们共享进程的地址空间,而进程有自己独立的地址空间。
资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程资源。(线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(寄存器,栈,程序计数器),但是它可与同一个进程的其他线程共享进程所拥有的全部资源)
线程是处理器调度的基本单位,但进程不是。
二者皆可并发执行(一个线程可以创建和撤销另一个线程,同一个进程中的多线程之间可以并发执行)
线程不可独立执行,进程可以独立执行