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

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

更新时间:2009-4-16:  来源:毕业论文
Dynamips设计与分析-Dynamips及相关教学软件研究与设计 第19页
停止一个虚拟机
函数原型为:
int vm_stop(vm_instance_t *vm)
CPU组停止所有的CPU,VM标记为VM_STATUS_SHUTDOWN,并返回0。
5.移除一个虚拟机
函数原型为:
void vm_object_remove(vm_instance_t *vm,vm_obj_t *obj)
通过改变obj指针和VM指针来完成
6.获取虚拟机类型
函数原型为:
char *vm_get_type(vm_instance_t *vm)
通过vm->type得出虚拟机的型号是3600,7200,2691,3725,3745或其他。
7.通过虚拟机关闭硬件资源
函数原型为:
int vm_hardware_shutdown(vm_instance_t *vm)
CPU也要停止运行,释放object表、PCI总线使用的资源、PCI总线池,删除系统CPU组等操作
8.保存虚拟机配置信息到指定的文件
配置好虚拟机信息之后需要保存起来。
函数原型为:
void vm_save_config(vm_instance_t *vm,FILE *fd)
保存虚拟机配置的各种信息
4.3.2 虚拟设备(Device)的实现
虚拟Device在Dynamips中是项重要的内容。
先来看一个虚拟设备的数据结构:
struct vdevice {
   char *name;
   u_int id;
   m_uint64_t phys_addr;      /* 物理地址 */
   m_uint32_t phys_len;       /* 物理长度 */
   m_iptr_t host_addr;     /* 主机地址 */
   void *priv_data;        /* 私有数据 */
   int flags;
   int fd;
   dev_handler_t handler;     /* 句柄 */
   struct vdevice *next,**pprev;
};
这是一个虚拟的设备结构,包括设备名称,编号,物理地址,物理长度,主机地址私有的数据等等信息,是虚拟设备必须具有的属性。
在这里主要分析如下几个部分:
 创建一个虚拟设备
 获取虚拟设备
 初始化一个虚拟设备
 显示设备信息
 映射一个设备
1.创建一个虚拟设备
函数实现如下:
struct vdevice *dev_create(char *name)
{
   struct vdevice *dev;
   if (!(dev = malloc(sizeof(*dev)))) {
      fprintf(stderr,"dev_create: insufficient memory to "
              "create device '%s'.\n",name);
      return NULL;
   }          /* 为创建的虚拟设备分配空间 */
   dev_init(dev);  /* 初始化设备 */
   dev->name = name;  /* 为创建的虚拟设备命名 */
   return dev;   /* 返回虚拟设备 */
}
要创建一个设备,就应该有设备名称及占用的空间。因此这个函数先为设备分配一个空间,再调用dev_init(dev)函数对其初始化操作,最后返回这个设备值以达到创建一个设备的目的。
2.获取虚拟设备
要获取设备信息可以有三个方法,即通过id获取,通过name获取,通过物理地址查找获取
(1)通过id获取设备信息
函数实现如下:
struct vdevice *dev_get_by_id(vm_instance_t *vm,u_int dev_id)
{
   if (!vm || (dev_id >= MIPS64_DEVICE_MAX))
      return NULL;
   return(vm->dev_array[dev_id]);
}
分析一下这个函数如何实现的,先判断id是否合法即在合法的范围内。合法则利用设备id的调用其虚拟机指向的设备阵列即可返回设备信息。
(2)通过name获取设备信息
函数实现如下:
struct vdevice *dev_get_by_name(vm_instance_t *vm,char *name)
{
   struct vdevice *dev;
   if (!vm)
      return NULL;
   for(dev=vm->dev_list;dev;dev=dev->next)
      if (!strcmp(dev->name,name))
         return dev;
   return NULL;
}
先判断vm存在与否,再利用参数name匹配查找获得设备信息。
(3)通过物理地址获取设备信息
函数实现如下:
struct vdevice *dev_lookup(vm_instance_t *vm,m_uint64_t phys_addr,int cached)
{
   struct vdevice *dev;
   if (!vm)

      if ((phys_addr >= dev->phys_addr) &&
          ((phys_addr - dev->phys_addr) < dev->phys_len))
         return dev;
   }
   return NULL;
}
通过物理地址获取设备信息,先判断vm存在与否,再利用参数phys_add(物理地址)匹配查找获得设备信息。
4.初始化一个虚拟设备
函数原型为:
void dev_init(struct vdevice *dev)
调用memset(dev,0,sizeof(*dev)),为虚拟设备初始化内存,将值-1赋给dev->fd

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

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

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