Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1899991
  • 博文数量: 211
  • 博客积分: 464
  • 博客等级: 下士
  • 技术积分: 3794
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-24 18:25
个人简介

阿弥陀佛

文章分类

全部博文(211)

文章存档

2020年(2)

2019年(3)

2018年(5)

2017年(6)

2016年(10)

2015年(9)

2014年(73)

2013年(90)

2012年(13)

分类: 虚拟化

2013-07-11 16:59:19

kvm这个结构体包含了vCPU,内存,APIC,IRQ,MMU,Event事件管理等信息。该结构体中的信息主要在kvm虚拟机内部使用,用于跟踪虚拟机的状态。
对于一个kvm,就对应一个线程。
Kvm完全利用了硬件虚拟化技术,通过cat /proc/cpuinfo 查看信息,如果是intel处理器,那么就加载kvm-intel.ko
用户态创建一个虚拟机就是通过ioctl向/dev/kvm字符设备进行设置和管理kvm的。

点击(此处)折叠或打开

  1. struct kvm {
  2.     spinlock_t mmu_lock;
  3.     spinlock_t requests_lock;
  4.     struct rw_semaphore slots_lock;
  5.     struct mm_struct *mm; /* userspace tied to this vm */
  6.     int nmemslots;
  7.     struct kvm_memory_slot memslots[KVM_MEMORY_SLOTS +
  8.                     KVM_PRIVATE_MEM_SLOTS];
  9. #ifdef CONFIG_KVM_APIC_ARCHITECTURE
  10.     u32 bsp_vcpu_id;
  11.     struct kvm_vcpu *bsp_vcpu;
  12. #endif
  13.     struct kvm_vcpu *vcpus[KVM_MAX_VCPUS];
  14.     atomic_t online_vcpus;
  15.     struct list_head vm_list;
  16.     struct mutex lock;
  17.     struct kvm_io_bus mmio_bus;
  18.     struct kvm_io_bus pio_bus;
  19. #ifdef CONFIG_HAVE_KVM_EVENTFD
  20.     struct {
  21.         spinlock_t lock;
  22.         struct list_head items;
  23.     } irqfds;
  24.     struct list_head ioeventfds;
  25. #endif
  26.     struct kvm_vm_stat stat;
  27.     struct kvm_arch arch;
  28.     atomic_t users_count;
  29. #ifdef KVM_COALESCED_MMIO_PAGE_OFFSET
  30.     struct kvm_coalesced_mmio_dev *coalesced_mmio_dev;
  31.     struct kvm_coalesced_mmio_ring *coalesced_mmio_ring;
  32. #endif

  33.     struct mutex irq_lock;
  34. #ifdef CONFIG_HAVE_KVM_IRQCHIP
  35.     struct list_head irq_routing; /* of kvm_kernel_irq_routing_entry */
  36.     struct hlist_head mask_notifier_list;
  37. #endif

  38. #ifdef KVM_ARCH_WANT_MMU_NOTIFIER
  39.     struct mmu_notifier mmu_notifier;
  40.     unsigned long mmu_notifier_seq;
  41.     long mmu_notifier_count;
  42. #endif
  43. };
struct kvm_vm_stat stat;就是KVM虚拟机中的页表、MMU等运行时状态信息。
kvm_x86_ops 结构体中的所有成员都是函数指针,在kvm-intel.ko 和 kvm-amd.ko这两个不同的模块中,针对各自体系做不同的函数。KVM子系统代码将通过该结构体函数进行实际的硬件操作。

针对kvm的fd,通过KVM_CREATE_VCPU指令字可以创建KVM的vCPU,并且获得该vcpu_fd,vcpu_fd的操作主要包含在kvm_vcpu_fops中,kvm_vcpu_fops的实现方法如下:

点击(此处)折叠或打开

  1. static struct file_operations kvm_vcpu_fops = {
  2.     .release = kvm_vcpu_release,
  3.     .unlocked_ioctl = kvm_vcpu_ioctl,
  4.     .compat_ioctl = kvm_vcpu_ioctl,
  5.     .mmap = kvm_vcpu_mmap,
  6. };




阅读(5150) | 评论(1) | 转发(1) |
1

上一篇:开源代码中的递归宏

下一篇:NP完全问题

给主人留下些什么吧!~~