[Linuxtrent] Re: Boch e VmWare

  • From: Matteo Ianeselli <m.ianeselli@xxxxxxxxxxx>
  • To: Mailing list linuxtrent <linuxtrent@xxxxxxxxxxxxx>
  • Date: Sat, 21 Feb 2004 12:24:08 +0100

Il ven, 2004-02-20 alle 19:59, Roberto A. F. ha scritto:

>  Stavo chiedendo perchè l'emulazione non viene bypassata quando si
> accorge che la CPU emulata è in realtà la stessa di quella presente.
> Solo IN QUEL CASO, perchè non disattivarla?

Perché il codice che gira nativamente sulla CPU potrebbe "scappare" tra
le dita di Bochs (Bosch è quella fondazione dell'ABS, delle centraline
auto e dei trapani), e per evitare questo bisogna far sì che quando
"deborda", il codice in questione dia nuovamente il controllo (in
maniera automatica e soprattutto *trasparente*) al "controllore" (il suo
nome tecnico è "monitor").

Che è appunto quello che fa invece VmWare.

O quello che nelle intenzioni doveva fare Plex86 (dallo stesso autore di
Bochs), solo che il progetto mi pare sia fermo.

Il grosso problema è che fare questo su architettura X86 non è affatto
banale, visto che il supporto hardware in tal senso è scarso (si sperava
che X86-64 e/o Itanium ne offrissero di più, visto che si rimetteva mano
a tutto il design) e quindi bisogna ricorrere ad una serie di
barbatrucchi.

+++

Per capirci meglio: la ragione per cui i debugger C/C++/Fortran
funzionano (e quindi puoi "stoppare" un programma in userspace a
piacimento) senza dover emulare tutto in software, ed anche la ragione
per cui la memoria virtuale funziona ed è trasparente ai programmi in
userspace è che nei kernel e nell'hardware c'è supporto specifico per
far questo, e si basa sul fatto che i kernel girano in modalità
privilegiata rispetto ai programmi in userspace.

Considerato che su x86 i kernel che ci sono in giro devono funzionare
nella modalità più privilegiata disponibile, se vuoi fare questo
giochetto anche con i kernel allora:

1) O fai girare un kernel in userspace (vedi User Mode Linux a
   http://user-mode-linux.sourceforge.net/), ed il kernel che
   gira in kernel space fa da monitor.

2) o il kernel è scritto apposta in una certa maniera per cui
   si comporta da cittadino beneducato anche se è imbottito
   di tritolo e se la intende con il suo "monitor"
   (il caso di Xen: http://www.cl.cam.ac.uk/Research/SRG/netos/xen/)

3) o il kernel è quello solito e per tenerlo buono bisogna presentargli
   il mondo in tutto e per tutto esattamente come lo vuole lui 
   (alla Matrix), che è il caso di Bochs (il cui "monitor" è annegato
   nell'emulazione del tutto).

4) o il kernel è quello solito, e lo si fa funzionare direttamente
   sull'hardware, ma il "monitor" lo pedina costantemente e quando 
   tenta di sbordare lo "ipnotizza" e lo convince a cambiare idea, che
   è quello che VmWare fa e che Plex86 tenta di fare. 

   La parte difficile è farlo senza destare sospetti nel kernel (che
   deve rimanere convinto di aver deciso tutto da sè, anche se non 
   è vero).


Il punto 3 è molto più semplice da fare del punto 4, ed ha il pregio di
poter funzionare su architetture diverse, ma è lento. 

Il punto 2 ha lo svantaggio di aver bisogno di un kernel un poco
modificato (il che è un problema se il sistema è proprietario), ma è in
linea di massima veloce.

Il punto 1 richiede modifiche più radicali (User Mode Linux), se non
addirittura riscritture da zero (vedi ad esempio Wine). Però è svelto.

-- 
  |   \    \  | ___|_  |_  |  ianezz a casa sua... :-)
  |  _ \  | \ | _|    /   /   Verba volant, scripta
 _|_/  _\_|  _|____|___|___|  manent, data corrupted


--
Per iscriversi  (o disiscriversi), basta spedire un  messaggio con OGGETTO
"subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxx


Other related posts: