Obtendrá el último VERON modificado de XV6 de acuerdo con este repositorio aquí
Clone el repositorio oficial de XV6 desde aquí. Necesitamos un emulador para arrancar XV6. Usaremos QEMU para este propósito. Para instalar Qemu, ejecute desde su terminal
sudo apt install qemu
Luego, desde donde se clonó XV6, ejecute make para compilar XV6. Luego, para iniciar el emulador, ejecute make qemu y verá QEMU en una ventana diferente. Si Qemu no se lanza, entonces ejecute
sudo apt install qemu-system-x86
make qemu
Esta vez, debería funcionar. Aún así, puede enfrentar problemas como este, entonces aquí hay un camino.
Para ejecutar qemu en el mismo terminal que está utilizando, ejecute make qemu-nox en lugar de make qemu .
Después de que se inicie QEMU, verá las siguientes llamadas del sistema ejecutando ls 
Podemos modificar el código fuente y ver los efectos al instante. Las letras dicen que queremos reemplazar el signo $ con algo más. Para hacer esto, vaya al archivo sh.c y cambie dentro del método getcmd .
printf ( 2 , ANSI_COLOR_GREEN " afnan@Xv6:$ " ANSI_COLOR_RESET);Agregue dos líneas en la parte superior de este archivo
# define ANSI_COLOR_GREEN " x1b [32m "
# define ANSI_COLOR_RESET " x1b [0m " Ahora renuncie desde el terminal QEMU presionando cntrl+A , suelte y luego escriba X inmediatamente (como puede ver que es una tarea tediosa y crearemos una llamada del sistema para salir del terminal). Luego se ejecuta, make qemu-nox nuevamente y vea el resultado ahora

El uso de dos CPU siempre parece ser del 100%. Para resolver esto, hacer la modificación después.
En proc.c , modifique la función schduler
void
scheduler ( void )
{
struct proc *p;
int ran;
struct cpu *c = mycpu ();
c-> proc = 0 ;
for (;;){
// Enable interrupts on this processor.
sti ();
// Loop over process table looking for process to run.
acquire (&ptable. lock );
for (ran = 0 , p = ptable. proc ; p < &ptable. proc [NPROC]; p++){
if (p-> state != RUNNABLE)
continue ;
// Switch to chosen process. It is the process's job
// to release ptable.lock and then reacquire it
// before jumping back to us.
ran = 1 ;
c-> proc = p;
switchuvm (p);
p-> state = RUNNING;
swtch (&(c-> scheduler ), p-> context );
switchkvm ();
// Process is done running for now.
// It should have changed its p->state before coming back.
c-> proc = 0 ;
}
release (&ptable. lock );
if (ran == 0 ) {
halt ();
}
}
} y en x86.h , agregue una función halt
static inline void
halt ()
{
asm volatile ( " hlt " : : );
} Creemos una llamada del sistema para salir del terminal QEMU. Lo nombramos como shutdown . Así que queremos hacer algo que nos permita salir del terminal simplemente escribiendo el shutdown del comando.
Primero cree un archivo llamado shutdown.c .
# include " types.h "
# include " stat.h "
# include " user.h "
int main ( int argc, char * argv[])
{
printf ( 1 , " Exiting n " );
shutdown ();
exit (); // eq to return zero
}Observe que para imprimir cualquier cosa en la consola, necesitamos agregar un descriptor de archivo como el primer parámetro de printf a diferencia del idioma C.
Luego en Makefile, agrégalo en los asentadores
UPROGS=
_cat
_echo
_forktest
_grep
_init
_kill
_ln
_ls
_mkdir
_rm
_sh
_stressfs
_usertests
_wc
_zombie
_shutdownAgrégalo también en extra
EXTRA=
mkfs.c ulib.c user.h cat.c echo.c forktest.c grep.c kill.c
ln.c ls.c mkdir.c rm.c stressfs.c usertests.c wc.c zombie.c shutdown.c Ahora puede salir del terminal QEMU y ejecutar make qemu-nox nuevamente y ver que ls enumerará shutdown como una llamada del sistema. Pero ejecutar este comando no hará nada por ahora. Tenemos que agregar esta llamada del sistema a 4 siguientes archivos
extern int sys_shutdown(void); Luego, en el siguiente bloque, agregue [SYS_shutdown] sys_shutdown,#define SYS_shutdown 23SYSCALL(shutdown)void shutdown(void); Ahora, hay dos archivos que contienen los métodos para las llamadas del sistema. sysfile.c contiene métodos relacionados con archivos y sysproc.c contiene métodos relacionados con procesos. Tenemos que escribir un nuevo método llamado sys_shutdown en sysproc.c .
void sys_shutdown ( void ){
outw ( 0xB004 , 0x0 | 0x2000 );
outw ( 0x604 , 0x0 | 0x2000 );
} Si todo está bien hasta ahora, entonces puede salir shutdown QEMU, ejecutar make qemu-nox y ver las llamadas de Sytem disponibles ejecutando ls .

NB : Ya he implementado algunas llamadas de Sytem más. No verás ADD, INC, Getize, etc. por ahora si no se implementan.
En primer lugar, modifique la función atoi en el archivo ulib.c para que también maneje los números negativos.