1进程与线程
1.1.1进程的概念
为社么引入进程?
引入进程的概念,更好地描述和控制程序的并发执行,实现了操作系统的并发性和共享性;
引入进程实体,进程的定义:进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位;
进程实体(进程映像)由程序段、数据段和PCB(进程控制块,Process Control Block)三部分组成;
进程的创建和撤销实质上是创建和撤销进程实体中的PCB;注:PCB是进程存在的唯一标志;
1.1.2进程的特征
进程是多程序并发执行引入的,它和程序是截然不同的概念,其中进程是动态的,程序则是静态的;
进行的特征:
1)动态性 2)并发性3)独立性4)异步性5)结构性。
注:进程与程序的区别
程序是指令集合,故程序是静态的;
进程是程序一次执行的过程,故进程是动态的;
1.2进程的状态与转换
1.3进程的控制
1)创建
进程允许创建子进程,子进程继承父进程所拥有资源。父进程撤销所有其子进程册小。子进程撤销归还资源给父进程;
注:原句:用于进程控制的程序段,执行期间不允许中断,且不可分割;
创建过程(创建原句):
1.为新进程分配一个唯一的进程标识号(PID),并申请一个空白的PCB;
2.为进程分配资源,程序和数据和用户栈的内存空间;
3.初始化PCB,主要有标志信息,cpu状态和控制信息和进程的优先级;
4.插入进程就绪队列。
2)终止
正常结束(完成任务),异常结束(发生异常时间),外界干预(用户,或系统,或父进程请求结束)
终止过程(撤销原句):
1.更据终止进程的PID进程标识符,检索PCB,读其运行状态;
2.若处于执行状态,终止执行,将cpu资源分配给其他进程;
3.若存在子进程,终止所有子进程,并回收其拥有的系统资源;
4.将该PCB删除。
3)阻塞和唤醒
阻塞是进程的主动行为,由运行态转为阻塞态。
阻塞原句Block:
1.更具要阻塞的进程的PID得到对应的PCB;
2.若进程为运行态,保护现场,将状态转为阻塞态;
3.将PCB插入相应事件的等待队列。
唤醒是被动的,需其他进程合作并调用唤醒原句;
唤醒原句Wakeup:
1.在该事件的等待队列中找到相应进程的PCB;
2.从队列中指出,将状态改为,就绪态;
3.将PCB插入进程就绪队列;
注:阻塞原句和唤醒原句是一对相反的原句,需成对使用;
4)切换
进程的切换是指处理机从一个进程的运行转到另一个进程上运行;
进程切换过程:
1.保存处理机上下文(cpu现场信息),包括各种寄存器,状态寄存器,程序寄存器等;
2.更新PCB信息。并将进程的PCB移入相应状态的对立,就绪或某事件阻塞队列;
3.选择另一进程执行,并更新其进程PCB;
4.更新内存管理的数据结构
5.恢复处理机上下文;
注:进程的切换与处理机的调度
调度是指资源决定分配给哪个进程,是一种决策行为;
切换是指实际分配的行为,是执行行为;
故一般为先有处理机的调度再有进程的切换;
1.4进程的组织
进程由进行控制块、程序段、数据段三部分组成;
1)进程控制块
PCB是进程实体的一部分,是进程存在的唯一标志;
主要包括:进程描述(进程标识符PID,用户标识符UID)、控制、管理(进程当前状态,优先级,信号量等)信息和资源分配清单(代码段、数据段、堆栈段指针、外部设备)和处理机相关信息(各寄存器数值)等;
为方便进程的调度和管理,需将各进程PCB组织器来。常用组织方式有链接和索引两种方式;
不同进程状态对应一个队列或索引表;
2)程序段
程序段即CPU执行的程序代码段;注:程序可被多个进程共享,多个进程可以运行同一个程序;例:多开应用,n个qq
3)数据段
程序加工处理的初始数据或执行中的中间或结果数据;
1.5进程的通信
进程的通信即进程之间的信息交换;
低级通信方式:PV操作;
高级通信方式:高效,大量、传输数据的通信方式,主要有共享存储、消息传递、管道通信;
1.共享存储
在通信的进程中有一块可直接访问的共享空间,但在对共享空间读/写时需要同步互斥访问(PV操作);
共享存储分为:基于数据结构的低级的共享和基于存储区的高级共享;
操作系统只负责提供存储空间和同步互斥的工具,交换数据由用户读写指令;
注:用户进程空间一般独立;进程内的线程共享进程空间;
2.消息传递
进程间数据交换以消息(Message)为单位。
1)直接通信方式。进程与进程直接发送消息,且消息接收入消息缓冲队列上。
2)间接通信方式。又称信箱通信方式,通过中间信箱过渡消息;
3.管道通信
管道,指用于连接一个读进程和一个的一个共享文件,通过该文件实现两进程通信;
例:linux shell中 cat xxx.file | grep ‘xxxstr’
管道机制必须满足:同步、互斥、和确定对方存在;
linux中管道限制大小为4KB即共享缓冲区大小;写进程快于write满缓冲区,需等待读读进程read缓冲区后,缓冲区读read空时,需等待写进程write,缓冲区只允许一边写,一边读, 不需互斥;
管道为半双工通信,即某一时刻只能单向传输;进程互相通信需要两个管道;
1.6线程概念与多线程
为什么引入线程?
引入线程为的时减少程序并发执行时所付出的时空开销,提高操作系统的并发性能;同时线程的切换在同一进程下需要的时空开销小;
1.线程的概念
线程可以理解为进程下的概念,多线程,同一个进程中可以有多个线程并发执行;一个线程可创建和撤销另一线程;
线程可描述为“轻量级进程”,是系统独立调度和分配的基本单位,是一个基于cpu的执行单位,程序执行的最小单位;
线程的组成:线程ID、程序计数器、各寄存器和堆栈组成;
2.线程的属性和状态
线程的基本状态:就绪、阻塞、执行;
属性:
1)每个线程都有一个唯一的标识ThreadID和线程控制块,现场控制块记录线程的寄存器和栈的现场状态;
2)同一程序可由不同线程执行;
3)在同一进程下的各个线程共享该进程的资源;
4)多线程可并发执行;
5)线程创建后有其生命周期;
3.多线程模型:
1)多对一模型,多用户级线程映射为一个内核级线程;优:效率高,缺:并发性不好
2)一对一模型,一个用户级线程映射一个内核级线程;优:并发能力强,缺:开销大
3)多对多模型,吸取1)2)模型优点;