毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 论文 >> 正文

Dynamips设计与分析-Dynamips及相关教学软件研究与设计 第18页

更新时间:2009-4-16:  来源:毕业论文
Dynamips设计与分析-Dynamips及相关教学软件研究与设计 第18页
应用层的实现
在本层主要实现三个部分:虚拟机Virtual Machines,虚拟设备Virtual Device,虚拟输入输出IO。
4.3.1 虚拟机(VM)的实现
首先分析vm_instance这个数据结构,它定义了很多参数,比方说设备类型,状态标记,实例id,对内存的定义有:RAM,ROM, IOMEM和NVRAM的大小。RAM,ROM,IOMEM,NVRAM分别是随机存储器,只读存储器,输入输出存储器以及非易失随机存储器。
struct vm_instance {
   char *name;
   int type;                       /* 类型有C7200, C3600, ... */
   int status;                     /* 实例状态标记 */
   int instance_id;                /* 实例id */
   u_int ram_size,rom_size;        /* RAM 和 ROM 大小(Mb) */
   u_int iomem_size;               /* IOMEM 大小(Mb) */
   u_int nvram_size;               /* NVRAM 大小(Kb) */

又定义了基本的硬件设备:CPU,PCI总线以及PCI I/O 空间。

cpu_group_t *cpu_group;       /* CPU组 */
   cpu_mips_t *boot_cpu;        /* 引导CPU */
   struct pci_bus *pci_bus[2];     /* PCI总线2 */
   struct pci_bus *pci_bus_pool[VM_PCI_POOL_SIZE]; /* PCI 总线池 */
   struct pci_io_data *pci_io_space;    /* PCI 输入输出空间 */
    …
上面所说的这些都需要Dynamips进行虚拟实现,才能模拟出真正思科路由器的环境。
在这里主要分析如下几个部分:
 创建一个虚拟机实例
 增加一个虚拟机
 释放一个虚拟机
 停止一个虚拟机
 移除一个虚拟机
 获取虚拟机类型
 通过虚拟机关闭硬件资源
 保存虚拟机配置信息到指定的文件
1.创建一个虚拟机实例
创建的虚拟机信息有名称,实例id,虚拟机类型。首先要为创建的虚拟机分配空间,然后是对内存空间初始化,包括类型虚拟机,虚拟机大小问题等。接着就是对虚拟机的各种属性进行详细的赋值操作了,包括虚拟机实例id,类型,状态标记,JIT使用的状态等等信息,最后还不要忘了对虚拟机命名,这里的函数是调用strdup()函数把参数名称复制给虚拟机指向的名称。最后一步就是在注册表中增加创建的这个虚拟机的记录。这样就实现了创建一个虚拟机。
实现函数如下:
vm_instance_t *vm_create(char *name,int instance_id,int machine_type)
{
   vm_instance_t *vm;             
    if (!(vm = malloc(sizeof(*vm)))) {
      fprintf(stderr,"VM %s: unable to create new instance!\n",name);
      return NULL;
   }      /* 为创建的虚拟机分配空间 */
   memset(vm,0,sizeof(*vm)); /* 这个函数对内存进行初始化,memset()的内涵:用来对一段内存空间全部设置为某个字符,这里全部设为0,初始化的空间大小即是虚拟机的大小,初始化的那段内存取名为vm。在Dynamips中进行创建操作时经常用到此函数 */
   vm->instance_id    = instance_id;       /* 赋值id */
   vm->type           = machine_type;    /* 赋虚拟机的类型 */
   vm->status         = VM_STATUS_HALTED; /* 赋虚拟机的状态标记 */
   vm->jit_use        = JIT_SUPPORT;         /* 支持JIT标记 */
   vm->vtty_con_type  = VTTY_TYPE_TERM;   
   vm->vtty_aux_type  = VTTY_TYPE_NONE;
   vm->timer_irq_check_itv = VM_TIMER_IRQ_CHECK_ITV;
   if (!(vm->name = strdup(name))) {
      fprintf(stderr,"VM %s: unable to store instance name!\n",name);
      goto err_name;
   }              /* 赋虚拟机的名称 */
     if (vm_get_lock(vm) == -1)      
      goto err_lock;
     if (vm_create_log(vm) == -1)
      goto err_log;
   if (registry_add(vm->name,OBJ_TYPE_VM,vm) == -1) {
      fprintf(stderr,"VM: Unable to store instance '%s' in registry!\n",
              vm->name);
      goto err_reg_add;
   }
   return vm;            /* 返回虚拟机的值 */
 err_reg_add:               /* 以下为出错处理 */
   vm_close_log(vm);
 err_log:
   free(vm->lock_file);
 err_lock:
   free(vm->name);
 err_name:
   free(vm);
   return NULL;
}
2.增加一个虚拟机
函数原型为:
void vm_object_add(vm_instance_t *vm,vm_obj_t *obj)
通过改变obj指针和VM指针来完成
3.释放一个虚拟机
释放一个虚拟机就是释放其占用的资源,包括释放硬件资源,关闭记录文件,移除锁定文件,再释放虚拟机的各种参数。
实现函数如下:
void vm_free(vm_instance_t *vm)
{
   if (vm != NULL) {
      vm_hardware_shutdown(vm);      /* 关闭硬件资源 */
      vm_close_log(vm);               /* 关闭log文件 */
      );     /* 释放虚拟机的各种属性 */
      free(vm->sym_filename);
      free(vm->ios_image);
      free(vm->ios_config);
      free(vm->rom_filename);
      free(vm->name);
      free(vm);
   }
}

 << 上一页  [11] [12] [13] [14] [15] [16] [17] [18] [19] [20]  ... 下一页  >> 

Dynamips设计与分析-Dynamips及相关教学软件研究与设计 第18页下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©751com.cn 辣文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。