本文是关于交换原理实验一——时间表调度实验报告记录。

一、实验目的

驱动交换网络实验用来考查学生对时间表调度原理的掌握情况。

二、实验内容和实验步骤

1、实验原理及设计

在程控数字交换的体系结构中,周期级程序(例如摘挂机检测程序、脉冲识别程序、位间隔识别程序)是由时间表调度实现的。所谓时间表调度,是指每经过交换系统的最短有效时间(这通常是指各周期性程序周期的最大公约数),都会检查调度表的调度要求,如果某个程序在这时需要执行,则调度程序开始执行它。

在我们设计的时间表调度实验中,这个调度表的调度是静态的。所谓静态,是指我们的调度表是在系统初始化的时候就建立起来的,在系统运行的情况下不再改动。

实验要求的就是这个调度表的初始化。这个调度表如下:

时间(10ms) \任务 0:摘挂机检测任务 1:脉冲检测任务 2:位间隔检测任务
0 0/1 0/1 0/1
1 0/1 0/1 0/1
…… …… …… ……
…… …… …… ……
…… …… …… ……
18 0/1 0/1 0/1
19 0/1 0/1 0/1

我们这个交换系统提供了三个周期性调度程度(摘挂机检测程序、脉冲识别程序和位间隔识别程序),它们的调用周期分别为 200ms、10ms 和 100ms,所以我们系统的最小调度时间为 10ms。如图所示,每隔 10ms,我们就会检查这个表的一行,如果该行上某一列为 1,我们就执列所对应的任务,如果为 0,就什么都不做。每当执行到这个表的最后一行,调度任务会返回第一行循环执行。而你所要做的就是按照你的理解来填写这个调度表。

2、实验主要数据结构

函数功能:完成调度表的初始化;

函数原型:

1
initSchTable(int ScheduleTable[SchTabLen][SchTabWdh]);

其中 SchTalLen 和 SchTabWdh 为在 bconstant.h 中的宏定义:

1
2
#define SchTabLen 20 //代表这个调度表为 20 行(相邻行之间的时间间隔为 10ms); 
#define SchTabWdh 3 //代表三个周期性调度任务——0:摘挂机检测任务;1:脉冲检测任务;2:位间隔检测任务;

3、实验效果检验

当调度表初始化正确时,能够进行正常的通话;如果初始化不正确,可能会造成周期性程序的不正常调用,例如位间隔调度的延迟会造成识别位间隔的延误甚至丢失。

4、实验步骤

  1. 熟悉实验平台和测试环境;
  2. 编写C程序实现所要求的功能;
  3. 运行测试程序;
  4. 完成实验报告。

三、源代码

点击查看代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include "bconstant.h"

extern "C" _declspec(dllexport) void initSchTable(intScheduleTable[SchTabLen][SchTabWdh])
{
int i;
for (i = 0; i != SchTabLen; i++)
{
//最小时间间隔为10ms

//对摘挂机状态进行初始化
if (i % 20 == 0) //因为调度周期为200ms,也就是每隔20个最小间隔执行一次
{
ScheduleTable[i][0] = 1;
}
else
{
ScheduleTable[i][0] = 0;
}

//对脉冲识别进行初始化
ScheduleTable[i][1] = 1; //因为调度周期为10ms,也就是每个最小间隔都执行一次

//对为间隔识别进行初始化
if (i % 10 == 0) //因为调度周期为100ms,也就是每隔10个最小间隔执行一次
{
ScheduleTable[i][2] = 1;
}
else
{
ScheduleTable[i][2] = 0;
}
}
return;
}

四、实验结果

运行程序后,调度表初始化正确,周期性程序正常调用,能够进行正常的通话。

五、实验心得

这是第一个交换原理的实验,是较为基础的实验,只是对数组的静态初始化,为以后的实验打下基础。我观察了模拟环境下的电路接通情形,让我对时间调度有了一个形象生动的认识,加深了这部分知识记忆和理解。

评论




博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议

载入天数...载入时分秒...