首页
精选文章KVM查看全文KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的开源的 Linux 原生的全虚拟化解决方案。KVM 中,虚拟机被实现为常规的 Linux 进程,由标准 Linux 调度程序进行调度;虚机的每个虚拟 CPU 被实现为一个常规的 Linux 进程。这使得 KMV 能够使用 Linux 内核的已有功能。KVM是Linux的一部分,Linux 2.6.20及以上版本都包含KVM,因此KVM可以使用Linux最新内核的功能。 现代CPU在硬件层面提供对特殊指令的接获和重定向,通过这些指令集,VMM很容易将客户机置于受限模式运行,一旦宿主机访问物理资源,硬件会把控制权交还给VM处理,利用硬件的虚拟化技术,VM还可以重定向后的指令发给宿主机进行执行。 KVM将Linux转为虚拟机监控程序,由于KVM是Linux内核的一部分,所以作为虚拟机必须的组件,例如内存管理,进程调度,输入输出,网络堆栈都直接拥有。KVM虚拟机进程和普通的Linux进程一样,由标准的Linux进程调度程序进行调度,并且使用专门的虚拟硬件,例如网卡,CPU等。但是,KVM 本身不执行任何硬件模拟,需要客户空间程序通过 /dev/kvm 接口设置一个客户机虚拟服务器的地址空间,向它提供模拟的 I/O,并将它的视频显示映射回宿主的显示屏。目前这个应用程序是 QEMU。 综上所述,KVM虚拟化有两个核心模块: KVM内核模块:主要包括KVM虚拟化核心模块KVM.ko,以及硬件相关的KVM_intel或KVM_AMD模块;负责CPU与内存虚拟化,包括VM创建,内存分配与管理、vCPU执行模式切换等。 QEMU设备模拟:实现IO虚拟化与各设备模拟…Git查看全文Final【Java】查看全文Final是Java的关键字,Final可以用于修饰类、方法、变量(包括成员变量和局部变量)。Java类使用Final修饰之后,该类不可以再被继承,这样做通常处于安全考虑。 使用final方法的原因有两个。 第一个原因是把方法锁定,以防任何继承类修改它的含义; 第二个原因是出于效率考虑,早期的 Java 实现版本中,会将 final 方法转为内嵌调用,内嵌调用在方法体较小时候会因为减少了方法调用成本而得到一定的效率提升。最近的Java版本中,已经不需要使用final方法进行这些优化。 Java类的 private 方法模式是Final方法。 被Final修饰的Java类中所有的成员方法默认都是Final方法。 Final修饰变量时候的语义是该变量的值不可被修改。 内存屏障 通过 Final 关键词修饰的变量,必须初始化之后才可以使用。 为了避免重排序,Final 的变量在构造方法中加入了内存屏障。构造函数结束之前 Final 变量增加了StoreStore内存屏障,在初次读取 final 变量之前加上了 LoadLoad 内存屏障。 加入内存屏障可以避免未被初始化的变量被其他线程使用。 语法检验 Java类的使用需要经历加载,链接,初始化之后才能使用。 在链接阶段又分为校验、准备以及解析的过程。 在校验阶段Java 虚拟机会对字节码进行语义检查,对于不符合JVM规范的指令,Java虚拟机会返回校验失败的错误。 被定义为Final的类或者成员方法禁止被继承或者重写会在这个阶段进行校验。 Final类 当final修饰类的时候表明该类不能被继承,并且类中所有的属性和方法都默认是final类型,如String… |
热门分类开源Golang消息队列JavaJavascriptLinuxMysqlNLPPHP事务内存管理分布式理论分类存储常用存储开源软件操作系统画图网络编程数据库算法虚拟化前端存储理论常用算法微服务数据结构算法应用计算机原理中间件共识算法分布式分治动态规划容器并发排序架构组件绘图工具网络协议编程语言理论算法思想树缓存架构C++字符串算法工程思想搜索
算法题库精选内容 |