Hello,
I want to do the project of virtualization using Hurd mechanisms.
There are two choices for me: to improve subhurds and to create a new
subenvironments.
Here are the descriptions about them:
In my understanding, Hurd is a set of servers which provide the services
provided by the monolithic kernel before such as file system, networking
and etc. These servers run as normal processes on a microkernel such as
Mach or L4, whose responsibility is to help servers communicate with
each other. Because of this architecture, it is possible for us to run
duplicate servers. If we run another full set of servers, we can get
another Hurd on our machine. This is my understanding of how subhurd
works. But currently there are no communication channels between the
subhurd and the main one, and no mechanism for safe sharing of hardware
devices. This could be the task of the project.
In the other hand, if we can run some duplicate servers, we can get a
smaller subenvirnoment which lives within the main system and uses most
of its facilities. The advantage is that we can get a virtual
subenvironment but save a lot of resources on the computer. I want to
create a virtual network by running several servers of network protocols
at the same time and give different IP address to these servers. In this
case, we have to provide a mechanism to allow the user's program to
choose which server to use, and provide a mechanism to allow servers
communicate with each other.
The virtual network I mentioned above is actually a network simulator.
Its work is to simulate a network in the operating system, so different
processes in the operating system think they are running on different
IPs. For example, there are 3 processes: A, B, C. Process A thinks it
runs on ADDR_A, B thinks it on ADDR_B, C thinks it on ADDR_C. Process A,
B, C runs in the same machine actually, but they all think others run on
the machine of different IPs. So if Process A sends a message to ADDR_B
and Process B is listening, the message should be delivered to Process
B. The reason I want to create such a kind of network simulator is that
it should be easier for us to test some distributed programs (sometime
we may not be able to find enough machines to run it, for example).In
Hurd, we can run one server of networking for one IP. It should be easy
to be done in Hurd. Then we have to provide a mechanism to allow the
process to choose which server to use, and provide a mechanism to allow
servers communicate with each other.
Best,
Zheng Da