Understanding Virtualization - virtualization

I want to know about Virtualization in detail. But start from basics, like what is virtualization, with real world examples and scenarios. When ever I search, i got Virtualization technologies, but I want to learn and in fact know what exactly is virtualization, its types and all...
Please help me in getting practical details of term "Virtualization"

Virtualization is a big topic, but very roughly speaking there are three main levels of virtualization:
OS virtualization with a type 1 hypervisor
Virtual machine that run on an existing hardware/OS, e.g. VMWare
High-level virtual machines, e.g. JVM
I would recommend this book: Virtual Machines, by J. E. Smith and R. Nair.
It covers pretty much all virtual execution environments: process virtualization, high level virtual machines, system virtual machines, multiprocessor virtualization, etc.
Note that depending on the level which you are interested in, it gets pretty much related to system administration / hardware, so you might also ask the question on serverfault.com.

The question is pretty generic so it can lead to different replies, but I think that you first need to define and understand what is an actual hypervisor and why it is used:
The hypervisor is used to do the abstraction between the physical and the virtual resources. In other words, it is responsible to create a virtualized layer and share the hardware components (CPU, RAM, NIC, storage) to the virtual machines that will be used. Therefore, it is a lot simpler to centralize and manage multiple sources of heterogeneous elements. It is possible to deploy two types of hypervisors:
Type 1 Hypervisor: There is no actual operating system installed on the bare metal server except the software used to deploy the hypervisor. It is especially used in an enterprise context considering that you maximize the resources to share (you do not have the limitation of running an underlying operating system), but it also possible to deploy one in a home lab if you have the required hardware. A classic example is a VMWare ESXi host.
Type 2 Hypervisor: It consists of installing the hypervisor on top of the actual operating system (Windows, Linux, MacOS). It is used especially for testing, deploying simple services and to extend your software capabilities (you can run multiple different operating systems simultaneously). A classic example is Oracle’s Virtual Box.
In your case, I think that the best choice to actually learn about virtualization would be to download a type 2 Hypervisor (Virtual Box or VMWare Workstation Player for instance) in order to deploy a few multiple virtual machines and gain your first hands-on experience.
Specifically, try to explore the different virtual network and storage configurations that are available to differentiate every component.

Related

What kernel type does the RTOS eCos use?

From my research I cannot find what kernel type is being used in eCos, such as monolithic or micro-kernel. All I could find from my research is that the kernel is a real-time one or websites just describe it as the eCos kernel, does this mean it is a custom made kernel?
What I know about eCos is that it is a hard RTOS although is somewhat vulnerable in terms of security, uses priority, queue based scheduling.
A micro-kernel is:
... the near-minimum amount of software that can provide the mechanisms
needed to implement an operating system (OS). These mechanisms include
low-level address space management, thread management, and
inter-process communication (IPC).
(Wikipedia 11 Dec 2018)
The eCos kernel is described in its Reference Manual thus:
It provides the core functionality needed for developing
multi-threaded applications:
The ability to create new threads in the system, either during startup
or when the system is already running.
Control over the various threads in the system, for example
manipulating their priorities.
A choice of schedulers, determining which thread should currently be
running.
A range of synchronization primitives, allowing threads to interact
and share data safely.
Integration with the system's support for interrupts and exceptions.
It is quite clearly by comparison of these descriptions a micro-kernel. Other services provided by eCos such as file-systems, networking and device drivers are external and separable from the kernel. That is to say, you can deploy the kernel alone without such services and it remains viable.
In a monolithic kernel, these services are difficult or impossible to separate as they are an intrinsic part of the whole. Unlike eCos mand most other RTOS they do not scale well to small hardware platforms common in embedded systems. Monolithic kernels are suited to desktop and general purpose computing platforms, because the platforms themselves are monolithinc - a PC without a filesystem, display, keyboard etc, is not really viable, whereas in an embedded system that is not the case.
While Linux, and even Windows are used in embedded systems, a micro-kernel is deployable on platforms with a few tens of kilo-bytes of memory, whereas a minimal embedded Linux for example requires several mega-bytes and will include a great deal of code that your application may never use.
Ultimately the distinction is perhaps irrelevant, as is the terminology. It is what it is. You do not choose your kernel or OS on this criteria, but rather whether it provides the services you require, runs on your target, and fits in the available resource.
I think it is a monolithic kernel. If you review this page: http://ecos.sourceware.org/getstart.html
It is used instead of linux kernel and linux kernel support monolithic kernels. In addition, if it was a micro kernel , they would highlight the kernel type like QNX Kernel type which is micro kernel

Virtualisation Classification

I have been reading virtualisation where i came across many types of virtualisation technique
Now i am confused about the types
Here is my understanding of classifying virtualisation
Type 1(bare metal virtualisation)
1.1 Full virtualisation
1.2 para virtualisation
1.3 hardware assisted virtualisation
Type 2(host based virtualisation)
Am i correct??
I have searched internet but was not able to find satisfactory answers
Virtualization is a very broad term. There can be many components in IT world which can be virtualized. Most common types of virtualization are:
OS Virtualization
Application Virtualization
Network Virtualization
Hardware Virtualization
Storage Virtualization
The terms you have mentioned (Type 1 and Type 2) are type of Hypervisors. Hypervisor can be thought of as an intermediate entity between a physical machine and virtual machine. Simply put hypervisor is the Virtualization enabler.
Hypervisor can virtualize physical resources using different techniques:
It can be done by making hypervisor part of Kernel which is called
Full virtualization
Modifying the guest OS which can leverage hypervisor to intercept the calls made by VM to the physical resources. This is called paravirtualization.
Hardware itself can be modified like AMD-V or Inter VT-x processors to enable virtualization. In such case it is hardware assisted virtualization.
I hope it clarifies your doubt.

Do MPI library need an OS for heterogeneous multicore system?

I am new to multicore. As a beginner my question maybe basic,my question is can MPI library be supported in baremetal heterogeneous systems ? or do we need an OS (like RTOS) to support the MPI library ? It will be useful if anyone can provide links of any implemented MPI on a heterogenous system with or without OS. Anything will be useful for understanding. Thanks in advance.
EDIT : I would also like to know the general requirements of a system for MPI , if not specific.
I am not too sure what you mean with a baremetal heterogeneous system.
You need to have an operating system
We tried to perform a simulation distributed into serveral processes. Some processes were calculated on a Linux (RedHat6) and some on Windows7 machine.
We used intel mpi. The pmi_proxy needs to be accessible on all machines.
Since the machines were connected with a normal gigabit lan connection, the performance was rather poor. MPI really benefits form a quick connection like infiniband.
The general requirement is that you need to have a connecting network between the machines. They even turn several raspberry pis into a supercomputer (I would perhaps say cluster).
This is a quite similar question.
Problems like this may occur.

What kind of kernel does MS Windows have?

I saw a question on Linux Kernel. While reading that I had this doubt.
The Windows NT branch of windows has a Hybrid Kernel. It's neither a monolithic kernel where all services run in kernel mode or a Micro kernel where everything runs in user space. This provides a balance between the protection gained from a microkernel and the performance that can be seen in a monolithis kernel (as there are fewer user/kernel mode context switches).
As an example, device drivers and the Hardware Abstraction layer run in kernel node but the Workstation service runs in user mode. The wikipedia article on Hybrid Kernels has a good overview.
The Windows Internals book gives an explanation for the hybrid approach
... The Carnegie Mellon University Mach
operating system, a contemporary
example of a microkernel architecture,
implements a minimal kernel that
comprises thread scheduling, message
passing, virtual memory, and device
drivers. Everything else, including
various APIs, file systems, and
networking, runs in user mode.
However, commercial implementations of
the Mach microkernel operating system
typically run at least all file system,
networking, and memory management
code in kernel mode. The reason is
simple: the pure microkernel design is
commercially impractical because it’s
too inefficient.
According to Wikipedia it's a Hybrid kernel. Which may or may not be just marketing speak for about the same as a monolithic one. The graphic on the latter page does make some things clearer, though.
Most importantly, almost no program on Windows uses the kernel API directly. And the complete Windows API subsystem resides in user space which is a rather large part of the OS as we see it. And in more recent versions Microsoft began to pull more and more device drivers from kernel space into user space (which is especially a good idea with certain drivers, such as for video cards which are probably as complex as an operating system on their own).
hyru hybrid kernel is the name of the Kernel that Windows systems after Windows 98, before that it was a GUI overlaid on DOS using a monolithic Kernel.

What is the difference between an OS and a Framework?

I recently posted a question about Azure... is it really an OS? I understand the technical details, and I got a lot of fuzzy answers... I really want to know... what do you think is the difference between an OS and a Framework?
Just for reference, Azure will be built on top of Hyper-V servers and the virtual machines will be running vanilla Windows Server 2008. It will run services that creates a cloud on top of the many virtual machines which is called Azure. Windows is calling Azure an OS.
I am trying to understand how to define the difference between an OS and a framework.
Operating System: The infrastructure software component of a computer system
Framework: A re-usable design for a software system (or subsystem).
By these definitions it seems to me, that an operating system can be built using a framework, and a framework can be built to interact with an operating system.
Singularity is an example of an experimental OS that is built using managed code.
Framework is a very broad term, it can be used to describe many types of subsystems. It could even describe an operating system.
Operating System is more specific, it implies facilitation of interaction with a computers or group of computers hardware layer, through the use of human user interfaces. I think Azure fits this description.
It's up to marketing - I don't think the terms have a definite meaning any more.
Is a JVM a framework?
What if it's running on a raw uC or even an FPGA - is it an OS?
An OS is the thing that directly interfaces with the machine, be it virtual or real. It has to expose syscalls that handle input devices, output devices, sound, networking, and all the other things that we take for granted these days. It also often provides some kind of UI which uses these services to make it easy to use/useful for an end-user. It needs to have device drivers to work with video cards, sound cards, etc. (Once again, these can be virtualized).
A framework is... something built on top of the OS. It, too, exposes an API, but they are often not so low-level as the one the OS exposes.
frameworks provide api contracts that oses usually don't - meaning they sit atop the os, hide and manage the differences, and consequently give you that platform independence goodness that can broaden our target audience
A framework thought to be as a development environment,a helping platform for further developments and you can work additively to create some other application using components of framework, while OS is system software is an environment to operate a system.