Job中的Task是如何调度的

我们知道SetupCompletedTransition中会去调度Task.

job.scheduleTasks(job.mapTasks,job.numReduceTasks ==0);

job.scheduleTasks(job.reduceTasks,true);

如果没有Task了,新建Job_COMPLETED事件,然后交给事件分发器处理。

 

我们看一下shcheduleTasks的过程:

# 遍历所有TaskId

# 根据TaskId从集合completedTasksFromPreviousRun中移除对应的元素,并获取被移除的元素

# 构造T_SCHEDULE任务调度事件,交给事件处理器处理

 

然后就会调到TaskImpl中静态内部类InitialScheduleTransition#transi

tion方法

#添加并调度TaskAttempt

task.addAndScheduleAttempt(Avataar.VIRGIN);

# 设置任务的调度时间为当前时间

task.scheduledTime =task.clock.getTime();

# 发送任务启动事件

task.sendTaskStartedEvent();

 

 

添加和调度Task Attempt的流程如下:

TaskAttemptattempt = addAttempt(avataar);

inProgressAttempts.add(attempt.getID());

# 创建TaskAttempt实例

# 把当前TaskAttempt的id添加到正在运行的TaskAttempt集合inProgressAttempts中

# 调度TaskAttempt: 如果集合failedAttempts大小大于0说明,该Task之前有TaskAttempts失败的情形,此次为重新调度,此时事件为TA_RESCHEDULE否则事件为TA_SCHEDULE

 

创建TaskAttempts,会调用createAttempt方法,该方法会根据Task类型,去创建不同的TaskAttemptImpl实例,比如当前是MapTask,会创建MapTaskAttemptImpl,如果当前是ReduceTask,那么此时就会创建ReduceTaskAttemptImpl

 

TaskAttempt生成了,就需要调度了,我们此时在看TA_RESCHEDULE

或者TA_SCHEDULE

它是由RequestContainerTransition的transition方法处理的,流程如下:

 

#申请容器

如果TaskAttempt是重新调度,构造容器申请事件:ContainerRequest

Event;如果是第一次调度,构造容器申请事件ContainerRequestEvent

区别:reschedule不需要考虑Node和Lock为指数型;因为此时Attempt之前已经失败了,此时应当以能够完成Attempt为首要任务;

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
组成原理课后答案第三章 3. 用16K×8位的DRAM芯片组成64K×32位存储器,要求: (1) 画出该存储器的组成逻辑框图。 (2) 设存储器读/写周期为0.5μS, CPU在1μS内至少要访问一次。试问采用哪种刷新方式比较合理?两次刷新的最大时间间隔是多少?对全部存储单元刷新一遍所需的实际刷新时间是多少? 解:(1)组成64K×32位存储器需存储芯片数为       N=(64K/16K)×(32位/8位)=16(片)      每4片组成16K×32位的存储区,有A13-A0作为片内地址,用A15 A14经2:4译码器产生片选信号 ,逻辑框图如下所示:  (2)依题意,采用异步刷新方式较合理,可满足CPU在1μS内至少访问内存一次的要求。     设16K×8位存储芯片的阵列结构为128行×128列,按行刷新,刷新周期T=2ms,则异步     刷新的间隔时间为:                  则两次刷新的最大时间间隔发生的示意图如下    可见,两次刷新的最大时间间隔为tmax      tmax=15.5-0.5=15 (μS)    对全部存储单元刷新一遍所需时间为t R      t R =0.5×128=64  (μS) 6.用32K*8位的EPROM芯片组成128K*16位的只读存储器,试问: (1)数据寄存器多少位? (2)地址寄存器多少位? (3)共需多少个EPROM芯片? (4)画出此存储器组成框图。 解:(1)系统16位数据,所以数据寄存器16位 (2)系统地址128K=217,所以地址寄存器17位 (1) 共需要8片 (2)组成框图如下 8. 存储器容量为64M,字长64位,模块数m = 8,分别用顺序方式和交叉方式进行组织。存储周期T = 100ns,数据总线宽度为64位,总线周期τ = 10ns .问顺序存储器和交叉存储器的带宽各是多少? 解:信息总量: q = 64位 ×8 =512位   顺序存储器和交叉存储器读出8个字的时间分别是:    t2 = m T = 8×100ns =8×10 (s)    t1 = T + (m - 1) = 100 + 7×10 = 1.7 ×10 (s)   顺序存储器带宽是:    W2 = q / t2 = 512÷(8×10 )= 64 ×10 (位/ S)   交叉存储器带宽是:    W1 = q / t1 = 512÷(1.7 ×10 )= 301 ×10 (位/ S) 9. CPU执行一段程序时, cache完成存取的次数为2420次,主存完成存取的次数为80 次,已知cache存储周期为40ns,主存存储周期为240ns,求cache/主存系统的效率和平均访问时间。 解:先求命率h    h=nc/(nc +nm )=2420÷(2420+80)=0.968   则平均访问时间为ta    ta=0.968×40+(1-0.968) ×240=46.4(ns)    r =240÷40=6   cache/主存系统的效率为e    e=1/[r+(1-r)×0.968]=86.2% 13、一个组相联cache由64个行组成,每组4行,主存储器包含4k个块,每块128个字。求表示内存地址的格式 64行,4行一组,共64/4=16组;主存储器有4K个块,每块128字,共2的19次方个字,所以需要19个地址位,因为块长128,所以低7位表示内偏移,因为块编号对16取余是组号,所以用4位表示对应组号,地址的最8位无法用cache决定,保留,所以8 4 7 第四章 4.指令格式结构如下所示,试分析指令格式及寻址方式特点。 解:指令格式及寻址方式特点如下:   ① 双字长二地址指令;   ② 操作码OP可指定 =64条指令;   ③ RS型指令,两个操作数一个在寄存器(16个寄存器之一),另一个在存储器;   ④ 有效地址通过变址求得:E=(变址寄存器)± D,变址寄存器可有16个。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫言静好、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值