进程调度

操作系统思维导图

匿名 (未验证) 提交于 2019-12-03 00:30:01
目标 方便性 有效性 提高系统资源利用率 提高系统吞吐量 可扩充性 开放性 作用 OS作为用户与计算机硬件系统之间的接口 命令方式 系统调用方式 OS实现了对计算机资源的抽象 未配置操作系统的计算机系统 人工操作方式 用户独占全机 CPU等待人工操作 严重降低了计算机资源的利用率 减少了CPU的空闲时间 提高了I/O速度 效率仍然不理想 单道批处理系统 多道批处理系统 1.资源利用率高 2.系统吞吐量大 3.平均周转时间长 4.无交互能力 (宏观并行,微观串行) 分时系统 特征: 1.多路性 2.独立性 3.及时性 4.交互性 ʵʱϵͳ 微机操作系统的发展 1.并发concurrence 区别并行和并发 并行性是指两个或多个事件在同一时刻发生→宏观并行,微观并行 并发性是指两个或多个事件在同一时间间隔内发生→宏观并行,微观串行 引入进程 进程是指在系统中能独立运行并作为资源分配的基本单位,它是由一组机器指令,数据和堆栈等组成的,是一个能独立运行的活动实体 2.共享sharing 1.互斥共享方式 2.同时访问方式 并发和共享是多用户(多任务)OS的两个最基本的特征。它们又是互为存在的条件 3.虚拟virtual 时分复用技术 空分复用技术 4.异步asynchronism 1.处理机管理功能 进程控制 进程同步 进程互斥方式 进程同步方式(协同) 进程通信 调度 作业调度 进程调度

操作系统进程调度算法――吸烟者问题

匿名 (未验证) 提交于 2019-12-03 00:25:02
问题描述: 假设一个系统有三个吸烟者进程和一个供应者进程,每个吸烟者都需要得到三个资源才能完成吸烟操作并且他们每人都持有这三种资源中的一种,供应者一次只能提供三种资源中两种的组合,并且要等到接收到吸烟者吸烟完成信号才能继续派发资源。 #include <iostream> #include <stdlib.h> using namespace std; typedef struct semaphore { int random;//存储随机数,用于选择提供资源的类型 int offer1;//对应烟草和纸的组合 int offer2;//对应烟草和胶水的组合 int offer3;//对应胶水和纸的组合 int finish;//对应进程执行完毕后的应答 }*semaphoreptr; class Provider { public: Provider() {} ~Provider() {} int get_random(); int get_finish(semaphoreptr s); void provide(semaphoreptr s,int a); }; int Provider::get_random() { int n; n = rand() % 3 + 1; return n; } int Provider::get_finish(semaphoreptr s)

长春大学软件工程操作系统实验三处理器调度 ―――― 优先数调度算法

匿名 (未验证) 提交于 2019-12-03 00:18:01
实验目的】 在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。当就绪进程个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器。本实验模拟在单处理器情况下的处理器调度,帮助学生加深了解处理器调度的工作。 【实验内容】 选择一个调度算法,实现处理器调度。 【实验指导】 第一题:设计一个按优先数调度算法实现处理器调度的程序。 [ 提示 ] : (1) 假定系统有五个进程,每一个进程用一个进程控制块 PCB 来代表,进程控制块的格式为: 进程名 指针 要求运行时间 优先数 ״̬ 其中,进程名 - 作为进程的标识,假设五个进程的进程名分别为 P 1 , P 2 , P 3 , P 4 , P 5 。 指针 - 按优先数的大小把五个进程连成队列,用指针指出下一个进程的进程控制块的首地址,最后一个进程中的指针为 “0” 。 要求运行时间 - 假设进程需要运行的单位时间数。 优先数 - 赋予进程的优先数,调度时总是选取优先数大的进程先执行 。 ״̬ - 可假设有两种状态, “ 就绪 ” 状态和 “ 结束 ” 状态。五个进程的初始状态都为 “ 就绪 ” ,用 “R” 表示,当一个进程运行结束后,它的状态为 “ 结束 “ ,用 ”E“ 表示。 (2) 在每次运行你所设计的处理器调度程序之前,为每个进程任意确定其 “ 优先数 ” 和 “ 要求运行时间 ” 。 (3)

概念理解:多CPU,多核,多进程,多线程

匿名 (未验证) 提交于 2019-12-02 23:40:02
文章参考: https://www.cnblogs.com/csfeng/p/8670704.html 当面临这些概念问题的时候,有两个关键词无法绕开,那就是并行和并发。我的理解:并发是指宏观上并行,其实不是并行,例如,多进程其实是将所有进程按时间分为一个一个的时间片,每一个时刻只执行该运行的片,时间片过期后转而执行下一个进程的时间片。 首先,要先了解几个概念:   1、进程是程序的一次执行。   2、进程是资源分配的基本单位(调度单位)。   3、一个进程可以包括多个线程。   4、在单CPU计算机中,有一个资源是无法被多个程序并行使用的:CPU。   5、操作系统调度器:拆分CPU为一段段时间的运行片,轮流分配给不同的程序。   6、操作系统内存管理模块:管理物理内存、虚拟内存相关的事务。 由于CPU同时刻只能执行一个进程,如果我们不加以控制的话,一个进程可能使用CPU直到运行结束,于是出现了操作系统调度器,而进程也成为了调度单位。   进程的运行不仅仅需要CPU,还需要很多其他资源,如内存啊,显卡啊,GPS啊,磁盘啊等等,统称为程序的执行环境,也就是程序上下文。   在这里就出现了并发的概念,调度器切换CPU给不同进程使用的速度非常快,于是在使用者看来程序是在同时运行,这就是并发,而实际上CPU在同一时刻只在运行一个进程。   CPU进程无法同时刻共享

linux0.11进程调度详解

匿名 (未验证) 提交于 2019-12-02 21:59:42
sched_init() set_tss_desc() & set_ldt_desc() ltr() & lldt() LATCH do_timer() 璺宠浆 文章写的有些长,把相关的、用到的函数都列出来了,看完应该能对进程调度相关的代码有一定了解 sched_init() kernel/sched.c : 385 该函数只有36~40行与进程调度有关,只想了解进程调度的同学可以忽略该函数其他部分 void sched_init( void ) { int i; struct desc_struct * p; if ( sizeof ( struct sigaction) != 16 ) panic( "Struct sigaction MUST be 16 bytes" ); //以下两行初始化init任务(任务0)的任务状态段描述符和局部数据表描述符 //详细介绍见下文 set_tss_desc(gdt+FIRST_TSS_ENTRY,&(init_task.task.tss)); set_ldt_desc(gdt+FIRST_LDT_ENTRY,&(init_task.task.ldt)); p = gdt+ 2 +FIRST_TSS_ENTRY; //指向gtd表中init任务的后一个任务的任务状态段描述符 for (i= 1 ;i<NR_TASKS;i++) { /

Linux IO调度方法

匿名 (未验证) 提交于 2019-12-02 21:53:52
Ŀ¼ I/O调度的4种算法 I/O调度程序的测试 ionice IO调度器的总体目标是希望让磁头能够总是往一个方向移动,移动到底了再往反方向走,这恰恰就是现实生活中的电梯模型,所以IO调度器也被叫做电梯 (elevator)而相应的算法也就被叫做电梯算法,而Linux中IO调度的电梯算法有好几种,一个叫做as(Anticipatory),一个叫做cfq(Complete Fairness Queueing),一个叫做deadline,还有一个叫做noop(No Operation),具体使用哪种算法我们可以在启动的时候通过内核参数elevator来指定。 1.CFQ(完全公平排队I/O调度程序) 特点: 在最新的内核版本和发行版中,都选择CFQ做为默认的I/O调度器,对于通用的服务器也是最好的选择。 CFQ试图均匀地分布对I/O带宽的访问,避免进程被饿死并实现较低的延迟,是deadline和as调度器的折中。 CFQ对于多媒体应用(video,audio)和桌面系统是最好的选择。 CFQ赋予I/O请求一个优先级,而I/O优先级请求独立于进程优先级,高优先级的进程的读写不能自动地继承高的I/O优先级。 工作原理: CFQ为每个进程/线程,单独创建一个队列来管理该进程所产生的请求,也就是说每个进程一个队列,各队列之间的调度使用时间片来调度,以此来保证每个进程都能被很好的分配到I/O带宽

进程调度 之 完全公平调度

こ雲淡風輕ζ 提交于 2019-12-02 20:04:27
从调度器说起 内中调度器分为周期性调度器和主调度器,他们是调度工作的主体,而更为详细的调度根据策略的不同交给不同的调度类,比如交给公平调度类; 周期性调度器: 周期调度器按照一定的频率周期性的运行,除了进行调度相关的数据统计之外,还会激活具体进程调度类的周期性调度方法; 在完全公平调度类的周期性调度方法中,首先更新虚拟时间,然后检查是否进程的运行时间已经超过了延迟周期中的时间(时间比重为:权重越大的进程运行时间越长),如果超过了,则发出重新调度请求; 主调度器: 如果要将cpu分配给与当前活动进程不同的另外一个进程,那么需要直接调用主调度函数(schedule());该函数调用调度类的方法完成下面操作,将当前运行的进程从就绪队列移除,从就绪队列选择下一个将要运行的进程,进行进程上下文的切换; 在完全公平调度中,主要涉及以下几个核心的概念: vruntime && min_runtime的计算,以及它们与红黑树中节点的关系; 对于新建进程和睡眠进程的处理; vruntime–调度实体的虚拟运行时间 curr->vruntime += delta_exec * (NICE_0_LOAD/curr->load.weight) 其中delta_exec为两次更新负荷统计量的时间差; NICE_0_LOAD位nice级别为0的进程对应的权重,根据定义

进程调度简要总结

被刻印的时光 ゝ 提交于 2019-12-02 20:04:21
0. 权重 进程的优先级与内核的nice值对应,nice值降低对应权重增加; 内核根据进程类型和静态优先级计算权重值; 内核不仅维护进程自身的权重,还维护调度队列的权重,当进程被加入到调度队列时,也要该进程的权重增加到队列权重中; 1. 完全公平调度延时周期 内核可以通过参数sysctl_sched_latency配置一个时间间隔,用来保证每个可运行进程在此间隔下都能至少运行一次; 控制参数sched_nr_latency控制在上述时间间隔下最大的活动进程数目;如果活动进程的数目超过该配置数,则延时间隔时间成比例的进行扩展; sysctl_sched_latency = sysctl_sched_latency * nr_running / sched_nr_latency 进程分配到的时间根据进程权重在就绪队列中权重的比例进行分配; slice = slice * se->load / rq->load 2. 周期调度器扫描 周期调度器每个HZ扫描一次,更新当前进程的运行时间,并检查当前进程的运行时间是否超过了进程分配到的运行时间,如果超过了则标记进行重新调度标记; 在系统调用返回、中断返回等时机,会检查该标记,调用注册的实际调度方法的函数(比如公平调度注册的处理函数)处理进程,并进行实际的进程上下文切换; 3. 完全公平调度红黑树 完全公平调度就绪队列将进行维护在一棵红黑树中

进程调度简要总结

天大地大妈咪最大 提交于 2019-12-02 20:02:53
0. 权重 进程的优先级与内核的nice值对应,nice值降低对应权重增加; 内核根据进程类型和静态优先级计算权重值; 内核不仅维护进程自身的权重,还维护调度队列的权重,当进程被加入到调度队列时,也要该进程的权重增加到队列权重中; 1. 完全公平调度延时周期 内核可以通过参数sysctl_sched_latency配置一个时间间隔,用来保证每个可运行进程在此间隔下都能至少运行一次; 控制参数sched_nr_latency控制在上述时间间隔下最大的活动进程数目;如果活动进程的数目超过该配置数,则延时间隔时间成比例的进行扩展; sysctl_sched_latency = sysctl_sched_latency * nr_running / sched_nr_latency 进程分配到的时间根据进程权重在就绪队列中权重的比例进行分配; slice = slice * se->load / rq->load 2. 周期调度器扫描 周期调度器每个HZ扫描一次,更新当前进程的运行时间,并检查当前进程的运行时间是否超过了进程分配到的运行时间,如果超过了则标记进行重新调度标记; 在系统调用返回、中断返回等时机,会检查该标记,调用注册的实际调度方法的函数(比如公平调度注册的处理函数)处理进程,并进行实际的进程上下文切换; 3. 完全公平调度红黑树 完全公平调度就绪队列将进行维护在一棵红黑树中

进程管理 之 基本概念

梦想的初衷 提交于 2019-12-02 20:01:38
在单处理器系统上,在给定时刻只有一个程序可以运行,在多处理器系统上,可以真正并行运行的进程数据,取决于物理CPU的数目; 进程优先级 在比较粗糙的划分中,进程分为实时进程和非实时进程; 1. 硬实时进程具有严格的时间限制,某些任务必须在指定的时间内完成; 2. 软实时进程是硬实时进程的一种弱化形式,尽快需要快速得到结果,但是仍然可以稍微延迟执; 3. 大多数进程是没有特定时间约束的普通进程,它们可以通过重要性来分配优先级; 下面为CPU时间分配图,进程的运行按照时间片调度,分给进程的时间片份额与其相对重要性相当;系统中的时间流动对应圆盘转动,CPU则对应圆周旁的扫描器;最终效果是,尽管所有进程都有机会运行,但是重要的进程会比次要的进程得到更多的CPU时间; 这种方式称之为抢占式多任务处理;各个进程都得到一定的时间运行,在运行时间到期后,内核会从进程收回控制权,让一个不同的进程运行,而不考虑前一个进程执行的上一个任务;被抢占进程的运行环境都会保存起来,在该进程恢复执行时,其进程环境也完全恢复;时间片长度会根据进程的重要性不同而变化; 进程生命周期 当调度器在进程之间切换时,必须知道系统中每个进程的状态; 进程可能有以下几种状态: 1. 运行:此刻进程正在执行; 2. 等待:进程能够运行,但是没有得到许可,因为CPU分配给了另外一个进程,调度器可以在下一次任务切换时选择该进程; 3.