kvm虚拟化介绍

一、虚拟化分类

1、虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互相不影响,从而显著提高计算机的工作效率。
虚拟化使用软件的方法重新定义划分 IT 资源,可以实现 IT 资源的动态分配、灵活调度、跨域共享,提高 IT 资源利用率,使 IT 资源能够真正成为社会基础设施,服务于各行各业中灵活多变的应用需求。
 
2、虚拟化层次种类:
  (1) 完全虚拟化 --- 最流行的虚拟化方法使用名为 hypervisor 的一种软件,在虚拟服务器和底层硬件之间建立一个抽象层。 VMware 和微软的VirtualPC 是代表该方法的两个商用产品,而基于核心的虚拟机 (KVM) 是面向 Linux 系统的开源产品hypervisor 可以捕获 CPU 指令,为指令访问硬件控制器和外设充当中介。因而,完全虚拟化技术几乎能让任何一款操作系统不用改动就能安装到虚拟服务器上,而它们不知道自己运行在虚拟化环境下。主要缺点是, hypervisor 给处理器带来开销
 
(2)准虚拟化 --- 完全虚拟化是处理器密集型技术,因为它要求 hypervisor管理各个虚拟服务器,并让它们彼此独立。减轻这种负担的一种方法就是,改动客户端操作系统,让它以为自己运行在虚拟环境下,能够与hypervisor 协同工作。这种方法就叫准虚拟化 (para-virtualization)Xen 是开源准虚拟化技术的一个例子。操作系统作为虚拟服务器在 Xen hypervisor 上运行之前,它必须在核心层面进行某些改变。因此, Xen 适用于 BSD 、 Linux 、 Solaris 及其他开源操作系统,但不适合对像Windows 这些专有的操作系统进行虚拟化处理,因为它们无法改动。准虚拟化技术的优点是性能高。经过准虚拟化处理的服务器可与hypervisor 协同工作,其响应能力几乎不亚于未经过虚拟化处理的服务器。准虚拟化与完全虚拟化相比优点明显,以至于微软和 VMware 都在开发这项技术,以完善各自的产品。
 
(3)系统虚拟化 --- 就操作系统层的虚拟化而言,没有独立的hypervisor 层。相反,主机操作系统本身就负责在多个虚拟服务器之间分配硬件资源,并且让这些服务器彼此独立。一个明显的区别是,如果使用操作系统层虚拟化,所有虚拟服务器必须运行同一操作系统 ( 不过每个实例有各自的应用程序和用户。
账户 ) 。虽然操作系统层虚拟化的灵活性比较差,但本机速度性能比较高。此外,由于架构在所有虚拟服务器上使用单一、标准的操作系统,管理起来比异构环境要容易。
 
(4)桌面虚拟化 --- 服务器虚拟化主要针对服务器而言,而虚拟化最接近用户的还是要算的上桌面虚拟化了,桌面虚拟化主要功能是将分散的桌面环境集中保存并管理起来,包括桌面环境的集中下发,集中更新,集中管理。桌面虚拟化使得桌面管理变得简单,不用每台终端单独进行维护,每台终端进行更新。终端数据可以集中存储在中心机房里,安全性相对传统桌面应用要高很多。桌面虚拟化可以使得一个人拥有多个桌面环境,也可以把一个桌面环境供多人使用。
 

3、虚拟化架构分类

(1)1型虚拟化

Hypervisor 直接安装在物理机上,多个虚拟机在 Hypervisor 上运行Hypervisor 实现方式一般是一个特殊定制的 Linux 系统。Xen 和 VMWare 的 ESXi

都属于这个类型。

(2)2型虚拟化

物理机上首先安装常规的操作系统,比如 Redhat、Ubuntu 和 Windows。Hypervisor 作为 OS 上的一个程序模块运行,并对管理虚拟机进行管理

KVM、VirtualBox 和 VMWare Workstation 都属于这个类型。

二、虚拟化 ---KVM

 1、虚拟化kvm发展:

     2006 年 10 月由以色列的 Qumranet 组织开发的一种新的“虚拟机”方案,并将其贡献给开源世界

   2007 年 2 月于 Linux Kernel-2.6.20 中第一次包含了 KVM

     2008 年 9 月,红帽收购了 Qumranet ,由此入手了 KVM 的虚拟化技术。在之前红帽决是将Xen 加入到自己的默认特性当中——那是 2006 年,因为当时Xen技术脱离了内核的维护方式,也许是因为采用 Xen 的 RHEL 在企业级虚拟化方面没有赢得太多的市场,也许是因为思杰跟微软走的太近了,种种原因,导致其萌生了放弃 Xen。而且在正式采用 KVM 一年后,就宣布在新的产品线中彻底放弃 Xen ,集中资源和精力进行 KVM 的工作。

     2009 年 9 月,红帽发布其企业级 Linux 的 5.4 版本( RHEL5.4 ),在原先的 Xen 虚拟化机制之上,将 KVM 添加了进来

     2010 年 11 月,红帽发布其企业级 Linux 的 6.0 版本( RHEL6.0 ),这个版本将默认安装的 Xen 虚拟化机制彻底去除,仅提供 KVM 虚拟化机制

    2011 年初,红帽的老搭档 IBM 找上红帽,表示 KVM 这个东西值得加大力度去做。于是到了 5 月, IBM 和红帽,联合惠普和英特尔一起,成立了开放虚拟化联盟( Open Virtualization Alliance ),一起声明要提升 KVM 的形象,加速 KVM 投入市场的速度,由此避免 VMware 一家独大的情况出现。联盟成立之时,红帽的发言人表示, 大家都希望除 “ VMware 之外还有一种开源选择。未来的云基础设施一定会基于开源

     自 Linux 2.6.20 之后逐步取代 Xen 被集成在Linux 的各个主要发行版本中,使用 Linux 自身的调度器进行管理。

   2 、KVM ---  全称是基于内核的虚拟机(Kernel-based Virtual Machine)
      是一个开源软件,基于内核的虚拟化技术,实际是嵌入系统的一个虚拟化模块,通过优化内核来使用虚拟技术,该内核模块使得 Linux 变成了一个Hypervisor,虚拟机使用 Linux 自身的调度器进行管理
      KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的开源的 Linux 原生的全虚拟化解决方案。KVM 中,虚拟机被实现为常规的 Linux 进程,由标准 Linux 调度程序进行调度;虚机的每个虚拟 CPU 被实现为一个常规的 Linux 进程。这使得 KMV 能够使用 Linux 内核的已有功能。但是,KVM 本身不执行任何硬件模拟,需要客户空间程序通过 /dev/kvm 接口设置一个客户机虚拟服务器的地址空间,向它提供模拟的 I/O,并将它的视频显示映射回宿主的显示屏。目前这个应用程序是 QEMU。

   3、Linux 上的用户空间、内核空间、虚机:

    Guest:客户机系统,包括CPU(vCPU)、内存、驱动(Console、网卡、I/O 设备驱动等),被 KVM 置于一种受限制的 CPU 模式下运行

    KVM:运行在内核空间,提供CPU 和内存的虚级化,以及客户机的 I/O 拦截。Guest 的 I/O 被 KVM 拦截后,交给 QEMU 处理。

    QEMU:修改过的为 KVM 虚机使用的 QEMU 代码,运行在用户空间,提供硬件 I/O 虚拟化,通过IOCTL /dev/kvm 设备和 KVM 交互

   4、KVM:

             kvm.ko(内核模块),只用于管理虚拟 CPU 和内存。IO 的虚拟化,就交给 Linux 内核和qemu来实现

         Libvirt:是 KVM 的管理工具。Libvirt 除了能管理 KVM 这种 Hypervisor,还能管理 Xen,VirtualBox 等。OpenStack 底层也使用 Libvirt

         Libvirt 包含 3 个东西:后台 daemon 程序 libvirtd、API 库和命令行工具 virsh

(1)libvirtd是服务程序,接收和处理 API 请求

(2)API 库使得其他人可以开发基于 Libvirt 的高级工具,比如 virt-manager,这是个图形化的 KVM 管理工具,后面我们也会介绍;

(3)virsh 是我们经常要用的 KVM 命令行工具,后面会有使用的示例。作为 KVM 和 OpenStack 的实施人员,virsh 和 virt-manager 是一定要会用的。

三、虚拟化VT开启确认

KVM 本身也有一些弱点,那就是相比裸金属虚拟化架构的 Xen 、 VMware ESX 和 HyperV , KVM 是运行在 Linux 内核之上的寄居式虚拟化架构,会消耗比较多的计算资源;不过针对这一点, Intel 、 AMD 已经在处理器设计上有专门的VT-x 和 AMD-V 扩展,这种特性在每次硬件更新的时候也会更新,往往每次更新后都对虚拟化性能和速度上有明显的提升,所以长远来看,也不是什么大问题。

KVM 的虚拟化需要硬件支持(需要处理器支持虚拟化:如 Intel 厂商的 Intel-VT ( vmx )技术&&AMD 厂商的 AMD-V ( svm )技术。是基于硬件的完全虚拟化。而 Xen 早期则是基于软件模拟的半虚拟化( Para-Virtualization ),新版本则是基于硬件支持的完全虚拟化。但 Xen 本身有自己的进程调度器,存储管理模块等,所以代码较为庞大。

你当前的 CPU 是否支持 VT 技术?当不确定你当前 CPU 是否支持 VT 技术时
1. 可以在 windows 下使用 cpu-z 软件来进行测试
2. 可以在 Linux 下查看 CPU 的相信信息来确定

** CPU 虚拟化给我们带来了哪些好处?

CPU 的虚拟化技术可以将单 CPU 模拟多 CPU 并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。

** 虚拟化技术与多任务超线程的技术的区别?(操作系统多对一)

虚拟化技术与多任务以及超线程技术是完全不同的。多任务是指在一个操作系统中多个程序同时并行运行,而在虚拟化技术中,则可以同时运行多个操作系统,而且每一个操作系统中都有多个程序运行,彼此独立。每一个操作系统都运行在一个虚拟的 CPU 或者是虚拟主机上;而超线程技术只是单 CPU 模拟双 CPU 来平衡程序运行性能,这两个模拟出来的 CPU 是不能分离的,只能协同工作

实验一:将命令行界面改为图形化界面

之前我们在创建虚拟机的时候,可以根据需求选择图形化界面(带gui的图形工具)或者直接安装命令行界面。

但是如果在选择安装命令行界面后又想改为图形化呢。以下步骤:

1) 将yum源中非本地仓库中的可用包全部放在一个目录里。

[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
.repo haha                          #将源包放在haha目录里不被使用
[root@localhost yum.repos.d]# cd haha
[root@localhost haha]# ls
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo zabbix.repo

2)将yum本地仓库中的网络源备份到其他目录或者注释掉。总之不要用。

3)执行yum makecache 缓存元数据

[root@localhost haha]# yum makecache
已加载插件:fastestmirror, langpacks
from cached hostfile
元数据缓存已建立

4)查看可用环境和组信息

[root@localhost haha]# yum grouplist
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
已安装环境分组:
带 GUI 的服务器
可用的环境分组:
最小安装
基础设施服务器
计算节点
文件及打印服务器
基本网页服务器
虚拟化主机
GNOME 桌面
KDE Plasma Workspaces
开发及生成工作站
可用组:
传统 UNIX 兼容性
兼容性程序库
图形管理工具
安全性工具
开发工具
控制台互联网工具
智能卡支持
科学记数法支持
系统管理
系统管理工具
完成

5)yum  groupinstall  '带 GUI 的服务器'  -y

下载过程中可能会报以下错误:

这是因为安装的包与所需的包版本不一致,删除掉已安装的冲突的包即可。

yum -y remove 冲突包

6)临时进入图形化界面

下载完成后执行 startx

root@localhost haha]# startx
xauth: file /root/.serverauth. does not exist
X.Org X Server 1.19.
Release Date: --
X Protocol Version , Revision
Build Operating System: 3.10.-514.16..el7.x86_64
Current Operating System: Linux localhost.localdomain 3.10.-.el7.x86_64 # SMP Tue Aug :: UTC x86_64
Kernel command line: BOOT_IMAGE=/vmlinuz-3.10.-.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=zh_CN.UTF-
Build Date: August ::43AM
。。。
VMware: No 3D enabled (, Success).

查看虚拟机状态是否转变为图形化界面。

7)退出图形化界面:ctrl + c 直接退出

8)如果需要永久转变为图形化。

执行 systemctl set-default graphical.target

[root@localhost haha]# systemctl set-default
anaconda.target hybrid-sleep.target network.target runlevel1.target spice-vdagentd.target
basic.target initrd-fs.target nfs-client.target runlevel2.target suspend.target
bluetooth.target initrd-root-fs.target nss-lookup.target runlevel3.target swap.target
cryptsetup-pre.target initrd-switch-root.target nss-user-lookup.target runlevel4.target sysinit.target
cryptsetup.target initrd.target paths.target runlevel5.target system-update.target
ctrl-alt-del.target iprutils.target poweroff.target runlevel6.target timers.target
default.target kexec.target printer.target shutdown.target time-sync.target
emergency.target local-fs-pre.target reboot.target sigpwr.target umount.target
final.target local-fs.target remote-fs-pre.target sleep.target virt-guest-shutdown.target
getty.target machines.target remote-fs.target slices.target
graphical.target multi-user.target rescue.target smartcard.target
halt.target network-online.target rpcbind.target sockets.target
hibernate.target network-pre.target runlevel0.target sound.target

然后重启即可。

10)如果又想永久转为命令行界面怎么办?

这样做:

执行 systemctl set-default  multi-user.target,再重启就可以了。

安装kvm前准备工作

1. 确定处理器有 VT

支持vmx或者svm建立在图形化界面的前提下,按照上面的设置为图形化界面后,

再勾选处理器的虚拟化引擎,如果出现不支持虚拟化性能计数器,可以选择不勾选。

命令行: grep vmx /proc/cpuinfo (INTEL 芯片 )
             grep svm /proc/cpuinfo (AMD 芯片 )
             cat /proc/cpuinfo | grep -e vmx -e nx -e svm

执行以上命令:

[root@localhost haha]# egrep '(vmx|svm)' /proc/cpuinfo | wc -l
1                  #处理器个数大于0就是支持虚拟化,就可以放心做kvm虚拟化安装了

不知道芯片的生产厂商则输入:egrep '(vmx|svm)' /proc/cpuinfo
如果 flags: 里有 vmx 或者 svm 就说明支持 VT ;如果没有任何的输出,说明你的 cpu 不支持,将无法成功安装 KVM 虚拟机。

2. 当你硬件本身支持虚拟化,但查询相应参数无果时,请检查 BIOS 设定,确认你的 BIOS 中开启了硬件支持虚拟化的功能

将如下选项设为Enabled
Intel(R) Virtualization Tech [Enabled]

四、KVM虚拟化安装

1. 安装 KVM 要求
(1)64bitCPU( 支持虚拟化 VT-x or AMD-V)
(2)2G 以上空闲内存,确认内存大小
        grep -e MemTotal /proc/meminfo
        free -m
(3)6GB 空闲存储空间

2. 安装 KVM 并检测
(1)YUM 安装 KVM
yum install kvm virt-manager libvirt libvirt-python python-virtinst libvirt-client qemu-kvm qemu-img

(2)YUM 安装 KVM( 简单版 )
yum install kvm virt-manager libvirt*

(3)如果无法连入互联网 , 可自行建立源来完成安装并避免各种关联。建立一个本地的 YUM 源:

kvm虚拟化所需组件介绍

3. kvm: 核心套件 ***
virt-manager: 图形化 KVM 管理软件
libvirt: 提供虚拟机与宿主相互通信的机制
libvirt-python: 允许使用 libvirt API
python-virtinst:CLI 下创建 KVM 的工具
libvirt-client: 提供 client 访问 kvm 服务器的机制 ,并包含 virsh 命令进行                  
                    管理和控制 VMs
qemu-kvm: 提供用户级 KVM 环境
qemu-img:VMs 磁盘管理

3.启动 KVM
(1)modprobe kvm          #加载 kvm 模块
(2)lsmod | grep kvm      #查看加载成功
(3)systemctl start libvirtd
(4)systemctl status libvirtd

4. 启动并检测 KVM
virsh list --all
如出现
Id Name State
-------------------------------------------------------
则安装成功

5. 在 GUI 模式下安装虚拟机,启动虚拟系统管理器

五、KVM网络模式设置

1. NAT ( 默认上网 ) :虚拟机利用 host 机器的 ip 进行上网 . 对外显示一个 ip,
virbr0 是 KVM 默认创建的一个 Bridge,其作用是为连接其上的虚机网卡提供 NAT 访问外网的功能,默认ip为192.168.122.1

2. 自带的Bridge : 将虚拟机桥接到 host 机器的网卡上 ,vm和 host 机器都通过 bridge 上网 . 对外有同网段的不通 ip,此种方式host却不能和vm联通

3. Linux Bridge : 基本原理就是创建一个桥接接口 br0 ,在物理网卡和虚拟网络接口之间传递数据。此种方式host却可以和vm联通

Linux Bridge 是 Linux 上用来做 TCP/IP 二层协议交换的设备,其功能大家可以简单的理解为是一个二层交换机或者 Hub。多个网络设备可以连接到同一个 Linux

Bridge,当某个设备收到数据包时,Linux Bridge 会将数据转发给其他设备

(1)添加 br0 网卡的配置文件

cd /etc/sysconfig/network-scripts
cp ifcfg-ens33ifcfg-br0

(2)修改网卡配置文件

Vim ifcfg-eth0
TYPE=Ethernet
NAME=ens33
DEVICE=ens33
ONBOOT=yes
BRIDGE=br0

Vim ifcfg-br0

TYPE=Bridge
NAME=br0
DEVICE=br0
ONBOOT=yes
BOOTPROTO=static(或者dhcp)

(3)重启host:reboot或者重启网卡

(4)检查
# ethtool br0
# brctl show
# ifconfig br0

[root@localhost ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 .000c29e7d62c no ens33
virbr0 .5254001b9b1c yes virbr0-nic
[root@localhost ~]# ethtool br0
Settings for br0:
Link detected: yes

可以看到bro端口为连接状态。

如果br0上并没有ip地址转换,试试以下方法:

1)重新应用下nat

2)再windows上搜索服务,将dhcp改为启动。

六、生成虚拟机流程

点击系统工具——虚拟系统管理器——生成新虚拟机(本地介质)——浏览镜像文件——选择内存——自定义配置——完成

'生成新虚拟机(本地介质)

浏览镜像文件

这就需要上传镜像文件到/var/lib/libvir/images/,此目录也是磁盘文件和镜像文件的目录。

选择内存

自定义配置

勾选自定义配置后就进入此页面,选择引导选项,箭头所指意思是增加启动时的引导,可不选。

上面勾选了virtio磁盘的选项,这里的原路径默认为上传镜像的同一级目录

所以在创建完虚拟机后,再次浏览镜像文件会发现多出一个磁盘文件

IDE选项的原路径默认为上传镜像文件的目录。

一、如果出现此报错,

这是因为libvirt负责虚拟机与宿主机的通信

如果网卡配置错误或者建立通信的环节出现错误的话。

libvit就会运行libvirtd守护进程,这也是一种保护方式。

如果网卡都没有配置错误的话关闭防火墙试试。

确认以上无误后就可以开始点击创建虚拟机了!!

  

kvm介绍、安装及创建虚拟机的更多相关文章

  1. kvm无人值守安装centos 7虚拟机

    centos 7安装好KVM之后还要安装虚拟机,通过VNC连接手动安装centos 7虚拟机太麻烦了,所以无人值守安装是做好的.简单记录下. 无人值守安装centos 7前提是要安装KVM,并且能手动 ...

  2. virtualbox的安装与使用、安装镜像创建虚拟机

    1.官网:https://www.virtualbox.org/ 然后呢,点击下载: 开始安装virtualbox: 双击安装.详细安装过程见:https://baijiahao.baidu.com/ ...

  3. CentOS7 最小安装 vmware 创建虚拟机 nmcli ip systemctl

    镜像网站 一些开源软件的国内镜像源 站点版 (一).企业站 1.搜狐:http://mirrors.sohu.com/ 2.网易:http://mirrors.163.com/ 3.阿里云:http: ...

  4. VMWare下载安装以及创建虚拟机教程

    参考博客https://blog.csdn.net/qq_39135287/article/details/83993574 下载 1.打开官网https://www.vmware.com/cn.ht ...

  5. KVM简介,安装及常见使用详解

    KVM简介 KVM(名称来自英语:Kernel-basedVirtual Machine的缩写,即基于内核的虚拟机),是一种用于Linux内核中的虚拟化基础设施,可以将Linux内核转化为一个hype ...

  6. Linux就该这么学——安装配置VM虚拟机

    Vm虚拟机下载地址 : https://cloud.189.cn/t/zAfaQvJZRziu (访问码:6717) rehl镜像下载地址 :  https://cloud.189.cn/t/67BJ ...

  7. centos7安装kvm环境采用网桥模式并创建虚拟机制作openstack需要的镜像

    初始环境的安装:centos7 mini iso镜像进行安装的系统 采用的环境是vm该软件,联网方式NAT模式下配置的静态ip(如何在NAT模式下配置静态ip参考之前的文章) 1.由于要安装kvm环境 ...

  8. kvm虚拟化安装及虚拟机创建

    1.开启虚拟化(VMware虚拟机为例),安装centos7操作系统. 2.查看CPU是否开启虚拟化 #zgrep  "vmx" /proc/cpuinfo 3.配置yum源,通过 ...

  9. KVM 介绍(1):简介及安装

    学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分 ...

随机推荐

  1. JS 缓冲运动 带运动的留言本 小案例

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  2. codeforces Looksery Cup 2015 D. Haar Features

    The first algorithm for detecting a face on the image working in realtime was developed by Paul Viol ...

  3. 微信小程序初探(二、分页数据请求)

    大家好 波哥小猿又来啦[斜眼笑],昨天咱们讲了微信小程序简单数据请求,有没有照着教程实现请求的同学们啦 实现的同学举个爪[笑脸].哈哈,好了不扯犊子啦,我相信有的同学已经实现了简单的数据请求,没有实现 ...

  4. SQL 优化记录

    1. 对Where 语句的法则 1.1 避免在WHERE子句中使用in,not  in,or 或者having. 可以使用 exist 和not exist代替 in和not in. 可以使用表链接代 ...

  5. kafka备份机制——zk选举leader,leader在broker里负责备份

    Kafka架构 如上图所示,一个典型的kafka集群中包含若干producer(可以是web前端产生的page view,或者是服务器日志,系统CPU.memory等),若干broker(Kafka支 ...

  6. Python 下的数据结构实现

    既然采用了 Python 编程语言实现数据结构,就要充分发挥 Python 语言的语法特性. 参考<Python 算法教程><数据结构与算法 -- Python 语言描述>: ...

  7. 单向链表的归并排序——java实现

    在做Coursera上的Algorithms第三周测验练习的时候有一道链表随机排序问题,刚开始没有什么思路,就想着先把单向链表归并排序实现了,再此基础上进行随机排序的改造.于是就结合归并排序算法,实现 ...

  8. css定位、position与float同时使用的情况

    一.css定位 CSS 有三种基本的定位机制:普通流.浮动和绝对定位. 1.普通流:未专门指定的元素都在普通流中定位,position:static/relative;和float:none;也在普通 ...

  9. Help Me with the Game(模拟)

    http://poj.org/problem?id=2996 #include<stdio.h> #include<string.h> ][]; void find1(char ...

  10. hdu1429胜利大逃亡(bfs)

    胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...