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