学习Linux,为什么要⽤虚拟机来操作?
问为什么要⽤虚拟机来操作,就要先知道什么是虚拟机,在接下来我将会⽤⼀点时间来介绍什么是虚拟机。
虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运⾏在⼀个完全隔离环境中的完整计算机系统。在实体计算机中能够完成的⼯作在虚拟机中都能够实现。在计算机中创建虚拟机时,需要将实体机的部分硬盘和内存容量作为虚拟机的硬盘和内存容量。每个虚拟机都有独⽴的CMOS、硬盘和操作系统,可以像使⽤实体机⼀样对虚拟机进⾏操作。
流⾏的虚拟机软件有VMware(VMWare ACE)、Virtual Box和Virtual PC,它们都能在Windows系统上虚拟出多个计算机。
虚拟机分类
linux虚拟机
⼀种安装在Windows上的虚拟linux操作环境,就被称为linux虚拟机。它实际上只是个⽂件⽽已,是虚拟的linux环境,⽽⾮真正意义上的操作系统。但是它们的实际效果是⼀样的。所以安装在虚拟机上使⽤好。
windows XP虚拟机vmware下安装Linux 我们在实际的Windows XP中(宿主计算机)再虚拟出⼀台电脑(虚拟机),并在上⾯安装Linux系统,这样,你就可以放⼼⼤胆地进⾏各种Linux练习⽽⽆须担⼼操作不当导致宿主机系统崩溃了。并且你可以举⼀反三,将⼀台电脑变成三台、四台,再分别安装上其他的系统。(运⾏虚拟机软件的操作系统叫Host OS,在虚拟机⾥运⾏的操作系统叫Guest OS)。
Java虚拟机
Java虚拟机(JVM)是Java Virtual Machine的缩写,它是⼀个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能模拟来实现的。Java虚拟机有⾃⼰完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。
※优点
Java语⾔的⼀个⾮常重要的特点就是与平台的⽆关性。⽽使⽤Java虚拟机是实现这⼀特点的关键。⼀般的⾼级语⾔如果要在不同的平台上运⾏,⾄少需要编译成不同的⽬标代码。⽽引⼊Java语⾔虚拟机后,Java语⾔在不同平台上运⾏时不需要重新编译。Java语⾔使⽤模式Java 虚拟机屏蔽了与具体平台相关的信息,使得Java语⾔编译程序只需⽣成在Java虚拟机上运⾏的⽬标代码(字节码),就可以在多种平台上不加修改地运⾏。Java虚拟机在执⾏字节码时,把字节码解释成具体平台上的机器指令执⾏。
Java虚拟机是Java语⾔底层实现的基础,对Java语⾔感兴趣的⼈都应对Java虚拟机有个⼤概的了解。这有助于理解Java语⾔的⼀些性质,也有助于使⽤Java语⾔。对于要在特定平台上实现Java虚拟机的软件⼈员,Java语⾔的编译器作者以及要⽤硬件芯⽚实现Java虚拟机的⼈来说,则必须深刻理解Java虚拟机的规范。另外,如果想扩展Java语⾔,或是把其它语⾔编译成Java语⾔的字节码,也需要深⼊地了解Java虚拟机。
※⽀持的数据类型
Java虚拟机⽀持Java语⾔的基本数据类型如下:
byte://1字节有符号整数的补码
short://2字节有符号整数的补码
int://4字节有符号整数的补码
long://8字节有符号整数的补码
float://4字节IEEE754单精度浮点数
double://8字节IEEE754双精度浮点数
char://2字节⽆符号Unicode字符
⼏乎所有的Java类型检查都是在编译时完成的。上⾯列出的原始数据类型的数据在Java执⾏时不需要⽤硬件标记。操作这些原始数据类型数据的字节码(指令)本⾝就已经指出了操作数的数据类型,例如iadd、ladd、fadd和dadd指令都是把两个数相加,其操作数类型别是int、long、float和double。虚拟机没有给boolean(布尔)类型设置单独的指令。boolean型的数据是由integer指令,包括integer返回来处理的。boolean型的数组则是⽤byte数组来处理的。虚拟机使⽤IEEE754格式的浮点数。不⽀持IEEE格式的较旧的计算机,在运⾏Java数值计算程序时,可能会⾮常慢。
虚拟机⽀持的其它数据类型包括:
object//对⼀个Javaobject(对象)的4字节引⽤
returnAddress//4字节,⽤于jsr/ret/jsr-w/ret-w指令
注:Java数组被当做object处理。
虚拟机的规范对于object内部的结构没有任何特殊的要求。在Sun公司的实现中,对object的引⽤是⼀个句柄,其中包含⼀对指针:⼀个指针指向该object的⽅法表,另⼀个指向该object的数据。⽤Java虚拟机的字节码表⽰的程序应该遵守类型规定。Java虚拟机的实现应拒绝执⾏违反了类型规定的字节码
程序。Java虚拟机由于字节码定义的限制似乎只能运⾏于32位地址空间的机器上。但是可以创建⼀个Java虚拟机,它⾃动地把字节码转换成64位的形式。从Java虚拟机⽀持的数据类型可以看出,Java对数据类型的内部格式进⾏了严格规定,这样使得各种Java虚拟机的实现对数据的解释是相同的,从⽽保证了Java的与平台⽆关性和可移植性。
※体系结构
Java虚拟机由五个部分组成:⼀组指令集、⼀组寄存器、⼀个栈、⼀个⽆⽤单元收集堆(Garbage-collected-heap)、⼀个⽅法区域。这五部分是Java虚拟机的逻辑成份,不依赖任何实现技术或组织⽅式,但它们的功能必须在真实机器上以某种⽅式实现。
Java指令集
Java虚拟机⽀持⼤约248个字节码。每个字节码执⾏⼀种基本的CPU运算,例如,把⼀个整数加到寄存器,⼦程序转移等。Java指令集相当于Java程序的汇编语⾔。
Java指令集中的指令包含⼀个单字节的操作符,⽤于指定要执⾏的操作,还有0个或多个操作数,提供操作所需的参数或数据。许多指令没有操作数,仅由⼀个单字节的操作符构成。
虚拟机的内层循环的执⾏过程如下:
do{
取⼀个操作符字节;
根据操作符的值执⾏⼀个动作;
}while(程序未结束)
由于指令系统的简单性,使得虚拟机执⾏的过程⼗分简单,从⽽有利于提⾼执⾏的效率。指令中操作数的数量和⼤⼩是由操作符决定的。如果操作数⽐⼀个字节⼤,那么它存储的顺序是⾼位字节优先。例如,⼀个16位的参数存放时占⽤两个字节,其值为:
第⼀个字节*256+第⼆个字节字节码指令流⼀般只是字节对齐的。指令tabltch和lookup是例外,在这两条指令内部要求强制的4字节边界对齐。
寄存器
Java虚拟机的寄存器⽤于保存机器的运⾏状态,与微处理器中的某些专⽤寄存器类似。
Java虚拟机的寄存器有四种: [
pc:Java程序计数器。
optop:指向操作数栈顶端的指针。
frame:指向当前执⾏⽅法的执⾏环境的指针。
vars:指向当前执⾏⽅法的局部变量区第⼀个变量的指针。
Java虚拟机是栈式的,它不定义或使⽤寄存器来传递或接受参数,其⽬的是为了保证指令集的简洁性和实现时的⾼效性(特别是对于寄存器数⽬不多的处理器)。
所有寄存器都是32位的。
Java虚拟机的栈有三个区域:局部变量区、运⾏环境区、操作数区。
(1)局部变量区
什么电脑可以装linux系统每个Java⽅法使⽤⼀个固定⼤⼩的局部变量集。它们按照与vars寄存器的字偏移量来寻址。局部变量都是32位的。长整数和双精度浮点数占据了两个局部变量的空间,却按照第⼀个局部变量的索引来寻
址。(例如,⼀个具有索引n的局部变量,如果是⼀个双精度浮点数,那么它实际占据了索引n和n+1所代表的存储空间。)虚拟机规范并不要求在局部变量中的64位的值是64位对齐的。虚拟机提供了把局部变量中的值装载到操作数栈的指令,也提供了把操作数栈中的值写⼊局部变量的指令。
(2)运⾏环境区
在运⾏环境中包含的信息⽤于动态链接,正常的⽅法返回以及异常传播。
·动态链接
运⾏环境包括对指向当前类和当前⽅法的解释器符号表的指针,⽤于⽀持⽅法代码的动态链接。⽅法的class⽂件代码在引⽤要调⽤的⽅法和要访问的变量时使⽤符号。动态链接把符号形式的⽅法调⽤翻译成实际⽅法调⽤,装载必要的类以解释还没有定义的符号,并把变量访问翻译成与这些变量运⾏时的存储结构相应的偏移地址。动态链接⽅法和变量使得⽅法中使⽤的其它类的变化不会影响到本程序的代码。·正常的⽅法返回
如果当前⽅法正常地结束了,在执⾏了⼀条具有正确类型的返回指令时,调⽤的⽅法会得到⼀个返回值。执⾏环境在正常返回的情况下⽤于恢复调⽤者的寄存器,并把调⽤者的程序计数器增加⼀个恰当的数值,以跳过已执⾏过的⽅法调⽤指令,然后在调⽤者的执⾏环境中继续执⾏下去。
·
异常和错误传播
异常情况在Java中被称作Error(错误)或Exception(异常),是Throwable类的⼦类,在程序中的原因是:①动态链接错,如⽆法到所需的class⽂件。②运⾏时错,如对⼀个空指针的引⽤。
(3)操作数栈区机器指令只从操作数栈中取操作数,对它们进⾏操作,并把结果返回到栈中。选择栈结构的原因是:在只有少量寄存器或⾮通⽤寄存器的机器(如Intel486)上,也能够⾼效地模拟虚拟机的⾏为。操作数栈是32位的。它⽤于给⽅法传递参数,并从⽅法接收结果,也⽤于⽀持操作的参数,并保存操作的结果。例如,iadd指令将两个整数相加。相加的两个整数应该是操作数栈顶的两个字。这两个字是由先前的指令压进堆栈的。这两个整数将从堆栈弹出、相加,并把结果压回到操作数栈中。
每个原始数据类型都有专门的指令对它们进⾏必须的操作。每个操作数在栈中需要⼀个存储位置,除了long和double型,它们需要两个位置。操作数只能被适⽤于其类型的操作符所操作。例如,压⼊两个int类型的数,如果把它们当作是⼀个long类型的数则是⾮法的。在Sun的虚拟机实现中,这个限制由字节码验证器强制实⾏。但是,有少数操作(操作符dupe和swap),⽤于对运⾏时数据区进⾏操作时是不考虑类型的。
※⽆⽤单元收集堆
Java的堆是⼀个运⾏时数据区,类的实例(对象)从中分配空间。Java语⾔具有⽆⽤单元收集能⼒:它不给程序员显式释放对象的能⼒。Java 不规定具体使⽤的⽆⽤单元收集算法,可以根据系统的需求使⽤各种各样的算法。
※⽅法区
⽅法区与传统语⾔中的编译后代码或是Unix进程中的正⽂段类似。它保存⽅法代码(编译后的java代码)和符号表。在当前的Java实现中,⽅法代码不包括在⽆⽤单元收集堆中,但计划在将来的版本中实现。每个类⽂件包含了⼀个Java类或⼀个Java界⾯的编译后的代码。可以说类⽂件是Java语⾔的执⾏代码⽂件。为了保证类⽂件的平台⽆关性,Java虚拟机规范中对类⽂件的格式也作了详细的说明。其具体细节请参考Sun公司的Java虚拟机规范。
⼀些初学Linux运维的盆友认为,学习Linux就需要把⾃⼰的计算机安装成Linux系统或需要有真实的服务器设备。其实,初学者可以通过利⽤虚拟机来学习Linux运维。
利⽤虚拟机软件搭建Linux学习环境简单,容易上⼿,重要的是利⽤虚拟机模拟出来的Linux与真实的Linux⼏乎没有区别。如果购买服务器,动则⼀两万元,不是⼀般的盆友所能承受的,⽽且声⾳⼤、费电。如果⽤PC和笔记本电脑搭建Linux,那就完全是Linux环境了,不但加⼤了学习难度,也与实际⼯作环境相差甚远,有点⼉南辕北辙了,企业⾥运维⼈员的⼯作环境⼤多数是在Windows桌⾯系统下通
过SSH⼯具远程连接千百⾥之外的Linux服务器进⾏管理和维护的。因此,⽤虚拟机软件来搭建环境是⾮常接近企业⼯作环境的。
如果⽤虚拟机学习,只要计算机配置⾼⼀点,就可以同时开启多个Linux虚拟机,在上班、回家的路上,带着笔记本电脑就能随时学习。如果是多台真实计算机和服务器设备,就⽆法移动了。如果说是放机房⾥的话,那这个代价也太⼤了。⼤多数学习者是很难有这样的资源的。使⽤虚拟机系统环境,我们可以随意对虚拟系统进⾏设置和更改操作,甚⾄可以格式化虚拟机系统硬盘,进⾏重新分区等操作,⽽且不⽤担⼼会丢掉有⽤数据,因为虚拟机是系统上运⾏的⼀个虚拟软件,对虚拟机系统的任何操作都相当于在操作虚拟机的虚拟机设备和系统,不会影响计算机上的真实数据。
所以,想要学习Linux运维,⼜在苦恼设备的话,踏实的⽤虚拟机学习吧,不要给⾃⼰设置太多障碍和门槛,那会影响学习进度的。在计算机上安装虚拟机⼀样可以搭建逼近⼯作环境的学习环境,当然如果有设备配合虚拟机学习,学习效果更佳。
安装过程
下⾯通过例⼦,介绍使⽤VMware Workstation创建虚拟机的⽅法与步骤。
1.运⾏VMware Workstation 6,单击“File→New→Virtual Machine”命令,进⼊创建虚拟机向导,或者直接按“Crtl+N”快捷键同样进⼊创建虚拟机向导。
2.在弹出的欢迎页中单击“下⼀步”按钮。
3.在“Virtual machine configuration”选项区域内选择“Custom”单选按钮。
4.在Choose the Virtual Machine Hardware Compatibility页中,选择虚拟机的硬件格式,可以在Hardware compatibility下拉列表框中,在VMware Workstation 6、VMware Workstation 5或VMware Workstation 4三者之间进⾏选择。通常情况下选择Workstation 6的格式,因为新的虚拟机硬件格式⽀持更多的功能,选择好后单击“下⼀步”按钮。
5.在Select a Guest Operating System对话框中,选择要创建虚拟机类型及要运⾏的操作系统,这⾥选择Windows 2000 Professional操作系统,单击“下⼀步”按钮。
6.在Name the Virtual Machine对话框中,为新建的虚拟机命名并且选择它的保存路径。
7.在Processors选项区域中选择虚拟机中CPU的数量,如果选择Two,主机需要有两个CPU或者是超线程的CPU。
8.在Memory for the Virtual Machine页中,设置虚拟机使⽤的内存,通常情况下,对于Windows 98及其以下的系统,可以设置64MB;对于Windows 2000/XP,最少可以设置96MB;对于Windows 2003,最低为128MB;对于Windows Vista虚拟机,最低512MB。
9.在Network Type页中选择虚拟机⽹卡的“联⽹类型”
选择第⼀项,使⽤桥接⽹卡(VMnet0虚拟⽹卡),表⽰当前虚拟机与主机(指运⾏VMware Workstation软件的计算机)在同⼀个⽹络中。选择第⼆项,使⽤NAT⽹卡(VMnet8虚拟⽹卡),表⽰虚拟机通过主机单向访问主机及主机之外的⽹络,主机之外的⽹络中的计算机,不能访问该虚拟机。
选择第三项,只使⽤本地⽹络(VMnet1虚拟⽹卡),表⽰虚拟机只能访问主机及所有使⽤VMnet1虚拟⽹卡的虚拟机。主机之外的⽹络中的计算机不能访问该虚拟机,也不能被该虚拟机所访问。
选择第四项,没有⽹络连接,表明该虚拟机与主机没有⽹络连接。
10.在Select I/O Adapter Type页中,选择虚拟机的SCSI卡的型号,通常选择默认值即可。
11.在Select a Disk页中,选择Create a new virtual disk(创建⼀个新的虚拟硬盘)。
12.在Select a Disk Type页中,选择创建的虚拟硬盘的接⼝⽅式,通常选择默认值即可。
13.在Specify Disk Capacity页中设置虚拟磁盘⼤⼩,对于⼀般的使⽤来说,选择默认值即可。
14.在Specify Disk File页的Disk file选项区域内设置虚拟磁盘⽂件名称,通常选择默认值即可,然后单击完成按钮。
15.安装VMware Tools:在虚拟机中安装完操作系统之后,接下来需要安装VMware Tools。VMware Tools相当于VMware虚拟机的主板芯⽚组驱动和显卡驱动、⿏标驱动,在安装VMware Tools后,可以极⼤提⾼虚拟机的性能,并且可以让虚拟机分辨率以任意⼤⼩进⾏设置,还可以使⽤⿏标直接从虚拟机窗⼝中切换到主机中来。
从VM菜单下选择安装VMware Tools。
按照提⽰安装,最后重新启动虚拟机即可。
注意事项
在虚拟机中安装操作系统,和在真实的计算机中安装没有什么区别,但在虚拟机中安装操作系统,可以直接使⽤保存在主机上的安装光盘镜像(或者软盘镜像)作为虚拟机的光驱(或者软驱)。
可以⽤打开前⽂创建的Windows 2000虚拟机配置⽂件,在Virtual Machine Settings页中的Hardware选项卡中,选择CD-ROM项,在Connection选项区域内选中Use ISO image单选按钮,然后浏览选择Windows 2000安装光盘镜像⽂件(ISO格式)。如果使⽤安装光盘,则选择Use physical drive并选择安装光盘所在光驱。
选择光驱完成后,然后单击⼯具栏上的播放按钮,打开虚拟机的电源,⽤⿏标在虚拟机⼯作窗⼝中单
击⼀下,进⼊虚拟机。
如果想从虚拟机窗⼝中切换回主机,需要按下Ctrl+Alt热键。
注:以上内容来⾃于⽹络整理,如有侵权,⽴即删除。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。