进程的定义
程序段、数据段、PCB三部分组成了进程实体(进程映像)。一般情况下,我们把进程实体就简称为进程。
所谓的创建进程就是创建PCB;撤销进程就是撤销PCB。
进程是是资源分配和调度的一个独立单位(没引入线程的概念)
1、pcb:包含操作系统对该进程进行管理所需的信息
2、程序段:程序代码存放的地方
3、数据段:程序运行时使用,产生的运算数据。如全局变量、局部变量、宏定义的常量就存放在数据段内。
进程的组成图
进程的组织方式
1、链接方式
按照进程状态将PCB分为多个队列
操作系统持有指向各个队列的指针
2、索引方式
按照进程状态不同,建立几张索引表
操作系统持有指向各个索引表的指针
图示
进程的特征
1、动态性:进程是程序的一次执行过程,是动态地产生、变化和消亡的
2、并发性:内存中有多个进程实体、各进程看并发执行
3、独立性:进程是能独立运行、独立获得资源、独立接收调度的基本单位
4、异步性:各进程按各自独立、不可预知的速断向前推进,操作系统要提供“进程同步机制”来解决异步问题
5、结构性:每个进程都会配置一个PCB。结构上看,进程由程序段、数据段、PCB组成
总结
进程的状态转换
进程的状态:
1、运行状态
占有CPU,并在CPU上执行
2、就绪状态
已经具备运行条件,但由于没有空闲的cpu,而暂时不能运行
3、阻塞状态
因等待某一时间而暂时不能运行
4、创建状态
进程正在被创建,操作系统为进程分配资源,初始化pcb
5、终止状态
进程正在从系统中撤销,操作系统会回收进程拥有的资源,撤销pcb
进程状态转换图
总结
进程的控制
进程的控制图示:
总结:
进程通信
什么是进程通信
顾名思义:进程通信就是指进程之间的信息交换
进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立
为了保证安全,一个进程不能直接访问另一个进程的地址空间。但是进程之间的信息交换又是必须实现的为了保证进程间的安全通信,操作系统提供了一些方法。
三种方式:
1、共享存储
(1)基于数据结构的共享
(2)基于存储区的共享
2、消息传递
(1)直接通信方式
(2)间接通信方式
3、管道通信
总结
线程概念多线程模型
为什么要引入线程:
可以把线程理解为“轻量级进程”。线程是一个基本的cpu执行单元,也是程序执行流的最小单位。引入线程之后,不仅是进程之间可以并发,进程内的各线程之间也可以并发,使得一个进程内也可以并发处理各种任务(如qq视频,文字聊天,传文件)
引入线程后,进程只作为除cpu之外的系统资源的分配单元(如打印机,内存地址空间等都是分配给进程的)
线程则作为处理机的分配单元
所以进程是资源分配的基本单位,线程是调度的基本单位
引入线程机制后,有什么变化
线程的属性
线程的实现方式
总结
处理机调度概念、层次
总览:调度的基本概念
当有一堆任务要处理,但由于资源有限,这些事情没法同时处理。这就需要确定某种规则来决定处理这些任务的顺序,这就是“调度”研究的问题。
在多道程序系统中,进程的数量往往多余处理机的个数的,这样不可能同时并行地处理各个进程。处理机调度,就是从就绪队列中按照一定的算法选择一个进程并将处理机分配给它执行,以实现进程的并发执行。
调度的三个层次
1、高级调度(作业调度)
由于内存空间有限,有时无法将用户提交的作业全部放入内存中,因此需要确定某种规则来决定将作业调入内容的顺序。
高级调度(作业调度)。按一定的原则从外存中处于后备队列的作业中选择一个(或多个)作业,给他们分配内存等必要资源,并建立相应的PCB,作业调出时才撤销PCB。高级调度主要是指调入问题,因为只有调入的时机需要操作系统来确定,但调出的时机必然是作业运行结束才调出的
2、中级调度(内存调度)
引入了虚拟存储技术之后,可将暂时不能运行的进程调至外存等待。等它重新具备了运行条件且内存又稍有空闲时,再从新调入内存。
这么做的目的是为了提高内存利用率和系统吞吐量。
暂时调到外存等待的进程状态为挂起状态。值得注意的是,PCB并不会一起调到外存,而是会常驻内存。PCB中会记录进程数据在外存中存放的位置,进程状态信息,操作系统通过内存中的PCB来保持对各个进程的监控,管理。被挂起的进程PCB会被放入到的挂起队列中。
中级调度(内存调度),就是要决定将哪个处于挂起状态的进程重新调入内存。一个进程可能会被多次调出、调入内存,因此中级调度发送的频率要比高级调度更高
3、低级调度(进程调度)
低级调度(进程调度),其主要任务是按照某种方法和策略从就绪队列中选取一个进程,将处理机分配给它。
进程调度是操作系统中最基本的一种调度,在一般的操作系统中都必须配置进程调度。进程调度的频率很高,一般几十毫秒一次。
总结
进程的调度的时机切换方式与过程调度方式
知识总览:
总结:
调度算法的评价指标
1、cpu利用率
cpu利用率:指定cpu"忙碌"的时间占总时间的比例
利用率=忙碌的时间/总时间
例题
2、系统吞吐量
系统吞吐量:单位时间内完成作业的数量
系统吞吐量:总共完成了多少道作业/总共花了多少时间
3、周转时间
周转时间、平均周转时间
带权周转时间、平均带权周转时间
周转时间:作业从被提交系统开始,到作业完成的这段时间的间隔。包括四部分:作业在外存后备队列上等待作业调度(高级调度)的时间、进程在就绪队列上等待进程调度(低级调度)的时间、进程在cpu上执行的时间、进程在等待I/O操作完成的时间.后三项在一个作业的整个处理过程中,可能发生多次.
周转时间=作业完成时间-作业提交时间
平均周转时间=各作业周转时间之和/作业数
带权周转时间=作业周转时间/作业实际运行的时间=(作业完成时间-作业提交时间)/作业实际运行的时间
平均带权周转时间=各作业带权周转时间之和/作业数
4、等待时间
等待时间:指进程/作业处于等待处理机状态时间之和,等待时间越长,用户满意度越低。
5、响应时间
响应时间:指用户提交请求到首次产生响应所用的时间
总结
调度算法
算法学习思路:
1、先来先服务(FCFS)
2、短作业优先(SJF,Shortest Job First)
3、高响应比优先(HRRN,Highest Response Ratio Next)
小总结
4、时间片轮.转算法(RR,Round-Robin)
5、优先级调度算法
进程同步进程互斥
1、什么进程同步?
比如进行通信--管道通信
读进程和写进程并发地运行,由于并发必然会导致异步性,因此“写数据”和“读数据”两个操作执行的先后顺序是不确定的。而实际应用中,又必须按照“写数据->读数据”的顺序来执行的。如何解决这种同步问题,就是“进程同步”所讨论的内容。
同步亦称直接制约关系,它是值为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调它们的工作次序而产生的制约关系。进程间的直接制约关系就是源于它们之间的互相合作。
2、什么是进程互斥
进程的“并发”需要“共享”的支持。各个并发执行的进程不可避免的需要共享一些系统资源(比如内存,有比如打印机、摄像头这样的I/O设备)
两个资源共享的方式
互斥共享方式:摄像头
同时共享方式:同时访问磁盘传输文件
我们把一个时间段内只允许一个进程使用的资源成为临界资源.许多物理设备(比如摄像头,打印机)都是属于临界资源。此外还有许多变量,数据,内存缓冲区等都属于临界资源。
对临界资源的访问,必须互斥地进行。互斥,亦称间接制约关系。进程互斥指当一个进程访问某临界资源时另一个想要访问该临界资源的进程就必须等待。当前访问临界资源的进程访问结束,释放该资源之后,另一个进程才能去访问该临界资源。
对临界资源的互斥访问,可以子啊逻辑上分为如下四个部分
总结
进程互斥的软件实现方法
1、单标记法
算法思想:两个进程在访问完临界区的权限转交给另一个进程。也就是说每个进程进入临界区的权限只能被另一个程序赋予。
2、双标记先检查法
算法思想:设置一个布尔型数组flag[],数组中各个元素用来标记个进程想进入临界区的意愿,比如"flag[0]=true" 意味着0号进程P0现在想要进入临界区。每个进程在进入临界区之前先检查当前有没有别的进程想进入临界区,若果没有,则把自身对应的标志设为true,之后开始访问临界区。
3、双标记后检查法
算法思想:双标志先检查法的改版。前一个算法的问题是先“检查”后“上锁”,但是这两个操作又无法一气呵成,因此导致了两个进程同时进入临界区的问题。因此,人们又想到先"上锁"后"检查"的方法,来避免上述问题.
4、Peterson算法
算法思想:双标志后检查法中,两个进程都争着想进入临界区,但是谁都不让谁,最后谁都无法进入临界区。Gary L.Peterson想到了一种方法,如果双方都争着想进入临界区,那可以让进程尝试"孔融让梨",主动让对方先使用临界区。
总结
进程互斥的硬件实现方法
1、中断屏蔽方法
2、TestAndSet指令
3、Swap指令