首页 > 其他 > 详细

gvisor 虚拟机

时间:2021-01-08 18:24:44      阅读:28      评论:0      收藏:0      [点我收藏+]

 

type constructor struct{}

func (*constructor) New(f *os.File) (platform.Platform, error) {
    return New(f)
}

func (*constructor) OpenDevice() (*os.File, error) {
    return OpenDevice()
}

// Flags implements platform.Constructor.Flags().
func (*constructor) Requirements() platform.Requirements {
    return platform.Requirements{}
}

func init() {
    platform.Register("kvm", &constructor{})
}

 

 

// New returns a new KVM-based implementation of the platform interface.
func New(deviceFile *os.File) (*KVM, error) {
    fd := deviceFile.Fd()

    // Ensure global initialization is done.
    globalOnce.Do(func() {
        globalErr = updateGlobalOnce(int(fd))
    })
    if globalErr != nil {
        return nil, globalErr
    }

    // Create a new VM fd.
    var (
        vm    uintptr
        errno syscall.Errno
    )
    for {
        vm, _, errno = syscall.Syscall(syscall.SYS_IOCTL, fd, _KVM_CREATE_VM, 0)
        if errno == syscall.EINTR {
            continue
        }
        if errno != 0 {
            return nil, fmt.Errorf("creating VM: %v", errno)
        }
        break
    }
    // We are done with the device file.
    deviceFile.Close()

    // Create a VM context.
    machine, err := newMachine(int(vm))
    if err != nil {
        return nil, err
    }

    // All set.
    return &KVM{
        machine: machine,
    }, nil
}

 

gvisor 虚拟机

原文:https://www.cnblogs.com/dream397/p/14252197.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!