Anda akan mendapatkan versi XV6 terbaru yang dimodifikasi sesuai dengan repositori ini di sini
Kloning repositori XV6 resmi dari sini. Kami membutuhkan emulator untuk boot xv6.kami akan menggunakan QEMU untuk tujuan ini. Untuk menginstal QEMU, jalankan dari terminal Anda
sudo apt install qemu
Kemudian dari tempat XV6 dikloning, jalankan make untuk mengkompilasi xv6. Kemudian untuk meluncurkan emulator, jalankan make qemu dan Anda akan melihat QEMU di jendela yang berbeda. Jika Qemu tidak diluncurkan, lalu jalankan
sudo apt install qemu-system-x86
make qemu
Kali ini, itu harus berhasil. Tetap saja, Anda mungkin menghadapi masalah seperti ini maka di sini ada jalannya.
Untuk menjalankan QEMU di terminal yang sama dengan yang Anda gunakan, jalankan make qemu-nox alih-alih make qemu .
Setelah QEMU diluncurkan, Anda akan melihat panggilan sistem berikut dengan menjalankan ls 
Kami dapat memodifikasi kode sumber dan melihat efeknya secara instan. Biarkan kami ingin mengganti tanda $ dengan sesuatu yang lain. Untuk melakukan ini, buka file sh.c dan ubah di dalam metode getcmd .
printf ( 2 , ANSI_COLOR_GREEN " afnan@Xv6:$ " ANSI_COLOR_RESET);Tambahkan dua baris di bagian atas file ini
# define ANSI_COLOR_GREEN " x1b [32m "
# define ANSI_COLOR_RESET " x1b [0m " Sekarang berhenti dari terminal qemu yang menekan cntrl+A , rilis dan kemudian ketik X segera (seperti yang Anda lihat itu adalah tugas yang membosankan dan kami akan membuat panggilan sistem untuk keluar dari terminal). Maka jalankan make qemu-nox lagi dan lihat hasilnya sekarang

Dua penggunaan CPU tampaknya selalu 100%. Untuk menyelesaikannya, lakukan modifikasi berikut.
Di proc.c , ubah fungsi 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 ();
}
}
} dan di x86.h , tambahkan fungsi halt
static inline void
halt ()
{
asm volatile ( " hlt " : : );
} Mari kita buat panggilan sistem untuk keluar dari terminal QEMU. Kami menyebutkannya sebagai shutdown . Jadi kami ingin melakukan sesuatu yang akan memungkinkan kami untuk keluar dari terminal dengan hanya menulis shutdown perintah.
Pertama buat file bernama 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
}Perhatikan bahwa untuk mencetak apa pun di konsol, kita perlu menambahkan deskriptor file sebagai parameter pertama printf tidak seperti bahasa C.
Kemudian di Makefile, tambahkan di Uprogs
UPROGS=
_cat
_echo
_forktest
_grep
_init
_kill
_ln
_ls
_mkdir
_rm
_sh
_stressfs
_usertests
_wc
_zombie
_shutdownTambahkan juga secara ekstra
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 Sekarang Anda dapat keluar dari terminal QEMU dan menjalankan make qemu-nox lagi dan melihat bahwa ls akan mencantumkan shutdown sebagai panggilan sistem. Tetapi menjalankan perintah ini tidak akan melakukan apa pun untuk sekarang. Kami telah menambahkan panggilan sistem ini ke 4 file berikut berikut berikut
extern int sys_shutdown(void); Kemudian di blok berikutnya, tambahkan [SYS_shutdown] sys_shutdown,#define SYS_shutdown 23SYSCALL(shutdown)void shutdown(void); Sekarang, ada dua file yang berisi metode untuk panggilan sistem. sysfile.c berisi metode yang terkait dengan file dan sysproc.c berisi metode yang terkait dengan proses. Kami harus menulis metode baru bernama sys_shutdown di sysproc.c .
void sys_shutdown ( void ){
outw ( 0xB004 , 0x0 | 0x2000 );
outw ( 0x604 , 0x0 | 0x2000 );
} Jika semuanya baik-baik saja sejauh ini, maka Anda dapat keluar dari QEMU, jalankan make qemu-nox dan lihat panggilan SYTEM yang tersedia dengan menjalankan ls .Run shutdown perintah dan Anda akan melihat terminal keluar.

NB : Saya sudah menerapkan beberapa panggilan Sytem lagi. Anda tidak akan melihat add, incr, getSize dll untuk sekarang jika itu tidak diimplementasikan.
Pertama -tama, ubah fungsi atoi dalam file ulib.c sehingga menangani angka negatif juga.