2003-01-09 07:02:31 +03:00
|
|
|
Main monitor loop should compare cycles burned thus far vs
|
|
|
|
cycles requested, so it doesn't keep bopping back and forth
|
|
|
|
between host-kernel and monitor spaces without returning to
|
|
|
|
user space.
|
|
|
|
|
2003-01-02 05:11:40 +03:00
|
|
|
Fix monPrint and friends.
|
2003-01-02 20:05:47 +03:00
|
|
|
monpanic breaks up into 2 monprints which hit user space twice.
|
2003-01-02 05:11:40 +03:00
|
|
|
|
|
|
|
Could put the GDT/LDT in linear memory where the guest
|
2003-01-02 20:05:47 +03:00
|
|
|
expects them.
|
2003-01-02 05:11:40 +03:00
|
|
|
|
Added plex86 directory to bochs. This directory contains the
new experimental stripped-down version of plex86, which is now
a user-code-only VM. I ripped out all the fancy stuff in plex86,
such that under that right conditions, user-code (protection level 3)
can run at near native speeds inside the plex86 VM.
The general idea is that bochs emulates all the initial real-mode code,
and guest kernel code (protection level 0). When it senses the
right conditions (like the context switches to user-code), a shim
is called to execute the guest inside the plex86 VM. All guest-generated
faults/exceptions are then forwarded back to bochs to be handled in
the emulator.
Actually, I'm not yet adding the mods to the bochs code (other than
the shim code which is in a separate file), until I hear that we're
back in a more development mode with bochs after the 2.0 release.
The plex86 subdirectory is really a separate project. It's just more
convenient to co-develop it with bochs for now. Both projects are
currently LGPL, but each should be taken to be a separate project,
and have their own license file. Plex86 (it's only a kernel driver
now) could ultimately be used with other projects, as it's modular.
I talked with Bryce, and we both agreed it's OK to keep plex86 as
a subdir in bochs for now.
2003-01-01 20:32:06 +03:00
|
|
|
Synchronize page writes with iCache in bochs.
|
|
|
|
|
|
|
|
Deal with cycle counts of guest execution in VM, and in
|
|
|
|
bochs/plex86 shim.
|
|
|
|
|
|
|
|
Deal with page_usage. How do we update this between timeslices?
|
|
|
|
Do we always clear it? Maybe we should keep a log of things to
|
|
|
|
clear (page_usage, GDT entries, PDE entries, ...) and clear those
|
|
|
|
before returning to user space.
|
|
|
|
|
2003-01-02 20:05:47 +03:00
|
|
|
GDT entries for guest need to be cleared upon return from guest
|
|
|
|
execution, or just cleared before invocation of the guest.
|
Added plex86 directory to bochs. This directory contains the
new experimental stripped-down version of plex86, which is now
a user-code-only VM. I ripped out all the fancy stuff in plex86,
such that under that right conditions, user-code (protection level 3)
can run at near native speeds inside the plex86 VM.
The general idea is that bochs emulates all the initial real-mode code,
and guest kernel code (protection level 0). When it senses the
right conditions (like the context switches to user-code), a shim
is called to execute the guest inside the plex86 VM. All guest-generated
faults/exceptions are then forwarded back to bochs to be handled in
the emulator.
Actually, I'm not yet adding the mods to the bochs code (other than
the shim code which is in a separate file), until I hear that we're
back in a more development mode with bochs after the 2.0 release.
The plex86 subdirectory is really a separate project. It's just more
convenient to co-develop it with bochs for now. Both projects are
currently LGPL, but each should be taken to be a separate project,
and have their own license file. Plex86 (it's only a kernel driver
now) could ultimately be used with other projects, as it's modular.
I talked with Bryce, and we both agreed it's OK to keep plex86 as
a subdir in bochs for now.
2003-01-01 20:32:06 +03:00
|
|
|
|
|
|
|
Task segment must be a 32-bit'er.
|
|
|
|
|
|
|
|
Save/restore floating point state of host/VM.
|
|
|
|
|
|
|
|
deduct off some cycles for the IRET/int sequence.
|
|
|
|
|
2003-01-02 20:05:47 +03:00
|
|
|
Conditions for bochs compile using plex86:
|
|
|
|
- Not compiled for debug
|
|
|
|
- x86 host
|
2003-01-04 04:21:18 +03:00
|
|
|
- Not PCI supported (for now).
|
Added plex86 directory to bochs. This directory contains the
new experimental stripped-down version of plex86, which is now
a user-code-only VM. I ripped out all the fancy stuff in plex86,
such that under that right conditions, user-code (protection level 3)
can run at near native speeds inside the plex86 VM.
The general idea is that bochs emulates all the initial real-mode code,
and guest kernel code (protection level 0). When it senses the
right conditions (like the context switches to user-code), a shim
is called to execute the guest inside the plex86 VM. All guest-generated
faults/exceptions are then forwarded back to bochs to be handled in
the emulator.
Actually, I'm not yet adding the mods to the bochs code (other than
the shim code which is in a separate file), until I hear that we're
back in a more development mode with bochs after the 2.0 release.
The plex86 subdirectory is really a separate project. It's just more
convenient to co-develop it with bochs for now. Both projects are
currently LGPL, but each should be taken to be a separate project,
and have their own license file. Plex86 (it's only a kernel driver
now) could ultimately be used with other projects, as it's modular.
I talked with Bryce, and we both agreed it's OK to keep plex86 as
a subdir in bochs for now.
2003-01-01 20:32:06 +03:00
|
|
|
|
2003-01-02 20:05:47 +03:00
|
|
|
paging-mon.c: We can eliminate any code other than CPL==3.
|
Added plex86 directory to bochs. This directory contains the
new experimental stripped-down version of plex86, which is now
a user-code-only VM. I ripped out all the fancy stuff in plex86,
such that under that right conditions, user-code (protection level 3)
can run at near native speeds inside the plex86 VM.
The general idea is that bochs emulates all the initial real-mode code,
and guest kernel code (protection level 0). When it senses the
right conditions (like the context switches to user-code), a shim
is called to execute the guest inside the plex86 VM. All guest-generated
faults/exceptions are then forwarded back to bochs to be handled in
the emulator.
Actually, I'm not yet adding the mods to the bochs code (other than
the shim code which is in a separate file), until I hear that we're
back in a more development mode with bochs after the 2.0 release.
The plex86 subdirectory is really a separate project. It's just more
convenient to co-develop it with bochs for now. Both projects are
currently LGPL, but each should be taken to be a separate project,
and have their own license file. Plex86 (it's only a kernel driver
now) could ultimately be used with other projects, as it's modular.
I talked with Bryce, and we both agreed it's OK to keep plex86 as
a subdir in bochs for now.
2003-01-01 20:32:06 +03:00
|
|
|
|
2003-01-02 20:05:47 +03:00
|
|
|
Fix extra PDBR reload in nexus.S
|
Added plex86 directory to bochs. This directory contains the
new experimental stripped-down version of plex86, which is now
a user-code-only VM. I ripped out all the fancy stuff in plex86,
such that under that right conditions, user-code (protection level 3)
can run at near native speeds inside the plex86 VM.
The general idea is that bochs emulates all the initial real-mode code,
and guest kernel code (protection level 0). When it senses the
right conditions (like the context switches to user-code), a shim
is called to execute the guest inside the plex86 VM. All guest-generated
faults/exceptions are then forwarded back to bochs to be handled in
the emulator.
Actually, I'm not yet adding the mods to the bochs code (other than
the shim code which is in a separate file), until I hear that we're
back in a more development mode with bochs after the 2.0 release.
The plex86 subdirectory is really a separate project. It's just more
convenient to co-develop it with bochs for now. Both projects are
currently LGPL, but each should be taken to be a separate project,
and have their own license file. Plex86 (it's only a kernel driver
now) could ultimately be used with other projects, as it's modular.
I talked with Bryce, and we both agreed it's OK to keep plex86 as
a subdir in bochs for now.
2003-01-01 20:32:06 +03:00
|
|
|
|
2003-01-02 20:05:47 +03:00
|
|
|
Manipulation/reading of host page tables needs to be SMP/preempt
|
|
|
|
compatible. Need to do spin-lock (big kernel lock for old Linux)
|
|
|
|
on vma.
|
Added plex86 directory to bochs. This directory contains the
new experimental stripped-down version of plex86, which is now
a user-code-only VM. I ripped out all the fancy stuff in plex86,
such that under that right conditions, user-code (protection level 3)
can run at near native speeds inside the plex86 VM.
The general idea is that bochs emulates all the initial real-mode code,
and guest kernel code (protection level 0). When it senses the
right conditions (like the context switches to user-code), a shim
is called to execute the guest inside the plex86 VM. All guest-generated
faults/exceptions are then forwarded back to bochs to be handled in
the emulator.
Actually, I'm not yet adding the mods to the bochs code (other than
the shim code which is in a separate file), until I hear that we're
back in a more development mode with bochs after the 2.0 release.
The plex86 subdirectory is really a separate project. It's just more
convenient to co-develop it with bochs for now. Both projects are
currently LGPL, but each should be taken to be a separate project,
and have their own license file. Plex86 (it's only a kernel driver
now) could ultimately be used with other projects, as it's modular.
I talked with Bryce, and we both agreed it's OK to keep plex86 as
a subdir in bochs for now.
2003-01-01 20:32:06 +03:00
|
|
|
|
|
|
|
==================== From previous plex86 TODO file ====================
|
|
|
|
|
|
|
|
This is a list of the major tasks/achievements/milestones yet to-do.
|
|
|
|
We should keep this list prioritized, creating sort of a road map.
|
|
|
|
Hopefully, this will reduce duplicate suggestions on the developers
|
|
|
|
channels, and let people know where we are in the development process.
|
|
|
|
Entries listed first have highest priority.
|
|
|
|
|
|
|
|
<NEAR-TERM>
|
|
|
|
- Fix plex86 on Linux 2.4.x/SMP or with 1P and LAPIC enabled.
|
|
|
|
|
|
|
|
- Save FPU state on host <--> monitor context switch.
|
|
|
|
|
|
|
|
- Special guest-specific drivers and special emulated pseudo-devices
|
|
|
|
for faster graphics/network/disk access.
|
|
|
|
|
|
|
|
- Allow some of the inactive guest pages be host swappable.
|
|
|
|
Currently, all pages are locked down.
|
|
|
|
|
|
|
|
- Many performance enhancements (see PERFORMANCE)
|
|
|
|
|
|
|
|
- Allow memory to be mapped anywhere in the physical address
|
|
|
|
space.
|
|
|
|
|
|
|
|
- Allow certain guest pages to be swap eligible by the host.
|
|
|
|
This means they will have to be unavailable by the guest
|
|
|
|
during that time. Need a dynamic algorith for this.
|
|
|
|
|
|
|
|
- Test on 2.4 with SMP/APIC enabled on single processor machine.
|
|
|
|
|
|
|
|
- Deal with guest use of TF.
|
|
|
|
|
|
|
|
- Deal with LDT
|
|
|
|
|
|
|
|
|
|
|
|
unallocVmPages/unreserve_guest_pages called twice,
|
|
|
|
release & teardown.
|