[MUSIC] In today's lesson, we're going to discuss types of virtualization. We're going to discuss the types of hardware virtualization, software virtualization, the differences between the platform virtualization that you're typically used to when we discuss virtualization. And also which technologies, specifically software, we use for each type of virtualization, specifically platform virtualization. Platform virtualization, and what I mean by platform virtualization, is really the software implementation of a computer system. So it includes things like RAM, CPU, software programs, all running as a computer system like you would typically see on a normal computer. Okay? So there's three different ways that we actually have platform virtualization. So the first one is called full or binary translation. That's one virtualization. Second one is hardware-assisted virtualization, and the third is OS-level or, paravirtualization. Let's talk about each one of these individually. The first one is going to be full virtualization. This is what we see when we truly have real virtualization. The commands are executed, binary translated, which is why we see binary translation, translated into instructions that the hardware, the underlying Hypervisor can understand. Okay, this executes direct instructions from whatever virtualization technology that s running. Translates kernel code into replace non-virtualizable instructions, each virtual machine has its own BIOS, so you can actually treat each virtual system like its own computer system, okay. So, if I boot up my computer and I want to change the boot order for example, from my CD rom drive to a let's say you want to virtualize a floppy drive, which you can, I can do that very easily in its own BIOS. This requires no extra hardware overhead. So compatibility is very well supported. It runs at great speeds. Perhaps 95% of a normal computer system, like if it were running on a bare metal system. Examples of this VMware, ESXI, or QEMU which runs on Linux systems or parallels for Mac. The next type of virtualization is hardware assisted virtualization or para, excuse me Paravirtualization. Hyper calls to the VM are really what this kind of platform virtualization does. We may have to use an API to integrate those hyper calls into the instructions. There's poor compatibility unfortunately, because we are translating it is an OS assisted type process. Performance is fair and generally not predictable, we can't predict everything that the operating system is going to translate into virtual instructions. Okay, examples of these are Xen, Docker and VMWare Server which is an older technology that they discontinued a while ago. Hardware assisted is our final Final platform virtualization technology. The privileged instructions that are run on this platform virtualization are actually run under ring level zero. Sensitive and privileged instructions trapped to the hypervisor, removing the need for binary translation, or paravirtualization. Software is actually limited unfortunately due to the execution only in hardware. We can't make direct instructions to the hardware unfortunately. Performance is okay. Some examples of these are going to be VMware Workstation, an older technology like Virtual PC which was a Microsoft product. Hyper-V also runs like this at the moment. You're not going to notice performance degradation in any of these type of virtualization platforms, platform virtualization that is. We're generally going to see our processors are fast enough now that we barely notice that a system is virtualized unless we're hitting the top of whatever hardware that we have. The next type of virtualization that we have is software virtualization. So we just talked about platform virtualization, which really deals with hardware, let's talk about software virtualization. There are many forms of software virtualization out there these days. The reason why is that we don't need to install a lot of different pieces of software all over the place. We also see compatibility increase when we use virtual software. Think about Java, for example, Java is a great use of virtual software. The Java Virtual Machine, or the JVM, is really what runs on all different kinds of platforms. So we can program in one platform Java, and we can have it translate to any architecture. So Mac, PC, Linux, it's all the same code. Supportability is huge when talking about virtualization. We also have Flash or Mono, or vApps for Windows, all those utilize software virtualization. The downside however, is we see an increase in viruses, especially in Java because of the cross-platform capabilities that we have. Now instead of just developing a virus for one system, all we have to do is develop a virus for one software platform that spreads to all systems. We also have seen over the past few years the emergence of other virtualization, hardware virtualization for example. So memory and storage. So we take very large systems and put those into use to virtualize a lot of different things. For example, network virtualization or software defined networking takes what we usually did in hardware and puts that in software where we can use it a lot of different places. Desktops are another place that we use virtualization. So virtual desktop infrastructure, or VDI, has emerged over the past few years to provide a desktop-like experience anywhere you go. So in conclusion, we have started to see the emergence in virtual everything, from virtual platforms in computing systems to virtual storage to networks. Virtualization allows us the flexibility to use what we want to use when we need to use it.