Type I:虚拟机直接运行在系统硬件上,被称为裸机型,没有所谓的宿主机操作系统。他们直接控制硬件资源以及客户机。这种方案的性能处于主机虚拟化与操作系统虚拟化之间。如xen和vmware ESX
Type II:虚拟机运行在传统操作系统上,同样创建的是硬件全仿真实例,被称为**托管(宿主)**型。Hypervisor构建出一整套虚拟硬件平台,使用者根据需要安装新的操作系统和应用软件,底层和上层的操作系统可以完全无关化。简单的说这类VMM通常就是宿主机操作系统上的一个应用程序,像其他应用程序一样受宿主机操作系统的管理,通常抽象为进程。如VMware workstation、KVM。主机虚拟化中VM的应用程序调用硬件资源时需要经过:VM内核->Hypervisor->主机内核,相对来说,性能是几种虚拟化技术中最差的
[root@server5 ~]# cd /etc/libvirt/qemu/networks/
[root@server5 networks]# ls
autostart default.xml
<network><name>defaultname><uuid>481578d7-6728-48fa-8569-09eac31a0273uuid><forwardmode='nat'/><bridgename='virbr0'stp='on'delay='0'/><macaddress='52:54:00:61:66:bb'/><ipaddress='192.168.122.1'netmask='255.255.255.0'><dhcp><rangestart='192.168.122.2'end='192.168.122.254'/>dhcp>ip>network>
存储池配置文件/etc/libvirt/storage/
[root@server5 ~]# cd /etc/libvirt/storage/
[root@server5 storage]# ls
autostart home.xml
[root@server5 storage]# vim home.xml
<pooltype='dir'><name>homename><uuid>74ccd74f-30ea-4462-bc85-ca363520a1cfuuid><capacityunit='bytes'>0capacity><allocationunit='bytes'>0allocation><availableunit='bytes'>0available><source>source><target><path>/homepath>target>pool>
配置文件地址
[root@server5 ~]# cd /etc/libvirt/qemu/[root@server5 qemu]# vim centos7.6-1.xml
</interface>
type='network'>
'52:54:00:83:7b:f1'/>
'default'/>
type='virtio'/>
type='pci' domain='0x0000' bus='0x00' slot='0x0a'function='0x0'/>
</interface>
创建虚拟网络
virt-manager添加网络
验证网络可用性
[root@server5 ~]# ip a
8: virbr1: -CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:b6:35:e2 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.1/24 brd 192.168.10.255 scope global virbr1
valid_lft forever preferred_lft forever
xshell连接新创建的网络
生效:强制关机,再次开机
查看ip地址
[root@localhost ~]# ip a
1: lo: ,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: ,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:80:94:b0 brd ff:ff:ff:ff:ff:ff
3: eth1: ,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:da:57:16 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.150/24 brd 192.168.10.255 scope global noprefixroute dynamic eth1
valid_lft 2714sec preferred_lft 2714sec
inet6 fe80::82c0:907:6163:5dd8/64 scope link noprefixroute
valid_lft forever preferred_lft forever
查看网关
[root@localhost ~]# ip route
default via 192.168.10.1 dev eth1 proto dhcp metric 100
192.168.10.0/24 dev eth1 proto kernel scope link src 192.168.10.150 metric 100
ping网关
[root@localhost ~]# ping 192.168.10.1150
ping宿主机
[root@localhost ~]# ping 192.168.139.50
ping宿主机的网关
[root@localhost ~]# ping 192.168.139.2
ping域名
[root@localhost ~]# ping www.baidu.com
虚拟机连接
[root@server5 ~]# ssh [email protected]
The authenticity of host '192.168.10.150 (192.168.10.150)' can't be established.
ECDSA key fingerprint is SHA256:0j755uJHNYtgaiAvD5muWjnq1Qxtuvo83VBMx2a85Wc.
ECDSA key fingerprint is MD5:17:5d:03:0d:b8:f5:6d:86:06:6e:35:1d:51:e7:56:a9.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.10.150' (ECDSA) to the list of known hosts.
[email protected]'s password:
Last login: Sun Jan 2 19:48:52 2022
[root@localhost ~]#
我们都晓得java实现线程2种方式,一个是继承Thread,另一个是实现Runnable。
模拟窗口买票,第一例子继承thread,代码如下
package thread;
public class ThreadTest {
public static void main(String[] args) {
Thread1 t1 = new Thread1(
#include<iostream>
using namespace std;
//辅助函数,交换两数之值
template<class T>
void mySwap(T &x, T &y){
T temp = x;
x = y;
y = temp;
}
const int size = 10;
//一、用直接插入排
对日期类型的数据进行序列化和反序列化时,需要考虑如下问题:
1. 序列化时,Date对象序列化的字符串日期格式如何
2. 反序列化时,把日期字符串序列化为Date对象,也需要考虑日期格式问题
3. Date A -> str -> Date B,A和B对象是否equals
默认序列化和反序列化
import com
1. DStream的类说明文档:
/**
* A Discretized Stream (DStream), the basic abstraction in Spark Streaming, is a continuous
* sequence of RDDs (of the same type) representing a continuous st
ReplayingDecoder是FrameDecoder的子类,不熟悉FrameDecoder的,可以先看看
http://bylijinnan.iteye.com/blog/1982618
API说,ReplayingDecoder简化了操作,比如:
FrameDecoder在decode时,需要判断数据是否接收完全:
public class IntegerH
1.js中用正则表达式 过滤特殊字符, 校验所有输入域是否含有特殊符号function stripscript(s) { var pattern = new RegExp("[`~!@#$^&*()=|{}':;',\\[\\].<>/?~!@#¥……&*()——|{}【】‘;:”“'。,、?]"
经常在写shell脚本时,会碰到要以另外一个用户来执行相关命令,其方法简单记下:
1、执行单个命令:su - user -c "command"
如:下面命令是以test用户在/data目录下创建test123目录
[root@slave19 /data]# su - test -c "mkdir /data/test123"