From f78713349c065a56984aa620ee027c9c389595a3 Mon Sep 17 00:00:00 2001 From: winPond Date: Thu, 11 Jul 2019 19:40:12 +0800 Subject: [PATCH] my solution to lab5 --- lab/.dir-locals.el | 12 + lab/.gdbinit.tmpl | 30 + lab/.gitignore | 18 + lab/GNUmakefile | 3 + lab/LAB4.si4project/Backup/dumbfork(162).c | 80 -- lab/LAB4.si4project/Backup/dumbfork(7443).c | 80 -- lab/LAB4.si4project/Backup/dumbfork(8040).c | 89 -- lab/LAB4.si4project/Backup/entry(6508).S | 35 - lab/LAB4.si4project/Backup/env(4388).h | 70 - lab/LAB4.si4project/Backup/fork(3728).c | 90 -- lab/LAB4.si4project/Backup/ipc(963).c | 56 - lab/LAB4.si4project/Backup/pfentry(173).S | 82 -- lab/LAB4.si4project/Backup/pgfault(4647).c | 37 - lab/LAB4.si4project/Backup/picirq(7101).c | 86 -- lab/LAB4.si4project/Backup/pmap(6520).c | 1260 ----------------- lab/LAB4.si4project/Backup/sched(4329).c | 84 -- lab/LAB4.si4project/Backup/sched(5719).c | 99 -- lab/LAB4.si4project/Backup/sched(6307).c | 99 -- lab/LAB4.si4project/Backup/syscall(1135).c | 378 ----- lab/LAB4.si4project/Backup/syscall(2799).c | 301 ---- lab/LAB4.si4project/Backup/syscall(5045).h | 22 - lab/LAB4.si4project/Backup/trapentry(2731).S | 100 -- lab/LAB4.si4project/Backup/trapentry(7165).S | 100 -- lab/LAB4.si4project/LAB4.SearchResults | 4 - lab/LAB4.si4project/LAB4.sip_sym | Bin 224252 -> 0 bytes lab/LAB4.si4project/LAB4.sip_xab | Bin 49152 -> 0 bytes lab/LAB4.si4project/LAB4.sip_xad | Bin 808 -> 0 bytes lab/LAB4.si4project/LAB4.sip_xm | Bin 368 -> 0 bytes lab/LAB4.si4project/LAB4.sip_xsb | Bin 28672 -> 0 bytes lab/LAB4.si4project/LAB4.sip_xsd | Bin 608 -> 0 bytes lab/LAB4.si4project/LAB4.siwork | Bin 104457 -> 0 bytes .../cache/parse/boot_main.c.sisc | Bin 7018 -> 0 bytes .../cache/parse/gradelib.py.sisc | Bin 57765 -> 0 bytes .../cache/parse/inc_assert.h.sisc | Bin 4137 -> 0 bytes .../cache/parse/inc_env.h.sisc | Bin 6541 -> 0 bytes .../cache/parse/inc_error.h.sisc | Bin 2191 -> 0 bytes .../cache/parse/inc_lib.h.sisc | Bin 22686 -> 0 bytes .../cache/parse/inc_mmu.h.sisc | Bin 22408 -> 0 bytes .../cache/parse/inc_stdarg.h.sisc | Bin 2442 -> 0 bytes .../cache/parse/inc_stdio.h.sisc | Bin 13099 -> 0 bytes .../cache/parse/inc_string.h.sisc | Bin 19591 -> 0 bytes .../cache/parse/inc_syscall.h.sisc | Bin 2790 -> 0 bytes .../cache/parse/inc_types.h.sisc | Bin 5952 -> 0 bytes .../cache/parse/inc_x86.h.sisc | Bin 29351 -> 0 bytes .../cache/parse/kern_console.c.sisc | Bin 23232 -> 0 bytes .../cache/parse/kern_console.h.sisc | Bin 3681 -> 0 bytes .../cache/parse/kern_cpu.h.sisc | Bin 6385 -> 0 bytes .../cache/parse/kern_env.c.sisc | Bin 20903 -> 0 bytes .../cache/parse/kern_env.h.sisc | Bin 9277 -> 0 bytes .../cache/parse/kern_init.c.sisc | Bin 8486 -> 0 bytes .../cache/parse/kern_kclock.c.sisc | Bin 2820 -> 0 bytes .../cache/parse/kern_kclock.h.sisc | Bin 4158 -> 0 bytes .../cache/parse/kern_kdebug.h.sisc | Bin 3159 -> 0 bytes .../cache/parse/kern_lapic.c.sisc | Bin 10218 -> 0 bytes .../cache/parse/kern_monitor.c.sisc | Bin 10831 -> 0 bytes .../cache/parse/kern_monitor.h.sisc | Bin 6180 -> 0 bytes .../cache/parse/kern_mpconfig.c.sisc | Bin 15692 -> 0 bytes .../cache/parse/kern_picirq.c.sisc | Bin 2940 -> 0 bytes .../cache/parse/kern_picirq.h.sisc | Bin 3515 -> 0 bytes .../cache/parse/kern_pmap.c.sisc | Bin 51924 -> 0 bytes .../cache/parse/kern_pmap.h.sisc | Bin 21284 -> 0 bytes .../cache/parse/kern_printf.c.sisc | Bin 4214 -> 0 bytes .../cache/parse/kern_sched.c.sisc | Bin 5531 -> 0 bytes .../cache/parse/kern_sched.h.sisc | Bin 1887 -> 0 bytes .../cache/parse/kern_spinlock.c.sisc | Bin 8508 -> 0 bytes .../cache/parse/kern_spinlock.h.sisc | Bin 5818 -> 0 bytes .../cache/parse/kern_syscall.c.sisc | Bin 23722 -> 0 bytes .../cache/parse/kern_syscall.h.sisc | Bin 3963 -> 0 bytes .../cache/parse/kern_trap.c.sisc | Bin 21438 -> 0 bytes .../cache/parse/kern_trap.h.sisc | Bin 5324 -> 0 bytes .../cache/parse/lib_console.c.sisc | Bin 2320 -> 0 bytes .../cache/parse/lib_exit.c.sisc | Bin 1302 -> 0 bytes .../cache/parse/lib_fork.c.sisc | Bin 7469 -> 0 bytes .../cache/parse/lib_ipc.c.sisc | Bin 6523 -> 0 bytes .../cache/parse/lib_panic.c.sisc | Bin 2435 -> 0 bytes .../cache/parse/lib_pgfault.c.sisc | Bin 2857 -> 0 bytes .../cache/parse/lib_printf.c.sisc | Bin 5213 -> 0 bytes .../cache/parse/lib_printfmt.c.sisc | Bin 21856 -> 0 bytes .../cache/parse/lib_readline.c.sisc | Bin 3646 -> 0 bytes .../cache/parse/lib_string.c.sisc | Bin 27516 -> 0 bytes .../cache/parse/lib_syscall.c.sisc | Bin 15683 -> 0 bytes .../cache/parse/user_badsegment.c.sisc | Bin 1962 -> 0 bytes .../cache/parse/user_breakpoint.c.sisc | Bin 1958 -> 0 bytes .../cache/parse/user_buggyhello.c.sisc | Bin 1962 -> 0 bytes .../cache/parse/user_buggyhello2.c.sisc | Bin 2060 -> 0 bytes .../cache/parse/user_divzero.c.sisc | Bin 2059 -> 0 bytes .../cache/parse/user_dumbfork.c.sisc | Bin 5801 -> 0 bytes .../cache/parse/user_evilhello.c.sisc | Bin 1966 -> 0 bytes .../cache/parse/user_fairness.c.sisc | Bin 2983 -> 0 bytes .../cache/parse/user_faultalloc.c.sisc | Bin 2869 -> 0 bytes .../cache/parse/user_faultallocbad.c.sisc | Bin 2869 -> 0 bytes .../cache/parse/user_faultbadhandler.c.sisc | Bin 1974 -> 0 bytes .../cache/parse/user_faultdie.c.sisc | Bin 2851 -> 0 bytes .../cache/parse/user_faultevilhandler.c.sisc | Bin 1962 -> 0 bytes .../cache/parse/user_faultnostack.c.sisc | Bin 2303 -> 0 bytes .../cache/parse/user_faultread.c.sisc | Bin 1958 -> 0 bytes .../cache/parse/user_faultreadkernel.c.sisc | Bin 1958 -> 0 bytes .../cache/parse/user_faultregs.c.sisc | Bin 7457 -> 0 bytes .../cache/parse/user_faultwrite.c.sisc | Bin 1958 -> 0 bytes .../cache/parse/user_faultwritekernel.c.sisc | Bin 1958 -> 0 bytes .../cache/parse/user_forktree.c.sisc | Bin 4847 -> 0 bytes .../cache/parse/user_hello.c.sisc | Bin 1954 -> 0 bytes .../cache/parse/user_idle.c.sisc | Bin 2362 -> 0 bytes .../cache/parse/user_pingpong.c.sisc | Bin 2739 -> 0 bytes .../cache/parse/user_pingpongs.c.sisc | Bin 2844 -> 0 bytes .../cache/parse/user_primes.c.sisc | Bin 3355 -> 0 bytes .../cache/parse/user_sendpage.c.sisc | Bin 2805 -> 0 bytes .../cache/parse/user_softint.c.sisc | Bin 1958 -> 0 bytes .../cache/parse/user_spin.c.sisc | Bin 2401 -> 0 bytes .../cache/parse/user_stresssched.c.sisc | Bin 3048 -> 0 bytes .../cache/parse/user_testbss.c.sisc | Bin 2299 -> 0 bytes .../cache/parse/user_yield.c.sisc | Bin 2340 -> 0 bytes .../Backup/bc(1629).c | 151 ++ .../Backup/bc(3621).c | 169 +++ .../Backup/env(3753).c} | 12 +- .../Backup/env(840).c} | 20 +- .../Backup/exit(6898).c | 10 + .../Backup/faultio(2032).c | 22 + .../Backup/file(8133).c | 180 +++ .../Backup/fork(6291).c | 167 +++ .../Backup/fs(6931).c | 456 ++++++ .../Backup/fs(7516).c | 515 +++++++ .../Backup/init(5052).c | 180 +++ .../Backup/init(7465).c | 174 +++ .../Backup/serv(2429).c | 345 +++++ .../Backup/sh(7186).c | 322 +++++ .../Backup/spawn(5260).c | 307 ++++ .../Backup/syscall(7911).c} | 90 +- .../Backup/syscall(8111).c} | 84 +- .../Backup/trap(3657).c} | 70 +- .../Backup/trap(5971).c} | 79 +- .../Backup/trap(6591).c} | 20 + .../Backup/trap(6593).c} | 54 +- .../Backup/trap(7420).c | 430 ++++++ .../Untitled Project.SearchResults | 3 + .../Untitled Project.bookmarks.xml} | 0 .../Untitled Project.sip_sym | Bin 0 -> 1215512 bytes .../Untitled Project.sip_xab | Bin 0 -> 69632 bytes .../Untitled Project.sip_xad | Bin 0 -> 1008 bytes .../Untitled Project.sip_xc} | Bin 186720 -> 273752 bytes .../Untitled Project.sip_xf} | Bin 186720 -> 273752 bytes .../Untitled Project.sip_xm | Bin 0 -> 540 bytes .../Untitled Project.sip_xr} | Bin 186720 -> 273752 bytes .../Untitled Project.sip_xsb | Bin 0 -> 40960 bytes .../Untitled Project.sip_xsd | Bin 0 -> 728 bytes .../Untitled Project.siproj} | Bin 30688 -> 44792 bytes .../Untitled Project.siproj_settings.xml} | 0 .../Untitled Project.siwork | Bin 0 -> 63680 bytes .../Untitled Project.snippets.xml} | 0 .../cache/parse/boot_main.c.sisc | Bin 0 -> 7018 bytes .../cache/parse/fs_bc.c.sisc | Bin 0 -> 7300 bytes .../cache/parse/fs_fs.c.sisc | Bin 0 -> 32054 bytes .../cache/parse/fs_fs.h.sisc | Bin 0 -> 20216 bytes .../cache/parse/fs_fsformat.c.sisc | Bin 0 -> 19067 bytes .../cache/parse/fs_ide.c.sisc | Bin 0 -> 7308 bytes .../cache/parse/fs_serv.c.sisc | Bin 0 -> 26776 bytes .../cache/parse/fs_test.c.sisc | Bin 2180 -> 2180 bytes .../cache/parse/gradelib.py.sisc | Bin 0 -> 57765 bytes .../cache/parse/inc_args.h.sisc | Bin 0 -> 5387 bytes .../cache/parse/inc_assert.h.sisc | Bin 0 -> 4137 bytes .../cache/parse/inc_elf.h.sisc | Bin 6217 -> 6217 bytes .../cache/parse/inc_env.h.sisc | Bin 0 -> 5281 bytes .../cache/parse/inc_error.h.sisc | Bin 0 -> 2895 bytes .../cache/parse/inc_fd.h.sisc | Bin 0 -> 9620 bytes .../cache/parse/inc_fs.h.sisc | Bin 0 -> 12340 bytes .../cache/parse/inc_kbdreg.h.sisc | Bin 7606 -> 7606 bytes .../cache/parse/inc_lib.h.sisc | Bin 0 -> 42455 bytes .../cache/parse/inc_memlayout.h.sisc | Bin 5854 -> 5854 bytes .../cache/parse/inc_mmu.h.sisc | Bin 0 -> 22408 bytes .../cache/parse/inc_partition.h.sisc | Bin 0 -> 3003 bytes .../cache/parse/inc_stab.h.sisc | Bin 4524 -> 4524 bytes .../cache/parse/inc_stdarg.h.sisc | Bin 0 -> 2442 bytes .../cache/parse/inc_stdio.h.sisc | Bin 0 -> 13099 bytes .../cache/parse/inc_string.h.sisc | Bin 0 -> 19591 bytes .../cache/parse/inc_syscall.h.sisc | Bin 0 -> 2828 bytes .../cache/parse/inc_trap.h.sisc | Bin 7702 -> 7702 bytes .../cache/parse/inc_types.h.sisc | Bin 0 -> 5952 bytes .../cache/parse/inc_x86.h.sisc | Bin 0 -> 29351 bytes .../cache/parse/kern_console.c.sisc | Bin 0 -> 23244 bytes .../cache/parse/kern_console.h.sisc | Bin 0 -> 3681 bytes .../cache/parse/kern_cpu.h.sisc | Bin 0 -> 6385 bytes .../cache/parse/kern_entrypgdir.c.sisc | Bin 5558 -> 5558 bytes .../cache/parse/kern_env.c.sisc | Bin 0 -> 21340 bytes .../cache/parse/kern_env.h.sisc | Bin 0 -> 9277 bytes .../cache/parse/kern_init.c.sisc | Bin 0 -> 8350 bytes .../cache/parse/kern_kclock.c.sisc | Bin 0 -> 2820 bytes .../cache/parse/kern_kclock.h.sisc | Bin 0 -> 4158 bytes .../cache/parse/kern_kdebug.c.sisc | Bin 10643 -> 10643 bytes .../cache/parse/kern_kdebug.h.sisc | Bin 0 -> 3159 bytes .../cache/parse/kern_lapic.c.sisc | Bin 0 -> 10218 bytes .../cache/parse/kern_monitor.c.sisc | Bin 0 -> 10831 bytes .../cache/parse/kern_monitor.h.sisc | Bin 0 -> 6180 bytes .../cache/parse/kern_mpconfig.c.sisc | Bin 0 -> 15692 bytes .../cache/parse/kern_picirq.c.sisc | Bin 0 -> 2796 bytes .../cache/parse/kern_picirq.h.sisc | Bin 0 -> 3515 bytes .../cache/parse/kern_pmap.c.sisc | Bin 0 -> 51788 bytes .../cache/parse/kern_pmap.h.sisc | Bin 0 -> 21284 bytes .../cache/parse/kern_printf.c.sisc | Bin 0 -> 4214 bytes .../cache/parse/kern_sched.c.sisc | Bin 0 -> 5175 bytes .../cache/parse/kern_sched.h.sisc | Bin 0 -> 1887 bytes .../cache/parse/kern_spinlock.c.sisc | Bin 0 -> 8508 bytes .../cache/parse/kern_spinlock.h.sisc | Bin 0 -> 5818 bytes .../cache/parse/kern_syscall.c.sisc | Bin 0 -> 25792 bytes .../cache/parse/kern_syscall.h.sisc | Bin 0 -> 3963 bytes .../cache/parse/kern_trap.c.sisc | Bin 0 -> 21737 bytes .../cache/parse/kern_trap.h.sisc | Bin 0 -> 5324 bytes .../cache/parse/lib_args.c.sisc | Bin 0 -> 5940 bytes .../cache/parse/lib_console.c.sisc | Bin 0 -> 12847 bytes .../cache/parse/lib_exit.c.sisc | Bin 0 -> 1450 bytes .../cache/parse/lib_fd.c.sisc | Bin 0 -> 24174 bytes .../cache/parse/lib_file.c.sisc | Bin 0 -> 19468 bytes .../cache/parse/lib_fork.c.sisc | Bin 0 -> 7827 bytes .../cache/parse/lib_fprintf.c.sisc | Bin 0 -> 7761 bytes .../cache/parse/lib_ipc.c.sisc | Bin 0 -> 6019 bytes .../cache/parse/lib_libmain.c.sisc | Bin 3197 -> 3197 bytes .../cache/parse/lib_pageref.c.sisc | Bin 0 -> 1735 bytes .../cache/parse/lib_panic.c.sisc | Bin 0 -> 2435 bytes .../cache/parse/lib_pgfault.c.sisc | Bin 0 -> 2569 bytes .../cache/parse/lib_pipe.c.sisc | Bin 0 -> 16619 bytes .../cache/parse/lib_printf.c.sisc | Bin 0 -> 5213 bytes .../cache/parse/lib_printfmt.c.sisc | Bin 0 -> 21884 bytes .../cache/parse/lib_readline.c.sisc | Bin 0 -> 3987 bytes .../cache/parse/lib_spawn.c.sisc | Bin 0 -> 22212 bytes .../cache/parse/lib_string.c.sisc | Bin 0 -> 27516 bytes .../cache/parse/lib_syscall.c.sisc | Bin 0 -> 16728 bytes .../cache/parse/lib_wait.c.sisc | Bin 0 -> 1734 bytes .../cache/parse/user_badsegment.c.sisc | Bin 0 -> 1962 bytes .../cache/parse/user_breakpoint.c.sisc | Bin 0 -> 1958 bytes .../cache/parse/user_buggyhello.c.sisc | Bin 0 -> 1962 bytes .../cache/parse/user_buggyhello2.c.sisc | Bin 0 -> 2060 bytes .../cache/parse/user_cat.c.sisc | Bin 0 -> 4012 bytes .../cache/parse/user_divzero.c.sisc | Bin 0 -> 2059 bytes .../cache/parse/user_dumbfork.c.sisc | Bin 0 -> 5513 bytes .../cache/parse/user_echo.c.sisc | Bin 0 -> 2729 bytes .../cache/parse/user_evilhello.c.sisc | Bin 0 -> 1966 bytes .../cache/parse/user_fairness.c.sisc | Bin 0 -> 2983 bytes .../cache/parse/user_faultalloc.c.sisc | Bin 0 -> 2869 bytes .../cache/parse/user_faultallocbad.c.sisc | Bin 0 -> 2869 bytes .../cache/parse/user_faultbadhandler.c.sisc | Bin 0 -> 1974 bytes .../cache/parse/user_faultdie.c.sisc | Bin 0 -> 2851 bytes .../cache/parse/user_faultevilhandler.c.sisc | Bin 0 -> 1962 bytes .../cache/parse/user_faultio.c.sisc | Bin 0 -> 2697 bytes .../cache/parse/user_faultnostack.c.sisc | Bin 0 -> 2303 bytes .../cache/parse/user_faultread.c.sisc | Bin 0 -> 1958 bytes .../cache/parse/user_faultreadkernel.c.sisc | Bin 0 -> 1958 bytes .../cache/parse/user_faultregs.c.sisc | Bin 0 -> 7457 bytes .../cache/parse/user_faultwrite.c.sisc | Bin 0 -> 1958 bytes .../cache/parse/user_faultwritekernel.c.sisc | Bin 0 -> 1958 bytes .../cache/parse/user_forktree.c.sisc | Bin 0 -> 4847 bytes .../cache/parse/user_hello.c.sisc | Bin 0 -> 1954 bytes .../cache/parse/user_icode.c.sisc | Bin 0 -> 2381 bytes .../cache/parse/user_idle.c.sisc | Bin 0 -> 2362 bytes .../cache/parse/user_init.c.sisc | Bin 0 -> 5444 bytes .../cache/parse/user_initsh.c.sisc | Bin 0 -> 2892 bytes .../cache/parse/user_ls.c.sisc | Bin 0 -> 10217 bytes .../cache/parse/user_lsfd.c.sisc | Bin 0 -> 3032 bytes .../cache/parse/user_num.c.sisc | Bin 0 -> 4767 bytes .../cache/parse/user_pingpong.c.sisc | Bin 0 -> 2739 bytes .../cache/parse/user_pingpongs.c.sisc | Bin 0 -> 2844 bytes .../cache/parse/user_primes.c.sisc | Bin 0 -> 3355 bytes .../cache/parse/user_primespipe.c.sisc | Bin 0 -> 4635 bytes .../cache/parse/user_sendpage.c.sisc | Bin 0 -> 2805 bytes .../cache/parse/user_sh.c.sisc | Bin 0 -> 19566 bytes .../cache/parse/user_softint.c.sisc | Bin 0 -> 1958 bytes .../cache/parse/user_spawnfaultio.c.sisc | Bin 0 -> 2044 bytes .../cache/parse/user_spawnhello.c.sisc | Bin 0 -> 2044 bytes .../cache/parse/user_spawninit.c.sisc | Bin 0 -> 2044 bytes .../cache/parse/user_spin.c.sisc | Bin 0 -> 2401 bytes .../cache/parse/user_stresssched.c.sisc | Bin 0 -> 3048 bytes .../cache/parse/user_testbss.c.sisc | Bin 0 -> 2299 bytes .../cache/parse/user_testfdsharing.c.sisc | Bin 0 -> 2957 bytes .../cache/parse/user_testfile.c.sisc | Bin 0 -> 4959 bytes .../cache/parse/user_testkbd.c.sisc | Bin 0 -> 2557 bytes .../cache/parse/user_testmalloc.c.sisc | Bin 0 -> 3094 bytes .../cache/parse/user_testpipe.c.sisc | Bin 0 -> 3651 bytes .../cache/parse/user_testpiperace.c.sisc | Bin 0 -> 3682 bytes .../cache/parse/user_testpiperace2.c.sisc | Bin 0 -> 3434 bytes .../cache/parse/user_testptelibrary.c.sisc | Bin 0 -> 3384 bytes .../cache/parse/user_testpteshare.c.sisc | Bin 0 -> 3500 bytes .../cache/parse/user_testshell.c.sisc | Bin 0 -> 5676 bytes .../cache/parse/user_writemotd.c.sisc | Bin 0 -> 2797 bytes .../cache/parse/user_yield.c.sisc | Bin 0 -> 2340 bytes lab/conf/lab.mk | 4 +- lab/fs/Makefrag | 77 + lab/fs/bc.c | 169 +++ lab/fs/fs.c | 515 +++++++ lab/fs/fs.h | 49 + lab/fs/fsformat.c | 244 ++++ lab/fs/ide.c | 112 ++ lab/fs/lorem | 12 + lab/fs/motd | 4 + lab/fs/newmotd | 2 + lab/fs/script | 5 + lab/fs/serv.c | 365 +++++ lab/fs/testshell.sh | 7 + lab/grade-lab5 | 112 ++ lab/inc/args.h | 82 ++ lab/inc/env.h | 1 + lab/inc/error.h | 9 + lab/inc/fd.h | 58 + lab/inc/fs.h | 116 ++ lab/inc/lib.h | 40 + lab/inc/partition.h | 33 + lab/inc/syscall.h | 1 + lab/kern/Makefrag | 18 + lab/kern/console.c | 3 + lab/kern/env.c | 11 +- lab/kern/init.c | 14 +- lab/kern/pmap.c | 2 + lab/kern/sched.c | 3 +- lab/kern/syscall.c | 36 + lab/kern/trap.c | 33 +- lab/lib/Makefrag | 10 + lab/lib/args.c | 73 + lab/lib/console.c | 111 +- lab/lib/exit.c | 1 + lab/lib/fd.c | 320 +++++ lab/lib/file.c | 190 +++ lab/lib/fork.c | 7 +- lab/lib/fprintf.c | 81 ++ lab/lib/pageref.c | 14 + lab/lib/pipe.c | 191 +++ lab/lib/printfmt.c | 7 + lab/lib/readline.c | 8 +- lab/lib/spawn.c | 322 +++++ lab/lib/syscall.c | 6 + lab/lib/wait.c | 13 + lab/mitlab4.si4project/mitlab4.sip_sym | Bin 224432 -> 0 bytes lab/mitlab4.si4project/mitlab4.sip_xab | Bin 49152 -> 0 bytes lab/mitlab4.si4project/mitlab4.sip_xad | Bin 808 -> 0 bytes lab/mitlab4.si4project/mitlab4.sip_xc | Bin 186720 -> 0 bytes lab/mitlab4.si4project/mitlab4.sip_xf | Bin 186720 -> 0 bytes lab/mitlab4.si4project/mitlab4.sip_xm | Bin 368 -> 0 bytes lab/mitlab4.si4project/mitlab4.sip_xr | Bin 186720 -> 0 bytes lab/mitlab4.si4project/mitlab4.sip_xsb | Bin 28672 -> 0 bytes lab/mitlab4.si4project/mitlab4.sip_xsd | Bin 608 -> 0 bytes lab/mitlab4.si4project/mitlab4.siproj | Bin 30688 -> 0 bytes lab/mitlab4.si4project/mitlab4.snippets.xml | 7 - lab/user/Makefrag | 7 +- lab/user/cat.c | 36 + lab/user/echo.c | 21 + lab/user/faultio.c | 22 + lab/user/icode.c | 29 + lab/user/init.c | 69 + lab/user/initsh.c | 27 + lab/user/ls.c | 91 ++ lab/user/lsfd.c | 35 + lab/user/num.c | 47 + lab/user/primespipe.c | 76 + lab/user/sh.c | 330 +++++ lab/user/spawnfaultio.c | 10 + lab/user/spawnhello.c | 10 + lab/user/spawninit.c | 10 + lab/user/testfdsharing.c | 38 + lab/user/testfile.c | 128 ++ lab/user/testkbd.c | 30 + lab/user/testmalloc.c | 24 + lab/user/testpipe.c | 64 + lab/user/testpiperace.c | 66 + lab/user/testpiperace2.c | 69 + lab/user/testptelibrary.c | 42 + lab/user/testpteshare.c | 45 + lab/user/testshell.c | 85 ++ lab/user/writemotd.c | 40 + 364 files changed, 8775 insertions(+), 3249 deletions(-) create mode 100644 lab/.dir-locals.el create mode 100644 lab/.gdbinit.tmpl create mode 100644 lab/.gitignore delete mode 100644 lab/LAB4.si4project/Backup/dumbfork(162).c delete mode 100644 lab/LAB4.si4project/Backup/dumbfork(7443).c delete mode 100644 lab/LAB4.si4project/Backup/dumbfork(8040).c delete mode 100644 lab/LAB4.si4project/Backup/entry(6508).S delete mode 100644 lab/LAB4.si4project/Backup/env(4388).h delete mode 100644 lab/LAB4.si4project/Backup/fork(3728).c delete mode 100644 lab/LAB4.si4project/Backup/ipc(963).c delete mode 100644 lab/LAB4.si4project/Backup/pfentry(173).S delete mode 100644 lab/LAB4.si4project/Backup/pgfault(4647).c delete mode 100644 lab/LAB4.si4project/Backup/picirq(7101).c delete mode 100644 lab/LAB4.si4project/Backup/pmap(6520).c delete mode 100644 lab/LAB4.si4project/Backup/sched(4329).c delete mode 100644 lab/LAB4.si4project/Backup/sched(5719).c delete mode 100644 lab/LAB4.si4project/Backup/sched(6307).c delete mode 100644 lab/LAB4.si4project/Backup/syscall(1135).c delete mode 100644 lab/LAB4.si4project/Backup/syscall(2799).c delete mode 100644 lab/LAB4.si4project/Backup/syscall(5045).h delete mode 100644 lab/LAB4.si4project/Backup/trapentry(2731).S delete mode 100644 lab/LAB4.si4project/Backup/trapentry(7165).S delete mode 100644 lab/LAB4.si4project/LAB4.SearchResults delete mode 100644 lab/LAB4.si4project/LAB4.sip_sym delete mode 100644 lab/LAB4.si4project/LAB4.sip_xab delete mode 100644 lab/LAB4.si4project/LAB4.sip_xad delete mode 100644 lab/LAB4.si4project/LAB4.sip_xm delete mode 100644 lab/LAB4.si4project/LAB4.sip_xsb delete mode 100644 lab/LAB4.si4project/LAB4.sip_xsd delete mode 100644 lab/LAB4.si4project/LAB4.siwork delete mode 100644 lab/LAB4.si4project/cache/parse/boot_main.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/gradelib.py.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/inc_assert.h.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/inc_env.h.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/inc_error.h.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/inc_lib.h.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/inc_mmu.h.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/inc_stdarg.h.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/inc_stdio.h.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/inc_string.h.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/inc_syscall.h.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/inc_types.h.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/inc_x86.h.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/kern_console.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/kern_console.h.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/kern_cpu.h.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/kern_env.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/kern_env.h.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/kern_init.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/kern_kclock.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/kern_kclock.h.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/kern_kdebug.h.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/kern_lapic.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/kern_monitor.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/kern_monitor.h.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/kern_mpconfig.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/kern_picirq.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/kern_picirq.h.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/kern_pmap.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/kern_pmap.h.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/kern_printf.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/kern_sched.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/kern_sched.h.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/kern_spinlock.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/kern_spinlock.h.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/kern_syscall.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/kern_syscall.h.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/kern_trap.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/kern_trap.h.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/lib_console.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/lib_exit.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/lib_fork.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/lib_ipc.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/lib_panic.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/lib_pgfault.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/lib_printf.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/lib_printfmt.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/lib_readline.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/lib_string.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/lib_syscall.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/user_badsegment.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/user_breakpoint.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/user_buggyhello.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/user_buggyhello2.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/user_divzero.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/user_dumbfork.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/user_evilhello.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/user_fairness.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/user_faultalloc.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/user_faultallocbad.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/user_faultbadhandler.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/user_faultdie.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/user_faultevilhandler.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/user_faultnostack.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/user_faultread.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/user_faultreadkernel.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/user_faultregs.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/user_faultwrite.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/user_faultwritekernel.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/user_forktree.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/user_hello.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/user_idle.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/user_pingpong.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/user_pingpongs.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/user_primes.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/user_sendpage.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/user_softint.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/user_spin.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/user_stresssched.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/user_testbss.c.sisc delete mode 100644 lab/LAB4.si4project/cache/parse/user_yield.c.sisc create mode 100644 lab/Untitled Project.si4project/Backup/bc(1629).c create mode 100644 lab/Untitled Project.si4project/Backup/bc(3621).c rename lab/{LAB4.si4project/Backup/env(572).c => Untitled Project.si4project/Backup/env(3753).c} (98%) rename lab/{LAB4.si4project/Backup/env(1818).c => Untitled Project.si4project/Backup/env(840).c} (97%) create mode 100644 lab/Untitled Project.si4project/Backup/exit(6898).c create mode 100644 lab/Untitled Project.si4project/Backup/faultio(2032).c create mode 100644 lab/Untitled Project.si4project/Backup/file(8133).c create mode 100644 lab/Untitled Project.si4project/Backup/fork(6291).c create mode 100644 lab/Untitled Project.si4project/Backup/fs(6931).c create mode 100644 lab/Untitled Project.si4project/Backup/fs(7516).c create mode 100644 lab/Untitled Project.si4project/Backup/init(5052).c create mode 100644 lab/Untitled Project.si4project/Backup/init(7465).c create mode 100644 lab/Untitled Project.si4project/Backup/serv(2429).c create mode 100644 lab/Untitled Project.si4project/Backup/sh(7186).c create mode 100644 lab/Untitled Project.si4project/Backup/spawn(5260).c rename lab/{LAB4.si4project/Backup/syscall(1286).c => Untitled Project.si4project/Backup/syscall(7911).c} (84%) rename lab/{LAB4.si4project/Backup/syscall(7459).c => Untitled Project.si4project/Backup/syscall(8111).c} (84%) rename lab/{LAB4.si4project/Backup/trap(6309).c => Untitled Project.si4project/Backup/trap(3657).c} (85%) rename lab/{LAB4.si4project/Backup/trap(2812).c => Untitled Project.si4project/Backup/trap(5971).c} (83%) rename lab/{LAB4.si4project/Backup/trap(1475).c => Untitled Project.si4project/Backup/trap(6591).c} (94%) rename lab/{LAB4.si4project/Backup/trap(359).c => Untitled Project.si4project/Backup/trap(6593).c} (89%) create mode 100644 lab/Untitled Project.si4project/Backup/trap(7420).c create mode 100644 lab/Untitled Project.si4project/Untitled Project.SearchResults rename lab/{LAB4.si4project/LAB4.bookmarks.xml => Untitled Project.si4project/Untitled Project.bookmarks.xml} (100%) create mode 100644 lab/Untitled Project.si4project/Untitled Project.sip_sym create mode 100644 lab/Untitled Project.si4project/Untitled Project.sip_xab create mode 100644 lab/Untitled Project.si4project/Untitled Project.sip_xad rename lab/{LAB4.si4project/LAB4.sip_xc => Untitled Project.si4project/Untitled Project.sip_xc} (64%) rename lab/{LAB4.si4project/LAB4.sip_xf => Untitled Project.si4project/Untitled Project.sip_xf} (59%) create mode 100644 lab/Untitled Project.si4project/Untitled Project.sip_xm rename lab/{LAB4.si4project/LAB4.sip_xr => Untitled Project.si4project/Untitled Project.sip_xr} (61%) create mode 100644 lab/Untitled Project.si4project/Untitled Project.sip_xsb create mode 100644 lab/Untitled Project.si4project/Untitled Project.sip_xsd rename lab/{LAB4.si4project/LAB4.siproj => Untitled Project.si4project/Untitled Project.siproj} (53%) rename lab/{LAB4.si4project/LAB4.siproj_settings.xml => Untitled Project.si4project/Untitled Project.siproj_settings.xml} (100%) create mode 100644 lab/Untitled Project.si4project/Untitled Project.siwork rename lab/{LAB4.si4project/LAB4.snippets.xml => Untitled Project.si4project/Untitled Project.snippets.xml} (100%) create mode 100644 lab/Untitled Project.si4project/cache/parse/boot_main.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/fs_bc.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/fs_fs.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/fs_fs.h.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/fs_fsformat.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/fs_ide.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/fs_serv.c.sisc rename lab/{LAB4.si4project => Untitled Project.si4project}/cache/parse/fs_test.c.sisc (51%) create mode 100644 lab/Untitled Project.si4project/cache/parse/gradelib.py.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/inc_args.h.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/inc_assert.h.sisc rename lab/{LAB4.si4project => Untitled Project.si4project}/cache/parse/inc_elf.h.sisc (68%) create mode 100644 lab/Untitled Project.si4project/cache/parse/inc_env.h.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/inc_error.h.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/inc_fd.h.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/inc_fs.h.sisc rename lab/{LAB4.si4project => Untitled Project.si4project}/cache/parse/inc_kbdreg.h.sisc (94%) create mode 100644 lab/Untitled Project.si4project/cache/parse/inc_lib.h.sisc rename lab/{LAB4.si4project => Untitled Project.si4project}/cache/parse/inc_memlayout.h.sisc (68%) create mode 100644 lab/Untitled Project.si4project/cache/parse/inc_mmu.h.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/inc_partition.h.sisc rename lab/{LAB4.si4project => Untitled Project.si4project}/cache/parse/inc_stab.h.sisc (84%) create mode 100644 lab/Untitled Project.si4project/cache/parse/inc_stdarg.h.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/inc_stdio.h.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/inc_string.h.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/inc_syscall.h.sisc rename lab/{LAB4.si4project => Untitled Project.si4project}/cache/parse/inc_trap.h.sisc (82%) create mode 100644 lab/Untitled Project.si4project/cache/parse/inc_types.h.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/inc_x86.h.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/kern_console.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/kern_console.h.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/kern_cpu.h.sisc rename lab/{LAB4.si4project => Untitled Project.si4project}/cache/parse/kern_entrypgdir.c.sisc (84%) create mode 100644 lab/Untitled Project.si4project/cache/parse/kern_env.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/kern_env.h.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/kern_init.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/kern_kclock.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/kern_kclock.h.sisc rename lab/{LAB4.si4project => Untitled Project.si4project}/cache/parse/kern_kdebug.c.sisc (66%) create mode 100644 lab/Untitled Project.si4project/cache/parse/kern_kdebug.h.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/kern_lapic.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/kern_monitor.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/kern_monitor.h.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/kern_mpconfig.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/kern_picirq.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/kern_picirq.h.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/kern_pmap.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/kern_pmap.h.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/kern_printf.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/kern_sched.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/kern_sched.h.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/kern_spinlock.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/kern_spinlock.h.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/kern_syscall.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/kern_syscall.h.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/kern_trap.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/kern_trap.h.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/lib_args.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/lib_console.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/lib_exit.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/lib_fd.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/lib_file.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/lib_fork.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/lib_fprintf.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/lib_ipc.c.sisc rename lab/{LAB4.si4project => Untitled Project.si4project}/cache/parse/lib_libmain.c.sisc (62%) create mode 100644 lab/Untitled Project.si4project/cache/parse/lib_pageref.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/lib_panic.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/lib_pgfault.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/lib_pipe.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/lib_printf.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/lib_printfmt.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/lib_readline.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/lib_spawn.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/lib_string.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/lib_syscall.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/lib_wait.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_badsegment.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_breakpoint.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_buggyhello.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_buggyhello2.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_cat.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_divzero.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_dumbfork.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_echo.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_evilhello.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_fairness.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_faultalloc.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_faultallocbad.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_faultbadhandler.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_faultdie.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_faultevilhandler.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_faultio.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_faultnostack.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_faultread.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_faultreadkernel.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_faultregs.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_faultwrite.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_faultwritekernel.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_forktree.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_hello.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_icode.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_idle.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_init.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_initsh.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_ls.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_lsfd.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_num.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_pingpong.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_pingpongs.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_primes.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_primespipe.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_sendpage.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_sh.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_softint.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_spawnfaultio.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_spawnhello.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_spawninit.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_spin.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_stresssched.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_testbss.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_testfdsharing.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_testfile.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_testkbd.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_testmalloc.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_testpipe.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_testpiperace.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_testpiperace2.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_testptelibrary.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_testpteshare.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_testshell.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_writemotd.c.sisc create mode 100644 lab/Untitled Project.si4project/cache/parse/user_yield.c.sisc create mode 100644 lab/fs/Makefrag create mode 100644 lab/fs/bc.c create mode 100644 lab/fs/fs.c create mode 100644 lab/fs/fs.h create mode 100644 lab/fs/fsformat.c create mode 100644 lab/fs/ide.c create mode 100644 lab/fs/lorem create mode 100644 lab/fs/motd create mode 100644 lab/fs/newmotd create mode 100644 lab/fs/script create mode 100644 lab/fs/serv.c create mode 100644 lab/fs/testshell.sh create mode 100644 lab/grade-lab5 create mode 100644 lab/inc/args.h create mode 100644 lab/inc/fd.h create mode 100644 lab/inc/fs.h create mode 100644 lab/inc/partition.h create mode 100644 lab/lib/args.c create mode 100644 lab/lib/fd.c create mode 100644 lab/lib/file.c create mode 100644 lab/lib/fprintf.c create mode 100644 lab/lib/pageref.c create mode 100644 lab/lib/pipe.c create mode 100644 lab/lib/spawn.c create mode 100644 lab/lib/wait.c delete mode 100644 lab/mitlab4.si4project/mitlab4.sip_sym delete mode 100644 lab/mitlab4.si4project/mitlab4.sip_xab delete mode 100644 lab/mitlab4.si4project/mitlab4.sip_xad delete mode 100644 lab/mitlab4.si4project/mitlab4.sip_xc delete mode 100644 lab/mitlab4.si4project/mitlab4.sip_xf delete mode 100644 lab/mitlab4.si4project/mitlab4.sip_xm delete mode 100644 lab/mitlab4.si4project/mitlab4.sip_xr delete mode 100644 lab/mitlab4.si4project/mitlab4.sip_xsb delete mode 100644 lab/mitlab4.si4project/mitlab4.sip_xsd delete mode 100644 lab/mitlab4.si4project/mitlab4.siproj delete mode 100644 lab/mitlab4.si4project/mitlab4.snippets.xml create mode 100644 lab/user/cat.c create mode 100644 lab/user/echo.c create mode 100644 lab/user/faultio.c create mode 100644 lab/user/icode.c create mode 100644 lab/user/init.c create mode 100644 lab/user/initsh.c create mode 100644 lab/user/ls.c create mode 100644 lab/user/lsfd.c create mode 100644 lab/user/num.c create mode 100644 lab/user/primespipe.c create mode 100644 lab/user/sh.c create mode 100644 lab/user/spawnfaultio.c create mode 100644 lab/user/spawnhello.c create mode 100644 lab/user/spawninit.c create mode 100644 lab/user/testfdsharing.c create mode 100644 lab/user/testfile.c create mode 100644 lab/user/testkbd.c create mode 100644 lab/user/testmalloc.c create mode 100644 lab/user/testpipe.c create mode 100644 lab/user/testpiperace.c create mode 100644 lab/user/testpiperace2.c create mode 100644 lab/user/testptelibrary.c create mode 100644 lab/user/testpteshare.c create mode 100644 lab/user/testshell.c create mode 100644 lab/user/writemotd.c diff --git a/lab/.dir-locals.el b/lab/.dir-locals.el new file mode 100644 index 0000000..1b46b0b --- /dev/null +++ b/lab/.dir-locals.el @@ -0,0 +1,12 @@ +((nil + (indent-tabs-mode . t) + (tab-width . 8)) + (c-mode + (c-file-style . "bsd") + (c-basic-offset . 8)) + (shell-mode + (sh-basic-offset . 8) + (sh-indentation . 8)) + (python-mode + (indent-tabs-mode . nil)) + ) diff --git a/lab/.gdbinit.tmpl b/lab/.gdbinit.tmpl new file mode 100644 index 0000000..234bb85 --- /dev/null +++ b/lab/.gdbinit.tmpl @@ -0,0 +1,30 @@ +set $lastcs = -1 + +define hook-stop + # There doesn't seem to be a good way to detect if we're in 16- or + # 32-bit mode, but we always run with CS == 8 in 32-bit mode. + if $cs == 8 || $cs == 27 + if $lastcs != 8 && $lastcs != 27 + set architecture i386 + end + x/i $pc + else + if $lastcs == -1 || $lastcs == 8 || $lastcs == 27 + set architecture i8086 + end + # Translate the segment:offset into a physical address + printf "[%4x:%4x] ", $cs, $eip + x/i $cs*16+$eip + end + set $lastcs = $cs +end + +echo + target remote localhost:1234\n +target remote localhost:1234 + +# If this fails, it's probably because your GDB doesn't support ELF. +# Look at the tools page at +# http://pdos.csail.mit.edu/6.828/2009/tools.html +# for instructions on building GDB with ELF support. +echo + symbol-file obj/kern/kernel\n +symbol-file obj/kern/kernel diff --git a/lab/.gitignore b/lab/.gitignore new file mode 100644 index 0000000..85c53b8 --- /dev/null +++ b/lab/.gitignore @@ -0,0 +1,18 @@ +/obj +/jos.in +/jos.log +/jos.out +/jos.out.* +/jos.cmd +/.gdbinit +/wget.log +/qemu.pcap +/qemu.pcap.* +/qemu.out +/qemu.log +/gradelib.pyc +/lab*-handin.tar.gz +/lab?/ +/sol?/ +/myapi.key +/.suf diff --git a/lab/GNUmakefile b/lab/GNUmakefile index c7e8242..2b85d1d 100644 --- a/lab/GNUmakefile +++ b/lab/GNUmakefile @@ -141,6 +141,7 @@ include boot/Makefrag include kern/Makefrag include lib/Makefrag include user/Makefrag +include fs/Makefrag CPUS ?= 1 @@ -149,6 +150,8 @@ QEMUOPTS = -drive file=$(OBJDIR)/kern/kernel.img,index=0,media=disk,format=raw - QEMUOPTS += $(shell if $(QEMU) -nographic -help | grep -q '^-D '; then echo '-D qemu.log'; fi) IMAGES = $(OBJDIR)/kern/kernel.img QEMUOPTS += -smp $(CPUS) +QEMUOPTS += -drive file=$(OBJDIR)/fs/fs.img,index=1,media=disk,format=raw +IMAGES += $(OBJDIR)/fs/fs.img QEMUOPTS += $(QEMUEXTRA) .gdbinit: .gdbinit.tmpl diff --git a/lab/LAB4.si4project/Backup/dumbfork(162).c b/lab/LAB4.si4project/Backup/dumbfork(162).c deleted file mode 100644 index e5e433c..0000000 --- a/lab/LAB4.si4project/Backup/dumbfork(162).c +++ /dev/null @@ -1,80 +0,0 @@ -// Ping-pong a counter between two processes. -// Only need to start one of these -- splits into two, crudely. - -#include -#include - -envid_t dumbfork(void); - -void -umain(int argc, char **argv) -{ - envid_t who; - int i; - - // fork a child process - who = dumbfork(); - - // print a message and yield to the other a few times - for (i = 0; i < (who ? 10 : 20); i++) { - cprintf("%d: I am the %s!\n", i, who ? "parent" : "child"); - sys_yield(); - } -} - -void -duppage(envid_t dstenv, void *addr) -{ - int r; - - // This is NOT what you should do in your fork. - if ((r = sys_page_alloc(dstenv, addr, PTE_P|PTE_U|PTE_W)) < 0) - panic("sys_page_alloc: %e", r); - if ((r = sys_page_map(dstenv, addr, 0, UTEMP, PTE_P|PTE_U|PTE_W)) < 0) - panic("sys_page_map: %e", r); - memmove(UTEMP, addr, PGSIZE); - if ((r = sys_page_unmap(0, UTEMP)) < 0) - panic("sys_page_unmap: %e", r); -} - -envid_t -dumbfork(void) -{ - envid_t envid; - uint8_t *addr; - int r; - extern unsigned char end[]; - - // Allocate a new child environment. - // The kernel will initialize it with a copy of our register state, - // so that the child will appear to have called sys_exofork() too - - // except that in the child, this "fake" call to sys_exofork() - // will return 0 instead of the envid of the child. - envid = sys_exofork(); - if (envid < 0) - panic("sys_exofork: %e", envid); - if (envid == 0) { - // We're the child. - // The copied value of the global variable 'thisenv' - // is no longer valid (it refers to the parent!). - // Fix it and return 0. - thisenv = &envs[ENVX(sys_getenvid())]; - return 0; - } - - // We're the parent. - // Eagerly copy our entire address space into the child. - // This is NOT what you should do in your fork implementation. - for (addr = (uint8_t*) UTEXT; addr < end; addr += PGSIZE) - duppage(envid, addr); - - // Also copy the stack we are currently running on. - duppage(envid, ROUNDDOWN(&addr, PGSIZE)); - - // Start the child environment running - if ((r = sys_env_set_status(envid, ENV_RUNNABLE)) < 0) - panic("sys_env_set_status: %e", r); - - return envid; -} - diff --git a/lab/LAB4.si4project/Backup/dumbfork(7443).c b/lab/LAB4.si4project/Backup/dumbfork(7443).c deleted file mode 100644 index e5e433c..0000000 --- a/lab/LAB4.si4project/Backup/dumbfork(7443).c +++ /dev/null @@ -1,80 +0,0 @@ -// Ping-pong a counter between two processes. -// Only need to start one of these -- splits into two, crudely. - -#include -#include - -envid_t dumbfork(void); - -void -umain(int argc, char **argv) -{ - envid_t who; - int i; - - // fork a child process - who = dumbfork(); - - // print a message and yield to the other a few times - for (i = 0; i < (who ? 10 : 20); i++) { - cprintf("%d: I am the %s!\n", i, who ? "parent" : "child"); - sys_yield(); - } -} - -void -duppage(envid_t dstenv, void *addr) -{ - int r; - - // This is NOT what you should do in your fork. - if ((r = sys_page_alloc(dstenv, addr, PTE_P|PTE_U|PTE_W)) < 0) - panic("sys_page_alloc: %e", r); - if ((r = sys_page_map(dstenv, addr, 0, UTEMP, PTE_P|PTE_U|PTE_W)) < 0) - panic("sys_page_map: %e", r); - memmove(UTEMP, addr, PGSIZE); - if ((r = sys_page_unmap(0, UTEMP)) < 0) - panic("sys_page_unmap: %e", r); -} - -envid_t -dumbfork(void) -{ - envid_t envid; - uint8_t *addr; - int r; - extern unsigned char end[]; - - // Allocate a new child environment. - // The kernel will initialize it with a copy of our register state, - // so that the child will appear to have called sys_exofork() too - - // except that in the child, this "fake" call to sys_exofork() - // will return 0 instead of the envid of the child. - envid = sys_exofork(); - if (envid < 0) - panic("sys_exofork: %e", envid); - if (envid == 0) { - // We're the child. - // The copied value of the global variable 'thisenv' - // is no longer valid (it refers to the parent!). - // Fix it and return 0. - thisenv = &envs[ENVX(sys_getenvid())]; - return 0; - } - - // We're the parent. - // Eagerly copy our entire address space into the child. - // This is NOT what you should do in your fork implementation. - for (addr = (uint8_t*) UTEXT; addr < end; addr += PGSIZE) - duppage(envid, addr); - - // Also copy the stack we are currently running on. - duppage(envid, ROUNDDOWN(&addr, PGSIZE)); - - // Start the child environment running - if ((r = sys_env_set_status(envid, ENV_RUNNABLE)) < 0) - panic("sys_env_set_status: %e", r); - - return envid; -} - diff --git a/lab/LAB4.si4project/Backup/dumbfork(8040).c b/lab/LAB4.si4project/Backup/dumbfork(8040).c deleted file mode 100644 index 281f4bf..0000000 --- a/lab/LAB4.si4project/Backup/dumbfork(8040).c +++ /dev/null @@ -1,89 +0,0 @@ -// Ping-pong a counter between two processes. -// Only need to start one of these -- splits into two, crudely. - -#include -#include - -envid_t dumbfork(void); - -void -umain(int argc, char **argv) -{ - envid_t who; - int i; - - // fork a child process - who = dumbfork(); - - // print a message and yield to the other a few times - for (i = 0; i < (who ? 10 : 20); i++) { - cprintf("%d: I am the %s!\n", i, who ? "parent" : "child"); - sys_yield(); - } -} - -void -duppage(envid_t dstenv, void *addr) -{ - int r; - - // This is NOT what you should do in your fork. - if ((r = sys_page_alloc(dstenv, addr, PTE_P|PTE_U|PTE_W)) < 0) - panic("sys_page_alloc: %e", r); - // dstenv 的 addr 映射到 envs[0]的UTEMP, - if ((r = sys_page_map(dstenv, addr, 0, UTEMP, PTE_P|PTE_U|PTE_W)) < 0) - panic("sys_page_map: %e", r); - - memmove(UTEMP, addr, PGSIZE); - if ((r = sys_page_unmap(0, UTEMP)) < 0) - panic("sys_page_unmap: %e", r); -} - -envid_t -dumbfork(void) -{ - envid_t envid; - uint8_t *addr; - int r; - extern unsigned char end[]; - - // Allocate a new child environment. - // The kernel will initialize it with a copy of our register state, - // so that the child will appear to have called sys_exofork() too - - // except that in the child, this "fake" call to sys_exofork() - // will return 0 instead of the envid of the child. - envid = sys_exofork(); - cprintf("envid: %d\n",envid); - if (envid < 0) - panic("sys_exofork: %e", envid); - if (envid == 0) { - // We're the child. - // The copied value of the global variable 'thisenv' - // is no longer valid (it refers to the parent!). - // Fix it and return 0. - // "child, sysgetenvid() : 1 - // cprintf("child, sysgetenvid() :%d\n", ENVX(sys_getenvid())); - thisenv = &envs[ENVX(sys_getenvid())]; - return 0; - } - - // We're the parent. - // Eagerly copy our entire address space into the child. - // This is NOT what you should do in your fork implementation. - for (addr = (uint8_t*) UTEXT; addr < end; addr += PGSIZE) { - // copying addr :00800000 - // copying addr :00801000 - // copying addr :00802000 - cprintf("copying addr :%08x\n", (uint32_t)addr); - duppage(envid, addr); - } - // Also copy the stack we are currently running on. - duppage(envid, ROUNDDOWN(&addr, PGSIZE)); - - // Start the child environment running - if ((r = sys_env_set_status(envid, ENV_RUNNABLE)) < 0) - panic("sys_env_set_status: %e", r); - - return envid; -} - diff --git a/lab/LAB4.si4project/Backup/entry(6508).S b/lab/LAB4.si4project/Backup/entry(6508).S deleted file mode 100644 index 222d16c..0000000 --- a/lab/LAB4.si4project/Backup/entry(6508).S +++ /dev/null @@ -1,35 +0,0 @@ -#include -#include - -.data -// Define the global symbols 'envs', 'pages', 'uvpt', and 'uvpd' -// so that they can be used in C as if they were ordinary global arrays. - .globl envs - .set envs, UENVS - .globl pages - .set pages, UPAGES - .globl uvpt - .set uvpt, UVPT - .globl uvpd - .set uvpd, (UVPT+(UVPT>>12)*4) - - -// Entrypoint - this is where the kernel (or our parent environment) -// starts us running when we are initially loaded into a new environment. -.text -.globl _start -_start: - // See if we were started with arguments on the stack - cmpl $USTACKTOP, %esp - jne args_exist - - // If not, push dummy argc/argv arguments. - // This happens when we are loaded by the kernel, - // because the kernel does not know about passing arguments. - pushl $0 - pushl $0 - -args_exist: - call libmain -1: jmp 1b - diff --git a/lab/LAB4.si4project/Backup/env(4388).h b/lab/LAB4.si4project/Backup/env(4388).h deleted file mode 100644 index b04f1a3..0000000 --- a/lab/LAB4.si4project/Backup/env(4388).h +++ /dev/null @@ -1,70 +0,0 @@ -/* See COPYRIGHT for copyright information. */ - -#ifndef JOS_INC_ENV_H -#define JOS_INC_ENV_H - -#include -#include -#include - -typedef int32_t envid_t; - -// An environment ID 'envid_t' has three parts: -// -// +1+---------------21-----------------+--------10--------+ -// |0| Uniqueifier | Environment | -// | | | Index | -// +------------------------------------+------------------+ -// \--- ENVX(eid) --/ -// -// The environment index ENVX(eid) equals the environment's index in the -// 'envs[]' array. The uniqueifier distinguishes environments that were -// created at different times, but share the same environment index. -// -// All real environments are greater than 0 (so the sign bit is zero). -// envid_ts less than 0 signify errors. The envid_t == 0 is special, and -// stands for the current environment. - -#define LOG2NENV 10 -#define NENV (1 << LOG2NENV) -#define ENVX(envid) ((envid) & (NENV - 1)) - -// Values of env_status in struct Env -enum { - ENV_FREE = 0, - ENV_DYING, - ENV_RUNNABLE, - ENV_RUNNING, - ENV_NOT_RUNNABLE -}; - -// Special environment types -enum EnvType { - ENV_TYPE_USER = 0, -}; - -struct Env { - struct Trapframe env_tf; // Saved registers - struct Env *env_link; // Next free Env - envid_t env_id; // Unique environment identifier - envid_t env_parent_id; // env_id of this env's parent - enum EnvType env_type; // Indicates special system environments - unsigned env_status; // Status of the environment - uint32_t env_runs; // Number of times environment has run - int env_cpunum; // The CPU that the env is running on - - // Address space - pde_t *env_pgdir; // Kernel virtual address of page dir - - // Exception handling - void *env_pgfault_upcall; // Page fault upcall entry point - - // Lab 4 IPC - bool env_ipc_recving; // Env is blocked receiving - void *env_ipc_dstva; // VA at which to map received page - uint32_t env_ipc_value; // Data value sent to us - envid_t env_ipc_from; // envid of the sender - int env_ipc_perm; // Perm of page mapping received -}; - -#endif // !JOS_INC_ENV_H diff --git a/lab/LAB4.si4project/Backup/fork(3728).c b/lab/LAB4.si4project/Backup/fork(3728).c deleted file mode 100644 index 61264da..0000000 --- a/lab/LAB4.si4project/Backup/fork(3728).c +++ /dev/null @@ -1,90 +0,0 @@ -// implement fork from user space - -#include -#include - -// PTE_COW marks copy-on-write page table entries. -// It is one of the bits explicitly allocated to user processes (PTE_AVAIL). -#define PTE_COW 0x800 - -// -// Custom page fault handler - if faulting page is copy-on-write, -// map in our own private writable copy. -// -static void -pgfault(struct UTrapframe *utf) -{ - void *addr = (void *) utf->utf_fault_va; - uint32_t err = utf->utf_err; - int r; - - // Check that the faulting access was (1) a write, and (2) to a - // copy-on-write page. If not, panic. - // Hint: - // Use the read-only page table mappings at uvpt - // (see ). - - // LAB 4: Your code here. - - // Allocate a new page, map it at a temporary location (PFTEMP), - // copy the data from the old page to the new page, then move the new - // page to the old page's address. - // Hint: - // You should make three system calls. - - // LAB 4: Your code here. - - panic("pgfault not implemented"); -} - -// -// Map our virtual page pn (address pn*PGSIZE) into the target envid -// at the same virtual address. If the page is writable or copy-on-write, -// the new mapping must be created copy-on-write, and then our mapping must be -// marked copy-on-write as well. (Exercise: Why do we need to mark ours -// copy-on-write again if it was already copy-on-write at the beginning of -// this function?) -// -// Returns: 0 on success, < 0 on error. -// It is also OK to panic on error. -// -static int -duppage(envid_t envid, unsigned pn) -{ - int r; - - // LAB 4: Your code here. - panic("duppage not implemented"); - return 0; -} - -// -// User-level fork with copy-on-write. -// Set up our page fault handler appropriately. -// Create a child. -// Copy our address space and page fault handler setup to the child. -// Then mark the child as runnable and return. -// -// Returns: child's envid to the parent, 0 to the child, < 0 on error. -// It is also OK to panic on error. -// -// Hint: -// Use uvpd, uvpt, and duppage. -// Remember to fix "thisenv" in the child process. -// Neither user exception stack should ever be marked copy-on-write, -// so you must allocate a new page for the child's user exception stack. -// -envid_t -fork(void) -{ - // LAB 4: Your code here. - panic("fork not implemented"); -} - -// Challenge! -int -sfork(void) -{ - panic("sfork not implemented"); - return -E_INVAL; -} diff --git a/lab/LAB4.si4project/Backup/ipc(963).c b/lab/LAB4.si4project/Backup/ipc(963).c deleted file mode 100644 index 2e222b9..0000000 --- a/lab/LAB4.si4project/Backup/ipc(963).c +++ /dev/null @@ -1,56 +0,0 @@ -// User-level IPC library routines - -#include - -// Receive a value via IPC and return it. -// If 'pg' is nonnull, then any page sent by the sender will be mapped at -// that address. -// If 'from_env_store' is nonnull, then store the IPC sender's envid in -// *from_env_store. -// If 'perm_store' is nonnull, then store the IPC sender's page permission -// in *perm_store (this is nonzero iff a page was successfully -// transferred to 'pg'). -// If the system call fails, then store 0 in *fromenv and *perm (if -// they're nonnull) and return the error. -// Otherwise, return the value sent by the sender -// -// Hint: -// Use 'thisenv' to discover the value and who sent it. -// If 'pg' is null, pass sys_ipc_recv a value that it will understand -// as meaning "no page". (Zero is not the right value, since that's -// a perfectly valid place to map a page.) -int32_t -ipc_recv(envid_t *from_env_store, void *pg, int *perm_store) -{ - // LAB 4: Your code here. - panic("ipc_recv not implemented"); - return 0; -} - -// Send 'val' (and 'pg' with 'perm', if 'pg' is nonnull) to 'toenv'. -// This function keeps trying until it succeeds. -// It should panic() on any error other than -E_IPC_NOT_RECV. -// -// Hint: -// Use sys_yield() to be CPU-friendly. -// If 'pg' is null, pass sys_ipc_try_send a value that it will understand -// as meaning "no page". (Zero is not the right value.) -void -ipc_send(envid_t to_env, uint32_t val, void *pg, int perm) -{ - // LAB 4: Your code here. - panic("ipc_send not implemented"); -} - -// Find the first environment of the given type. We'll use this to -// find special environments. -// Returns 0 if no such environment exists. -envid_t -ipc_find_env(enum EnvType type) -{ - int i; - for (i = 0; i < NENV; i++) - if (envs[i].env_type == type) - return envs[i].env_id; - return 0; -} diff --git a/lab/LAB4.si4project/Backup/pfentry(173).S b/lab/LAB4.si4project/Backup/pfentry(173).S deleted file mode 100644 index f40aeeb..0000000 --- a/lab/LAB4.si4project/Backup/pfentry(173).S +++ /dev/null @@ -1,82 +0,0 @@ -#include -#include - -// Page fault upcall entrypoint. - -// This is where we ask the kernel to redirect us to whenever we cause -// a page fault in user space (see the call to sys_set_pgfault_handler -// in pgfault.c). -// -// When a page fault actually occurs, the kernel switches our ESP to -// point to the user exception stack if we're not already on the user -// exception stack, and then it pushes a UTrapframe onto our user -// exception stack: -// -// trap-time esp -// trap-time eflags -// trap-time eip -// utf_regs.reg_eax -// ... -// utf_regs.reg_esi -// utf_regs.reg_edi -// utf_err (error code) -// utf_fault_va <-- %esp -// -// If this is a recursive fault, the kernel will reserve for us a -// blank word above the trap-time esp for scratch work when we unwind -// the recursive call. -// -// We then have call up to the appropriate page fault handler in C -// code, pointed to by the global variable '_pgfault_handler'. - -.text -.globl _pgfault_upcall -_pgfault_upcall: - // Call the C page fault handler. - pushl %esp // function argument: pointer to UTF - movl _pgfault_handler, %eax - call *%eax - addl $4, %esp // pop function argument - - // Now the C page fault handler has returned and you must return - // to the trap time state. - // Push trap-time %eip onto the trap-time stack. - // - // Explanation: - // We must prepare the trap-time stack for our eventual return to - // re-execute the instruction that faulted. - // Unfortunately, we can't return directly from the exception stack: - // We can't call 'jmp', since that requires that we load the address - // into a register, and all registers must have their trap-time - // values after the return. - // We can't call 'ret' from the exception stack either, since if we - // did, %esp would have the wrong value. - // So instead, we push the trap-time %eip onto the *trap-time* stack! - // Below we'll switch to that stack and call 'ret', which will - // restore %eip to its pre-fault value. - // - // In the case of a recursive fault on the exception stack, - // note that the word we're pushing now will fit in the - // blank word that the kernel reserved for us. - // - // Throughout the remaining code, think carefully about what - // registers are available for intermediate calculations. You - // may find that you have to rearrange your code in non-obvious - // ways as registers become unavailable as scratch space. - // - // LAB 4: Your code here. - - // Restore the trap-time registers. After you do this, you - // can no longer modify any general-purpose registers. - // LAB 4: Your code here. - - // Restore eflags from the stack. After you do this, you can - // no longer use arithmetic operations or anything else that - // modifies eflags. - // LAB 4: Your code here. - - // Switch back to the adjusted trap-time stack. - // LAB 4: Your code here. - - // Return to re-execute the instruction that faulted. - // LAB 4: Your code here. diff --git a/lab/LAB4.si4project/Backup/pgfault(4647).c b/lab/LAB4.si4project/Backup/pgfault(4647).c deleted file mode 100644 index a975518..0000000 --- a/lab/LAB4.si4project/Backup/pgfault(4647).c +++ /dev/null @@ -1,37 +0,0 @@ -// User-level page fault handler support. -// Rather than register the C page fault handler directly with the -// kernel as the page fault handler, we register the assembly language -// wrapper in pfentry.S, which in turns calls the registered C -// function. - -#include - - -// Assembly language pgfault entrypoint defined in lib/pfentry.S. -extern void _pgfault_upcall(void); - -// Pointer to currently installed C-language pgfault handler. -void (*_pgfault_handler)(struct UTrapframe *utf); - -// -// Set the page fault handler function. -// If there isn't one yet, _pgfault_handler will be 0. -// The first time we register a handler, we need to -// allocate an exception stack (one page of memory with its top -// at UXSTACKTOP), and tell the kernel to call the assembly-language -// _pgfault_upcall routine when a page fault occurs. -// -void -set_pgfault_handler(void (*handler)(struct UTrapframe *utf)) -{ - int r; - - if (_pgfault_handler == 0) { - // First time through! - // LAB 4: Your code here. - panic("set_pgfault_handler not implemented"); - } - - // Save handler pointer for assembly to call. - _pgfault_handler = handler; -} diff --git a/lab/LAB4.si4project/Backup/picirq(7101).c b/lab/LAB4.si4project/Backup/picirq(7101).c deleted file mode 100644 index 8cb3e62..0000000 --- a/lab/LAB4.si4project/Backup/picirq(7101).c +++ /dev/null @@ -1,86 +0,0 @@ -/* See COPYRIGHT for copyright information. */ - -#include -#include - -#include - - -// Current IRQ mask. -// Initial IRQ mask has interrupt 2 enabled (for slave 8259A). -uint16_t irq_mask_8259A = 0xFFFF & ~(1<> 8)); - cprintf("enabled interrupts:"); - for (i = 0; i < 16; i++) - if (~mask & (1< -#include -#include -#include -#include - -#include -#include -#include -#include - -// These variables are set by i386_detect_memory() -size_t npages; // Amount of physical memory (in pages) -static size_t npages_basemem; // Amount of base memory (in pages) - -// These variables are set in mem_init() -pde_t *kern_pgdir; // Kernel's initial page directory -struct PageInfo *pages; // Physical page state array -static struct PageInfo *page_free_list; // Free list of physical pages - - -// -------------------------------------------------------------- -// Detect machine's physical memory setup. -// -------------------------------------------------------------- - -static int -nvram_read(int r) -{ - return mc146818_read(r) | (mc146818_read(r + 1) << 8); -} - -static void -i386_detect_memory(void) -{ - size_t basemem, extmem, ext16mem, totalmem; - - // Use CMOS calls to measure available base & extended memory. - // (CMOS calls return results in kilobytes.) - basemem = nvram_read(NVRAM_BASELO); - extmem = nvram_read(NVRAM_EXTLO); - ext16mem = nvram_read(NVRAM_EXT16LO) * 64; - - // Calculate the number of physical pages available in both base - // and extended memory. - if (ext16mem) - totalmem = 16 * 1024 + ext16mem; - else if (extmem) - totalmem = 1 * 1024 + extmem; - else - totalmem = basemem; - - npages = totalmem / (PGSIZE / 1024); - npages_basemem = basemem / (PGSIZE / 1024); - - cprintf("Physical memory: %uK available, base = %uK, extended = %uK\n", - totalmem, basemem, totalmem - basemem); -} - - -// -------------------------------------------------------------- -// Set up memory mappings above UTOP. -// -------------------------------------------------------------- - -static void mem_init_mp(void); -static void boot_map_region(pde_t *pgdir, uintptr_t va, size_t size, physaddr_t pa, int perm); -static void check_page_free_list(bool only_low_memory); -static void check_page_alloc(void); -static void check_kern_pgdir(void); -static physaddr_t check_va2pa(pde_t *pgdir, uintptr_t va); -static void check_page(void); -static void check_page_installed_pgdir(void); - -// This simple physical memory allocator is used only while JOS is setting -// up its virtual memory system. page_alloc() is the real allocator. -// -// If n>0, allocates enough pages of contiguous physical memory to hold 'n' -// bytes. Doesn't initialize the memory. Returns a kernel virtual address. -// -// If n==0, returns the address of the next free page without allocating -// anything. -// -// If we're out of memory, boot_alloc should panic. -// This function may ONLY be used during initialization, -// before the page_free_list list has been set up. -static void * -boot_alloc(uint32_t n) -{ - static char *nextfree; // virtual address of next byte of free memory - char *result; - - // Initialize nextfree if this is the first time. - // 'end' is a magic symbol automatically generated by the linker, - // which points to the end of the kernel's bss segment: - // the first virtual address that the linker did *not* assign - // to any kernel code or global variables. - if (!nextfree) { - extern char end[]; - nextfree = ROUNDUP((char *) end, PGSIZE); - } - - // Allocate a chunk large enough to hold 'n' bytes, then update - // nextfree. Make sure nextfree is kept aligned - // to a multiple of PGSIZE. - // - // LAB 2: Your code here. - result = nextfree; - nextfree = ROUNDUP(nextfree+n, PGSIZE); - - return result; -} - -// Set up a two-level page table: -// kern_pgdir is its linear (virtual) address of the root -// -// This function only sets up the kernel part of the address space -// (ie. addresses >= UTOP). The user part of the address space -// will be set up later. -// -// From UTOP to ULIM, the user is allowed to read but not write. -// Above ULIM the user cannot read or write. -void -mem_init(void) -{ - uint32_t cr0; - size_t n; - - // Find out how much memory the machine has (npages & npages_basemem). - i386_detect_memory(); - - // Remove this line when you're ready to test this function. - //panic("mem_init: This function is not finished\n"); - - ////////////////////////////////////////////////////////////////////// - // create initial page directory. - kern_pgdir = (pde_t *) boot_alloc(PGSIZE); - memset(kern_pgdir, 0, PGSIZE); - - ////////////////////////////////////////////////////////////////////// - // Recursively insert PD in itself as a page table, to form - // a virtual page table at virtual address UVPT. - // (For now, you don't have understand the greater purpose of the - // following line.) - - // Permissions: kernel R, user R - kern_pgdir[PDX(UVPT)] = PADDR(kern_pgdir) | PTE_U | PTE_P; - - ////////////////////////////////////////////////////////////////////// - // Allocate an array of npages 'struct PageInfo's and store it in 'pages'. - // The kernel uses this array to keep track of physical pages: for - // each physical page, there is a corresponding struct PageInfo in this - // array. 'npages' is the number of physical pages in memory. Use memset - // to initialize all fields of each struct PageInfo to 0. - // Your code goes here: - pages = (struct PageInfo*)boot_alloc(sizeof(struct PageInfo)*npages); - memset(pages, 0, sizeof(struct PageInfo)*npages); - - ////////////////////////////////////////////////////////////////////// - // Make 'envs' point to an array of size 'NENV' of 'struct Env'. - // LAB 3: Your code here. - envs = (struct Env*)boot_alloc(sizeof(struct Env)*NENV); - memset(envs, 0, sizeof(struct Env)*NENV); - ////////////////////////////////////////////////////////////////////// - // Now that we've allocated the initial kernel data structures, we set - // up the list of free physical pages. Once we've done so, all further - // memory management will go through the page_* functions. In - // particular, we can now map memory using boot_map_region - // or page_insert - page_init(); - - check_page_free_list(1); - check_page_alloc(); - check_page(); - - ////////////////////////////////////////////////////////////////////// - // Now we set up virtual memory - - ////////////////////////////////////////////////////////////////////// - // Map 'pages' read-only by the user at linear address UPAGES - // Permissions: - // - the new image at UPAGES -- kernel R, user R - // (ie. perm = PTE_U | PTE_P) - // - pages itself -- kernel RW, user NONE - // Your code goes here: - // 要求把pages结构体所在的页面和虚拟地址UPAGES相互映射。 - // 这里只要计算出pages结构体的大小,就可以进行映射了。 - // 说实话,之前注释有点没看懂。以为要实现虚存对pages指向的物理页的映射 - boot_map_region(kern_pgdir, - UPAGES, - ROUNDUP((sizeof(struct PageInfo)*npages), PGSIZE), - PADDR(pages), - PTE_U ); - ////////////////////////////////////////////////////////////////////// - // Map the 'envs' array read-only by the user at linear address UENVS - // (ie. perm = PTE_U | PTE_P). - // Permissions: - // - the new image at UENVS -- kernel R, user R - // - envs itself -- kernel RW, user NONE - // LAB 3: Your code here. - boot_map_region(kern_pgdir, - UENVS, - ROUNDUP((sizeof(struct Env)*NENV), PGSIZE), - PADDR(envs), - PTE_U); - ////////////////////////////////////////////////////////////////////// - // Use the physical memory that 'bootstack' refers to as the kernel - // stack. The kernel stack grows down from virtual address KSTACKTOP. - // We consider the entire range from [KSTACKTOP-PTSIZE, KSTACKTOP) - // to be the kernel stack, but break this into two pieces: - // * [KSTACKTOP-KSTKSIZE, KSTACKTOP) -- backed by physical memory - // * [KSTACKTOP-PTSIZE, KSTACKTOP-KSTKSIZE) -- not backed; so if - // the kernel overflows its stack, it will fault rather than - // overwrite memory. Known as a "guard page". - // Permissions: kernel RW, user NONE - // Your code goes here: - // extern char bootstacktop[], bootstack[]; - boot_map_region(kern_pgdir, - KSTACKTOP-KSTKSIZE, - KSTKSIZE, - PADDR(bootstack), - PTE_W ); - ////////////////////////////////////////////////////////////////////// - // Map all of physical memory at KERNBASE. - // Ie. the VA range [KERNBASE, 2^32) should map to - // the PA range [0, 2^32 - KERNBASE) - // We might not have 2^32 - KERNBASE bytes of physical memory, but - // we just set up the mapping anyway. - // Permissions: kernel RW, user NONE - // Your code goes here: - uint32_t kern_size = ROUNDUP((0xFFFFFFFF-KERNBASE), PGSIZE); - // cprintf("size: %d pages:%d\n", kern_size, kern_size/PGSIZE); - boot_map_region(kern_pgdir, - (uintptr_t) KERNBASE, - kern_size, - (physaddr_t)0, - PTE_W ); - - // Initialize the SMP-related parts of the memory map - // 这部分与上面的stack映射有点重复吧。 - mem_init_mp(); - - - // Check that the initial page directory has been set up correctly. - check_kern_pgdir(); - - // Switch from the minimal entry page directory to the full kern_pgdir - // page table we just created. Our instruction pointer should be - // somewhere between KERNBASE and KERNBASE+4MB right now, which is - // mapped the same way by both page tables. - // - // If the machine reboots at this point, you've probably set up your - // kern_pgdir wrong. - lcr3(PADDR(kern_pgdir)); - - check_page_free_list(0); - - // entry.S set the really important flags in cr0 (including enabling - // paging). Here we configure the rest of the flags that we care about. - cr0 = rcr0(); - cr0 |= CR0_PE|CR0_PG|CR0_AM|CR0_WP|CR0_NE|CR0_MP; - cr0 &= ~(CR0_TS|CR0_EM); - lcr0(cr0); - - // Some more checks, only possible after kern_pgdir is installed. - check_page_installed_pgdir(); -} - -// Modify mappings in kern_pgdir to support SMP -// - Map the per-CPU stacks in the region [KSTACKTOP-PTSIZE, KSTACKTOP) -// -static void -mem_init_mp(void) -{ - // Map per-CPU stacks starting at KSTACKTOP, for up to 'NCPU' CPUs. - // - // For CPU i, use the physical memory that 'percpu_kstacks[i]' refers - // to as its kernel stack. CPU i's kernel stack grows down from virtual - // address kstacktop_i = KSTACKTOP - i * (KSTKSIZE + KSTKGAP), and is - // divided into two pieces, just like the single stack you set up in - // mem_init: - // * [kstacktop_i - KSTKSIZE, kstacktop_i) - // -- backed by physical memory - // * [kstacktop_i - (KSTKSIZE + KSTKGAP), kstacktop_i - KSTKSIZE) - // -- not backed; so if the kernel overflows its stack, - // it will fault rather than overwrite another CPU's stack. - // Known as a "guard page". - // Permissions: kernel RW, user NONE - // - // LAB 4: Your code here: - size_t i; - size_t kstacktop_i; - for(i = 0; i < NCPU; i++) { - kstacktop_i = KSTACKTOP - i * (KSTKSIZE + KSTKGAP); - boot_map_region(kern_pgdir, - kstacktop_i - KSTKSIZE, - KSTKSIZE, - PADDR(&percpu_kstacks[i]), - PTE_W ); - - } -} - -// -------------------------------------------------------------- -// Tracking of physical pages. -// The 'pages' array has one 'struct PageInfo' entry per physical page. -// Pages are reference counted, and free pages are kept on a linked list. -// -------------------------------------------------------------- - -// -// Initialize page structure and memory free list. -// After this is done, NEVER use boot_alloc again. ONLY use the page -// allocator functions below to allocate and deallocate physical -// memory via the page_free_list. -// -void -page_init(void) -{ - // LAB 4: - // Change your code to mark the physical page at MPENTRY_PADDR - // as in use - - // The example code here marks all physical pages as free. - // However this is not truly the case. What memory is free? - // 1) Mark physical page 0 as in use. - // This way we preserve the real-mode IDT and BIOS structures - // in case we ever need them. (Currently we don't, but...) - // 2) The rest of base memory, [PGSIZE, npages_basemem * PGSIZE) - // is free. - // 3) Then comes the IO hole [IOPHYSMEM, EXTPHYSMEM), which must - // never be allocated. - // 4) Then extended memory [EXTPHYSMEM, ...). - // Some of it is in use, some is free. Where is the kernel - // in physical memory? Which pages are already in use for - // page tables and other data structures? - // - // Change the code to reflect this. - // NB: DO NOT actually touch the physical memory corresponding to - // free pages! - - // 1.mark page 0 as in use - // 这样我们就可以保留实模式IDT和BIOS结构,以备不时之需。 - pages[0].pp_ref = 1; - - // 2. - size_t i; - for (i = 1; i < MPENTRY_PADDR/PGSIZE; i++) { - pages[i].pp_ref = 0; - pages[i].pp_link = page_free_list; - page_free_list = &pages[i]; - } - // cprintf("npage_basemem: %d\n", npages_basemem); npage_basemem:160 - // boot APs entry code - extern unsigned char mpentry_start[], mpentry_end[]; - size_t size = mpentry_end - mpentry_start; - size = ROUNDUP(size, PGSIZE); - for(;i<(MPENTRY_PADDR+size)/PGSIZE; i++) { - pages[i].pp_ref = 1; - } - - for (; i < npages_basemem; i++) { - pages[i].pp_ref = 0; - pages[i].pp_link = page_free_list; - page_free_list = &pages[i]; - } - - // 3.[IOPHYSMEM, EXTPHYSMEM) - // mark I/O hole - for (;ipp_link; - pp->pp_link = NULL; - - //page2kva 返回值 KernelBase + 物理页号<pp_ref reaches 0.) -// -void -page_free(struct PageInfo *pp) -{ - // Fill this function in - // Hint: You may want to panic if pp->pp_ref is nonzero or - // pp->pp_link is not NULL. - if(pp->pp_link || pp->pp_ref) { - panic("pp->pp_ref is nonzero or pp->pp_link is not NULL\n"); - } - pp->pp_link = page_free_list; - page_free_list = pp; -} - -// -// Decrement the reference count on a page, -// freeing it if there are no more refs. -// -void -page_decref(struct PageInfo* pp) -{ - if (--pp->pp_ref == 0) - page_free(pp); -} - -// Given 'pgdir', a pointer to a page directory, pgdir_walk returns -// a pointer to the page table entry (PTE) for linear address 'va'. -// This requires walking the two-level page table structure. -// -// The relevant page table page might not exist yet. -// If this is true, and create == false, then pgdir_walk returns NULL. -// Otherwise, pgdir_walk allocates a new page table page with page_alloc. -// - If the allocation fails, pgdir_walk returns NULL. -// - Otherwise, the new page's reference count is incremented, -// the page is cleared, -// and pgdir_walk returns a pointer into the new page table page. -// -// Hint 1: you can turn a PageInfo * into the physical address of the -// page it refers to with page2pa() from kern/pmap.h. -// -// Hint 2: the x86 MMU checks permission bits in both the page directory -// and the page table, so it's safe to leave permissions in the page -// directory more permissive than strictly necessary. -// -// Hint 3: look at inc/mmu.h for useful macros that manipulate page -// table and page directory entries. -// -pte_t * -pgdir_walk(pde_t *pgdir, const void *va, int create) -{ - // Fill this function in - uint32_t pdx = PDX(va); // 页目录项索引 - uint32_t ptx = PTX(va); // 页表项索引 - pte_t *pde; // 页目录项指针 - pte_t *pte; // 页表项指针 - struct PageInfo *pp; - - pde = &pgdir[pdx]; //获取页目录项 - - if (*pde & PTE_P) { - // 二级页表有效 - // PTE_ADDR得到物理地址,KADDR转为虚拟地址 - pte = (KADDR(PTE_ADDR(*pde))); - } - else { - - // 二级页表不存在, - if (!create) { - return NULL; - } - // 获取一页的内存,创建一个新的页表,来存放页表项 - if(!(pp = page_alloc(ALLOC_ZERO))) { - return NULL; - } - pte = (pte_t *)page2kva(pp); - pp->pp_ref++; - *pde = PADDR(pte) | (PTE_P | PTE_W | PTE_U); // 设置页目录项 - } - // 返回页表项的虚拟地址 - return &pte[ptx]; -} - -// -// Map [va, va+size) of virtual address space to physical [pa, pa+size) -// in the page table rooted at pgdir. Size is a multiple of PGSIZE, and -// va and pa are both page-aligned. -// Use permission bits perm|PTE_P for the entries. -// -// This function is only intended to set up the ``static'' mappings -// above UTOP. As such, it should *not* change the pp_ref field on the -// mapped pages. -// -// Hint: the TA solution uses pgdir_walk -static void -boot_map_region(pde_t *pgdir, uintptr_t va, size_t size, physaddr_t pa, int perm) -{ - size_t pgs = size / PGSIZE; - if (size % PGSIZE != 0) { - pgs++; - } //计算总共有多少页 - for (int i = 0; i < pgs; i++) { - // 其实可以使用page_insert实现 - pte_t *pte = pgdir_walk(pgdir, (void *)va, 1);//获取va对应的PTE的地址 - if (pte == NULL) { - panic("boot_map_region(): out of memory\n"); - } - *pte = pa | PTE_P | perm; //修改va对应的PTE的值 - pa += PGSIZE; //更新pa和va,进行下一轮循环 - va += PGSIZE; - } -} - - -// -// Map the physical page 'pp' at virtual address 'va'. -// The permissions (the low 12 bits) of the page table entry -// should be set to 'perm|PTE_P'. -// -// Requirements -// - If there is already a page mapped at 'va', it should be page_remove()d. -// - If necessary, on demand, a page table should be allocated and inserted -// into 'pgdir'. // create -// - pp->pp_ref should be incremented if the insertion succeeds. -// - The TLB must be invalidated if a page was formerly present at 'va'. -// -// Corner-case hint: Make sure to consider what happens when the same -// pp is re-inserted at the same virtual address in the same pgdir. -// However, try not to distinguish this case in your code, as this -// frequently leads to subtle bugs; there's an elegant way to handle -// everything in one code path. -// -// RETURNS: -// 0 on success -// -E_NO_MEM, if page table couldn't be allocated -// -// Hint: The TA solution is implemented using pgdir_walk, page_remove, -// and page2pa. -// -int -page_insert(pde_t *pgdir, struct PageInfo *pp, void *va, int perm) -{ - // Fill this function in - pte_t *pte = pgdir_walk(pgdir, va, 1); - - if (!pte) { - - return -E_NO_MEM; - } - - if (*pte & PTE_P) { - if (PTE_ADDR(*pte) == page2pa(pp)) { - - // 插入的是同一个页面,只需要修改权限等即可 - pp->pp_ref--; - } - else { - - page_remove(pgdir, va); - } - - } - - pp->pp_ref++; - *pte = page2pa(pp)| perm | PTE_P; - - return 0; -} - -// -// Return the page mapped at virtual address 'va'. -// If pte_store is not zero, then we store in it the address -// of the pte for this page. This is used by page_remove and -// can be used to verify page permissions for syscall arguments, -// but should not be used by most callers. -// -// Return NULL if there is no page mapped at va. -// -// Hint: the TA solution uses pgdir_walk and pa2page. -// -struct PageInfo * -page_lookup(pde_t *pgdir, void *va, pte_t **pte_store) -{ - // Fill this function in - pte_t *pte = pgdir_walk(pgdir, va, 0); - if (!pte) { - - return NULL; - } - if (pte_store) { - *pte_store = pte; // 通过指针的指针返回指针给调用者 - } - - // 难道不用考虑页表项是否存在 - - if (*pte & PTE_P) { - - return (pa2page(PTE_ADDR(*pte))); - } - - return NULL; - - //return pa2page(PTE_ADDR(*pte)); -} - -// -// Unmaps the physical page at virtual address 'va'. -// If there is no physical page at that address, silently does nothing. -// -// Details: -// - The ref count on the physical page should decrement. -// - The physical page should be freed if the refcount reaches 0. -// - The pg table entry corresponding to 'va' should be set to 0. -// (if such a PTE exists) -// - The TLB must be invalidated if you remove an entry from -// the page table. -// -// Hint: The TA solution is implemented using page_lookup, -// tlb_invalidate, and page_decref. -// - -void -page_remove(pde_t *pgdir, void *va) -{ - // Fill this function in - // 二级指针有点晕 - pte_t *pte; - pte_t **pte_store = &pte; - - struct PageInfo *pi = page_lookup(pgdir, va, pte_store); - if (!pi) { - return ; - } - - page_decref(pi); // 减引用 - - **pte_store = 0; // 取消映射 - tlb_invalidate(pgdir, va); - - -} - -// -// Invalidate a TLB entry, but only if the page tables being -// edited are the ones currently in use by the processor. -// -void -tlb_invalidate(pde_t *pgdir, void *va) -{ - // Flush the entry only if we're modifying the current address space. - if (!curenv || curenv->env_pgdir == pgdir) - invlpg(va); -} - -// -// Reserve size bytes in the MMIO region and map [pa,pa+size) at this -// location. Return the base of the reserved region. size does *not* -// have to be multiple of PGSIZE. -// -void * -mmio_map_region(physaddr_t pa, size_t size) -{ - // Where to start the next region. Initially, this is the - // beginning of the MMIO region. Because this is static, its - // value will be preserved between calls to mmio_map_region - // (just like nextfree in boot_alloc). - static uintptr_t base = MMIOBASE; - - // Reserve size bytes of virtual memory starting at base and - // map physical pages [pa,pa+size) to virtual addresses - // [base,base+size). Since this is device memory and not - // regular DRAM, you'll have to tell the CPU that it isn't - // safe to cache access to this memory. Luckily, the page - // tables provide bits for this purpose; simply create the - // mapping with PTE_PCD|PTE_PWT (cache-disable and - // write-through) in addition to PTE_W. (If you're interested - // in more details on this, see section 10.5 of IA32 volume - // 3A.) - // - // Be sure to round size up to a multiple of PGSIZE and to - // handle if this reservation would overflow MMIOLIM (it's - // okay to simply panic if this happens). - // - // Hint: The staff solution uses boot_map_region. - // - // Your code here: - // ret -> MMIOBASE 暂存 - void *ret = (void *)base; - size = ROUNDUP(size, PGSIZE); - if (base + size > MMIOLIM || base + size < base) { - panic("mmio_map_region reservation overflow\n"); - } - - boot_map_region(kern_pgdir, base, size, pa, PTE_W|PTE_PCD|PTE_PWT); - // 为什么需要加以下操作? base 为static! - base += size; - return ret; -} - -static uintptr_t user_mem_check_addr; - -// -// Check that an environment is allowed to access the range of memory -// [va, va+len) with permissions 'perm | PTE_P'. -// Normally 'perm' will contain PTE_U at least, but this is not required. -// 'va' and 'len' need not be page-aligned; you must test every page that -// contains any of that range. You will test either 'len/PGSIZE', -// 'len/PGSIZE + 1', or 'len/PGSIZE + 2' pages. -// -// A user program can access a virtual address if (1) the address is below -// ULIM, and (2) the page table gives it permission. These are exactly -// the tests you should implement here. -// -// If there is an error, set the 'user_mem_check_addr' variable to the first -// erroneous virtual address. -// -// Returns 0 if the user program can access this range of addresses, -// and -E_FAULT otherwise. -// -/* -int -user_mem_check(struct Env *env, const void *va, size_t len, int perm) -{ - // LAB 3: Your code here. - - size_t vae = ROUNDUP((size_t)(va+len), PGSIZE); - size_t vas = ROUNDDOWN((size_t)va, PGSIZE); - - - pte_t * pte; - - for (; vas < vae; vas += PGSIZE ) { - pte = pgdir_walk(env->env_pgdir, (void *)vas, 0); - if(!( vas < ULIM && pte==NULL && (*pte & perm))) { - if (vas < (size_t)va) - { - user_mem_check_addr = (uintptr_t)va; - } - else - { - user_mem_check_addr = (uintptr_t)vas; - } - return -E_FAULT; - } - } - return 0; -} -*/ -int -user_mem_check(struct Env *env, const void *va, size_t len, int perm) -{ - // LAB 3: Your code here. - uint32_t start = (uint32_t)ROUNDDOWN((char *)va, PGSIZE); - uint32_t end = (uint32_t)ROUNDUP((char *)va+len, PGSIZE); - for(; start < end; start += PGSIZE) { - pte_t *pte = pgdir_walk(env->env_pgdir, (void*)start, 0); - if((start >= ULIM) || (pte == NULL) || !(*pte & PTE_P) || ((*pte & perm) != perm)) { - user_mem_check_addr = (start < (uint32_t)va ? (uint32_t)va : start); - return -E_FAULT; - } - } - return 0; -} - - -// -// Checks that environment 'env' is allowed to access the range -// of memory [va, va+len) with permissions 'perm | PTE_U | PTE_P'. -// If it can, then the function simply returns. -// If it cannot, 'env' is destroyed and, if env is the current -// environment, this function will not return. -// -void -user_mem_assert(struct Env *env, const void *va, size_t len, int perm) -{ - if (user_mem_check(env, va, len, perm | PTE_U) < 0) { - cprintf("[%08x] user_mem_check assertion failure for " - "va %08x\n", env->env_id, user_mem_check_addr); - env_destroy(env); // may not return - } -} - - -// -------------------------------------------------------------- -// Checking functions. -// -------------------------------------------------------------- - -// -// Check that the pages on the page_free_list are reasonable. -// -static void -check_page_free_list(bool only_low_memory) -{ - struct PageInfo *pp; - unsigned pdx_limit = only_low_memory ? 1 : NPDENTRIES; - int nfree_basemem = 0, nfree_extmem = 0; - char *first_free_page; - - if (!page_free_list) - panic("'page_free_list' is a null pointer!"); - - if (only_low_memory) { - // Move pages with lower addresses first in the free - // list, since entry_pgdir does not map all pages. - struct PageInfo *pp1, *pp2; - struct PageInfo **tp[2] = { &pp1, &pp2 }; - for (pp = page_free_list; pp; pp = pp->pp_link) { - int pagetype = PDX(page2pa(pp)) >= pdx_limit; - *tp[pagetype] = pp; - tp[pagetype] = &pp->pp_link; - } - *tp[1] = 0; - *tp[0] = pp2; - page_free_list = pp1; - } - - // if there's a page that shouldn't be on the free list, - // try to make sure it eventually causes trouble. - for (pp = page_free_list; pp; pp = pp->pp_link) - if (PDX(page2pa(pp)) < pdx_limit) - memset(page2kva(pp), 0x97, 128); - - first_free_page = (char *) boot_alloc(0); - for (pp = page_free_list; pp; pp = pp->pp_link) { - // check that we didn't corrupt the free list itself - assert(pp >= pages); - assert(pp < pages + npages); - assert(((char *) pp - (char *) pages) % sizeof(*pp) == 0); - - // check a few pages that shouldn't be on the free list - assert(page2pa(pp) != 0); - assert(page2pa(pp) != IOPHYSMEM); - assert(page2pa(pp) != EXTPHYSMEM - PGSIZE); - assert(page2pa(pp) != EXTPHYSMEM); - assert(page2pa(pp) < EXTPHYSMEM || (char *) page2kva(pp) >= first_free_page); - // (new test for lab 4) - assert(page2pa(pp) != MPENTRY_PADDR); - - if (page2pa(pp) < EXTPHYSMEM) - ++nfree_basemem; - else - ++nfree_extmem; - } - - assert(nfree_basemem > 0); - assert(nfree_extmem > 0); - - cprintf("check_page_free_list() succeeded!\n"); -} - -// -// Check the physical page allocator (page_alloc(), page_free(), -// and page_init()). -// -static void -check_page_alloc(void) -{ - struct PageInfo *pp, *pp0, *pp1, *pp2; - int nfree; - struct PageInfo *fl; - char *c; - int i; - - if (!pages) - panic("'pages' is a null pointer!"); - - // check number of free pages - for (pp = page_free_list, nfree = 0; pp; pp = pp->pp_link) - ++nfree; - - // should be able to allocate three pages - pp0 = pp1 = pp2 = 0; - assert((pp0 = page_alloc(0))); - assert((pp1 = page_alloc(0))); - assert((pp2 = page_alloc(0))); - - assert(pp0); - assert(pp1 && pp1 != pp0); - assert(pp2 && pp2 != pp1 && pp2 != pp0); - assert(page2pa(pp0) < npages*PGSIZE); - assert(page2pa(pp1) < npages*PGSIZE); - assert(page2pa(pp2) < npages*PGSIZE); - - // temporarily steal the rest of the free pages - fl = page_free_list; - page_free_list = 0; - - // should be no free memory - assert(!page_alloc(0)); - - // free and re-allocate? - page_free(pp0); - page_free(pp1); - page_free(pp2); - pp0 = pp1 = pp2 = 0; - assert((pp0 = page_alloc(0))); - assert((pp1 = page_alloc(0))); - assert((pp2 = page_alloc(0))); - assert(pp0); - assert(pp1 && pp1 != pp0); - assert(pp2 && pp2 != pp1 && pp2 != pp0); - assert(!page_alloc(0)); - - // test flags - memset(page2kva(pp0), 1, PGSIZE); - page_free(pp0); - assert((pp = page_alloc(ALLOC_ZERO))); - assert(pp && pp0 == pp); - c = page2kva(pp); - for (i = 0; i < PGSIZE; i++) - assert(c[i] == 0); - - // give free list back - page_free_list = fl; - - // free the pages we took - page_free(pp0); - page_free(pp1); - page_free(pp2); - - // number of free pages should be the same - for (pp = page_free_list; pp; pp = pp->pp_link) - --nfree; - assert(nfree == 0); - - cprintf("check_page_alloc() succeeded!\n"); -} - -// -// Checks that the kernel part of virtual address space -// has been set up roughly correctly (by mem_init()). -// -// This function doesn't test every corner case, -// but it is a pretty good sanity check. -// - -static void -check_kern_pgdir(void) -{ - uint32_t i, n; - pde_t *pgdir; - - pgdir = kern_pgdir; - - // check pages array - n = ROUNDUP(npages*sizeof(struct PageInfo), PGSIZE); - for (i = 0; i < n; i += PGSIZE) - assert(check_va2pa(pgdir, UPAGES + i) == PADDR(pages) + i); - - // check envs array (new test for lab 3) - n = ROUNDUP(NENV*sizeof(struct Env), PGSIZE); - for (i = 0; i < n; i += PGSIZE) - assert(check_va2pa(pgdir, UENVS + i) == PADDR(envs) + i); - - // check phys mem - for (i = 0; i < npages * PGSIZE; i += PGSIZE) - assert(check_va2pa(pgdir, KERNBASE + i) == i); - - // check kernel stack - // (updated in lab 4 to check per-CPU kernel stacks) - for (n = 0; n < NCPU; n++) { - uint32_t base = KSTACKTOP - (KSTKSIZE + KSTKGAP) * (n + 1); - for (i = 0; i < KSTKSIZE; i += PGSIZE) - assert(check_va2pa(pgdir, base + KSTKGAP + i) - == PADDR(percpu_kstacks[n]) + i); - for (i = 0; i < KSTKGAP; i += PGSIZE) - assert(check_va2pa(pgdir, base + i) == ~0); - } - - // check PDE permissions - for (i = 0; i < NPDENTRIES; i++) { - switch (i) { - case PDX(UVPT): - case PDX(KSTACKTOP-1): - case PDX(UPAGES): - case PDX(UENVS): - case PDX(MMIOBASE): - assert(pgdir[i] & PTE_P); - break; - default: - if (i >= PDX(KERNBASE)) { - assert(pgdir[i] & PTE_P); - assert(pgdir[i] & PTE_W); - } else - assert(pgdir[i] == 0); - break; - } - } - cprintf("check_kern_pgdir() succeeded!\n"); -} - -// This function returns the physical address of the page containing 'va', -// defined by the page directory 'pgdir'. The hardware normally performs -// this functionality for us! We define our own version to help check -// the check_kern_pgdir() function; it shouldn't be used elsewhere. - -static physaddr_t -check_va2pa(pde_t *pgdir, uintptr_t va) -{ - pte_t *p; - - pgdir = &pgdir[PDX(va)]; - if (!(*pgdir & PTE_P)) - return ~0; - p = (pte_t*) KADDR(PTE_ADDR(*pgdir)); - if (!(p[PTX(va)] & PTE_P)) - return ~0; - return PTE_ADDR(p[PTX(va)]); -} - - -// check page_insert, page_remove, &c -static void -check_page(void) -{ - struct PageInfo *pp, *pp0, *pp1, *pp2; - struct PageInfo *fl; - pte_t *ptep, *ptep1; - void *va; - uintptr_t mm1, mm2; - int i; - extern pde_t entry_pgdir[]; - - // should be able to allocate three pages - pp0 = pp1 = pp2 = 0; - assert((pp0 = page_alloc(0))); - assert((pp1 = page_alloc(0))); - assert((pp2 = page_alloc(0))); - - assert(pp0); - assert(pp1 && pp1 != pp0); - assert(pp2 && pp2 != pp1 && pp2 != pp0); - - // temporarily steal the rest of the free pages - fl = page_free_list; - page_free_list = 0; - - // should be no free memory - assert(!page_alloc(0)); - - // there is no page allocated at address 0 - assert(page_lookup(kern_pgdir, (void *) 0x0, &ptep) == NULL); - - // there is no free memory, so we can't allocate a page table - assert(page_insert(kern_pgdir, pp1, 0x0, PTE_W) < 0); - - // free pp0 and try again: pp0 should be used for page table - page_free(pp0); - assert(page_insert(kern_pgdir, pp1, 0x0, PTE_W) == 0); - assert(PTE_ADDR(kern_pgdir[0]) == page2pa(pp0)); - assert(check_va2pa(kern_pgdir, 0x0) == page2pa(pp1)); - assert(pp1->pp_ref == 1); - assert(pp0->pp_ref == 1); - - // should be able to map pp2 at PGSIZE because pp0 is already allocated for page table - assert(page_insert(kern_pgdir, pp2, (void*) PGSIZE, PTE_W) == 0); - assert(check_va2pa(kern_pgdir, PGSIZE) == page2pa(pp2)); - assert(pp2->pp_ref == 1); - - // should be no free memory - assert(!page_alloc(0)); - - // should be able to map pp2 at PGSIZE because it's already there - assert(page_insert(kern_pgdir, pp2, (void*) PGSIZE, PTE_W) == 0); - assert(check_va2pa(kern_pgdir, PGSIZE) == page2pa(pp2)); - assert(pp2->pp_ref == 1); - - // pp2 should NOT be on the free list - // could happen in ref counts are handled sloppily in page_insert - assert(!page_alloc(0)); - - // check that pgdir_walk returns a pointer to the pte - ptep = (pte_t *) KADDR(PTE_ADDR(kern_pgdir[PDX(PGSIZE)])); - assert(pgdir_walk(kern_pgdir, (void*)PGSIZE, 0) == ptep+PTX(PGSIZE)); - - // should be able to change permissions too. - assert(page_insert(kern_pgdir, pp2, (void*) PGSIZE, PTE_W|PTE_U) == 0); - assert(check_va2pa(kern_pgdir, PGSIZE) == page2pa(pp2)); - assert(pp2->pp_ref == 1); - assert(*pgdir_walk(kern_pgdir, (void*) PGSIZE, 0) & PTE_U); - assert(kern_pgdir[0] & PTE_U); - - // should be able to remap with fewer permissions - assert(page_insert(kern_pgdir, pp2, (void*) PGSIZE, PTE_W) == 0); - assert(*pgdir_walk(kern_pgdir, (void*) PGSIZE, 0) & PTE_W); - assert(!(*pgdir_walk(kern_pgdir, (void*) PGSIZE, 0) & PTE_U)); - - // should not be able to map at PTSIZE because need free page for page table - assert(page_insert(kern_pgdir, pp0, (void*) PTSIZE, PTE_W) < 0); - - // insert pp1 at PGSIZE (replacing pp2) - assert(page_insert(kern_pgdir, pp1, (void*) PGSIZE, PTE_W) == 0); - assert(!(*pgdir_walk(kern_pgdir, (void*) PGSIZE, 0) & PTE_U)); - - // should have pp1 at both 0 and PGSIZE, pp2 nowhere, ... - assert(check_va2pa(kern_pgdir, 0) == page2pa(pp1)); - assert(check_va2pa(kern_pgdir, PGSIZE) == page2pa(pp1)); - // ... and ref counts should reflect this - assert(pp1->pp_ref == 2); - assert(pp2->pp_ref == 0); - - // pp2 should be returned by page_alloc - assert((pp = page_alloc(0)) && pp == pp2); - - // unmapping pp1 at 0 should keep pp1 at PGSIZE - page_remove(kern_pgdir, 0x0); - assert(check_va2pa(kern_pgdir, 0x0) == ~0); - assert(check_va2pa(kern_pgdir, PGSIZE) == page2pa(pp1)); - assert(pp1->pp_ref == 1); - assert(pp2->pp_ref == 0); - - // test re-inserting pp1 at PGSIZE - assert(page_insert(kern_pgdir, pp1, (void*) PGSIZE, 0) == 0); - assert(pp1->pp_ref); - assert(pp1->pp_link == NULL); - - // unmapping pp1 at PGSIZE should free it - page_remove(kern_pgdir, (void*) PGSIZE); - assert(check_va2pa(kern_pgdir, 0x0) == ~0); - assert(check_va2pa(kern_pgdir, PGSIZE) == ~0); - assert(pp1->pp_ref == 0); - assert(pp2->pp_ref == 0); - - // so it should be returned by page_alloc - assert((pp = page_alloc(0)) && pp == pp1); - - // should be no free memory - assert(!page_alloc(0)); - - // forcibly take pp0 back - assert(PTE_ADDR(kern_pgdir[0]) == page2pa(pp0)); - kern_pgdir[0] = 0; - assert(pp0->pp_ref == 1); - pp0->pp_ref = 0; - - // check pointer arithmetic in pgdir_walk - page_free(pp0); - va = (void*)(PGSIZE * NPDENTRIES + PGSIZE); - ptep = pgdir_walk(kern_pgdir, va, 1); - ptep1 = (pte_t *) KADDR(PTE_ADDR(kern_pgdir[PDX(va)])); - assert(ptep == ptep1 + PTX(va)); - kern_pgdir[PDX(va)] = 0; - pp0->pp_ref = 0; - - // check that new page tables get cleared - memset(page2kva(pp0), 0xFF, PGSIZE); - page_free(pp0); - pgdir_walk(kern_pgdir, 0x0, 1); - ptep = (pte_t *) page2kva(pp0); - for(i=0; ipp_ref = 0; - - // give free list back - page_free_list = fl; - - // free the pages we took - page_free(pp0); - page_free(pp1); - page_free(pp2); - - // test mmio_map_region - mm1 = (uintptr_t) mmio_map_region(0, 4097); - mm2 = (uintptr_t) mmio_map_region(0, 4096); - // check that they're in the right region - assert(mm1 >= MMIOBASE && mm1 + 8192 < MMIOLIM); - assert(mm2 >= MMIOBASE && mm2 + 8192 < MMIOLIM); - // check that they're page-aligned - assert(mm1 % PGSIZE == 0 && mm2 % PGSIZE == 0); - // check that they don't overlap - assert(mm1 + 8192 <= mm2); - // check page mappings - assert(check_va2pa(kern_pgdir, mm1) == 0); - assert(check_va2pa(kern_pgdir, mm1+PGSIZE) == PGSIZE); - assert(check_va2pa(kern_pgdir, mm2) == 0); - assert(check_va2pa(kern_pgdir, mm2+PGSIZE) == ~0); - // check permissions - assert(*pgdir_walk(kern_pgdir, (void*) mm1, 0) & (PTE_W|PTE_PWT|PTE_PCD)); - assert(!(*pgdir_walk(kern_pgdir, (void*) mm1, 0) & PTE_U)); - // clear the mappings - *pgdir_walk(kern_pgdir, (void*) mm1, 0) = 0; - *pgdir_walk(kern_pgdir, (void*) mm1 + PGSIZE, 0) = 0; - *pgdir_walk(kern_pgdir, (void*) mm2, 0) = 0; - - cprintf("check_page() succeeded!\n"); -} - -// check page_insert, page_remove, &c, with an installed kern_pgdir -static void -check_page_installed_pgdir(void) -{ - struct PageInfo *pp, *pp0, *pp1, *pp2; - struct PageInfo *fl; - pte_t *ptep, *ptep1; - uintptr_t va; - int i; - - // check that we can read and write installed pages - pp1 = pp2 = 0; - assert((pp0 = page_alloc(0))); - assert((pp1 = page_alloc(0))); - assert((pp2 = page_alloc(0))); - page_free(pp0); - memset(page2kva(pp1), 1, PGSIZE); - memset(page2kva(pp2), 2, PGSIZE); - page_insert(kern_pgdir, pp1, (void*) PGSIZE, PTE_W); - assert(pp1->pp_ref == 1); - assert(*(uint32_t *)PGSIZE == 0x01010101U); - page_insert(kern_pgdir, pp2, (void*) PGSIZE, PTE_W); - assert(*(uint32_t *)PGSIZE == 0x02020202U); - assert(pp2->pp_ref == 1); - assert(pp1->pp_ref == 0); - *(uint32_t *)PGSIZE = 0x03030303U; - assert(*(uint32_t *)page2kva(pp2) == 0x03030303U); - page_remove(kern_pgdir, (void*) PGSIZE); - assert(pp2->pp_ref == 0); - - // forcibly take pp0 back - assert(PTE_ADDR(kern_pgdir[0]) == page2pa(pp0)); - kern_pgdir[0] = 0; - assert(pp0->pp_ref == 1); - pp0->pp_ref = 0; - - // free the pages we took - page_free(pp0); - - cprintf("check_page_installed_pgdir() succeeded!\n"); -} diff --git a/lab/LAB4.si4project/Backup/sched(4329).c b/lab/LAB4.si4project/Backup/sched(4329).c deleted file mode 100644 index f595bb1..0000000 --- a/lab/LAB4.si4project/Backup/sched(4329).c +++ /dev/null @@ -1,84 +0,0 @@ -#include -#include -#include -#include -#include -#include - -void sched_halt(void); - -// Choose a user environment to run and run it. -void -sched_yield(void) -{ - struct Env *idle; - - // Implement simple round-robin scheduling. - // - // Search through 'envs' for an ENV_RUNNABLE environment in - // circular fashion starting just after the env this CPU was - // last running. Switch to the first such environment found. - // - // If no envs are runnable, but the environment previously - // running on this CPU is still ENV_RUNNING, it's okay to - // choose that environment. - // - // Never choose an environment that's currently running on - // another CPU (env_status == ENV_RUNNING). If there are - // no runnable environments, simply drop through to the code - // below to halt the cpu. - - // LAB 4: Your code here. - - // sched_halt never returns - sched_halt(); -} - -// Halt this CPU when there is nothing to do. Wait until the -// timer interrupt wakes it up. This function never returns. -// -void -sched_halt(void) -{ - int i; - - // For debugging and testing purposes, if there are no runnable - // environments in the system, then drop into the kernel monitor. - for (i = 0; i < NENV; i++) { - if ((envs[i].env_status == ENV_RUNNABLE || - envs[i].env_status == ENV_RUNNING || - envs[i].env_status == ENV_DYING)) - break; - } - if (i == NENV) { - cprintf("No runnable environments in the system!\n"); - while (1) - monitor(NULL); - } - - // Mark that no environment is running on this CPU - curenv = NULL; - lcr3(PADDR(kern_pgdir)); - - // Mark that this CPU is in the HALT state, so that when - // timer interupts come in, we know we should re-acquire the - // big kernel lock - xchg(&thiscpu->cpu_status, CPU_HALTED); - - // Release the big kernel lock as if we were "leaving" the kernel - unlock_kernel(); - - // Reset stack pointer, enable interrupts and then halt. - asm volatile ( - "movl $0, %%ebp\n" - "movl %0, %%esp\n" - "pushl $0\n" - "pushl $0\n" - // Uncomment the following line after completing exercise 13 - //"sti\n" - "1:\n" - "hlt\n" - "jmp 1b\n" - : : "a" (thiscpu->cpu_ts.ts_esp0)); -} - diff --git a/lab/LAB4.si4project/Backup/sched(5719).c b/lab/LAB4.si4project/Backup/sched(5719).c deleted file mode 100644 index 04e9617..0000000 --- a/lab/LAB4.si4project/Backup/sched(5719).c +++ /dev/null @@ -1,99 +0,0 @@ -#include -#include -#include -#include -#include -#include - -void sched_halt(void); - -// Choose a user environment to run and run it. -void -sched_yield(void) -{ - struct Env *idle; - - // Implement simple round-robin scheduling. - // - // Search through 'envs' for an ENV_RUNNABLE environment in - // circular fashion starting just after the env this CPU was - // last running. Switch to the first such environment found. - // - // If no envs are runnable, but the environment previously - // running on this CPU is still ENV_RUNNING, it's okay to - // choose that environment. - // - // Never choose an environment that's currently running on - // another CPU (env_status == ENV_RUNNING). If there are - // no runnable environments, simply drop through to the code - // below to halt the cpu. - - // LAB 4: Your code here. - - idle = curenv; - int start_envid = idle ? ENVX(idle->env_id)+1 : 0; - - for (int i = 0; i < NENV; i++) { - int j = (start_envid + i) % NENV; - if (envs[j].env_status == ENV_RUNNABLE) { - env_run(&envs[j]); - } - } - - if (idle && idle->env_status == ENV_RUNNING) { - env_run(idle); - } - - // sched_halt never returns - sched_halt(); - -} - -// Halt this CPU when there is nothing to do. Wait until the -// timer interrupt wakes it up. This function never returns. -// -void -sched_halt(void) -{ - int i; - - // For debugging and testing purposes, if there are no runnable - // environments in the system, then drop into the kernel monitor. - for (i = 0; i < NENV; i++) { - if ((envs[i].env_status == ENV_RUNNABLE || - envs[i].env_status == ENV_RUNNING || - envs[i].env_status == ENV_DYING)) - break; - } - if (i == NENV) { - cprintf("No runnable environments in the system!\n"); - while (1) - monitor(NULL); - } - - // Mark that no environment is running on this CPU - curenv = NULL; - lcr3(PADDR(kern_pgdir)); - - // Mark that this CPU is in the HALT state, so that when - // timer interupts come in, we know we should re-acquire the - // big kernel lock - xchg(&thiscpu->cpu_status, CPU_HALTED); - - // Release the big kernel lock as if we were "leaving" the kernel - unlock_kernel(); - - // Reset stack pointer, enable interrupts and then halt. - asm volatile ( - "movl $0, %%ebp\n" - "movl %0, %%esp\n" - "pushl $0\n" - "pushl $0\n" - // Uncomment the following line after completing exercise 13 - //"sti\n" - "1:\n" - "hlt\n" - "jmp 1b\n" - : : "a" (thiscpu->cpu_ts.ts_esp0)); -} - diff --git a/lab/LAB4.si4project/Backup/sched(6307).c b/lab/LAB4.si4project/Backup/sched(6307).c deleted file mode 100644 index 04e9617..0000000 --- a/lab/LAB4.si4project/Backup/sched(6307).c +++ /dev/null @@ -1,99 +0,0 @@ -#include -#include -#include -#include -#include -#include - -void sched_halt(void); - -// Choose a user environment to run and run it. -void -sched_yield(void) -{ - struct Env *idle; - - // Implement simple round-robin scheduling. - // - // Search through 'envs' for an ENV_RUNNABLE environment in - // circular fashion starting just after the env this CPU was - // last running. Switch to the first such environment found. - // - // If no envs are runnable, but the environment previously - // running on this CPU is still ENV_RUNNING, it's okay to - // choose that environment. - // - // Never choose an environment that's currently running on - // another CPU (env_status == ENV_RUNNING). If there are - // no runnable environments, simply drop through to the code - // below to halt the cpu. - - // LAB 4: Your code here. - - idle = curenv; - int start_envid = idle ? ENVX(idle->env_id)+1 : 0; - - for (int i = 0; i < NENV; i++) { - int j = (start_envid + i) % NENV; - if (envs[j].env_status == ENV_RUNNABLE) { - env_run(&envs[j]); - } - } - - if (idle && idle->env_status == ENV_RUNNING) { - env_run(idle); - } - - // sched_halt never returns - sched_halt(); - -} - -// Halt this CPU when there is nothing to do. Wait until the -// timer interrupt wakes it up. This function never returns. -// -void -sched_halt(void) -{ - int i; - - // For debugging and testing purposes, if there are no runnable - // environments in the system, then drop into the kernel monitor. - for (i = 0; i < NENV; i++) { - if ((envs[i].env_status == ENV_RUNNABLE || - envs[i].env_status == ENV_RUNNING || - envs[i].env_status == ENV_DYING)) - break; - } - if (i == NENV) { - cprintf("No runnable environments in the system!\n"); - while (1) - monitor(NULL); - } - - // Mark that no environment is running on this CPU - curenv = NULL; - lcr3(PADDR(kern_pgdir)); - - // Mark that this CPU is in the HALT state, so that when - // timer interupts come in, we know we should re-acquire the - // big kernel lock - xchg(&thiscpu->cpu_status, CPU_HALTED); - - // Release the big kernel lock as if we were "leaving" the kernel - unlock_kernel(); - - // Reset stack pointer, enable interrupts and then halt. - asm volatile ( - "movl $0, %%ebp\n" - "movl %0, %%esp\n" - "pushl $0\n" - "pushl $0\n" - // Uncomment the following line after completing exercise 13 - //"sti\n" - "1:\n" - "hlt\n" - "jmp 1b\n" - : : "a" (thiscpu->cpu_ts.ts_esp0)); -} - diff --git a/lab/LAB4.si4project/Backup/syscall(1135).c b/lab/LAB4.si4project/Backup/syscall(1135).c deleted file mode 100644 index 055deef..0000000 --- a/lab/LAB4.si4project/Backup/syscall(1135).c +++ /dev/null @@ -1,378 +0,0 @@ -/* See COPYRIGHT for copyright information. */ - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -// Print a string to the system console. -// The string is exactly 'len' characters long. -// Destroys the environment on memory errors. -static void -sys_cputs(const char *s, size_t len) -{ - // Check that the user has permission to read memory [s, s+len). - // Destroy the environment if not. - - // LAB 3: Your code here. - user_mem_assert(curenv, (const void *) s, len, 0); - // Print the string supplied by the user. - cprintf("%.*s", len, s); -} - -// Read a character from the system console without blocking. -// Returns the character, or 0 if there is no input waiting. -static int -sys_cgetc(void) -{ - return cons_getc(); -} - -// Returns the current environment's envid. -static envid_t -sys_getenvid(void) -{ - return curenv->env_id; -} - -// Destroy a given environment (possibly the currently running environment). -// -// Returns 0 on success, < 0 on error. Errors are: -// -E_BAD_ENV if environment envid doesn't currently exist, -// or the caller doesn't have permission to change envid. -static int -sys_env_destroy(envid_t envid) -{ - int r; - struct Env *e; - - if ((r = envid2env(envid, &e, 1)) < 0) - return r; - if (e == curenv) - cprintf("[%08x] exiting gracefully\n", curenv->env_id); - else - cprintf("[%08x] destroying %08x\n", curenv->env_id, e->env_id); - env_destroy(e); - return 0; -} - -// Deschedule current environment and pick a different one to run. -static void -sys_yield(void) -{ - sched_yield(); -} - - -// Allocate a new environment. -// Returns envid of new environment, or < 0 on error. Errors are: -// -E_NO_FREE_ENV if no free environment is available. -// -E_NO_MEM on memory exhaustion. -static envid_t -sys_exofork(void) -{ - // Create the new environment with env_alloc(), from kern/env.c. - // It should be left as env_alloc created it, except that - // status is set to ENV_NOT_RUNNABLE, and the register set is copied - // from the current environment -- but tweaked so sys_exofork - // will appear to return 0. - // LAB 4: Your code here. - struct Env *newenv; - int32_t ret; - if ((ret = env_alloc(&newenv, sys_getenvid())) < 0) { - // 两个函数的返回值是一样的 - return ret; - } - newenv->env_status = ENV_NOT_RUNNABLE; - newenv->env_tf = curenv->env_tf; - // newenv的返回值为0, 实现子进程返回0值 - newenv->env_tf.tf_regs.reg_eax = 0; - // 返回值存放在eax中 - return newenv->env_id; - - // panic("sys_exofork not implemented"); -} - -// Set envid's env_status to status, which must be ENV_RUNNABLE -// or ENV_NOT_RUNNABLE. -// -// Returns 0 on success, < 0 on error. Errors are: -// -E_BAD_ENV if environment envid doesn't currently exist, -// or the caller doesn't have permission to change envid. -// -E_INVAL if status is not a valid status for an environment. -static int -sys_env_set_status(envid_t envid, int status) -{ - // Hint: Use the 'envid2env' function from kern/env.c to translate an - // envid to a struct Env. - // You should set envid2env's third argument to 1, which will - // check whether the current environment has permission to set - // envid's status. - - // LAB 4: Your code here. - struct Env *e; - if (envid2env(envid, &e, 1)) return -E_BAD_ENV; - - if (status != ENV_NOT_RUNNABLE && status != ENV_RUNNABLE) - return -E_INVAL; - - e->env_status = status; - return 0; -} - -// Set the page fault upcall for 'envid' by modifying the corresponding struct -// Env's 'env_pgfault_upcall' field. When 'envid' causes a page fault, the -// kernel will push a fault record onto the exception stack, then branch to -// 'func'. -// -// Returns 0 on success, < 0 on error. Errors are: -// -E_BAD_ENV if environment envid doesn't currently exist, -// or the caller doesn't have permission to change envid. -static int -sys_env_set_pgfault_upcall(envid_t envid, void *func) -{ - // LAB 4: Your code here. - - - panic("sys_env_set_pgfault_upcall not implemented"); -} - -// Allocate a page of memory and map it at 'va' with permission -// 'perm' in the address space of 'envid'. -// The page's contents are set to 0. -// If a page is already mapped at 'va', that page is unmapped as a -// side effect. -// -// perm -- PTE_U | PTE_P must be set, PTE_AVAIL | PTE_W may or may not be set, -// but no other bits may be set. See PTE_SYSCALL in inc/mmu.h. -// -// Return 0 on success, < 0 on error. Errors are: -// -E_BAD_ENV if environment envid doesn't currently exist, -// or the caller doesn't have permission to change envid. -// -E_INVAL if va >= UTOP, or va is not page-aligned. -// -E_INVAL if perm is inappropriate (see above). -// -E_NO_MEM if there's no memory to allocate the new page, -// or to allocate any necessary page tables. -static int -sys_page_alloc(envid_t envid, void *va, int perm) -{ - // Hint: This function is a wrapper around page_alloc() and - // page_insert() from kern/pmap.c. - // Most of the new code you write should be to check the - // parameters for correctness. - // If page_insert() fails, remember to free the page you - // allocated! - - // LAB 4: Your code here. - int ret = 0; - struct Env *env; - - if ((ret = envid2env(envid, &env, 1)) < 0) - return -E_BAD_ENV; - - if((uintptr_t)va >= UTOP || PGOFF(va)) - return -E_INVAL; - if ((perm & PTE_U) == 0 || (perm & PTE_P) == 0) - return -E_INVAL; - if (perm & ~PTE_SYSCALL) - return -E_INVAL; - - struct PageInfo *pp = page_alloc(ALLOC_ZERO); - if(!pp) - return -E_NO_MEM; - - if (page_insert(env->env_pgdir, pp, va, perm) < 0) - return -E_NO_MEM; - - return 0; - // panic("sys_page_alloc not implemented"); -} - -// Map the page of memory at 'srcva' in srcenvid's address space -// at 'dstva' in dstenvid's address space with permission 'perm'. -// Perm has the same restrictions as in sys_page_alloc, except -// that it also must not grant write access to a read-only -// page. -// -// Return 0 on success, < 0 on error. Errors are: -// -E_BAD_ENV if srcenvid and/or dstenvid doesn't currently exist, -// or the caller doesn't have permission to change one of them. -// -E_INVAL if srcva >= UTOP or srcva is not page-aligned, -// or dstva >= UTOP or dstva is not page-aligned. -// -E_INVAL is srcva is not mapped in srcenvid's address space. -// -E_INVAL if perm is inappropriate (see sys_page_alloc). -// -E_INVAL if (perm & PTE_W), but srcva is read-only in srcenvid's -// address space. -// -E_NO_MEM if there's no memory to allocate any necessary page tables. -static int -sys_page_map(envid_t srcenvid, void *srcva, - envid_t dstenvid, void *dstva, int perm) -{ - // Hint: This function is a wrapper around page_lookup() and - // page_insert() from kern/pmap.c. - // Again, most of the new code you write should be to check the - // parameters for correctness. - // Use the third argument to page_lookup() to - // check the current permissions on the page. - - // LAB 4: Your code here. - int ret = 0; - struct Env *srcenv, *dstenv; - struct PageInfo *srcpp, *dstpp; - pte_t *pte; - if ((envid2env(srcenvid, &srcenv, 1) < 0 )|| ( envid2env(dstenvid, &dstenv, 1) < 0)) - return -E_BAD_ENV; - if ((uintptr_t)srcva >= UTOP || PGOFF(srcva) || (uintptr_t)dstva >= UTOP || PGOFF(dstva)) - return -E_INVAL; - if ( (perm & PTE_U) == 0 || (perm & PTE_P) == 0 || (perm & ~PTE_SYSCALL)) - return -E_INVAL; - if (!(srcpp = page_lookup(srcenv->env_pgdir, srcva, &pte))) - return -E_INVAL; - if ((perm & PTE_W) && ((*pte & PTE_W) == 0)) - return -E_INVAL; - if (page_insert(dstenv->env_pgdir, srcpp, dstva, perm) < 0) - return -E_NO_MEM; - - return 0; - // panic("sys_page_map not implemented"); -} - -// Unmap the page of memory at 'va' in the address space of 'envid'. -// If no page is mapped, the function silently succeeds. -// -// Return 0 on success, < 0 on error. Errors are: -// -E_BAD_ENV if environment envid doesn't currently exist, -// or the caller doesn't have permission to change envid. -// -E_INVAL if va >= UTOP, or va is not page-aligned. -static int -sys_page_unmap(envid_t envid, void *va) -{ - // Hint: This function is a wrapper around page_remove(). - - // LAB 4: Your code here. - int ret = 0; - struct Env *env; - - if ((ret = envid2env(envid, &env, 1)) < 0) - return -E_BAD_ENV; - if ((uintptr_t)va >= UTOP || PGOFF(va)) - return -E_INVAL; - page_remove(env->env_pgdir, va); - return 0; - // panic("sys_page_unmap not implemented"); -} - -// Try to send 'value' to the target env 'envid'. -// If srcva < UTOP, then also send page currently mapped at 'srcva', -// so that receiver gets a duplicate mapping of the same page. -// -// The send fails with a return value of -E_IPC_NOT_RECV if the -// target is not blocked, waiting for an IPC. -// -// The send also can fail for the other reasons listed below. -// -// Otherwise, the send succeeds, and the target's ipc fields are -// updated as follows: -// env_ipc_recving is set to 0 to block future sends; -// env_ipc_from is set to the sending envid; -// env_ipc_value is set to the 'value' parameter; -// env_ipc_perm is set to 'perm' if a page was transferred, 0 otherwise. -// The target environment is marked runnable again, returning 0 -// from the paused sys_ipc_recv system call. (Hint: does the -// sys_ipc_recv function ever actually return?) -// -// If the sender wants to send a page but the receiver isn't asking for one, -// then no page mapping is transferred, but no error occurs. -// The ipc only happens when no errors occur. -// -// Returns 0 on success, < 0 on error. -// Errors are: -// -E_BAD_ENV if environment envid doesn't currently exist. -// (No need to check permissions.) -// -E_IPC_NOT_RECV if envid is not currently blocked in sys_ipc_recv, -// or another environment managed to send first. -// -E_INVAL if srcva < UTOP but srcva is not page-aligned. -// -E_INVAL if srcva < UTOP and perm is inappropriate -// (see sys_page_alloc). -// -E_INVAL if srcva < UTOP but srcva is not mapped in the caller's -// address space. -// -E_INVAL if (perm & PTE_W), but srcva is read-only in the -// current environment's address space. -// -E_NO_MEM if there's not enough memory to map srcva in envid's -// address space. -static int -sys_ipc_try_send(envid_t envid, uint32_t value, void *srcva, unsigned perm) -{ - // LAB 4: Your code here. - panic("sys_ipc_try_send not implemented"); -} - -// Block until a value is ready. Record that you want to receive -// using the env_ipc_recving and env_ipc_dstva fields of struct Env, -// mark yourself not runnable, and then give up the CPU. -// -// If 'dstva' is < UTOP, then you are willing to receive a page of data. -// 'dstva' is the virtual address at which the sent page should be mapped. -// -// This function only returns on error, but the system call will eventually -// return 0 on success. -// Return < 0 on error. Errors are: -// -E_INVAL if dstva < UTOP but dstva is not page-aligned. -static int -sys_ipc_recv(void *dstva) -{ - // LAB 4: Your code here. - panic("sys_ipc_recv not implemented"); - return 0; -} - -// Dispatches to the correct kernel function, passing the arguments. -int32_t -syscall(uint32_t syscallno, uint32_t a1, uint32_t a2, uint32_t a3, uint32_t a4, uint32_t a5) -{ - // Call the function corresponding to the 'syscallno' parameter. - // Return any appropriate return value. - // LAB 3: Your code here. - switch (syscallno) { - case SYS_cputs: - sys_cputs((const char*)a1, a2); - break; - case SYS_cgetc: - return sys_cgetc(); - case SYS_getenvid: - ret = sys_getenvid(); - break; - case SYS_env_destroy: - return sys_env_destroy(a1); - case SYS_yield: - sys_yield(); - break; - case SYS_page_alloc: - return sys_page_alloc((envid_t)a1, (void * )a2, (int )a3); - - case SYS_page_map: - return sys_page_map((envid_t) a1, (void *) a2, (envid_t) a3, (void *) a4, (int) a5); - - case SYS_page_unmap: - return sys_page_unmap((envid_t) a1, (void *) a2); - - case SYS_exofork: - return sys_exofork(); - - case SYS_env_set_status: - return sys_env_set_status((envid_t) a1, (int) a2); - case NSYSCALLS: - return -E_INVAL; - - default: - return -E_INVAL; - } -} - diff --git a/lab/LAB4.si4project/Backup/syscall(2799).c b/lab/LAB4.si4project/Backup/syscall(2799).c deleted file mode 100644 index 406b1df..0000000 --- a/lab/LAB4.si4project/Backup/syscall(2799).c +++ /dev/null @@ -1,301 +0,0 @@ -/* See COPYRIGHT for copyright information. */ - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -// Print a string to the system console. -// The string is exactly 'len' characters long. -// Destroys the environment on memory errors. -static void -sys_cputs(const char *s, size_t len) -{ - // Check that the user has permission to read memory [s, s+len). - // Destroy the environment if not. - - // LAB 3: Your code here. - user_mem_assert(curenv, (const void *) s, len, 0); - // Print the string supplied by the user. - cprintf("%.*s", len, s); -} - -// Read a character from the system console without blocking. -// Returns the character, or 0 if there is no input waiting. -static int -sys_cgetc(void) -{ - return cons_getc(); -} - -// Returns the current environment's envid. -static envid_t -sys_getenvid(void) -{ - return curenv->env_id; -} - -// Destroy a given environment (possibly the currently running environment). -// -// Returns 0 on success, < 0 on error. Errors are: -// -E_BAD_ENV if environment envid doesn't currently exist, -// or the caller doesn't have permission to change envid. -static int -sys_env_destroy(envid_t envid) -{ - int r; - struct Env *e; - - if ((r = envid2env(envid, &e, 1)) < 0) - return r; - if (e == curenv) - cprintf("[%08x] exiting gracefully\n", curenv->env_id); - else - cprintf("[%08x] destroying %08x\n", curenv->env_id, e->env_id); - env_destroy(e); - return 0; -} - -// Deschedule current environment and pick a different one to run. -static void -sys_yield(void) -{ - sched_yield(); -} - -// Allocate a new environment. -// Returns envid of new environment, or < 0 on error. Errors are: -// -E_NO_FREE_ENV if no free environment is available. -// -E_NO_MEM on memory exhaustion. -static envid_t -sys_exofork(void) -{ - // Create the new environment with env_alloc(), from kern/env.c. - // It should be left as env_alloc created it, except that - // status is set to ENV_NOT_RUNNABLE, and the register set is copied - // from the current environment -- but tweaked so sys_exofork - // will appear to return 0. - - // LAB 4: Your code here. - panic("sys_exofork not implemented"); -} - -// Set envid's env_status to status, which must be ENV_RUNNABLE -// or ENV_NOT_RUNNABLE. -// -// Returns 0 on success, < 0 on error. Errors are: -// -E_BAD_ENV if environment envid doesn't currently exist, -// or the caller doesn't have permission to change envid. -// -E_INVAL if status is not a valid status for an environment. -static int -sys_env_set_status(envid_t envid, int status) -{ - // Hint: Use the 'envid2env' function from kern/env.c to translate an - // envid to a struct Env. - // You should set envid2env's third argument to 1, which will - // check whether the current environment has permission to set - // envid's status. - - // LAB 4: Your code here. - panic("sys_env_set_status not implemented"); -} - -// Set the page fault upcall for 'envid' by modifying the corresponding struct -// Env's 'env_pgfault_upcall' field. When 'envid' causes a page fault, the -// kernel will push a fault record onto the exception stack, then branch to -// 'func'. -// -// Returns 0 on success, < 0 on error. Errors are: -// -E_BAD_ENV if environment envid doesn't currently exist, -// or the caller doesn't have permission to change envid. -static int -sys_env_set_pgfault_upcall(envid_t envid, void *func) -{ - // LAB 4: Your code here. - panic("sys_env_set_pgfault_upcall not implemented"); -} - -// Allocate a page of memory and map it at 'va' with permission -// 'perm' in the address space of 'envid'. -// The page's contents are set to 0. -// If a page is already mapped at 'va', that page is unmapped as a -// side effect. -// -// perm -- PTE_U | PTE_P must be set, PTE_AVAIL | PTE_W may or may not be set, -// but no other bits may be set. See PTE_SYSCALL in inc/mmu.h. -// -// Return 0 on success, < 0 on error. Errors are: -// -E_BAD_ENV if environment envid doesn't currently exist, -// or the caller doesn't have permission to change envid. -// -E_INVAL if va >= UTOP, or va is not page-aligned. -// -E_INVAL if perm is inappropriate (see above). -// -E_NO_MEM if there's no memory to allocate the new page, -// or to allocate any necessary page tables. -static int -sys_page_alloc(envid_t envid, void *va, int perm) -{ - // Hint: This function is a wrapper around page_alloc() and - // page_insert() from kern/pmap.c. - // Most of the new code you write should be to check the - // parameters for correctness. - // If page_insert() fails, remember to free the page you - // allocated! - - // LAB 4: Your code here. - panic("sys_page_alloc not implemented"); -} - -// Map the page of memory at 'srcva' in srcenvid's address space -// at 'dstva' in dstenvid's address space with permission 'perm'. -// Perm has the same restrictions as in sys_page_alloc, except -// that it also must not grant write access to a read-only -// page. -// -// Return 0 on success, < 0 on error. Errors are: -// -E_BAD_ENV if srcenvid and/or dstenvid doesn't currently exist, -// or the caller doesn't have permission to change one of them. -// -E_INVAL if srcva >= UTOP or srcva is not page-aligned, -// or dstva >= UTOP or dstva is not page-aligned. -// -E_INVAL is srcva is not mapped in srcenvid's address space. -// -E_INVAL if perm is inappropriate (see sys_page_alloc). -// -E_INVAL if (perm & PTE_W), but srcva is read-only in srcenvid's -// address space. -// -E_NO_MEM if there's no memory to allocate any necessary page tables. -static int -sys_page_map(envid_t srcenvid, void *srcva, - envid_t dstenvid, void *dstva, int perm) -{ - // Hint: This function is a wrapper around page_lookup() and - // page_insert() from kern/pmap.c. - // Again, most of the new code you write should be to check the - // parameters for correctness. - // Use the third argument to page_lookup() to - // check the current permissions on the page. - - // LAB 4: Your code here. - panic("sys_page_map not implemented"); -} - -// Unmap the page of memory at 'va' in the address space of 'envid'. -// If no page is mapped, the function silently succeeds. -// -// Return 0 on success, < 0 on error. Errors are: -// -E_BAD_ENV if environment envid doesn't currently exist, -// or the caller doesn't have permission to change envid. -// -E_INVAL if va >= UTOP, or va is not page-aligned. -static int -sys_page_unmap(envid_t envid, void *va) -{ - // Hint: This function is a wrapper around page_remove(). - - // LAB 4: Your code here. - panic("sys_page_unmap not implemented"); -} - -// Try to send 'value' to the target env 'envid'. -// If srcva < UTOP, then also send page currently mapped at 'srcva', -// so that receiver gets a duplicate mapping of the same page. -// -// The send fails with a return value of -E_IPC_NOT_RECV if the -// target is not blocked, waiting for an IPC. -// -// The send also can fail for the other reasons listed below. -// -// Otherwise, the send succeeds, and the target's ipc fields are -// updated as follows: -// env_ipc_recving is set to 0 to block future sends; -// env_ipc_from is set to the sending envid; -// env_ipc_value is set to the 'value' parameter; -// env_ipc_perm is set to 'perm' if a page was transferred, 0 otherwise. -// The target environment is marked runnable again, returning 0 -// from the paused sys_ipc_recv system call. (Hint: does the -// sys_ipc_recv function ever actually return?) -// -// If the sender wants to send a page but the receiver isn't asking for one, -// then no page mapping is transferred, but no error occurs. -// The ipc only happens when no errors occur. -// -// Returns 0 on success, < 0 on error. -// Errors are: -// -E_BAD_ENV if environment envid doesn't currently exist. -// (No need to check permissions.) -// -E_IPC_NOT_RECV if envid is not currently blocked in sys_ipc_recv, -// or another environment managed to send first. -// -E_INVAL if srcva < UTOP but srcva is not page-aligned. -// -E_INVAL if srcva < UTOP and perm is inappropriate -// (see sys_page_alloc). -// -E_INVAL if srcva < UTOP but srcva is not mapped in the caller's -// address space. -// -E_INVAL if (perm & PTE_W), but srcva is read-only in the -// current environment's address space. -// -E_NO_MEM if there's not enough memory to map srcva in envid's -// address space. -static int -sys_ipc_try_send(envid_t envid, uint32_t value, void *srcva, unsigned perm) -{ - // LAB 4: Your code here. - panic("sys_ipc_try_send not implemented"); -} - -// Block until a value is ready. Record that you want to receive -// using the env_ipc_recving and env_ipc_dstva fields of struct Env, -// mark yourself not runnable, and then give up the CPU. -// -// If 'dstva' is < UTOP, then you are willing to receive a page of data. -// 'dstva' is the virtual address at which the sent page should be mapped. -// -// This function only returns on error, but the system call will eventually -// return 0 on success. -// Return < 0 on error. Errors are: -// -E_INVAL if dstva < UTOP but dstva is not page-aligned. -static int -sys_ipc_recv(void *dstva) -{ - // LAB 4: Your code here. - panic("sys_ipc_recv not implemented"); - return 0; -} - -// Dispatches to the correct kernel function, passing the arguments. -int32_t -syscall(uint32_t syscallno, uint32_t a1, uint32_t a2, uint32_t a3, uint32_t a4, uint32_t a5) -{ - // Call the function corresponding to the 'syscallno' parameter. - // Return any appropriate return value. - // LAB 3: Your code here. - - - // panic("syscall not implemented"); - - int ret = 0; - switch (syscallno) { - case SYS_cputs: - sys_cputs((const char*)a1, a2); - break; - case SYS_cgetc: - ret = sys_cgetc(); - - break; - case SYS_getenvid: - ret = sys_getenvid(); - break; - case SYS_env_destroy: - sys_env_destroy(a1); - break; - case NSYSCALLS: - return -E_INVAL; - - default: - return -E_INVAL; - } - - return ret; -} - diff --git a/lab/LAB4.si4project/Backup/syscall(5045).h b/lab/LAB4.si4project/Backup/syscall(5045).h deleted file mode 100644 index 71b3512..0000000 --- a/lab/LAB4.si4project/Backup/syscall(5045).h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef JOS_INC_SYSCALL_H -#define JOS_INC_SYSCALL_H - -/* system call numbers */ -enum { - SYS_cputs = 0, - SYS_cgetc, - SYS_getenvid, - SYS_env_destroy, - SYS_page_alloc, - SYS_page_map, - SYS_page_unmap, - SYS_exofork, - SYS_env_set_status, - SYS_env_set_pgfault_upcall, - SYS_yield, - SYS_ipc_try_send, - SYS_ipc_recv, - NSYSCALLS -}; - -#endif /* !JOS_INC_SYSCALL_H */ diff --git a/lab/LAB4.si4project/Backup/trapentry(2731).S b/lab/LAB4.si4project/Backup/trapentry(2731).S deleted file mode 100644 index 7487913..0000000 --- a/lab/LAB4.si4project/Backup/trapentry(2731).S +++ /dev/null @@ -1,100 +0,0 @@ -/* See COPYRIGHT for copyright information. */ - -#include -#include -#include - -#include - - -################################################################### -# exceptions/interrupts -################################################################### - -/* TRAPHANDLER defines a globally-visible function for handling a trap. - * It pushes a trap number onto the stack, then jumps to _alltraps. - * Use TRAPHANDLER for traps where the CPU automatically pushes an error code. - * - * You shouldn't call a TRAPHANDLER function from C, but you may - * need to _declare_ one in C (for instance, to get a function pointer - * during IDT setup). You can declare the function with - * void NAME(); - * where NAME is the argument passed to TRAPHANDLER. - */ -#define TRAPHANDLER(name, num) \ - .globl name; /* define global symbol for 'name' */ \ - .type name, @function; /* symbol type is function */ \ - .align 2; /* align function definition */ \ - name: /* function starts here */ \ - pushl $(num); \ - jmp _alltraps - -/* Use TRAPHANDLER_NOEC for traps where the CPU doesn't push an error code. - * It pushes a 0 in place of the error code, so the trap frame has the same - * format in either case. - - * tarp handler no error code - */ - -#define TRAPHANDLER_NOEC(name, num) \ - .globl name; \ - .type name, @function; \ - .align 2; \ - name: \ - pushl $0; \ - pushl $(num); \ - jmp _alltraps - -.text - -/* - * 我们知道哪些trap是有错误代码的? https://wiki.osdev.org/Exceptions - * Lab 3: Your code here for generating entry points for the different traps. - */ -TRAPHANDLER_NOEC(divide_handler, T_DIVIDE); -TRAPHANDLER_NOEC(debug_handler, T_DEBUG); -TRAPHANDLER_NOEC(nmi_handler, T_NMI); -TRAPHANDLER_NOEC(brkpt_handler, T_BRKPT); -TRAPHANDLER_NOEC(oflow_handler, T_OFLOW); -TRAPHANDLER_NOEC(bound_handler, T_BOUND); -TRAPHANDLER_NOEC(illop_handler, T_ILLOP); -TRAPHANDLER_NOEC(device_handler, T_DEVICE); -TRAPHANDLER(dblflt_handler, T_DBLFLT); -TRAPHANDLER(tss_handler, T_TSS); -TRAPHANDLER(segnp_handler, T_SEGNP); -TRAPHANDLER(stack_handler, T_STACK); -TRAPHANDLER(gpflt_handler, T_GPFLT); -TRAPHANDLER(pgflt_handler, T_PGFLT); -TRAPHANDLER_NOEC(fperr_handler, T_FPERR); -TRAPHANDLER(align_handler, T_ALIGN); -TRAPHANDLER_NOEC(mchk_handler, T_MCHK); -TRAPHANDLER_NOEC(simderr_handler, T_SIMDERR); -TRAPHANDLER_NOEC(syscall_handler, T_SYSCALL); - -/* -Your _alltraps should: - 1. push values to make the stack look like a struct Trapframe - 2. load GD_KD into %ds and %es - 3. pushl %esp to pass a pointer to the Trapframe as an argument to trap() - 4. call trap (can trap ever return?) -*/ - -/* - * Lab 3: Your code here for _alltraps - *what is padding ? 填充 pushl %ds;小端模式,是指数据的高字节保存在内存的高地址中 - */ -.globl _alltraps -_alltraps: - - pushl %ds; - pushl %es; - pushal; - - movw $GD_KD, %ax; - movw %ax, %ds; - movw %ax, %es; - - /*push esp, trap 能自己读esp, 我有点觉得是赋值*/ - pushl %esp; - call trap - \ No newline at end of file diff --git a/lab/LAB4.si4project/Backup/trapentry(7165).S b/lab/LAB4.si4project/Backup/trapentry(7165).S deleted file mode 100644 index 7487913..0000000 --- a/lab/LAB4.si4project/Backup/trapentry(7165).S +++ /dev/null @@ -1,100 +0,0 @@ -/* See COPYRIGHT for copyright information. */ - -#include -#include -#include - -#include - - -################################################################### -# exceptions/interrupts -################################################################### - -/* TRAPHANDLER defines a globally-visible function for handling a trap. - * It pushes a trap number onto the stack, then jumps to _alltraps. - * Use TRAPHANDLER for traps where the CPU automatically pushes an error code. - * - * You shouldn't call a TRAPHANDLER function from C, but you may - * need to _declare_ one in C (for instance, to get a function pointer - * during IDT setup). You can declare the function with - * void NAME(); - * where NAME is the argument passed to TRAPHANDLER. - */ -#define TRAPHANDLER(name, num) \ - .globl name; /* define global symbol for 'name' */ \ - .type name, @function; /* symbol type is function */ \ - .align 2; /* align function definition */ \ - name: /* function starts here */ \ - pushl $(num); \ - jmp _alltraps - -/* Use TRAPHANDLER_NOEC for traps where the CPU doesn't push an error code. - * It pushes a 0 in place of the error code, so the trap frame has the same - * format in either case. - - * tarp handler no error code - */ - -#define TRAPHANDLER_NOEC(name, num) \ - .globl name; \ - .type name, @function; \ - .align 2; \ - name: \ - pushl $0; \ - pushl $(num); \ - jmp _alltraps - -.text - -/* - * 我们知道哪些trap是有错误代码的? https://wiki.osdev.org/Exceptions - * Lab 3: Your code here for generating entry points for the different traps. - */ -TRAPHANDLER_NOEC(divide_handler, T_DIVIDE); -TRAPHANDLER_NOEC(debug_handler, T_DEBUG); -TRAPHANDLER_NOEC(nmi_handler, T_NMI); -TRAPHANDLER_NOEC(brkpt_handler, T_BRKPT); -TRAPHANDLER_NOEC(oflow_handler, T_OFLOW); -TRAPHANDLER_NOEC(bound_handler, T_BOUND); -TRAPHANDLER_NOEC(illop_handler, T_ILLOP); -TRAPHANDLER_NOEC(device_handler, T_DEVICE); -TRAPHANDLER(dblflt_handler, T_DBLFLT); -TRAPHANDLER(tss_handler, T_TSS); -TRAPHANDLER(segnp_handler, T_SEGNP); -TRAPHANDLER(stack_handler, T_STACK); -TRAPHANDLER(gpflt_handler, T_GPFLT); -TRAPHANDLER(pgflt_handler, T_PGFLT); -TRAPHANDLER_NOEC(fperr_handler, T_FPERR); -TRAPHANDLER(align_handler, T_ALIGN); -TRAPHANDLER_NOEC(mchk_handler, T_MCHK); -TRAPHANDLER_NOEC(simderr_handler, T_SIMDERR); -TRAPHANDLER_NOEC(syscall_handler, T_SYSCALL); - -/* -Your _alltraps should: - 1. push values to make the stack look like a struct Trapframe - 2. load GD_KD into %ds and %es - 3. pushl %esp to pass a pointer to the Trapframe as an argument to trap() - 4. call trap (can trap ever return?) -*/ - -/* - * Lab 3: Your code here for _alltraps - *what is padding ? 填充 pushl %ds;小端模式,是指数据的高字节保存在内存的高地址中 - */ -.globl _alltraps -_alltraps: - - pushl %ds; - pushl %es; - pushal; - - movw $GD_KD, %ax; - movw %ax, %ds; - movw %ax, %es; - - /*push esp, trap 能自己读esp, 我有点觉得是赋值*/ - pushl %esp; - call trap - \ No newline at end of file diff --git a/lab/LAB4.si4project/LAB4.SearchResults b/lab/LAB4.si4project/LAB4.SearchResults deleted file mode 100644 index d4dfec4..0000000 --- a/lab/LAB4.si4project/LAB4.SearchResults +++ /dev/null @@ -1,4 +0,0 @@ ----- sched_halt Matches (3 in 1 files) ---- -sched.c (kern) line 8 : void sched_halt(void); -sched_yield in sched.c (kern) : sched_halt(); -sched.c (kern) line 56 : sched_halt(void) diff --git a/lab/LAB4.si4project/LAB4.sip_sym b/lab/LAB4.si4project/LAB4.sip_sym deleted file mode 100644 index 7d59ad9faa902f7fb5cb6ea2f2e37421d320fc92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 224252 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 diff --git a/lab/LAB4.si4project/LAB4.sip_xab b/lab/LAB4.si4project/LAB4.sip_xab deleted file mode 100644 index c0212123830c016f15fa27d4479deb0d5fa600df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49152 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 IrlGz49|gBNW&i*H diff --git a/lab/LAB4.si4project/LAB4.sip_xm b/lab/LAB4.si4project/LAB4.sip_xm deleted file mode 100644 index 2b014e02cabeaa8c66cd26d4e70ad43adcc1edc4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 368 zcmWl|hc-e1007V@J2H|;DGebbGb@oTSy7_@|Br6>oI4T(!Id?yy)ov#i^i>c>!?dE zJ7&Uh?>z9{2OoX%*%uqW+VstLKRoo)VZUs-;*k?3O}T2?jFTQa5Vq=+Yi7-PV#T}# vzx{FDqHQ-k^~`fO-Lm75zjiIT?X(eR{PV(Dcf54YT|@r6=e%X3F4(gV3-}OQ diff --git a/lab/LAB4.si4project/LAB4.sip_xsb b/lab/LAB4.si4project/LAB4.sip_xsb deleted file mode 100644 index def0f3475b73ecf3bd8596c2e9425c1dc1c2c8b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28672 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 KTjlW2?fyTW98vQC diff --git a/lab/LAB4.si4project/cache/parse/boot_main.c.sisc b/lab/LAB4.si4project/cache/parse/boot_main.c.sisc deleted file mode 100644 index b53887613d7da1c6c2383776d797afadc9874c5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7018 zcmeI0Pi)jh6vwyQ7M2PY1xXdumAa-#z(&N>P#RRIH4;P$N&Ocn-7UMZ|3Zs2_^+ag zm=Hxp<)Dd)Ar@mI7ZWbV7|=BFf(HyS9ys=7JT}p|en0b@w>!J7Ep4bV#+ST(GjC?z zynpj%e%rVp7TX<*Rjm=m;<4C{x>)SeS8<0wiGrtpxwIJG=?iC;Kr3Va!+*sC#QtXC zav5||_>r*2W0fc{{$6YCxsg4!w2v$J=Y{9QJNx^V1U!Shhn*ikn5Y($u8k?R99-vV zg(&-2F4@{}ji2hs8VR^Vi_)Gsto8;i{!#R(#>T||S#+N$vP)oTk;mBeC4;4U=JU%6 zqv*CQ*Vol^D4j_*t8ve8)BW*m%Rce3$M$j5??HR2J;W}+^m}A_y0yn1&1V1G{VGTO z9<*`1j_%(=K3@zCauV&^9^T#l=u_L;)giD+A&}(93#L7lV2m}$=Zo7Sc)_;qt!-O( zp)WCC?dL&n6XFZnj4knfk=U^lDZ*cXN%|hlbfyP0T|-JxXK1~j3cXv1VA>{FO$TGg zQ#I&ikk2o)rgP}RNbms^W+dfD9}zW~cX?h&8s13N*nxnL!qru)+!Xdp?Cg~++ zp)gK-%nd~ui{M*?+dYr1Ov#3K%001A*~NK`G9XlVk$By1Bo^xtMJ`4h@Vt&X2^n_T z8(S%Ds}znpIpD;Vm4)-cX$NL9*5)yneXcgLUn&Bln!iKz4^c75M26dcoO9E#h7AXd?341geJ>Zc&hh}I}OI0UZi;{l2e%($nMa3 zVx%{+tDjJOO0pVndYR0O0O=LEXZ5QUv5i6`Hw!TZOO2;nzF_#c(!3~xbEF&F0}_{Z z_a97d8pt+FTamSEaRVwo95&?Lp&(&P=?Oswpi*#Tvz$RX8)Zxp7mjc_6#4 zWngb_rg!kjI<@0*Y$~&<6acj@Hj_|yqjzF!B7%v%Qd*b!-d)LKPt0Jez2Re88Cd+xpLhFUZ$au*> zI=$~8sjY0eb`#N<(ueb!%La{or^n{{$s_c3=CEmz|qQMx-={19` z+#@T5@Myue%&_@k3YM=6b!t%7wY^;WrtXkVpD63tgEuut9Aw>m9W%QMy0r&jG;Avf z%iW;=32mJ66AY(>#ttjHCSLLPv#c8tW@T)4#gsEa%0@uoMn_>@4;gk5lV zs>68&88E;g!=q}0=C3impc~fTL{j`)!Bm~Ae&y@S``1eDY~{>GkD2DqG(Icc$Q5!3 zuzaFICzLA}H?MTLVsrRH3Fp+QdNgj0=A;lHXp4yZ-RRq!J=F`=eJ0Z7I~;&#)%aD% YiGJ)0B@^&?2?ObfxV3hb@mXx}7pocX00000 diff --git a/lab/LAB4.si4project/cache/parse/gradelib.py.sisc b/lab/LAB4.si4project/cache/parse/gradelib.py.sisc deleted file mode 100644 index 0d64c45ba5b898955da9439fce0e632020babe31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57765 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 W7eK!m2ZBpIa-VMu$L9r1z5ffKNT)CW diff --git a/lab/LAB4.si4project/cache/parse/inc_assert.h.sisc b/lab/LAB4.si4project/cache/parse/inc_assert.h.sisc deleted file mode 100644 index 4d487768d6ef9577aedb21a6f834e7a59317d120..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4137 zcmeH~yKhuS6vl^T?JSO+HE$9?xe_UighC1m3S@~OEGGpC7?cPJZ5FSsT`5{3dt(+P z9_h9K;sgp8X_0`66p>s834u{k2C5X4{0Z)EzTezAyLYb*HbJ^ zq}REV&gJ)tUCz0^MdzOWmh=2f62ATS(|&ZfAKo26u6O^_e6*ns&@|;)=9}vn^S9fdN)Ysv17etd((Tu zQZGIfz#%REOR^j$o(N>Oct*O0@6GC=;w9poz|RNO&lsOE0r#tIoIPft%wHBN`E8zmtxgR_jYu%oxK$uRlB z9vE8bIyt2^_xwudXkYB6&svyj>khbfHvClgmC^A6`}vu3wF;or22eTxxlL?_&_zjO zXyn|To7s-YfR0zoQ-ERtusuNzNg61+$gQK>JiYjF6`*WRmuJThy6tC@@{p#AxFFp( ze-0Ojh^r>uiIhj`uG^m9kga2k9h`?&Di3Q2)&jE(A|cDF%CalbB!6F77BZL(cIfIz zaWQ<_EZEkSk>cPVonUd=oL`Gzt+GhSs{Pu*;&@kO2{u&L4&FiO=6X8^kFMj|UCV=K z{c2L?{f&wI*9Q-fpQT&#O2icJKiBC;;ij+y+G#r4C;8`YJ%Pz1UJI zTH#)_UR+c!&i)>HG4(a3v~Rl?En6mKvYo-#?!|1d^9pP}6YP*~nfs4A!4f3<)+$)5 zEE2M6zj3flRrX-GWq8+A#CMc{=MRScLzyogryR0_$2fhR@f&)REA^Q6lTaQTyylU5 zrF7{c{Z3Qbhd5?;LcTc7Y*|MY>5E44@vul2q;siANvnMT-c}D=q=>>}+JFkK{F znqD0#O|c~~u^W*AW1G*1$);-D-1Y$_O;OIKQ@WQ9U$QpmZDJ2HyFB{ll diff --git a/lab/LAB4.si4project/cache/parse/inc_env.h.sisc b/lab/LAB4.si4project/cache/parse/inc_env.h.sisc deleted file mode 100644 index 0ecbd520e46fd07ca1e4a664139324673a1c4ee5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6541 zcmeI0O>9(E6vrQ>KnL1_2tuPKgQ5uXQLB>r5yRKemSCx+Adu=fv{RVaPAAiuNr)k7 zB0+;OAyF45F3JKEcWjJC6T^aq8xl4c7vRUjF_A%)EIW20x+;!b#4Y zbI-l^f6hJk+@{z?))d*yN~wzC&LYD3O-?$GU$ z0rtK_yi5yvSNwtaZZYjSg5u$GIfi%AQ|68+OPI=(o4NiCG)j z^4ZmxO3Nc~p*}Hwtd=%N-zlCWu16>3_u@Rqc}D|^lJ5(!N0Wb+JfuL+NdH5;LVc?= zcCE%;5YWp3*fq6xXzb@2dq_6?m~T%msoGl9Cx{wiX=ZTUHd8%}wq1MnCj0ugClmeq zlf8%4Cr6F~@yL?_Iy#Y>-- z^km=#{nlP=Cw!b`wO;b6oScjah$7H_d*sQ$3Hq&_sI&qi*p3<}6X}WZ)UnB8L7s-x zOLDxr38Zc!&jU6&t(2qGS>(DFqraR5>1-)8nk?+oNYZg{FvF9<3ef9qbuiQuuFD9Y zSV7C~Jw09h+UFP4z~y~@pDzPoZ1sSxBADX3B-ST@n+=qS_Xi!G3_#K8Bj+&Gd86F! zZM@%{4XQv7kOES;O3Xx)VZBxMFwti;D+N^f&cQ@tzeX$+KOkm;$*>*;=3p4PuI;wJ zXEA_x9PI1wIjA9v#1D!=Ga1$!BUgJ#ZY#)x`}+I0ZrhzWfI+-k44}!dUY)K1qUv6; zbA;v-;EN1gfxo0Scf&(s@JxpFD0XdCQ0P8^y#(z3Jwr9Yb9u!5G0wx1fK!TbF(kc; zqISdJUrS{tv&nR}IB}e7aj|%v7)+C4JsN!VA|x@@7Qwd>{LsOHL~`HW#2_b}u-1xM z@}pvq8ELla8Frl0Zn-_&o^`?#+0u|M!vW2|OT0nM_=Ff-ZXUCRtFF`ev7LS>w>j40 zxsn;U*?E0Y3cFqp%ANWCH1D{#yfmma1tp6gZ* z9De6{FGX~<=ie^J9%=Gd%O?b@y(HW9&}yk>5ZJ`%Cyz`O`Zue!PnC5-BSw>9U1zf9 zyw|R_(V675Q>nJc16pBk@S*pL(sV)xDks~e8&_g@WRE#(=(cL+n#Y0e7$x9QI3)bo z9zQ0%OI#V~jjsOWm9BGY{-g;X3Vg2OI3>MT`irtJkn@WgvqrWK$u9^-l$PX3(cCDe zCXg$|VH@#>iP&dOmA$&IbEHbi!Wb_oo483#I+1*%0c*A>thy>R>jhQGCC4+_SBaOr zbczW8Nv;4kTVvo^S3oJ58Kr307E%o?@*Xj;W@`)^DH`IoUtHvbvD4rwXY;af+B#%gz&+14)4Z zZMG;h5Jq)l&KI*reWDJCgM+d;E62CftHNUo^&m`j%3>lWhz2^2A#Eefr!3eEbw z@^y$Y7qf>=a z3UvCniAfZa2bAc|_K(m@sqtc(uUihzb}<`_wA`32ie8)k>Q@-KX|>#pm{cnpQ%_pEC{h2wIPfety-yuH( z>~uyyY|@UWhoA2o+Pty5t9y7nbvQXSS_isqXgzIxg|D^hQ{dJD6H=nxg4RmZ_Vs3@l1Q9kkkuA}@L!k_iBEFrt$!}Sw zx}k34GOhfbnNTjMmkna-wnJR6PU&w%tJTSC26H)sX?1HgNgEDI)!Fj8{yzKe2ObuW zru94RG&TDY{eR`Z;x{@b+WwDXZu0U;ZXwGvk7ZmrocZ*ImqYSQANdWBxqhM?Yx%?< jWBa&MV<25G-v2Vt*YhKy4zNS^(BdGDLA1sf-nc&j-{KX} diff --git a/lab/LAB4.si4project/cache/parse/inc_error.h.sisc b/lab/LAB4.si4project/cache/parse/inc_error.h.sisc deleted file mode 100644 index ebc864de3def5d9bd1de1dec2bf9372e5b56b8ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2191 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 diff --git a/lab/LAB4.si4project/cache/parse/inc_stdarg.h.sisc b/lab/LAB4.si4project/cache/parse/inc_stdarg.h.sisc deleted file mode 100644 index a96ff79678fef5b7fedaeb720426be10e69ac078..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2442 zcmeH|J!@1!6o#*BKG%(jUu4zh3Kp@m6cHgPakVhfO(2adi%Dc5gpe$vAXteh1tW;Y zGN7G}VmgZy`2&#@{(zJzErjuX=FZ6-cN5gcLOk&9nK^U5?t9PNJ>Qii<4MwSPDlz# z^06mLHa`?RzDR@BubU-otLyLj&&KdrOB#Te&qw;V*Dh*Wa&bY%-VA#?TRT;l7YjI`9d&G$EH;kGBC_8hCHPE`XE4AwQ)#2OMY88>h-AFov6Z(um zQP!sfBTLIRagImLgaY07>$Ta&Vsk=kzYk~LD>TlU#;IZCEj=m~*_$|LbY^*aly|XN zUuah4K|{U4)9a9!b!+17C#9klA;h_yFBFz zdTwe;p&VETR7C92(TBYy|1n=I&JFG!5IfkInVXuPNn2kd?L%u{@V1=f$F^6U;ObQy zE9$*5lhR6jUAA;xE`;myR%hRZPr5G8I?Mj;Z9FX%Y12lY>q6;xB(?QoRIs6r?Jah% z7$2w~9(PnAH;;WJ=wmImRQp)soX+J$Q@c=~zl9P=c_L_iL3YbvONIT!x%{e-vSYTs z*lgu+Lwqg0&OSNDVUKuy-q6ZG&5`|v8BR( z(#B!);rukg@f?=LS9vAlkXhiGP0F^je%a3(bI5IuIn;K~In1XZYw}O#&}NV?1pJ|m zKeMH>#qtaO&dQg6EMTn=4h05oH?V12(nyu>j_{3&q+rL9ZNFu~=cXoN^`UU`h5jKc Yr(u8BhdyGTE!E!{%Y2MZ>zzJ-03R*%z5oCK diff --git a/lab/LAB4.si4project/cache/parse/inc_stdio.h.sisc b/lab/LAB4.si4project/cache/parse/inc_stdio.h.sisc deleted file mode 100644 index 0e4d5231e1afaac0ac3f780a51d0829d31ac00e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13099 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 diff --git a/lab/LAB4.si4project/cache/parse/inc_string.h.sisc b/lab/LAB4.si4project/cache/parse/inc_string.h.sisc deleted file mode 100644 index c54d79f411c10a889b7f4f84e3822e56a155cc12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19591 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 A6951J diff --git a/lab/LAB4.si4project/cache/parse/inc_syscall.h.sisc b/lab/LAB4.si4project/cache/parse/inc_syscall.h.sisc deleted file mode 100644 index 7410a2349a42117f8b831235bfe96445ac5d37ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2790 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 TI5@Y#=EV7aoJC+;;(Y8+oq_wH diff --git a/lab/LAB4.si4project/cache/parse/inc_x86.h.sisc b/lab/LAB4.si4project/cache/parse/inc_x86.h.sisc deleted file mode 100644 index cdd006c674c8072d137b08edecd3b52c8e8be2af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29351 zcmeI4e~@HXRmYpn?$Q}1*#ssyN%+x8cCb-_kZe+8RZOCR)cAuC$Wja%47=O2=`mBg zll_q$gg}0hNkV?`dqf~xrNJQr6-BL4P=RbhLxLsm@9b`OspY9UbIv>Oy>st5_j}L1?{!a~yRlT-S}Lu7skpSRRC?oerP4S4a9zTG zEeSvPt#1rtd+^XFPC}kg`hWVrk^#p4bn%D+dcXK1;xTbmyj~0~yzlZ&qgP&BM*qlg zskHf|QfcD-mv1`d&dU-Tc4#$F>EO?n1*POTIiWusLoZ21=~*aW_^hYIMAU<PMh2~Ou zN^T=LYO00e_*Pey$Ux-bq+fXLRoDFd6_;HzIey_a6We7`Kv{;kq7=NN)9T6C4nwP} zr)6ij{T9|rlhb-3N7)>ak1|*l_u^QRwi;< zUF9(8Tk>~k`<|(7*Uj#p-nH*aolsUw%2eX|R7pBbGaAK=oWA*+i>}?Vw1E?*cWr;2 z?xJhY6XWL$G53>dAZ$uIR4O&!HaukioLgO`M`>VOvwnKl-tBZ0(+k8nJzMOKzEHZ! zjvBWN54i!(t**9p^Z*^j*XAI9QqmnAlWww~>fG=UT{Cs+=m9!Pq%RZW{Cu%H`f}+e zcXZ;WqSLmH&d^Z?{Q@yQFA}?>7fLs|qs`lk!MA5LaSARj7UT5i#5iT>E)ko+H#GnD z;UUhM(&*DB`MZAi{(akDF9j^UN{rKA6uYOdmTq!S>+cvIA~MtJDox~Lzd=s-CWr!! zuMy*we7LJuNH@8w)%Oe!#WSE&R}aut=Jr)$oVrplc&fM=xvLZR4G$5Tsbg0Yugv(X z#dzHzb^_ik-DI!zdyc?sGFF>(>y#L;(_$xJr*u=6fDabE0)Vtl{xViG1g=_Dx=xJK z-C{ePk#52UHQKVuIOR?^PVc&5X7*YJ=T!0aV%+W*+wC6dCc9mH-|!IEnc4CO*{ar9BKoi0c((!@<;Lqujud)n&s zJbF4Ren5=V-x53ggVIe7zxtlBAtEz%3jchZYExBuP>j>x6}zV&mtLgBd&dgXpDESa z)5Iyu-KWGj{XMaJ`f2GV_q3^jA~I8_o^GM1XNo@~#_1o6-P1piUZnZ^i->CP>6SO> zF4oe|igEe{v7LTSdXXB+DUq30SE-YE_~m^w+jq|F-&>!QnFaX~F^<11w&O$6i?sN@ zu_2-}t*%mJbH~roUZr-;)Xtf0*Y16j&b&zcxESAmDaJQfKOr_@gQ~X_eKXVYxix%X z&-A{j;GB%SSp1Y2=YJ!1$G;}MNE4b51Zrx_NZRr3vpBAZzbVG?-;3?|Z>1M${_bM0 z3#m>W@111@J4^g+F^-=R= z&+VvRyG_bwUm=M@D3)o2shz(>XIfp&x1=~7nclgpHnp?Tvdw3u91}k~cr6Esz=kX~ z;wW@Vo6mGdgH9tGr*_q*cUHKKZ3@#9TG2Dy(xY!+p)WBCHSv;c4?lKs(qi?-d|O9% zc!op7&np~5ar3l8vk=#sQcL?^28w&YO)^kHN@TVzt$X>FKBNQ1)oHuyZ`eIuqXTiU zqk1@9ek=`komx9VJSW@a9hYpPae^f=aIavUKwX*ydZfWprm0uZRx#~TeF)l8YNmG& zn!8e>{b%pj1#?A2vH3YrIFhXRfCSKMEUHa!2C$A2879=w6OETUkI9?gr zaJDRE&N8TxVKvJLi2ESjQKd)pQ_raT$Y~twvSOWYq-eZK0sW`AtXL;LcUDr|K%=LF z(Ma5JJ828)6tPY_Np8Zm-KO3{Tq9=cL!O3gQNfla=d5=}WC1x$L!2^bBVv$)G;(aK zM966qhhZlG9Iy-^&lcM$wo2r5 z@y?=CCq5K~9lQ2%Z#?XCAGmx|{Y&YvZ`HY)xcs5ZH{En7g*dM!$QGO=v(FGGMvqFm z(4}#sZ&@S6i?ObJ@bXOyhgw&cdBuP5kvvvste>$O*2HSCAR*hj$C~smxt{(et4lH1 zQ4Qi~p>{1Q*!#bf2a6l->u0d8T?A$jBO%+m2kRjTAXe?d5`%bBv6cgfSw-1b)fMa0 zH|HxU`wvz$*Dk3YYgeAy&>k0xT(>&aJI;Sv% zcMJg?CZxn?L_0}tBzwW}A+8YvMaVU0vvk_F724;_|2a>);O!rZ@Eb(K#d)>+(0f|0Y zO3yzpUrJw&QH=CbYFi~LGxb}G6(J7~$1P8#=gPozL7prI8MbYRoXXrnZ3VH@Q)ylE zY@)D~E@;@E4t0jl(+0VeI$M@RWPPo0B&TtmDN|>{mfcI~sBCkMd?}^2F@lC8$sWW~ zdV$&jl9p04y*nfe$cdLyKFlN_q?c0LDiLzZzrF@I;()4%^ipbD>~yi0(|9Sx0o4cT zrPQ|AX;X02B^kB7jOehG&TEL9;XUA1-B}Ya$o7n%O7-#XAeU0&@~C(zwQa2sFRm_C zV*O(4Q|W|kPd*wR)S{2F6X5iDDJ3q01qs>KJ=PAeE(W`(z?Q;WCJ*c~!9I}(iyQ9i zXRuyM3Ctk&QfgcGV0$m6ONwhH?2%U04&0EfG%}jKQDbI|h+Vs+cC1}_YS*@uJ|ur{ zz^TZ4C4b$)l5^G-Gu_E3uA^;>Q(U($(Jjmjr0bS#m8fnl-d3yzd1!6RC=U2670D-L zpu)CFE#Pg%B&R z`)lI5V!i*oi_#a_iq(KlWS?rxR<#=sq6bsvY+$>`%7U8`{q#o+U?|=;%qh0HutoB= zVQxV=_t9S$LfgEaqajrdr^Uv!(+hK5bTm{ z=U$KpiyM;E&tSc6ATWa%3E9>?SPw}6afc`Hx&S*KVx@k-4aIu@hJ4$=gDM;OF>ybh zz#o#^V%>U;Y}74FshO^rM>sYeaoxH?cd)=Ay=}0q5>+a4;I2QolfjZI#Gr z^Zh-XcG@;fYIy2JD9Uz9n0I{ha**2wXUkHtCcz$$ZNsRx4b|`%#%CKf@wj50JwKgx z#A-k%vQISzD8_^6!IU{0*zVIVTdR`gJNrC^S`io32?abK0`|UPMRTuyDBm{#Q_$tP zN5^8k>oB1WRwQZ1i8|VS17E>m{#i=R^rN1CTjhiVAWs$(jBS-@s?2|&$5e^;4LD%l zA>|}3xH3vC~GIQz!oL`-ZYGz4RBYA5M+R_HfuY@Wtmr z?i+~9qk@EN+mhxsHR^8+y|z~?o%RiitNhj0*9~RC{?b>bbDCJ4v3@S4-Zv1J!GeTr z>mF;;yX1QM+i~AeRj}hBF9{>HUy zL2)gAIgQn|t0CL$V|ndjit|7{=-PF)+N5?_O3ie|J;Jf670?|98RRe<-z+8pNY^gg zDp8rKzqd!3iE9@QfFV*&5@gt>BHU}_N$>8SY3GbI~!%aR+c zE9Mc7O-Ed}cIpmx=SV;E*j9;3%>4a5N=#h0aKNq<2^2wvZI#GrQ!AcMWz_ZpsN*w_ zpg0kRXRB_liB~i{%il}qT~+^VHOOZkXUmdktgjV{#c5Yptc_4l{miqhSgZe%$7(<) zvd_;v9z;vW%3yboHCwClXC6NIW}xD^H~O1;X%+^TIl%l|QW73MF`s*)-Ko zDx)^1EbT?uOe%}z!qPM^*fgF=VZ*-;l6feReS(dbCI@CoyVkqICa<52Ub3w&LS|X; zsE1&GM;Gz`EM?i2hH}V|VR%rGxn6An8B3{|zGleqf`Op-i20lVIV@(>ZL36(nP_{H z#FZ(L#b?bH@iM1$Efnz5z!u63{}Vb$yf`XL`fmN0@iMBwCc;+6cp2A(`TTQoygXM8 zQf3B)mjh}GyjV)j^rObhoSc9cr14@~CBjSf-D8Ck(+e+ErEoI5qVU#tLMfd8r?kHC z@4kb?i=(nsz)93Zf6RDUQsG<-c=?1J{z%-Qm=5Q7;r~Ct%%JdcquK&5mQpi)&3NH` z0HgH|F^{fDiX|wptrFp-eoqlEURlE)ckk3pvBJy?F-wo9&kx?nEMWWR6fyiS_aG1h zTI0AJpUhdT-4WAaBg2>B>3qDAX)3t!uyZqN#$|i*q#QLPx(DP83N^Q?El^`AHPeq8 zHMhwL8yO@elkD17iBMD4KNjm$Ms2SLJD{enX|^1uo>4QQB(8)y!$0c}5;cy?l3=VK z7u1whM4Mrn7&R*jc=_ZUHK(aj5E@t_O@fpi^1$5x5Z*w9a3$dpkhG}1{fa&yZ{;!5G=&!m!A{@3vGN526w z$U1gVeRHfx=%5(=xYV&Z1w0pC{&@OT74Vbq&Zpn$YK&KkMh!{pXB~S`{y~kU)J*S= znjUp*QH~gGq^F;48zSWBbPIJtPO*+PmB?yg`i&})&zzc1KNbVtVmpyEay%1RoPG=_ ziL|6W>)jLS`H((cv`oKG%L(v9divQ`iIP}<@7kwdod?>&He!jbMRGxT+MItSwW_tHT zcA0*ECMP5j=_J~=#w4C!OyZmpHX5G&9+rQ8a%WO#T)I0)BS?I)xL-*uqVW;6MG`Hg zW_tG|9tMq9$pL{sCMJeef#oBUB(amEXa1s zZFw$VB>Oqye&wD_bL0g%q)6LP|n4$>by+E$6zgIkO1LB~8&6c`q_ zI8HSTc?26ZaTA<|uQ%`mXXGAAWS>4)admWPmb7bKIV1xa#cO-VpLFQ-WVr%x{wf8I zmxKu=;ox04aF~FAr(eJ+PQs_u7QnHTn(5tvbC^l!z5LhZh|xy6n%UNU5;FBtLOWq< z`)qLrt|)2a0Xa@&Sv#`o?Rg?Ax)&Z)BEPA&NTj9IOh2YXeoKx>B+`krZEcC%JBy!q z3YL|~`KMAuUZHHiO*|@F>3dgZzf*RW?qTXWk<9HF{yI#Ej|WV&;bG)jlh4QUzvTQO z8D6hZUX}c~yLRrzDbeGM`HVbAY^T^Nk<-OqPN%lb&Ek}{aQ2EI&zH1QY?a9A#O*zL zI<-A@Dhwq~FA4H8Njt?>iJUg{;TGpiZJ(b{?MR&h5_7+Eh>1$!2PI zTAQ1ttT5{TAO>AX&j#Cyv%v_|r9y0egm!{*ichK-_iqZ4&zVblmq1B47#wK_VgR$0gv&2ejP}wcY_Yl!S?Y&jSVx z1U;w`enkip2@x>*aS3={!A*X>71Apj;Zc9Ct`XL>Vd@MlUMms+4RkWB&kPFv$rITPw&RJK`BOIH07Oo4o?{kZsjp zzgEmVj}tknq?JQ4yjm5HQeT&?`tsAV-!nKz_iPqBkt8V&K!*u2olLGL93M#{c^k(s z{6S9W52TY&OU_web3%D6^PcaAa>U0bNH3?hRigb#LqFB5OEPNPpYWwYHaI{A2R|O< z%OnZLwo2r*K3{ZNcxK);bwHoS;+7=-NK7Y?ex+esaqvU_bR|hIxZN|gcmGV=e;ije z*3H7&P}k&|^M@l!0pktPoo*A!*KrwLIns&5^&WE%gC*yzA64a`BQfBY6!2VOyHl2J z@*l&eK?<0TbKjr>Hf)fPVRKXgZvw`HKYdYnuwQ4h z&Sccd#>vCkePgfl{~LT9OAN_A&I<&DasUOr9$aRL5e^kF#_so@NCJQDthI40&t3l_QMg8`8{qNFiyjzG@*l+6^ z=-*P&@)w^FpVRq`6VL1>)?8>yDw4m?3;LOn?Si2HOk~>}^q-1s*9CnxviafjoXE!a zxuAPfk^Fri=)WD=*rr0ipNiz~fuO%VvRxna8zS3{LBA!k-5T`y$aZniFN{(BKiAZ&_5a3J`?mmiEK{= veL1o{67;V`wr>Xg>Bz>G8~Tq_B!52}^e;v>J}`lvOhxjS-6gcqV3Ype&vA-$ diff --git a/lab/LAB4.si4project/cache/parse/kern_console.c.sisc b/lab/LAB4.si4project/cache/parse/kern_console.c.sisc deleted file mode 100644 index e08be4312147809b69d73d4592b6853656d02023..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23232 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 KzT_q6@c#pb4WwKE diff --git a/lab/LAB4.si4project/cache/parse/kern_console.h.sisc b/lab/LAB4.si4project/cache/parse/kern_console.h.sisc deleted file mode 100644 index f4df42fcb5f0f28431048e2eb91c6d7fca50c517..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3681 zcmeHJJ8x7+6rL;w%z9ygKzO9N;vpqfQcxiA5XM@AiQ^?+J46U&G2UzT3TGGHT_cb} zOi4i$3Ir(`%zSg+ z%g1Ys88fEmLoAasW@x=JkMHMX{RPf-_wUCA>hAu2Z$0@c^OoL}2r&0Mu(rUVTUb9} zZN}nv4;Ja!H-p6|+jr(E|BQOMw9c5`*}>vZkNSJ5Q?i~;{@CA(BZi;4htd*y*YkJ4 z`Ht3--c8@}M}-vuQ1>8vVb}v)+=2BQbTRlptBoncwlg?=2l76wr;ulH_6#2T1#1EF z7trx-eOLI#L`R1J(?MyQtnFLco z3mVOKusdo@PS4cBAZqVA2Q(sTx`cbnC^I76mQklty(_QcY=aHEj#j73)=3-bA}J;^BZ=6hHqaz&=xZS(vx(&$KOcoZl+qr+X>i^$ad`wME5 zdtr6hs6|s1+@y2(2^HGuInk)gLQOJAyVV|tx<*g~USoDN9COzOi~DECrP*0RHLQ8) z&i;A0muHWESI9GeJWq4@3k(MMj%Gr~^rfuwalJc~? zva=dmXX`5TX}7Nn@T>lHXJRiyck_?LSGE${>vbeHJ(uVwNp&mx`T~i42FK>Ebvj#z z?#Qo+vvibg`Z}CV&q_KeFjOhZ`Ryg1 x+Iv|sx2&RRFDKjFRoHUqefdq$s^_RspLk|FI&;3{&ZrMM6`434E$TmY&jAK7SUUg! diff --git a/lab/LAB4.si4project/cache/parse/kern_cpu.h.sisc b/lab/LAB4.si4project/cache/parse/kern_cpu.h.sisc deleted file mode 100644 index bb59bbb91b202e6376327e5c5aaea636d6555f5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6385 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 WtXyhaczfKNo-?# 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 diff --git a/lab/LAB4.si4project/cache/parse/kern_kclock.h.sisc b/lab/LAB4.si4project/cache/parse/kern_kclock.h.sisc deleted file mode 100644 index a4a04b4e90303eae5bdfd0a67247ca645c841f40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4158 zcmeHK-)me&6dsebuIVP*YOOI=8QLOdb@Q7M!@oe1ul{;7OWoBQ*C!}P)&KNg$pG*EaqxZw zv(TuYkV>Xbrp$V|&5B0sJEPY4A^& zzlQy^D>jYX+t)D|m`G6EpD?7ymUwpGioPoae&1qTfo=`3)} zwMn~_`Zo+qk)9Sxeh_p5eW>1Sbv6DiYnaq;_(9uW(@lTb^MmJfuj>c;&7iXyEU$NU zx7q2fdAi-%(1%;?b89`%*R731HJ}kuF3d>h8OLd{Lmg2V_A^7A-K9#STAzCrLzaoD z4UrC(x-?i`flwIs(?QtD#kt0*m#g{3My;N&*3Ux4yzO!OjdbuFr@<3OC=4fLXriC! z!V z;n)NB8TmbPyj&qVZ9nGFjdbW7{}puWJFf)Y(h%hlFw2=^=8WD+c{e}Kjwkan;QRWy znPbOiXJ#7#9x@*i*QdcG${8@xIA&>ZogIX9?NW9;S?N;6_C_Zo^tXf7hVSDDH^^~0 zN_grh`v91L_^yS*a7u>eAx*Vb+Md6{c9iUZ?6E9wIV>ej1JtD%qE2W>j~y^nC|9u+ zml}0y$uUv*nul8upKPXf`E9SY!v4taeh^H0(h7q{T^g#}V#JRAXiznC%Yv75EPXPc zE1o}Nn!%UQj{>)e&+F}r&*x}j`=jhQi;O|h9ezq75}#7eNpgoA(~iuCeM;GxNN2#b z882w+NuoPue+gJ6{w6<%#x=7>+nHXw+gfe=-f2we5J9w)hatrnb>Qgq)`wa7eqe=0 zBorIeXyC8%Y&?F`hx`Wum*U zdK?UR3c+RGPX;^--Gv+dfTgbft$^ivDM@nW_Z9FF0PJ@xfe@655N2k{Qp!_k?_WJ- z|EC1CqY<|pNm=-t<%sc%K9j_ER_`@j%y)}Vm@Z4-xyEXY@41BvzI@W|k$9x?(|$To F_a|HZl#BoX diff --git a/lab/LAB4.si4project/cache/parse/kern_kdebug.h.sisc b/lab/LAB4.si4project/cache/parse/kern_kdebug.h.sisc deleted file mode 100644 index ea89564817115d04ae35c0be2fd4d54bdf033cc7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3159 zcmeH}&r4KM6vuCqmD=berPvS1MTV^^im;S0NsEGhSe6wvWb;NJ=xZ!*vg9!?+1})ycxhzX zwP8-9@3Qx$!*TGMELbQK*$q`61(GKz$sA$WR0&Z_(}~mP@+bQSPUTM??du&pmOoA= zs<%ob8)sll#zyH<5{Au{5bK-$;KtZg!E5W*VE5$hl6NaJdiateM5&b?(QJ^p2lH7E z<#HX5vxF)VhS|y(oNS+8DtN;}EnF9rp#*!Ig!3@Au1Hpa{0EJ8wj*mNR0l0xERwM-JN z@q&V11To3>*JAeZdu6t_Yx`Sit9_b*! zJ8Q<3;Js|4>?bJ<8I+P2T&@HQyOKV;WVs_r))j`;A1t-h>iY6Uf6N1zRuQI2SP}qi zzBI5x75Odjm>+mUT0$l|3?P>42H1RQU}7d=s1H&s;H-}-4)VeEaqo)ebROnYG}d@v zzU8s2YyrD5fj#C0lnyLqQv|j}N_pl>!!M@W?@Pa4C`^D2At-BL9b@v?kyg4K)?bMCBpXQ65cBC$%oX{Q1PQ~s$j2Y@)=lYFN|O`$$@Gbb z^xs71oiZJ-Y9%M06&*|aswW1)PVl!*%zH|XWW`RnMyuFmX~*DNK~8a+ZyGxnxIi~&4Sj<4wl#O PJ|MhRNSbo^c)xxE52rFE diff --git a/lab/LAB4.si4project/cache/parse/kern_lapic.c.sisc b/lab/LAB4.si4project/cache/parse/kern_lapic.c.sisc deleted file mode 100644 index e3d2e33e964cbd39d922f49861d1afe3b1637ff2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10218 zcmeI1+izS~6~<2-Cz%coPH9SA!et+ zPTU)5l&ZKiZ3Dd!q`p?9g3`Pc{0Hz5BpwPBNqh{N~WXRnzvGbiI% zkVr)=Y0X+^?|r_#Zu@fV&b2{M3WC;c;-Do6KG+-tSKeuH{GKHI#`{;=XnW&#Z>~qK z4*pO7D-j^~_lh^lp;yGOi#x@6ajO`*_)1^DT8?&lxk{3Gtd{Iuq#sfv-cy~vzb*)#lNGOjJP7WWep+pRl#$!S zFMcctwyp_+Kdb-2JA&Xz=?@6}5uxnSWIq?b>k&igzn4Ly;y-EJ#di6=J_z=SKM?<2 z_}${~$=6VQ&uXr}q=TSKbNp3&NNu|`&pEa27H^RqPsxV!Z9(ui@qY1-Wy2NCe@1*w z`u8RV=4MA` zG|4e_V7B7x$Vop5deS7c8HM3praEKqs+nYRa$a+g7z|d99XaXeKwo~2W{Ej5H&&kZ zo?x+CLni$!v?a|#B8{4Rve32HdxFKPHb+kSIna~lu=Mf5jZ5qY0Cqu2j;CMDmkjK#>+z^dwMQBn%Bh+s7i%b;VM5p>!lq zwg{h2ZikCBT=XPdTPX}}$X0K5AU9M5mI!u;F&AmD=t-~)F=~MAE*7)0SN(*L!w6V+ zDEZK$FAqyfBO>If-fRR+B@o6>i2+8Mz3556j5BJegn{f(b^ug@xJk@tq@kiGq1sYp zXanlOp6+6a*b>7}i$O&iDtZ!Xt*vznY_QayEfgtRV#o!J;Yfo;PlBa#j2g=J;F03P zM1c5xRtzZ8K+%&xo360F+;FxRRO0tJG32B#1N5YITTOgIT(xfdbD$Exj2O!B<5AI* zP_f^rAzP)~p=@DL-GuM+Vj_SvRP>|>xUy!PsNuvK-pMK;cwZ0$i8M&`BuG~zj1z@n zH5hIcBwWDC@tpc29_`B6@KRP-d&rV+>%3WM%QBz{}OBn)W@Lr+Rr zb-O06bu0Ezck!FqUREpt+$x5g^v0qm8CzRgt?oU3R*PFpDgi)=-!?Jiqz6S$0=0F> z_=atu)DwXczArOEN(zOM)R^y{cIg53PpPHW}aU|$*|Nd!73&az?EiNwqq%F0FJbhQnEb>k6MJY_!@0qug;LLVG=zdU=ZC%}iFIs3FZeb@r6|s|rSFNghv9mS zcW1R*!|S8$otPV$og0}U(v;TQ{*8AeK_@nsd>g{zu~m_du%b>P-4aWnk92va?4qMV zwu3Ca+}A#F`bfJ&6WkebhyFaYSlE;XJ@sN+n&KzgSj3-#XpjFXLywLOlLzL3A;ua- zEw#U#i@)?uY-8XPTf8+XwW4bQvR_mPYEAd zW8wuR=)=7SQuxGfV?~BFBuFALK{k$l=DFDfF+T6#v3QxJ&vYdweqX7vq2ZIWJT+JE z>#+U?dHtzcUoXr5Z**0C#b&epcKB+UMMC(B{-64KRelY7Us(X;^&j}U^MG4mEIf_} z0?M4X%2!)(do>4SGOo+ljjq%GEW6<96Pr@OcKon5v0ZAL*6nFisul@X*j>_@D!M<6%oU_%?M!U5=+tCrPI>A+l zAVXHkXQgv=n55726+1krmvQNIMgzKqJD8)RSf&< z7RRt+cuk9gm$~d1hZ(w~^^kVbusu2-^)5_=5VHEL8 zVlMwk0t=|Msoh;K)YL#B|A+Gg=&CaNElB6ZT)dF{6_Rn*R*y)uj2bQtr)E!nSDjeJ zc7wH~lXsZM+Vo*tv2yWzTe|8j<HHe%`~bTXlAo{2W#_Ce>W2q~^=Bx?u2o-MkL3uA>c?um$&~;~2|4HycOB z=lwh8no0UhR}5Elw%(_A2^nm*NOiVhAN(87t&-4HT~03)I|$K7oy?^qKbrL=jsGaO z-HfldbIgA;md)(GVIOtRnt*J5a5-4i*Y$__O|JHB3`azK%w?^Qr6bXpM*$EmM8f^< u@cN!un|)Y49c#0%=$TlX?VGGgBfD4r+8QLe#6WLF!u@CGtk-|!CF0+Wf298a diff --git a/lab/LAB4.si4project/cache/parse/kern_monitor.c.sisc b/lab/LAB4.si4project/cache/parse/kern_monitor.c.sisc deleted file mode 100644 index c65b70b0a914650d6347a53e3d107b37e6e622c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10831 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 diff --git a/lab/LAB4.si4project/cache/parse/kern_monitor.h.sisc b/lab/LAB4.si4project/cache/parse/kern_monitor.h.sisc deleted file mode 100644 index 504848e1db5b4b6eb8c5218ff80ab8412ecfcea2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6180 zcmeI0&u>&!6vv;Xz)-;QODJgcS*+F_{(w|Lf(x3~ACw<0RuBv2 zaU#ZGL}cNXq}>=dCjA3kbm79pU|6^yuDWE|h5Gz{-g{@}&a_P1#dKjj>6vrix%YnW zJ?EbLoi{zO!Se<^uk~4}*W!8Idpz&XPc4!DE{op&G#sML|bK%j&FP0^B)hj)BaP3e?%R#-}JWo{YO*yOu|I+Gq0u|l9Na4Q)xxA zIkEJ!j@6RQb>}2QBXdv#uSrMs^qas63E=Z)L^fH1HhmA%@c;?K{z?zy`?En% z3jEH&d||@ZU)tB2{)KE%%#Qi_Y&w$-4*OFR*}xwUO6P<0#R-2RUz!@r_{GwszrRo% z9h=Hz{la9Y4l~+~B^lc(B?+|GOSdM^GG5;oU7SHh!f<1y&CWJnEENlrrC>;Hiov47 zz9a>gHhthS2Pt3cY9k9KVOXsb#-xNhlFyEfzpV#06_r+EUy%hEUp;W@tFAU%MBS>e zEtp8~ZvmLh6^gmiIXO6L9Ze+Iqf)?W*MoO|-qnWBBn*iu7QnXx{$6_Y!eo#h&F18( zW-CTzEa-^kCVq-PYqzdzmk9p7g$)9D^P*?%qQY+am)U70K$3(*1 z?R6_1f8(^go1_*!M}mNYZ}}B$MqC5yv&BpycSbWQFS}4X)kZ+Ww-hSYJWc=A=jvFfB zA?8#59*aHkXKnr{<5*aC(_oMu&xta#L5yRqRepvdML3yvIdIJcR>3- z>x%BT+>xxH%ct5 z%%|vg#h&=n<c*r%liiqCgI^Pesc zTH!CiUY25yNDUO9?|{yIxoZBJ)1jA>FRekrai?$T(0}ZS?=-K+BnxTgoi_d=L^~8L zV!p;@zWAU?lgnT8igosCe5H-QI&{sCJy(qt6y`NER^u!&0pM7B`;@TK;6!{I#Gmzg74CmDi!)OUj&I;A_cWgk^_174`t`jUU1l-JE&kElzfz>b;A#mD_gMAQxJ*Amke3U3mSk07waG*qpl=Yv9dma0d z``nVaD>fdq>d%&FJ@$dvo_N=r)6bieZ#^2V$DZipI=N#mYs~$V@ff>m77uTzCd^0h F{R^wKyKVpg diff --git a/lab/LAB4.si4project/cache/parse/kern_mpconfig.c.sisc b/lab/LAB4.si4project/cache/parse/kern_mpconfig.c.sisc deleted file mode 100644 index 65c70d5c2773692dd8f0d0511ad083d208a58442..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15692 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 XKCAGVZt;C|V0E||Pk+D(E&}=m_6Z35 diff --git a/lab/LAB4.si4project/cache/parse/kern_picirq.h.sisc b/lab/LAB4.si4project/cache/parse/kern_picirq.h.sisc deleted file mode 100644 index b6c1a4cdc82a1eca5204785af42b7d3d6c0e4ffa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3515 zcmeHJ&2LOm6u+vi8rAwXJ|Zuegq4rb)JG&kMhx}UX{93ZjLxgRsF`{*^|26k8Vivq zv0y1d*hs7_Y)JS6h=q-vrKN@B`u*;^XXd^3HDzHVPI~6td+xcv^Ks9;ubW$y>QkzD zBUm*lb+cWmkFS~xe}W`G{_?S%y2o#y&ZnHM{?orw0iOK|@De060e%Qx2`&9>jMF%dO^IlN)Mx0@u;I94Fz%<3;ydVnOHf;0rz3 z6S=dPF_*=5)kurXF{2Z&)}-EwoNK*Q)JDHlj&C;xn`&1_y=v3&o-?pvjJ%*EBdr&X zlf1<1BJqXwUL5msrMnA0P63BmE&~JF$Tg6}5#4r-qZF@EBTv?-!w)XH7mC&MZui#h zJF@IWJ|@fUeo842$2|7=c8%iOtxU??B&(a!i=+Oa>zDl+FF1QHZ4D_iV8+d{082fd z+|HyLr^yqTbio;S)vGl^_khCglWdtCiHOuuHgd-V6n#>(me|7Tr~RRF$s6Lej=v;K zg*A{jSn{U>>XIB$Cp0ycxT9Q8FH9M#geTXKDAdjDL1GG1Y4OS>f2fF^onR^Cmiw(=%6d1!x&M=R+o~K>4>? zhLwyaCJ91aPZkxFi$is+ZKu54V}7}|rOU0cV!ZfdIaUmfGdd&_l`Qpok9&0G^{QAk zaTa#DF0tcxN%l-<-zYKTVXP#Ho6q3`#N_maF^LWHiQ0UI&HG$vBe}>^$_H7zNFAu- K)gZ}pO5HF1Lqj3} diff --git a/lab/LAB4.si4project/cache/parse/kern_pmap.c.sisc b/lab/LAB4.si4project/cache/parse/kern_pmap.c.sisc deleted file mode 100644 index 9948953ca08ffa42348ef30cb396293f5f95c6b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51924 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 KzRU+e?*9S7&HsV` diff --git a/lab/LAB4.si4project/cache/parse/kern_pmap.h.sisc b/lab/LAB4.si4project/cache/parse/kern_pmap.h.sisc deleted file mode 100644 index eaa9109107d3ff1e2ef9f821377edc42a8349f99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21284 zcmeI4U2I&}amUxxhgURX+O?dlBgeTCMR?ODwIbU!V=J}jOWSelI5E6&?L__zn-3rbYG9oPtsWYHKoit$)0Tky5EMwkhd%hB4}463q9F3o z?f-Z0nZ1X1S9hs4>xZHPkLKLD=gv9*nK^UL-d*~@&P-+`liB_eai%AesSRf`Km9>Z z$p0z{zxi)J?L+tGkKcM9a$DyA>Hmrci2Y6C-2(KQ_}k(EabCP#46VI(yuWtCp)Bop z`ZAfH_h&Lo(k*}K?ofvwYB(DH&XFw7av9#xKT55T_B(l%B;!~v*|YvLu4^d%T?X?q z@{S(7MRQmXKdw7Jye5-*SX`3+7w&<()b}OvZ8H9?9huC(XqIbw_C#+c^MZ8mivLvY zpYO_Ko|XR7S_24;>jEE4(2c{?bq(h0@ul&An@*TW$YsG)^@2 z*gsL8o2$+R`$j60^MU>=1{yFpU!I#OPX(27u~eSBC%7@?axl5DZ$j3v2tp{7Zf3OcO8U%{YmTsUli5C`#%8auq)e8$f zm3zl^S0T*E zhoM(Q0P6cfwYo6BP#izMP@Vm(6yyP2Zg%okNi&WvX5^9cJa07OE1a=&CN%pwH34$H z7_&$wh*{I6o7Eb0gxOv)cWm}tX>txfaMQ9XlrBqXTTU_*RR2m}Z#+jTRKgF#M~)sn zjUQA}GJC{$d9N4?w27G!lY!Qs>+20yLUbvsJJmn39Qt8wwpc2KlO+`fUAIuW$Vd z@J5YBB4|fWo;-E`*dxbIpBhyk(&>Qfd%GlNS?;EjDS4(nH5vpbB2ZoPRB@&{Ggh9t zF#Ytyy5>R4C*%!c?9(PFc+05r<-T5E8Z{bmAhDfQO&Xh=nOtBkldN~So=968v|9{6 z(bpS$fZ)ZU#PBYbMravN|CV@23?V-%X3De~l__%#)t~I^#eGICo(?S+r>3goOd9l` zaD9;jVocGtNt@~QXOgDdO?qOkTqcIVzgr9;kBhNHn^-bwBve-}`vGl

qdi8QV9C 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 ksIEqQSb_FMBK&v6wan+a diff --git a/lab/LAB4.si4project/cache/parse/kern_printf.c.sisc b/lab/LAB4.si4project/cache/parse/kern_printf.c.sisc deleted file mode 100644 index fda30fe5d8a39a42e931d9ce60adef4012093a36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4214 zcmeHKO-NKx6uwQCX4*)ZO&Bqi1GOrsMMOkx#GPgd?#gDg87LDS#da+Ute^-rT@Vj%rWUz~4jj&V=iYnH`OeRMGY8fibK01? zePEL?W@plvr6&o??;*(#KQ1*<_wd!DX3DkZKm98iVC}bqTLEYWd=HG4Fpc0kFzM-Z zXL5d~51nDm5%kDA@H};=Qrs3&;Hl^Si3Te9szn^JRPW^)NcvGP>1_0j-)hBY9C(YT zA+J1$_v_$uc&9Ddv9hJ4 zfIBT@n}mjm?8soNN1VJeZ`mdX~RLFJXffZn#37(RPq$BCl$`*7B)A8D?ehyS3oA1Fk z+UM~tUaI)gr6VT0uEk9%JI>D9>~N9cl+|XYGnw}{5c?qqZh)@k&9Mds#1>Uxv{vZ` zg4&Yy@r8cmy;g0wpID=*Qp&idXVhc|-$ms$kvESO4Iamu0jcJp8*8=AEhLZOgYbaehG9$}BUAaQz`)253k)up4&+qoK z15!4rOGj+(y%V3i(j?GMVql~Pf~ngKW;!W#J4gq;yGyYaryz)hSz(l?W;>IqX?M-? zy32tN&vhn`KlAO4?*aoOGnT*A-nw3ueo43tOH#eP8J#1duFK{JMw$C)e^1^;f6qFw z{a7Q|Dd^1e5?H0|Z-QlSNBcrO19jLx)xqk^<9e=sV&Ke$!dQ_pNAWHL+sd57t9hP> zZgR0S&zxh@YR|KNKS(kLJp+3y-$lPW&;0$tgOuCA%&~Oo$e>K!jL)8`{_{My!v^nH z%8g*!l&<>l{c@i9J>oo5a(HP{y6PrlVOE&uWz6%6|6FOFSD<_F(zQ5$j;-cAEB%sy z8kVGbi&vQE4jg8E$)!}d1Tu-_jAtEB0sO+%@_J*-uSmx#tyf#q{@>Z7y;d@2;voqe qn`05*-KpMojD6^*<5d8q9g|Bk} diff --git a/lab/LAB4.si4project/cache/parse/kern_sched.c.sisc b/lab/LAB4.si4project/cache/parse/kern_sched.c.sisc deleted file mode 100644 index d0f5a44360ea52c2a9380de8f03266b66f76538a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5531 zcmeI0&u>&!6vwAS2irc;G86*TA0s~tNEiw7BV{U4P&Sg$ppqC<+Rk7HN;~Nc1mmXv zfn(yzXk-(O>_ z^J`6EdSdEaE}uFmX4hD$l%FlfCr3_dk*w8CIg_Co_;zL_u7mHds`G@us>#fS{d;BO zl;q4|2XHjBVYXXCaef5LRSFd~1oW({+c=Y-o!(U{7N)0WCeFyxm}V(7s{ltsOYrTY zF|Szf`?O8~tRHB$l%GB?BjcJ#2(6Bs8|Mr?Ua34bTOQR#R>+NO zOd&UhbV!r{$gs(D_UaB-e@nPF)wBcOZ@I@#&CI3>)8#@YJzO|=?8vc~hYLG)9Mf7n zM_o>@ky`JNq^AOv}kFux@H2eZdf|8ogU@lg%OBD#{FKvS@{}zqHo;&I+k2rB_eC7Oz*Ql*t^4RLHVbRTgXE zB`b68lFdpsH{9!1NReW4 z-|m}7odY`306WA1JTD}>wg*`hKGc90*FE#1_S)K)no;%`zvR~z2XOp=5J#aTnWC9Y za#grJ-1)4GY9S$JgoOLF5DREES@hDX>4Q>Jb?|-tw;=@dB;9k^^cM2Xit1;CIQpCr z69izgsENw0RulE&I9L04xiT4^T4`{NFeiO1I;0~v^z72VSxpaa0yU2FSIteHx|;M3 zWr8N>vzllD_OxE7L%SOdMaWUGePnk;c(;aP4>4J6)z6b&?7IP%3v?o1%p+`iEVhe^ zE&FwIY*oopBaPTtONrXW*0XEj*eL5^;bLRUa;fZGdfhh3#z2VVmAp)Z6yCMqF-lvKAv=Unyuj?kFKeyf95U+HMPri97Q2;)&Tkv&~;PiEd|KzqT!DXgN-4x TEu^g59P&dE+4hj%8Ik=1+yfh$ diff --git a/lab/LAB4.si4project/cache/parse/kern_sched.h.sisc b/lab/LAB4.si4project/cache/parse/kern_sched.h.sisc deleted file mode 100644 index fd9e7744d3c7ff7c4779c2e0f428c026cc7faa80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1887 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 diff --git a/lab/LAB4.si4project/cache/parse/kern_spinlock.h.sisc b/lab/LAB4.si4project/cache/parse/kern_spinlock.h.sisc deleted file mode 100644 index 3fbd34d7bf42af3fd4a295dcf5020f84a3599295..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5818 zcmeI0OKg-?6vsbH!J!=(9!1MTGdwhPp>&}MiH0C(EoyiO)%r+AY^UjjIy68H#tp_- zbY&t6Ml^0nYJy9XZcH??s5>{9#<#Z9kkzFnk1`KGu&)slT1f0Iu2;z#}dB7=Ih{)A+wcqpClhrkaCs7Ih@)qYd*ck#n&e=U7Y^H>jt zyp$oP!wI?6La`mrt;xo)cg>Ug57qYW+fzGqVDG-C_wRYC*8hssS}k*jY52+#w2>>t z3z2i$cPTM{U86ZPHZfeUKBC6 zGsZe*_2m2I4$C|rI7iF^fxV(7CRmPF8^u_P+#&|ebmSnW)|eD5KUzQDtdG?!DrEjH zG11v91{cro78hyyR571mV{`cJ1hf_wAS#S*6@z`h7;JRg#6=o?tC&lo5(?2rB?LP~ zAJJGjf&dwcWxhwkSX|@IS+;`Z>l-7@;rd8*?ul?jA7hEFX1QV|bjadLW`%~7U5?;D z_|erEVWHL?`-}zvvGa)?3ju^~@kR1tWs#-z=5S*KR5sjpG1MD`M?)7-V`GCZohH-g zL#4O~r4?C8x60)C0l%{k3+!)kw{(NwZSDYjHr=EYF_XAeurWTF)%BFG7x0+}Eq1G1 z4AYY5kXrOm5Z+E~g|#ES$JSr1eoV1F&gB~v8P55n1O1J?SVcqO0QgnES zoa;_cAr{5qe(8RT90tG~xLFRzRcP5oLO4wO+79P?0ejnrMvojP195gspY&C(ejc(* z`Tr@N)I;q zYAB<5&gx>(l+N~5N@)!3SnXF_zf6mUKO1gk(U@B%@x|IVR5V40C*|BsdXLz#IwRfb zZ+DiM%Oy|!*=cdJc8Q%byxQ3z$PHp_FkMycm|E|V!m-MOuIOyHvO80_Lk4m7Qtm7j zgTssM5UTxKHLPu3X9J@yLuNbp~ MNRV9Ufgt?vKfaD?a{vGU diff --git a/lab/LAB4.si4project/cache/parse/kern_syscall.c.sisc b/lab/LAB4.si4project/cache/parse/kern_syscall.c.sisc deleted file mode 100644 index eaaf1cd7a02417751f79f6cedca79092a320ed29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23722 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 AkN^Mx diff --git a/lab/LAB4.si4project/cache/parse/kern_syscall.h.sisc b/lab/LAB4.si4project/cache/parse/kern_syscall.h.sisc deleted file mode 100644 index 184330c8d139ed99c35804476922dd28f4896855..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3963 zcmeH}PiS0K6vm&^){b%7u_e$1U0kYAU0K^&1T`2+hs1`oBrQx49fr({GdP`;nGDp8 zq9{bS*6KpgO`ruAZiH@X{ZE$NRI(`OGCQ|!4w*ew8k0c0~4;0RBuigc{d01`|cReI)e}OQpU^vazD*;9!lM4!(SL zzINvH+-zg=Uu-ScHQOf((B#&rJn0Gm-_97>ntt1$6K9+cE1t2*7D(o&_FbT z-X@tb<}&^{vqRbu3pj@i`vnc2?!DPtsJGjN=7fsH7lpk#_BAQ^jM05k%VXpH(uh5X z+$xB@7%#-xn?NsWyeD@1-*zTz^Z9e$B#KnRiQpe^Ep{5=BKMhlL$W11-U=}kBH_d4 zBUu(&5`zO6FPuG)i*$NsPF`4A^B6Bs@NFN#PQ=;m2|JC};=E3ByR;?paBMspzO7J` zE#5?ty-89j9@UX(w$ndVr&n*soqk65aakPK)ah4#KUXHi#)qX5NN|pH=yc}UPSVs1 z>n7~CtKP2Dztmnn8*>V{D*c1NlB$#fWNO%EhClWcDH6=18geEe8#`J6WM z{NPba*vF(63!h6v1Z(e>>?O1Ue`6Q(+|}t{Ix9b3u#O~Fe`N=l_*@3F`BuJJtVm;= zLj4&axo#ju)7z7>mL@)zfh@k4PcsjB3`hzN$jQW>k~K(tE(5vp&URTI2a;+7ayGGC zutDN;8OZC(GR=$2OlMqRp?(5LtGQP+2KrU0LE>{+$hS))>5FUy`7B4XrC2Na){s7@(!cZ5M3H>>mSJH=DwMv=mZhKOAE#)kY*+f=U62|rD@80qK*oA!s&gQl zOWddB*N9u}CpDfYJSK80Il@!&eepv|*b*NWVS0k}v51X#gm6{lHj3zy|ScE4P3zAsG#ydiIUF52{lD?w8 zKAI_M`j@gE7Ge7WVi5>4-Vwr2eo`qHzuEl4W4eUjzDr*iqLlTp2;27=i$Iw1zaspE z4vr>jA0thDkJ6_o{|ljzM8@>u#r5&z4|E}M4{W^YzTX9pMJ&W((jII2r)XvFQIAJF b)@YgRo^|cH^J2WmzW$c)e(g2kJc92pEvB-S diff --git a/lab/LAB4.si4project/cache/parse/kern_trap.c.sisc b/lab/LAB4.si4project/cache/parse/kern_trap.c.sisc deleted file mode 100644 index 3c3fc3290a04e664baa99f07acdb8efc9aa60782..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21438 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 diff --git a/lab/LAB4.si4project/cache/parse/kern_trap.h.sisc b/lab/LAB4.si4project/cache/parse/kern_trap.h.sisc deleted file mode 100644 index 74bd5a4a0c92c5f4d2087b83094bd89c92c74cde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5324 zcmeHKO>7%g5MI(GIIfG+HcA3TVjKRPa)3jTB2fZ8)TDrDNK+aRurc0syscwfYa8`O zL9HlUK%x{59NL@^cK#Ve(xAWec zc{B69A3ri^81shFKM6Ma3}bb#VchttPw~%?xpir@&Jev+329Lka4H{D6#44<`U6gP+pJZ_;ip zjN2gTN3bMwqjQ3xN<4+doEiW=!HdvbgMl#^P2l@8^jY}+Bbe|jj81~jfy)@v1iy?v z`h-f6l30M~7zo1Zpy*nBKOOdQZu;qC$E|0M%spq#&mEq%W-dX;7_l5hN(T1XX5SsU zYt#R}e>Bw7{!z#CDxNtpUvz6G{&FT9nx`GF?3B!+ld~P~F|$!~JhSRmmb~0@&8!tG zjgoDaD|Pc;x129EY{zu#6FFF;MJbh%!OGZX2D-0|SkOc}BVzjy8V}dKT(z$_y@(FN zWe7}CGH}B7W=^OR@_n2;0ny3c4kydY4fvRao~cZM#{zjbB<+aqQM9Af>4TOvv9-gs z>&GEk_FZ6X110Z)@C4knc+( zb?t_jX3H(R^;a;2RYPtSQSJlNGTU*>E9X+l_7b@#Wu~?~99p)jj+d`CPQnPC%SNSq z089sLivxa>GH<7n3{}YY)j6R)nUQ4GbIWzhbCzn{gY4X+I<-82Hce3%H{EllVx0ta0uEZHZfg&+ChcLsDcf#= z8I~IfRgu5NB|$tzSE#aCQQE8{C9$@u%qo$7TRY z2E-JqjfATX&5o;%-z2Fd+ng&E-Ri32_~(N;0(g<^llH+j45{u|gYQd3+He2s71xdj z+r+&-^L=NqXAta@U$=v0badE@VC7^I$)KdY?O>VxXl2(C?9>lB*e}q>m&xzYy+1IX zl*)2%a(8bPtW*+1Rh8v?tI85lB&n`!C6Vlt_O=72Q3g!|`vZADB!d&3*?tBXt@A17 zC!`IK;gKDOOakz@(9~Ic5mUK8#-TgAHm#m~ybT2RO5URV!AwR2lK>fww2?tR4?^mE z&Z%vy`dGchY@=43L%?y^6hF+SuLc3HVBnwN7IasJ+OT07d35&*HgZdegzNB5-8O8F zVKRfJu?GV=3CZk=&Wyt5-8gKd-uk5Js~0wa=A&$S;X4hQmtaW~rowXezHFZBuKV;Auf;e51j` zM_ez#BhiV(a>I!K9q=>}UF%yNv4Cd*x+`zA!NXgM)GP3eXm{bem!G2h+u)%AzTGJI zgIRjfnGx_b@#_d(A#M0|6z;<~c&4xq$Ajlwc=AB^TX0?RdEQI#NOU3@lC%$Yy{>My zUG57k(26`mXqA}|=3AL8Pr?OU*sJgD?8qs$bI=`1%=jnN7uJ(jxIQx9_UrIJdvc%h eFEwWsqGJ|t$6kM2kCAoD?*cx)rD_s0b$G?%MVk-DYtX&eUrpfD0A5Qeh} zPng-EFzc;5im@s=I@$pgg!nxow04P2N-e)GjI=$FR`0O@KSAx@=0>e~yQA59r`885 zHphOLI;Uaf`KaTZ3fBigfa6?a&HIH<@5joMO0l~g?Z+?a_JmFC$BU^_o_N8_LY_MS zMY138>3MJltO@Ykv3uk8-MTXQzhZ!H#hHo;tPFzYo1Yt<<2=Fses#r53U?&inI3E*b0rVxL0>6}Jq)5nL$~v|E#xwNwtDT& zGm74L)jP-8U|hXy3pF1X(laPqLp>(@t8M8l=_VB4Ib$j(A%mMzi4}+ z)4r#f?Nf{h4r}Lgur^t)RR2T&r1IsH{zFKf=;%(`rmI|gHzFGg$g68$lUOi;=x_bv B%wPZj diff --git a/lab/LAB4.si4project/cache/parse/lib_exit.c.sisc b/lab/LAB4.si4project/cache/parse/lib_exit.c.sisc deleted file mode 100644 index 6bf2a4c73cf3c97329d9eefb5215b80b71f1f05f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1302 zcmeHFJxc>Y5FO*GXE;3}3W`k%3$09HDG{5)R!GEB^a6Jfv{A9q#4fELg@tX3`~V9( zK@0yt#KIq9cfPlGbGL$EFAlt&*_nB>yR%ap7iow%D}a0`~yMK*|6{!N~hX;P<*spPNTuZbZcG1pd?YrfU+iCCMZj zq<(HS&YBdR9h5NV=w7)t#}Kk5%=8{Kxdg@NnZn2Yw22gpT{B54d4OkE;=_aXN!Y5c z!&q&{`=zM94L|RzcbkCCx?_O$1ZFPojmLK7k|fMZ*<790S$xa_c2n=Vf&bb`o7zN- z58S#8{MvKfW$yBoSJtLc|I}2tjc6V>@6H~UEO&Q#_Xo~GKb@Wzx7JsOB9{AD5qWKY?#h7Z^%$djZ MRvT%K-p?N8FZ^(8EdT%j diff --git a/lab/LAB4.si4project/cache/parse/lib_fork.c.sisc b/lab/LAB4.si4project/cache/parse/lib_fork.c.sisc deleted file mode 100644 index b16393ebebc7f9afdeb823975eab5b7b86c0b879..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7469 zcmeI0U2I&%6~}KJhZr1;fq*FC!wLa8FRd%lClbp|iegccY=WJngw{6MwY{xbmW}N` z@MRua(L8{WP=yczClEeb8eD}UkQ~VmeX!J*l~8yA(MX7@QeSu@LMpfa-^`rd@%6^U z7LgF@k0450d2U-x`JuiMqyk2~TxLFL%yj^W8zuJQ;c|tjIMhP%0-Qd0NwW2dh z1NA<0wpD4B@JQd&>#A*<=BOpeo7?<4mPM!N^q1+Km84La!Q{xhu>PM*PSPHv^??JJKA4^51XgS$?=Lk#Y(#9-Vk-YGURtc3%O zaDDiR$@=_6xjZyd*rzsrJ`w<4mIU{Q;!4oP;?2+JGO5_CSl#Z1fZII$aOF4q)xgN( zPMsvLO9IM5CxR{(ouAFM(r=Wexaz9{&~-;arI*r}l8?yp>(#dNFMjUKVK(|+$wm~T zV?|tbIaS!XlfLS{(!fdKl&Qq-S!Y$}zB8@Z0^=1`2VR`ndUQm;5$j+*#8@M*S^WE! z9$ypa*OL1s`$IR|!&;V3Ch4}eQfwp7MyykB`zZ44wrBF;Vm_w_`RMX-Q;@evvJg3n zuEUprT1m2?0Jui@NmFyngRY$zAI4C$Dj^pnBsmYJ>9nboRYOYCjG;sMd<8>MUoB?G zkT;0|HQn-{8AA(|${x)nyRL~OI|ZicvY7N4rD^>M^feW-9fU37%Y&qV8E3jIBH=gk z+3ue}TvsSf7W2%Gvvf)sIe*$`>0$Nd#naMN`xe{*Vh0KF!WyzvqG6WCtFw+p$ucy~ zATVM&s0Zd)qL^fiwUv=zJ-1s-=JL&DN(y#bf$} z+N;^D1%hTfxmnUs(TQsnI=VlLicOxtX)2ejK6mMnc}S8DNYgE!`2cyMwYEH702A|j zBMCN`rpsd1QP}+Ylf$eO#&MmRxJOKaA#W6eX}T;Xb!3#L8P_L=M%BlDlRv<4U^9q3 zGo20rEO*p$Up-e*q$#JYC(PVb9Pa3xm@JPUE|-3J2bYP1TOWH&nx>{E&Q^fPQ`Wj) z%vyxWbn#kmYAwbYEje2YV@C^g5{oGzA*b~=J-2t|Z&MaxzQwCc1)9wEph^yjIj7pC z>)GYcDZ7|352sdhPVLmZpNXx|)m%apEo(5=iUAzIl zrr!1b{zBvMw@3cY-&6OO`NU_n{^F;RU>Xt$X#RGnjgLsk+ROV}%T;$wv`mza7Dq}2 z{8_ZYIXO2Q9Hx%}RW?0WcbL$Tq2_RG{0q(XQyGI}B2W;UheOQcxe>+5JEP=n|JTZs z7u+~`zmOm8@A%E6&-tbe&PAJPVQS>t4bdCtLcUonF4niId`sS4xo`Lt`_`kkX;1L& zQ3V>FlD{vUKV7@#+C_-{qcD+;?2NC2tYQ21O}=p;K&MC!1?Wrhezm#sZW0Jr;8W_d z;(dg{B9n1j$-L2ZhM(BZC0}Quc8kNSzgq?j`q zX^}MD@~Euu37j<*5IHb@D<;p7*v2^1Wf2Lf(UMDQ5kzcbHoJ%1AT~sFD?y_TRxs^U2JVV=h3$s^!DvtMLn}Se-N{4(_*k$&vY?%?$hdFZ_?LpN4c~;w`))T?#}+cyASnky{lZ>mfNMvzylgU$vrP-0pw;ePSNJ8Fb@0Z zKj$)kFkGb(o>=Uvf$$H*z(o1T(AXF~@v)K9vC$RY=k#$T4ocU4uRrejLx4TQaprMs z*fF5TMTCtpS%7VPT*C1<+ObVjI+CX|Hcj(d3U>@_A~tO9rLqZMVw+~P{(P{BAf6D< zDo!&WpLX%bCX$52Fq_nDc)T*kh;>#Hr%{b(&M`4K&x)DPfn>Tk85cgCbNi)kM;E%7 z=5;ac?*4I?zntc_-l1G%LL7tkzv_c6voAff(kWN4fyB2QKwgSm0XMd3O6w24*MrJk zDahY0**Wv`dj8T$4kK4{AHA6TGR_Pd!1^F%D0`6nmqY=@l9&3kA2 zGze$sm4t)47i#Z#93>f$m&)0ku(9p97%~~Rvd0s_U|JdmlNnGUbx@mp-t@?{STU`4|f0n diff --git a/lab/LAB4.si4project/cache/parse/lib_ipc.c.sisc b/lab/LAB4.si4project/cache/parse/lib_ipc.c.sisc deleted file mode 100644 index fe1ff75542e47d1d611aea639be8eb3de0ce3b5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6523 zcmeI0O>9(E6vrP0p>)8sLP04XBe4|>NG*P#fGI*FCIVH8*0`8TX9{CVJGQ0bZk8^) zaKXYwH^h%^lq>SvRs_ zQNFLc_i#3s-lEQi-u(WmgD>vW4D@0fv_=iR_-cuokzqJms7sj)9){JzD5FHosm>R= zGXuHqVH6{1QG;GqLorG>su|%R=*Ypk6yrt}6%Xe6vTtbyi(ZXqD!P&4`Qp1`8O)Sz z>a9ze2a$*20wJD9H!^Sm7Wd@)vYA}pFhb&8)QX5JEzYfbav^dQBHzhJ1+onpA_Z7) z=nDTdrh;EwdY#b3rP9+b-K{GwM`?6&&>4xLtRcPN7S55smzB~`)vQG9W1%60c-PjH zCdHl3n6u#t^>gCpJPW^Zrdt1LmksgiiTcCPIg&x_n3wMx+SrmAdRu+4V9!G_PmALt zlj*x!pAr3ZpggUT#76IfJp=uR2vBBlsDB{0M32swZFPFC0(*=Y01XFX^74cr{6pW zBGOc>V#?V(#@PqUAsnm=xZ)bdAxlfrjSG>^sc8h)pj0uBOnu8;W!anp$`?dk07FMk~X)DhZMz;P*Qi^^wW z{=B%UM3(kdzFTf)nM*0)ly02ztQyMUR=Q0lxt}7Mkp}9 zr(bVPk0tLpW$2|iLm4AO+ZDCZQw=F>;wr$CG>o9$TK&{#P`I2#jX6HC9>U{W)qD>l z_sPFYT7~VymJJITM`uwR@AM~o{qjBijBM6P8@=u_k|kgplPvf?!4^4I@=Dmo?gHC3 zt$j)DZn1R<+mT@U*zl!~txGt%t~zYI&}PdKx2q) z3&;r?_Tyz<1#oM8(@JT2u`#vjxl6cvrl_>lOl?p>@16FvapS&8qtTVh P=MGQC)dFpEESmQ(P~c`R diff --git a/lab/LAB4.si4project/cache/parse/lib_panic.c.sisc b/lab/LAB4.si4project/cache/parse/lib_panic.c.sisc deleted file mode 100644 index a5ec9585b83e074f4d1f1c64a9f01336f53b2eed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2435 zcmeH|ziU%b6vwY=EHPG7X~FmlQZS%XwTd`Iu}jEir7d*Rn55)Ej6te6D0Ol42exjm zmDXJlTsk;(bg6XkkMIu=p5M=V@8rD%8nbi}zi@KyJ@?*o&-a{jUoMS0x8Pj*qQs?~ zTg^DP`#BZJ4{2oM=k6G`jc;4W&?D|Y{*??+`%{uh5n7jgkf;q@R+5&0r|achW_2;g z_^Tv;$hl3~w%^UFTVnVTnp?9OZE;L(6`#O*hjnZ=x3kGJ>`$Vu$vp{Y5fJF{*v9;L zuoC|yefs`HcY(VnymqbixZWs~G?;FA_fyTA^Rg40k;`k0-xHD}5`&RzzABQgE_{Df z=f{FMcZ}ZcRNG$du!hOBW|YDUFT%8bl>gt7ylhL`Q(3O7yeVc0gE5-4O7*0bInXQa zf_sKd>%5#VYClvyMIP=*bEnZa&9aTJI!DKJ(VJpxoG^~`lZRd%r;s3jQ~-Ta!bN5) z#Qt68b$?F#oGyE<22Np$gL9Fdk~XK<3JIs1YkzUt^4g6#9pWyWPDgr1+MHr5B%D@W z7K3uh9KiQ2`C)J)%MVs=YlX5LmEaeR;L~hcx9rLqt_1`A_&&J{f%jCk!_j0n<=>Zc z&1YdZQBfYtb#>FN%cV@vJ!(=k=Lls`H^rBQ`;E{rkJP%yifUR{b_=cUIm_HIuzPCF z>Z5+L6`slSknDoIKz2#Cw=*$Wf<_LKEWJW(khBIw1G5b#YpIQT#cQwhbKQY!^qH{2 z?#b4<5_6?rDcV7DO%~SP1scGW@nEh*83NX63VU9I$w=ZwIMxnCYo^Q}=Dy!xbl^k7=-6O>DmRqw)Zkox^ltgc<=fhU z-{hh?(#_J?hO3j*OAI?#I-q0t{=s-moCo{H?+p)3%T`8(p^v4MSbMuL6g zEMKAmux9Xm1snl8so4I=z*sInG|?}TB$HgwCc(fV$x(^HjLvpsb-fv8>s6*9m7-VkNJSrMQC7cxHY9Q_lcxX>)3@ZO4t z_eXP3$zbQ`u!Ey%2Em(NFDE)LP?!;up*cokgtr7~r&cG!> zl4;jh5ov*2@t9`W#(NIDSBH5Gs_%HDFG&-OacSpjG!3xUQ`%CN`!E^RQKetkZjy6M zLITiy60mEW_}H%KBKST#Ltv+DVo<-N?*uc+X$hWV!njijix;w`z0;_jA+XpuI-D-; zovtq0J*WiQgo?@=QXbkfK!uRnm1osB*!<1xM(#B8gyRfnMq?sMNBC9{O z?XO|dSj%yTxQt&&8hc3snr{xy0!`iWTp?+NdSa!JG$K7Iu`{fdqA0dc-QM=2%{_ll z&&VhrC4|J`PkW>p+Z>KqKzg;?8+VKGrzB+m%CB9SG`<^`TrV2qKd}Lelg>{oU+tBh gq%eq)H3~SnXHIXrTovxIPZ@bIST&MEpgwoM0ApABF8}}l diff --git a/lab/LAB4.si4project/cache/parse/lib_printf.c.sisc b/lab/LAB4.si4project/cache/parse/lib_printf.c.sisc deleted file mode 100644 index 64eaab54b7f067fd1bc6865e8cb49a411ed53c17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5213 zcmeI0&ug4z5XaxdtXX3;u}y0Hh1;57J(M=pmIz7IOUOm5(n3W-vRbme@t&~Mi7y23yf*!;(L|V7)%ccpM04ZPf!P}7ob0UXn0q+PnTTzrX}77J zPu-=d{N!BWTy9VgN6Qzc&&@U$hp{4K&U2Q#FoPAIx3j`JqsCTd%Z1W;S;=cT=VE8& zWU#{X&Q=bXL5FjoCKg#4n|WVm-qRvdOsXL#gBhN8HnZRD;}7ocuQ4-O8kdbT(r3iF zRa|Ot4BS}9ff{8$?lX6sDox!HyJu`ua-mW-d)LTJOOD&P>mh^F`dHa(czkQ8B3P;y$sFp)M}wIV+!}CkosccG?8->T?a-?KNDuc&x0LB=!`{Y6 z-eH^uZM#;L+L2*0zzz)U)T(P*L%h)IV(d~W*hFGC);*$eOto!kR)Y_v!UC8ifGZ13 zq+yz_9#cyyl%{o<`KdCPXt@M9cO=&Zewyx%FjbA6n+m zmkOu!faCO`^&=gGA=Bl2jMC`g)B2`ownnIW%PVhpB{w8w$xjoM_aV)${S|aRAyW{j9N;v`m;}&YqR>Cm9>nrrfMq zOHP&RV_i^O1K}EaOCZF$Cf&>5Rbw@jy^NJo$G5m_C>6+bjbp9k-<4nG^#eeh+;t_l z7y@R_C3khCqw}X~zyxX)Msh7#td9wYW3q#?^>H%db>PQ7tzFiAbIBLns{;L9T$G=O zzdl&GZ+NTNn+2b+y&eAD+&6y6UKh(ji4B#Mc{b(MsxAH`1y|aa4wu1 zWamc#ZtC-@_|g;ZY-|nsnl(DVUxxe|>(3#80__WueuF43eg#0!c;Wu?%?us%!hMnV KhUa5JBK`$0LK7_j diff --git a/lab/LAB4.si4project/cache/parse/lib_printfmt.c.sisc b/lab/LAB4.si4project/cache/parse/lib_printfmt.c.sisc deleted file mode 100644 index 61a63cf207b34df5129ad7267021c42374d066e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21856 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 diff --git a/lab/LAB4.si4project/cache/parse/lib_readline.c.sisc b/lab/LAB4.si4project/cache/parse/lib_readline.c.sisc deleted file mode 100644 index 7d024d0371a9378e7dea3003569971ea56099481..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3646 zcmeH}&ud&&6vuDJG#%5?6l-j4{4toANfyOa3T~2sf*}hj6&uW=i#9Wp&PbY+X-lJ2 z5EaZu5Ug6XiknIWw?a2vsW@O4*;Kml59puJm9O8=z3;qt=OvoDunY0PnRD*B=brOD z_nv#-O!hl>%(=b^u`4MT6c32|#L&WLvxD8Q=LgX@b~yK<`sCWB*}+fV+J{?4NlNb9m&>eWXp>svN$uuI zVSFCzC0iS>NnO1d(Sn=OmQv#djTfa8r-%0BHs&7fne4@sBtzLOIELCQ_2u)8W_3!+ z3un(Y+N-733|T;LnY>K1pl_8$=8XP6OS98i?I_C|@&|+MhnHy<^s?CYPUccGx+tRYozcBms3Gu=LeiCp$C& ztp-?H6Ujc2$ZXZn3$h5vhsB-EVGy+cOlS4^GJIIf{vdHAtl4Cz#WG^fC`s}W zadxzc2!2+x3<+CAZ2u@?{a9GxqwG$jJr+g8R*Wc9MoE&NFc^0=>#f!H$|>SftFDqq zHzLUvb1-I8<7TyY->nQVZ?q}yg;smHSv^Fhaj#xiUoLzTdX*k&h`X|#xH(fM9+v>g zuK7b!uS(srSL6KTp&n?vUd6}y(%Qu&bEY45?kUDb+x8`(<6>{CusfGSu^$WJ4RKkQ zb#mtcUnIp+B+X{UQdFEsLr?e^k>`GkeKTD&q1-=7=kBmsG!419Kg1%Y*?JCIk4KDW z(*xRGs@A6_TUu`6=x}{2eOO?V0$Uum^>*<}hKEjWe%-Lbj@PHBYsVLB7cY8c?WLvK z#8|0RT1{v2HI}C}_nB>eQHx8)m_(5Ts6Q=dzKItFf#xFT0u&`JE7N$|f=Ea8XyruenvA!A881@(>*VJF*@Auvi znTurZMSF2;91 k4H^x?|2?z!;Xq{LafF@-!u#i>7n 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 diff --git a/lab/LAB4.si4project/cache/parse/lib_syscall.c.sisc b/lab/LAB4.si4project/cache/parse/lib_syscall.c.sisc deleted file mode 100644 index 120c2f9f626e3dd5784c5cb2a49fd240c5f6a892..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15683 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 diff --git a/lab/LAB4.si4project/cache/parse/user_badsegment.c.sisc b/lab/LAB4.si4project/cache/parse/user_badsegment.c.sisc deleted file mode 100644 index dea973bd615112e5543b470532106f3e034b97a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1962 zcmeH`y=xR<5XQ&Lovi2S3K5bJiz_VF$`lqB8c4HPs$6={J24CKgy6*wh#%d7f+AvN zVG~e$L97%lEJcV|SXt%2SfAhS&EDP_jE#->z{9-n%)B!@AG@&EtYua`CR)YphwfXi zD;d8^!p-kn4Ro6yUmieC*?;^i9booz;$ao^M0_S{4XiF!MG)MH!{Fv}$oZ`}v&U>! zx_6J40(6da2z$O1$i=w2jhMi92Rk~y``hvx{LAR-azXUB*s{2XMmlT7& z+y7FnzJk={gGB<@{l3$cv#MxPM50{^oWZe)=-UKI{Z{`^82q h@&M1thewL{`Sg4i&wX6thtG|TIBd3ZA5T#JfS=7gxOxBp diff --git a/lab/LAB4.si4project/cache/parse/user_breakpoint.c.sisc b/lab/LAB4.si4project/cache/parse/user_breakpoint.c.sisc deleted file mode 100644 index 5d1acfc52384856519d3f6eaa3f81e179b997b31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1958 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 diff --git a/lab/LAB4.si4project/cache/parse/user_evilhello.c.sisc b/lab/LAB4.si4project/cache/parse/user_evilhello.c.sisc deleted file mode 100644 index 893f330459cd7b749c05a781e1105cce05e76665..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1966 zcmeH{ziU%b6vvNgA|Xbf&_Yw{kikJG9UL6A*yYi&N(&v0iI_l*P;3{e)&D?h$2u0O zyYO&P!9PHRN(Lt<|AcPO@8`XDl4~OB;v#!;dif7(Ea#S|& zw|ae6VOI~I#L?hU-c{NJ2hu&OG-_n)?$&GEf;IAIU6ne6Pl^qBAoyKZS7q}mvoyOY zNiMJ2CC9$LV#Y%m;>XU8ZbAO?)`MP$pj@8TQ9P3IcstQG&4$ltX`+>5L0cR5+5{y7 z!Db6NFX=(iHG`ms&&TI88FUNha6E}dk!go6vwYJI>yu#4I`D9g~(VTv9Qoa6PeigRf$9-sx!=sQHfH57P}^X#IIPf zB-l$DiLfA=*w|Do`~m(1yXX6Pcg~yJM>LVxh?AUm-~HZm&+qeQwk~yU*tsQ}#jeY_ zQw8VdUUnt?Su6bH>s%4+$-C!0tc%@$`d2bQ?bnI>6wm|lBeB}RsSVT+p7K{~rEixG zmDs%!uU+I^S=ifqLwPUZpK+V^Js!$S#Idz=bVAlUoP*ik?uK`e52>!rF)??|w`A?@ zV4STGhZO3Jl8LX5GLxxqHOXI2D&89Y^bmZ*GQIrxf3aAxpzu1(5RRX2cHx^bpu}_zJ2sIb((5*oxqtTYRB;X0LGFN$wLhdepnAPOz-bjuv#1J5S(UQGG-UmFW@V z8a;|oh;0bmtUmNzC6R>UxKlt>_C+Tu=bF)YV{BqzV3VHXN46a$!6X&s2(1xggjfs< zjpT0^3-kTXRISk(Z{Te>4;S@C*>l;?!?4ck;xC$qJ0AvhOp>u{SlGqS?iUO53yXK2xYvE58MPXfZ6IMIR~2t{(#Ojg@s_XGO1s_+=DEiR z;s?Y^yw;cr7(7hQAnrpZANuD{I?vFj9rCH%9xf#CX^(um^R`n1q9ZR>1G6D$9{s6L z8>OYM%@zlW(Pyl`A`Ye|P<5(S`t*J<{XOvLPfrv7=|BKy+4Jl^y@wz82$`>Z<)$a) v$3Q4HC85lWWVY`1GWKIx=0cnJQbIOh>b2yv4Q78z!01KD7ADiu+a2ruc)H`3eRCL`db;T)MJ0 zm1fo3;oLcKc`cXTdpDMdOuVQ@l-V9j2uhBn?X!j~rb75Uh9&cj`*?@wCy3;(l7`kQMKA5`xAamj-I)EF_@nz-O)Ge(|*UfGm^yU5%)$qgw;0usyQy%!xIpvdubtG zD00g9#478#^!BrGViOAg6MmjckMCYclI>tKm9z{*VPX;u6JrgrD?C(ZCw8=(-giNP7 z4~3fWw{gz(i$vb!)MP3DWVV!FnDI-gtQ!Y{^ug1xWL_G0MY=cL12vfALpexFrfu}@ zkAxLw9YjLb!Pba0FhtNO6c?Lo9oOv}j&2{2pw@)y&wQ=dN)-H#vQ`Fbwc22jkPW+a ztxbcSp39dm%DF${dMm<2B!dScHusADAWUS2tk2qQATw)Fwpskqhy0umvUBp(Bm}mR fn}hxgW&_~jHY@sb^X*1xV+r(MqDFRasn6&)1Va?E diff --git a/lab/LAB4.si4project/cache/parse/user_faultallocbad.c.sisc b/lab/LAB4.si4project/cache/parse/user_faultallocbad.c.sisc deleted file mode 100644 index f1d041bbb831bcd5cb61c2c9b3696197440fee12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2869 zcmeH}&r4KM6vwZ>a+;>5RLC-7f(l#ZqD6}kgpyWap%k>~<+El$r+BCcW!BC`WQ4V9 zD`e{e7cGQ>{0D5+AK;%Lw3xo1``(#(GsX-p+(ZY?oOjQ!d(S!FdzqmF&W$_Qc|q*j zojaFxZu@h)=O2>r+RyDAy0vfXhmjrbKm98mVD=}(eJW^G{9ep_1p@&hrj5nX{GG*# zJgc5I=T3^3rQ3Wnl1W^=s3cTeAIS(xj-}aILzYu1{62;yi%rM)faE7kUXTRxN6?E8{)0I^E-Q;Vy{$Qe54ACq1lpcg( zL~wfM8_zZKrFiCdWedey(!Jgs_O}s)(khsA&1P=ckeffGHL2Ci@xPtKSo=+4vv1A$ z6lT6(ga zEbxV)RwV=PkKVHeal70mG28cFLmco>0Ivg`LGrp$i0KL`IA&foLcCTQMRf+z!%32| zAOTMhlKW#x(G^lj2j8_$I!|yKkqa8dRx+M(*+TJ#UZKMG7?HefhBOYdUx?(9u)?f^ zNXR2wUULn{jAkq+4Nu;CS&W$5aF dKZE%IxU^43fZVzk`w#;ii-rHSdrN&rzX40<7PJ5W diff --git a/lab/LAB4.si4project/cache/parse/user_faultbadhandler.c.sisc b/lab/LAB4.si4project/cache/parse/user_faultbadhandler.c.sisc deleted file mode 100644 index 725d33cef645a58ed65f077d650badd37546610a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1974 zcmeH{zfV(96vvOHm6xXYOdvsnLk9<(bYLVTEH92|XyV{NZH;{i)Px9w0WDhxLI^s# zHbHlj#)*M}e*oja#Kh=-@I0S)-|4$lV_8^?-{kb%d+zytPT!-OBFiGh2TD>9IoJE? z*Fs9)l|#L=(+aZQ@#hKnnEc1T(g9|FS7}NM`l$3tN!LKiN<}5m-;Tm=rxtSlrZjy+ zBzPZ%M+b`mGDDJKrMDQUig2|zd;;4Y-jUheY<(N_eKhs5qJ(Wp38egXF5~T1`jY?n zK9gi}@IdUzxZPOYXuhn@>*3*Q{G!lWc&c)88_zT+l;fAXU$E8GI;haD0g{BQT!zFb zZLHPfHYdNUhuXnsSyyQj6zoLde(6q`Xu)2kOa#vGKXp~bDQr?)hy#I9U9G9kmsC^a ziE^tFkyY=X=R{bP0WNno&w}{H&DU`grzB6?C?3vu(gHJC)rs{ca`<7ml|xSJ>#rI( zB?8W-Gd`o-oFc1wPEU46JKebhA64ct&`uC6W zTJd7JUstWRg8pC`CNSCGYaQB_MytMlUyWH>C~t);hJqkg5;F7tyD0qeJR;^On8|N? k_$4N=_X3`m&j&bzRnbr6|mz<9M5B;y&FDF*LQ~&?~ diff --git a/lab/LAB4.si4project/cache/parse/user_faultdie.c.sisc b/lab/LAB4.si4project/cache/parse/user_faultdie.c.sisc deleted file mode 100644 index c33871d0a523a68ba278579b0091f7b79d2d00ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2851 zcmeHJziU%b6u!p9hM1a?6s)aC2GKa_;NT#obqE=?Bv^3qnU|VC8s*UxLHfh3ps1jO zgF}}>>n>yv9CQ$zD;@j;`X@N~{J#6{dGF?>BnY~Q2Tsqu=boSUeD|eSPAFAXDtQU4 z5=vdnD7F7Sq4^smdFT6nmb#tKd*hVH)qna|Zh*5t1D-@fufcD@oG)MiKm_z?t(;rj ztmU}NA5&@?+=K4$)qL8RXyF@D+w*BaNpUOZ+><0GLg+k#CGoX=w1fHM8u3hY{5Y znOfCz9xi##azk&S5-3~)s1MeImietA_cqJ9m#L`?%O=q2!*+BFLx3(ZVXAGlJ=UXI zCcxj(2_ztw=Pi0bhZ&$!g$gf!FZ}TbHR(yZGQ?7$*-FrO~wP0KaNPgK50yDkdh=f zI2@4z1_O;&XC>b27G7G#ygovLy;jic+{dU_Mxo!|>{TFW50=9uiEenWvBB1xj&~l; zlZKf>OT#<=GQa diff --git a/lab/LAB4.si4project/cache/parse/user_faultevilhandler.c.sisc b/lab/LAB4.si4project/cache/parse/user_faultevilhandler.c.sisc deleted file mode 100644 index 0fc8efc66865fd0dc7a035457f9e1af5d9176bdb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1962 zcmeH{KTi~45XQ&jz{`2MCYS($;tGqilET8mkkDK#D8N8M>3L_oP4G;J5F3Q@5{)s$ zfoVxGE$JKs-A=ys02+(Zu8fBY*QVD@9qJ6_Ny=Vzy{ffb#3C#bxw23zY30p|nf z$ThQl*Bx$77tje&irMYyg1Z=3*@y|WJJ`|buD97Y_-E1Z%TuS`VvFP6?&`4J!jM5W zW)ux~EaV;zTlJ-t#`E$cKippmpXHiUPh3x2)lV;od)+zc6jW2;LkX7-q6n|VlN^I9 zFKc0oQ?{!=H>yESvh(3f%{4+K|rb-{ghV^6a= zm*i3`Nz6JwFk?|V=($`n;Z%W&7`hgKk6}D6dX}C$ zkRNCA{ONe`pH1JWTawsx_OVQG7kbB{Y)RgMu=TpX)?=@0aU)qpR)SjFUjO9RZmmSo zxBsnLwSv^8!6Jclzpu4#Tk6f)@?C$-(!y>ll42+b-bktE`)k#p@@3^_(-`kztcZ--<*oXtOZ{GZT-rpXAZ?w)qIGM!PYf<|u^vtX0<$4Ir+>}SaqhO`zpOplbOK1dD z50>UTOv()t9M0ECteTX%mX*|bw0+VQ2HWj3O?@fTr;oZnrZXRXb3B{UPqnh+MgRZ+ diff --git a/lab/LAB4.si4project/cache/parse/user_faultread.c.sisc b/lab/LAB4.si4project/cache/parse/user_faultread.c.sisc deleted file mode 100644 index adb06bcf3e8270546f43042250d7be056424e9fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1958 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 diff --git a/lab/LAB4.si4project/cache/parse/user_faultwrite.c.sisc b/lab/LAB4.si4project/cache/parse/user_faultwrite.c.sisc deleted file mode 100644 index cbf5c385871c8df354e1229247a53f1b8412ac3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1958 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 Se}>NVsq&vK>^k@(LiZg4Y!HqB diff --git a/lab/LAB4.si4project/cache/parse/user_pingpongs.c.sisc b/lab/LAB4.si4project/cache/parse/user_pingpongs.c.sisc deleted file mode 100644 index 3fc4c1eaa0b3228db747f9d26d8df1faf03521c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2844 zcmeH}O-qzf6vwY`IZoOL8kI(k(7*^m1`#f_bkX1{dQoucd<=_2sb? z>mzl}b&9v7`}}e^fzBw1X`(!wkcne!XBw@L43l&G*euyy|4wwH`nj&FFCp20%eV3|(sz-NVUXtZarmI`xMbw~>ji@`v`+%w&7 zOlze~)Xu60^mWAved?E?QbQgL_4Re9y(qKKGD*&j_CB$hbXJiL-kX`5zmx6l?HTMF zl`+j{pz(i73`31z7N9eILD7wvDSmYp3ZZ}=Fuc)w$|XEWN)-{@XcG~x1l(D ze|N5L_0Y5Nxgn4>aXS+c3AqqnX5f=^0KFcgiQD6T&;WYBcCkf=eg`Rc1y`7 z9z~7ijAVaF_t8t1fenX4lEzx2wB11z(kCmm+53&~?O6LUjl9XF#vkvDX+s0p?hPA- z=eb$~%m-LL9WHO_XCN-eT0``I1zY!4Q3k^^M9P_ur; oS-9LC#%VU>=-aGo1~#rlHq;m*S0npxVEFoyiGNj{V+|pH11CKcU;qFB diff --git a/lab/LAB4.si4project/cache/parse/user_primes.c.sisc b/lab/LAB4.si4project/cache/parse/user_primes.c.sisc deleted file mode 100644 index 2a8d8b94fd225e411a181901de701647290357e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3355 zcmeH}$!k28_fdE)(KO#R!5D3`p>#QB?G1%nas1G6~Vd+(iiJK}{ka z^k&56;zjVJ9z+736%YOq-dqkozu$XZd7U9lB;Z9XsHyJiuCJ@AtNP8pHO`%Ju6~c$ z)jD^**}0D|YZLw?3D1A|xDMU?yQk}sb?!g?D;ePKH;Y>p(5(1@nEP!K*NdUHxxW1L z+}S+i)*9!wito?#<=@`zZ9r!fd+LAK+n`c%Ol^%hWSD|T&aqlD+t4O42!4thzZPE< zV~>weB3m*YYa5c4>?g#HS8@APF+*?esc?WvolctQ*B~ zPWEb35jeStk%6eZR-^FF&d>JcU)@jd?6jc1i9hSkT1J`^wCUT0CQbku6z)tMM?*oW~`@~q}eEx#tETGVx`+?X3Jy~E5a{ArjdUx_Z4 zOT`nK5E$vqc}ZX#W;*FJYw1IZWACMu0M|q({RnH!kfhoW(N#yppOiqXjS?s61fYl< zNmUsnx=P5*Ei#|Y5+}!~D#BG8xJEDO0rr`$5;1cNM66Q+F;^;2M#X-ONS^hJNl(QXDc=5g`d7bE3kcbaS2UtaGx`eW9r)rDJ_J@@j8WL0JQ=86zGLv@Y zBZ2-9AChirVaH-uf=xb<_=H>zAHR(_=TCj2^PY)$nos$_PHD`rAcjna54h5@w)~14BetiAb)D;y9aus5b-Cu$HD&H|PCV znVzD)k4ty-OA7`L`D$gXL-+dfZTHf?p?-;VO8-h)K4h^biI@Iw#%g^+TvmNZ$aK|Xttjcip@H$; zGH&&pr6Nr#iGUA!HuD8t^uELG)Wd4XU{+%r+El}-wiaS6J0@mw0$Faj*w4g$EREat kkh5^lD?R*Q`_n!4w_-Oyp7_W>yHerwu~~fZy1fqZ8>N;kjsO4v diff --git a/lab/LAB4.si4project/cache/parse/user_sendpage.c.sisc b/lab/LAB4.si4project/cache/parse/user_sendpage.c.sisc deleted file mode 100644 index 02cf01a0d9a068f7da5dc8852b018e617a8a1429..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2805 zcmeH{%}bO~6vl6U)HqF!X!M~`6GZ7EvS=Zqf@ES)V5Z?BFw<;?Ou^J_*P>OcAcN?O z2n20iVT+(ekkF=$;i5mlrOOt<+w;3KXXcuc610gPIGp>QbMLw5Paxgt&X>n{gbEPQVa$a`wr=~x>jXjx<+;^(u%-Oas z*~o0W-{IV0Y0BLvp*;r6cKKc+Ug#?EOV!R@ejD*iCvNm-M#wm1@|0K`dzNMLTZR82 znSaoptbKhj&TR`*i8xts&i6@7=EjgQ`tx&KiG7jsGMnoFw1C_Oa$3OKl@|v7dHw#)fPfpRL6vo>m@V4r|((85#ez)|g&W z`f;{a7)`BvWV`>VP%Ale?r+v=FNeB}k7!`F-`86Bi;!>0K)Qd7!{J~XRM_&9Y_a$# zwnMf%?+e9JBtx@eZBR0;0u2eV*})#tA>Kb?XNW^QlOtLqR??El_o2FJ)w_{oGL@t5Wr|5vg-^f=rzt34~7***5#qz4AxI^ZV-^yb}9D0>0m diff --git a/lab/LAB4.si4project/cache/parse/user_softint.c.sisc b/lab/LAB4.si4project/cache/parse/user_softint.c.sisc deleted file mode 100644 index 35fccfb50e9270e4f98db33b0a4a9454fc4da90b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1958 zcmeH{v1?ON6vnSu!2h##Dsd(S!docEn`$mCh)=A0{DmAHa) z-*i8ETS(=LG_wEosDf?(wj|FbS_4;>6eVD4t67a+%vU+T zmyDfpuD;!@9z2_guo;pJ(aV`gA&#s0$O&wB@ME*Py$#eF*zjGz z5g^Q&B(=VW+O@dXSz77dYuwP`+ERSCusD5NcJdm3NRqddiBt;X)Ou2(U40}8k)9d9 zrIiQmxW_5%YD-<6+VfqdO~|oqPfPVO)uP9hG8K&NNnMpYg?%X(>iF7z0@m3yF!wXB z`|HehOPX4i%QS8~Uw4j0>0`LF7Uk;~S0Bb*l0t%pKpxF_tew~z;wqKm`+B~Wxuoso z`yG;|eU%=QkaR*~NwGD8q*pdhPrAzEa6E^b&1!4ck7rK4uH;xY_hCAM5kt2H;A0q% z)X>s%2NuVfI)6GI;%BorVF&q6U^b2AlDGKZ;jvgXUw0(#J<4_j>;SXFoicQnz#vCYWtarM1N|wN+vQ>mAmy+1z}6ANKpGYBDRq*Zd-V zsAFU8pu~qCGYp5@OZW~4_4%ch>O%gk2B(&StEt-LCE3YsAlZ3Tnz*Wy({pLVINiII zpvqXI??>9{!j%g&*Q4TQTU&d^jbNadv#)v)7I~1204K-nyQkq z&qmV-epZ}g)#+8$8SQ;3;hHXUkZ@7L(Ab-1&Bmu)LJy*X9WdQv!@8dQ94aV#|9$)AxG^ZC;QQXOYUjL}#Q4 zYBrUjovF;x8XAP56+cd{Z=v42B0HtqFCh*uiE8+^<6g|dYJBzD5+MwSY#0$93KsJP z#Vsu^H?9|o#ZqaUuzq)aQYTF$Z+2R1yqyWz+{ei@N7J)tKpJ!xWB(?Z1KY=#bBtiG z?qWaX#K$h#G;20iHyvSa@N@XBoI(9&H`gukdYil?IvTF$WxMmf!BXLu(?}xb zLmc9nsGl8Tl-8AF<=gfThL(NUR^P_>PxkJ8JDQUpxdY=sohtgseJ+hr>WBktG`_!Q ZOMlt5bMYR0z_D0Gzr1gt?@Gb=-z&Pw-LG4{ilDW0`z{Hc(W3ED1IuYzZwG#L_#wUdYcxW z4>s}Dvc|dX;wRF5xqmv7ns^bX)c5RkMx*5Tw0*uI!xV(~W3yyu!!!Os`ZJQs&yttK zoUfqfvW~q?6`Pf@#BpnB7yqqMVR(FMB%kfp;?Q_>xn}I7>cVyKyfKy32yFD|YQ@V@ z9M_k&@KHZJF;$q%7td?Wx7A^v)?n@thj>=6g*%P3qC|0A>oRV;{|2Xa>RK);tk){+ z*e7*o_Eplc^)j0l&q?>;=cx?d+HW>Ca2hYj-*rrCPoaDKU=OX-u|e6q7thKGV{lHg zU(OfBuL(lbFJ@`gFv*^+k2*);OB7B>9Gg{I)#-_71W*#AoCJ?#9B^d1tWy_JT@eJN6H`8^~Q z$GA_3;MPPS8WP7qp=sE$MpunUt&El+UL|p2N>6%eh^DJXv=ISyN#Zy1`N9QlSZIL3 zSutVScQt6aDS#4ELO83to-5`HlZ+fO@lpZRA|^YInr?Sc&#_yL4VAE*P6*gcG@6Zi zdb&C<>VvrSQhKnRk~U(d3xVhECihEbp5j=~Q%V3gk4_YY+<7AEKCGXP4x(jVESh;; z)~zp+3(QkABA$EL+jOt1+dr*53)VLR;{r?gONk80?9k!Iy0g*+#=b8-!%W#-vbi>$ zF6a(yjVdpwc}x7RjS7?1xn`8tr#DHibdX%PN_YK8Iag3P_cwF3$B4Y_iX$P@{W(|b zUiugfkL8LS4jX%1i7mcPl4Xx%&q&vKteh;J1j>@NMoCpc6eJ`owb_S_2<=#hG0i{f zZJK#m8B^x5{#qO_$3!d)(%*_{udsRMVar2H-*obX52S2m9#Y)18@kJPR{H^&S)f{W zxmw%R+Eq9rcJhKOM+Rz0eV;ks=I@i)kb7t|E1T>iD$( Ha?t$(fr%cd diff --git a/lab/LAB4.si4project/cache/parse/user_testbss.c.sisc b/lab/LAB4.si4project/cache/parse/user_testbss.c.sisc deleted file mode 100644 index d8e5700ca4435b284f3822b119cd913c7cbdabd5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2299 zcmeH`ziU%b6vuDdMAI0JP$AJeM09b|!NEa_6%2Kewzi^9rj0ZY+6uuIbr;mt3Jwk~ zh3YPdgSFt$f1uLAKcJ)FqSN*Jx$m9iH5%jMB0X^4x$peG=X~$kea=lempLtV{my;c z@7&hg{=lCl;ngo&1$3*QULQmbxIOw`Ccy5GijU|*E8>^pj5wc23AeUVE$*yO7dbEV zId@Vxxi8)M$0giaGA6k?Ycvmw7-zCN((c#Ckqm$@{^U zjT(calar%2uU)xyd0KyHh{gwbTuj%dvq?$y3wclNn8=fxiRNm}X6?bGeylaj$HXM% zvh8NtW6M1(?&drjP3M42ca#+%mqN}8m?mX(9bor`+sC7Wh zNRc3kq^6VJCLwKX3kQ9?$1^6H>x=kLFa5^zYO%2qFMUe3y7)UwUmpp}1xn!+N*`{m zrR(_HrJEmi>QE8twRC*O#l+bBO=7dN7R_^N(e6cCwYcs;w0N)ct~mjGECDz`$! uE^y1-jV!F2{jc@(LZ6WJ47}f|pReO_Kjvc+KYYqs*o#ZCkKvv>8T|zP#mij) diff --git a/lab/LAB4.si4project/cache/parse/user_yield.c.sisc b/lab/LAB4.si4project/cache/parse/user_yield.c.sisc deleted file mode 100644 index 8e99b55ad30e8ab202247fc30f348f8a7bd852c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2340 zcmeH{ziU%b6vuDVL_@GfsZgbY5iC?Xn8AY3TIgWuB(}7W!J#!#`=CuB*v^hs#6c@$ zaB(P9H$kBYf7Z>ph=bd}cIrsd!=f3h0=jNQtUKF{E zbLG5qdv7zIzKBCxU-yn7+iJb+gZH}s_*Xi>-JcPiQbC)d=OT@PD~Pfpu)R4|tbCj= zvVJET=y9(3bgKB_$)u*GgSd^#i^;r999z@k6WHvaM`n9F8=k>FL`|Cok)1{7{hsK^ z&>cq+AoLl>{i%l7{ZYNTyjHti8rR~|a&#-RG%+hVeyx7F_c8m#b0UM)H2i3YcBP2p zoa_@3F>-4wi&34EVOR6&YO|Ge^|jLeA=+10hu@qpP{sCxp#l+D!|5tKtVUZ8J>nF^ z`O~h>%l4IMMnUYVX0#`!Rc~CPRCd`p1|~(AQyh0rkVkfXHLBs1;{r z)AYmcmUcN^Y}~El)c03>pzUZ-+?*mS1y1wos6;6aWGbiY*QF-bQ4yKJX)jJqCV85v z#9jvnag1dGlIw|X>T5OPnYzPXAUhX$+|dT=3o+mqU0X0|tenB2!9KCoP0Xu`{aR2}S diff --git a/lab/Untitled Project.si4project/Backup/bc(1629).c b/lab/Untitled Project.si4project/Backup/bc(1629).c new file mode 100644 index 0000000..e3922c4 --- /dev/null +++ b/lab/Untitled Project.si4project/Backup/bc(1629).c @@ -0,0 +1,151 @@ + +#include "fs.h" + +// Return the virtual address of this disk block. +void* +diskaddr(uint32_t blockno) +{ + if (blockno == 0 || (super && blockno >= super->s_nblocks)) + panic("bad block number %08x in diskaddr", blockno); + return (char*) (DISKMAP + blockno * BLKSIZE); +} + +// Is this virtual address mapped? +bool +va_is_mapped(void *va) +{ + return (uvpd[PDX(va)] & PTE_P) && (uvpt[PGNUM(va)] & PTE_P); +} + +// Is this virtual address dirty? +bool +va_is_dirty(void *va) +{ + return (uvpt[PGNUM(va)] & PTE_D) != 0; +} + +// Fault any disk block that is read in to memory by +// loading it from disk. +static void +bc_pgfault(struct UTrapframe *utf) +{ + void *addr = (void *) utf->utf_fault_va; + uint32_t blockno = ((uint32_t)addr - DISKMAP) / BLKSIZE; + int r; + + // Check that the fault was within the block cache region + if (addr < (void*)DISKMAP || addr >= (void*)(DISKMAP + DISKSIZE)) + panic("page fault in FS: eip %08x, va %08x, err %04x", + utf->utf_eip, addr, utf->utf_err); + + // Sanity check the block number. + if (super && blockno >= super->s_nblocks) + panic("reading non-existent block %08x\n", blockno); + + // Allocate a page in the disk map region, read the contents + // of the block from the disk into that page. + // Hint: first round addr to page boundary. fs/ide.c has code to read + // the disk. + // + // LAB 5: you code here: + + // Clear the dirty bit for the disk block page since we just read the + // block from disk + if ((r = sys_page_map(0, addr, 0, addr, uvpt[PGNUM(addr)] & PTE_SYSCALL)) < 0) + panic("in bc_pgfault, sys_page_map: %e", r); + + // Check that the block we read was allocated. (exercise for + // the reader: why do we do this *after* reading the block + // in?) + if (bitmap && block_is_free(blockno)) + panic("reading free block %08x\n", blockno); +} + +// Flush the contents of the block containing VA out to disk if +// necessary, then clear the PTE_D bit using sys_page_map. +// If the block is not in the block cache or is not dirty, does +// nothing. +// Hint: Use va_is_mapped, va_is_dirty, and ide_write. +// Hint: Use the PTE_SYSCALL constant when calling sys_page_map. +// Hint: Don't forget to round addr down. +void +flush_block(void *addr) +{ + uint32_t blockno = ((uint32_t)addr - DISKMAP) / BLKSIZE; + + if (addr < (void*)DISKMAP || addr >= (void*)(DISKMAP + DISKSIZE)) + panic("flush_block of bad va %08x", addr); + + // LAB 5: Your code here. + panic("flush_block not implemented"); +} + +// Test that the block cache works, by smashing the superblock and +// reading it back. +static void +check_bc(void) +{ + struct Super backup; + + // back up super block + memmove(&backup, diskaddr(1), sizeof backup); + + // smash it + strcpy(diskaddr(1), "OOPS!\n"); + flush_block(diskaddr(1)); + assert(va_is_mapped(diskaddr(1))); + assert(!va_is_dirty(diskaddr(1))); + + // clear it out + sys_page_unmap(0, diskaddr(1)); + assert(!va_is_mapped(diskaddr(1))); + + // read it back in + assert(strcmp(diskaddr(1), "OOPS!\n") == 0); + + // fix it + memmove(diskaddr(1), &backup, sizeof backup); + flush_block(diskaddr(1)); + + // Now repeat the same experiment, but pass an unaligned address to + // flush_block. + + // back up super block + memmove(&backup, diskaddr(1), sizeof backup); + + // smash it + strcpy(diskaddr(1), "OOPS!\n"); + + // Pass an unaligned address to flush_block. + flush_block(diskaddr(1) + 20); + assert(va_is_mapped(diskaddr(1))); + + // Skip the !va_is_dirty() check because it makes the bug somewhat + // obscure and hence harder to debug. + //assert(!va_is_dirty(diskaddr(1))); + + // clear it out + sys_page_unmap(0, diskaddr(1)); + assert(!va_is_mapped(diskaddr(1))); + + // read it back in + assert(strcmp(diskaddr(1), "OOPS!\n") == 0); + + // fix it + memmove(diskaddr(1), &backup, sizeof backup); + flush_block(diskaddr(1)); + + cprintf("block cache is good\n"); +} + +void +bc_init(void) +{ + struct Super super; + set_pgfault_handler(bc_pgfault); + check_bc(); + + // cache the super block by reading it once + memmove(&super, diskaddr(1), sizeof super); +} + diff --git a/lab/Untitled Project.si4project/Backup/bc(3621).c b/lab/Untitled Project.si4project/Backup/bc(3621).c new file mode 100644 index 0000000..dd5f20d --- /dev/null +++ b/lab/Untitled Project.si4project/Backup/bc(3621).c @@ -0,0 +1,169 @@ + +#include "fs.h" + +// Return the virtual address of this disk block. +void* +diskaddr(uint32_t blockno) +{ + if (blockno == 0 || (super && blockno >= super->s_nblocks)) + panic("bad block number %08x in diskaddr", blockno); + return (char*) (DISKMAP + blockno * BLKSIZE); +} + +// Is this virtual address mapped? +bool +va_is_mapped(void *va) +{ + return (uvpd[PDX(va)] & PTE_P) && (uvpt[PGNUM(va)] & PTE_P); +} + +// Is this virtual address dirty? +bool +va_is_dirty(void *va) +{ + return (uvpt[PGNUM(va)] & PTE_D) != 0; +} + +// Fault any disk block that is read in to memory by +// loading it from disk. +static void +bc_pgfault(struct UTrapframe *utf) +{ + void *addr = (void *) utf->utf_fault_va; + uint32_t blockno = ((uint32_t)addr - DISKMAP) / BLKSIZE; + int r; + + // Check that the fault was within the block cache region + if (addr < (void*)DISKMAP || addr >= (void*)(DISKMAP + DISKSIZE)) + panic("page fault in FS: eip %08x, va %08x, err %04x", + utf->utf_eip, addr, utf->utf_err); + + // Sanity check the block number. + if (super && blockno >= super->s_nblocks) + panic("reading non-existent block %08x\n", blockno); + + // Allocate a page in the disk map region, read the contents + // of the block from the disk into that page. + // Hint: first round addr to page boundary. fs/ide.c has code to read + // the disk. + // + // LAB 5: you code here: + // envid 传入 0? 在最初的哪个进程下 alloc 一个page ? + addr =(void *) ROUNDDOWN(addr, PGSIZE); + if ( (r = sys_page_alloc(0, addr, PTE_P |PTE_W|PTE_U)) < 0) { + panic("in bc_pgfault, sys_page_alloc: %e", r); + } + // size_t secno = (addr - DISKMAP) / BLKSIZE; + if ( (r = ide_read(blockno*BLKSECTS, addr, BLKSECTS)) < 0) { + panic("in bc_pgfault, ide_read: %e",r); + } + + // Clear the dirty bit for the disk block page since we just read the + // block from disk + // 只是为了修改标志位 + if ((r = sys_page_map(0, addr, 0, addr, uvpt[PGNUM(addr)] & PTE_SYSCALL)) < 0) + panic("in bc_pgfault, sys_page_map: %e", r); + + // Check that the block we read was allocated. (exercise for + // the reader: why do we do this *after* reading the block + // in?) + if (bitmap && block_is_free(blockno)) + panic("reading free block %08x\n", blockno); +} + +// Flush the contents of the block containing VA out to disk if +// necessary, then clear the PTE_D bit using sys_page_map. +// If the block is not in the block cache or is not dirty, does +// nothing. +// Hint: Use va_is_mapped, va_is_dirty, and ide_write. +// Hint: Use the PTE_SYSCALL constant when calling sys_page_map. +// Hint: Don't forget to round addr down. +void +flush_block(void *addr) +{ + uint32_t blockno = ((uint32_t)addr - DISKMAP) / BLKSIZE; + + if (addr < (void*)DISKMAP || addr >= (void*)(DISKMAP + DISKSIZE)) + panic("flush_block of bad va %08x", addr); + int r; + // LAB 5: Your code here. + addr = (void *)ROUNDDOWN(addr, PGSIZE); + if (va_is_mapped(addr) && va_is_dirty(addr)) { + + ide_write(blockno*BLKSECTS, addr , BLKSECTS); + if ((r = sys_page_map(0, addr, 0, addr, uvpt[PGNUM(addr)] & PTE_SYSCALL)) < 0) + panic("in flush_block, sys_page_map: %e", r); + } + + // panic("flush_block not implemented"); +} + +// Test that the block cache works, by smashing the superblock and +// reading it back. +static void +check_bc(void) +{ + struct Super backup; + + // back up super block + memmove(&backup, diskaddr(1), sizeof backup); + + // smash it + strcpy(diskaddr(1), "OOPS!\n"); + flush_block(diskaddr(1)); + assert(va_is_mapped(diskaddr(1))); + assert(!va_is_dirty(diskaddr(1))); + + // clear it out + sys_page_unmap(0, diskaddr(1)); + assert(!va_is_mapped(diskaddr(1))); + + // read it back in + assert(strcmp(diskaddr(1), "OOPS!\n") == 0); + + // fix it + memmove(diskaddr(1), &backup, sizeof backup); + flush_block(diskaddr(1)); + + // Now repeat the same experiment, but pass an unaligned address to + // flush_block. + + // back up super block + memmove(&backup, diskaddr(1), sizeof backup); + + // smash it + strcpy(diskaddr(1), "OOPS!\n"); + + // Pass an unaligned address to flush_block. + flush_block(diskaddr(1) + 20); + assert(va_is_mapped(diskaddr(1))); + + // Skip the !va_is_dirty() check because it makes the bug somewhat + // obscure and hence harder to debug. + //assert(!va_is_dirty(diskaddr(1))); + + // clear it out + sys_page_unmap(0, diskaddr(1)); + assert(!va_is_mapped(diskaddr(1))); + + // read it back in + assert(strcmp(diskaddr(1), "OOPS!\n") == 0); + + // fix it + memmove(diskaddr(1), &backup, sizeof backup); + flush_block(diskaddr(1)); + + cprintf("block cache is good\n"); +} + +void +bc_init(void) +{ + struct Super super; + set_pgfault_handler(bc_pgfault); + check_bc(); + + // cache the super block by reading it once + memmove(&super, diskaddr(1), sizeof super); +} + diff --git a/lab/LAB4.si4project/Backup/env(572).c b/lab/Untitled Project.si4project/Backup/env(3753).c similarity index 98% rename from lab/LAB4.si4project/Backup/env(572).c rename to lab/Untitled Project.si4project/Backup/env(3753).c index 7396b21..03d9a34 100644 --- a/lab/LAB4.si4project/Backup/env(572).c +++ b/lab/Untitled Project.si4project/Backup/env(3753).c @@ -263,7 +263,7 @@ env_alloc(struct Env **newenv_store, envid_t parent_id) // Enable interrupts while in user mode. // LAB 4: Your code here. - + e->env_tf.tf_eflags |= FL_IF; // Clear the page fault handler until user installs one. e->env_pgfault_upcall = 0; @@ -274,7 +274,7 @@ env_alloc(struct Env **newenv_store, envid_t parent_id) env_free_list = e->env_link; *newenv_store = e; - cprintf("[%08x] new env %08x\n", curenv ? curenv->env_id : 0, e->env_id); + // cprintf("[%08x] new env %08x\n", curenv ? curenv->env_id : 0, e->env_id); return 0; } @@ -415,6 +415,11 @@ void env_create(uint8_t *binary, enum EnvType type) { // LAB 3: Your code here. +<<<<<<< HEAD + + // If this is the file server (type == ENV_TYPE_FS) give it I/O privileges. + // LAB 5: Your code here. +======= struct Env *newenv; int ret = 0; if ((ret = env_alloc(&newenv, 0)) < 0) { @@ -423,6 +428,7 @@ env_create(uint8_t *binary, enum EnvType type) newenv->env_type = type; load_icode(newenv, binary); +>>>>>>> lab4 } // @@ -442,7 +448,7 @@ env_free(struct Env *e) lcr3(PADDR(kern_pgdir)); // Note the environment's demise. - cprintf("[%08x] free env %08x\n", curenv ? curenv->env_id : 0, e->env_id); + // cprintf("[%08x] free env %08x\n", curenv ? curenv->env_id : 0, e->env_id); // Flush all mapped pages in the user portion of the address space static_assert(UTOP % PTSIZE == 0); diff --git a/lab/LAB4.si4project/Backup/env(1818).c b/lab/Untitled Project.si4project/Backup/env(840).c similarity index 97% rename from lab/LAB4.si4project/Backup/env(1818).c rename to lab/Untitled Project.si4project/Backup/env(840).c index 746327b..2f03e35 100644 --- a/lab/LAB4.si4project/Backup/env(1818).c +++ b/lab/Untitled Project.si4project/Backup/env(840).c @@ -263,7 +263,7 @@ env_alloc(struct Env **newenv_store, envid_t parent_id) // Enable interrupts while in user mode. // LAB 4: Your code here. - + e->env_tf.tf_eflags |= FL_IF; // Clear the page fault handler until user installs one. e->env_pgfault_upcall = 0; @@ -274,7 +274,7 @@ env_alloc(struct Env **newenv_store, envid_t parent_id) env_free_list = e->env_link; *newenv_store = e; - cprintf("[%08x] new env %08x\n", curenv ? curenv->env_id : 0, e->env_id); + cprintf(".%08x. new env %08x\n", curenv ? curenv->env_id : 0, e->env_id); return 0; } @@ -415,14 +415,19 @@ void env_create(uint8_t *binary, enum EnvType type) { // LAB 3: Your code here. + struct Env *newenv; int ret = 0; if ((ret = env_alloc(&newenv, 0)) < 0) { panic("env_create: %e\n", ret); } newenv->env_type = type; + if (type == ENV_TYPE_FS) { + newenv->env_tf.tf_eflags |= FL_IOPL_MASK; + } load_icode(newenv, binary); - + // If this is the file server (type == ENV_TYPE_FS) give it I/O privileges. + // LAB 5: Your code here. } // @@ -442,7 +447,7 @@ env_free(struct Env *e) lcr3(PADDR(kern_pgdir)); // Note the environment's demise. - cprintf("[%08x] free env %08x\n", curenv ? curenv->env_id : 0, e->env_id); + cprintf(".%08x. free env %08x\n", curenv ? curenv->env_id : 0, e->env_id); // Flush all mapped pages in the user portion of the address space static_assert(UTOP % PTSIZE == 0); @@ -560,10 +565,13 @@ env_run(struct Env *e) curenv->env_status = ENV_RUNNING; curenv->env_runs++; lcr3(PADDR(curenv->env_pgdir)); - // 将当前进程的trapframe通过弹栈的形式,切换当前的运行环境 + + unlock_kernel(); + // iret退出内核, 回到用户环境执行, + // 在load_icode() 中 env_tf保存了可执行文件的eip等信息 env_pop_tf(&(curenv->env_tf)); - unlock_kernel(); + // panic("env_run not yet implemented"); } diff --git a/lab/Untitled Project.si4project/Backup/exit(6898).c b/lab/Untitled Project.si4project/Backup/exit(6898).c new file mode 100644 index 0000000..cee3336 --- /dev/null +++ b/lab/Untitled Project.si4project/Backup/exit(6898).c @@ -0,0 +1,10 @@ + +#include + +void +exit(void) +{ + close_all(); + sys_env_destroy(0); +} + diff --git a/lab/Untitled Project.si4project/Backup/faultio(2032).c b/lab/Untitled Project.si4project/Backup/faultio(2032).c new file mode 100644 index 0000000..4308a65 --- /dev/null +++ b/lab/Untitled Project.si4project/Backup/faultio(2032).c @@ -0,0 +1,22 @@ +// test user-level fault handler -- alloc pages to fix faults + +#include +#include + +void +umain(int argc, char **argv) +{ + int x, r; + int nsecs = 1; + int secno = 0; + int diskno = 1; + + if (read_eflags() & FL_IOPL_3) + cprintf("eflags wrong\n"); + + // this outb to select disk 1 should result in a general protection + // fault, because user-level code shouldn't be able to use the io space. + outb(0x1F6, 0xE0 | (1<<4)); + + cprintf("%s: made it here --- bug\n"); +} diff --git a/lab/Untitled Project.si4project/Backup/file(8133).c b/lab/Untitled Project.si4project/Backup/file(8133).c new file mode 100644 index 0000000..39025b2 --- /dev/null +++ b/lab/Untitled Project.si4project/Backup/file(8133).c @@ -0,0 +1,180 @@ +#include +#include +#include + +#define debug 0 + +union Fsipc fsipcbuf __attribute__((aligned(PGSIZE))); + +// Send an inter-environment request to the file server, and wait for +// a reply. The request body should be in fsipcbuf, and parts of the +// response may be written back to fsipcbuf. +// type: request code, passed as the simple integer IPC value. +// dstva: virtual address at which to receive reply page, 0 if none. +// Returns result from the file server. +static int +fsipc(unsigned type, void *dstva) +{ + static envid_t fsenv; + if (fsenv == 0) + fsenv = ipc_find_env(ENV_TYPE_FS); + + static_assert(sizeof(fsipcbuf) == PGSIZE); + + if (debug) + cprintf("[%08x] fsipc %d %08x\n", thisenv->env_id, type, *(uint32_t *)&fsipcbuf); + + ipc_send(fsenv, type, &fsipcbuf, PTE_P | PTE_W | PTE_U); + return ipc_recv(NULL, dstva, NULL); +} + +static int devfile_flush(struct Fd *fd); +static ssize_t devfile_read(struct Fd *fd, void *buf, size_t n); +static ssize_t devfile_write(struct Fd *fd, const void *buf, size_t n); +static int devfile_stat(struct Fd *fd, struct Stat *stat); +static int devfile_trunc(struct Fd *fd, off_t newsize); + +struct Dev devfile = +{ + .dev_id = 'f', + .dev_name = "file", + .dev_read = devfile_read, + .dev_close = devfile_flush, + .dev_stat = devfile_stat, + .dev_write = devfile_write, + .dev_trunc = devfile_trunc +}; + +// Open a file (or directory). +// +// Returns: +// The file descriptor index on success +// -E_BAD_PATH if the path is too long (>= MAXPATHLEN) +// < 0 for other errors. +int +open(const char *path, int mode) +{ + // Find an unused file descriptor page using fd_alloc. + // Then send a file-open request to the file server. + // Include 'path' and 'omode' in request, + // and map the returned file descriptor page + // at the appropriate fd address. + // FSREQ_OPEN returns 0 on success, < 0 on failure. + // + // (fd_alloc does not allocate a page, it just returns an + // unused fd address. Do you need to allocate a page?) + // + // Return the file descriptor index. + // If any step after fd_alloc fails, use fd_close to free the + // file descriptor. + + int r; + struct Fd *fd; + + if (strlen(path) >= MAXPATHLEN) + return -E_BAD_PATH; + + if ((r = fd_alloc(&fd)) < 0) + return r; + + strcpy(fsipcbuf.open.req_path, path); + fsipcbuf.open.req_omode = mode; + + if ((r = fsipc(FSREQ_OPEN, fd)) < 0) { + fd_close(fd, 0); + return r; + } + + return fd2num(fd); +} + +// Flush the file descriptor. After this the fileid is invalid. +// +// This function is called by fd_close. fd_close will take care of +// unmapping the FD page from this environment. Since the server uses +// the reference counts on the FD pages to detect which files are +// open, unmapping it is enough to free up server-side resources. +// Other than that, we just have to make sure our changes are flushed +// to disk. +static int +devfile_flush(struct Fd *fd) +{ + fsipcbuf.flush.req_fileid = fd->fd_file.id; + return fsipc(FSREQ_FLUSH, NULL); +} + +// Read at most 'n' bytes from 'fd' at the current position into 'buf'. +// +// Returns: +// The number of bytes successfully read. +// < 0 on error. +static ssize_t +devfile_read(struct Fd *fd, void *buf, size_t n) +{ + // Make an FSREQ_READ request to the file system server after + // filling fsipcbuf.read with the request arguments. The + // bytes read will be written back to fsipcbuf by the file + // system server. + int r; + + fsipcbuf.read.req_fileid = fd->fd_file.id; + fsipcbuf.read.req_n = n; + if ((r = fsipc(FSREQ_READ, NULL)) < 0) + return r; + assert(r <= n); + assert(r <= PGSIZE); + memmove(buf, fsipcbuf.readRet.ret_buf, r); + return r; +} + + +// Write at most 'n' bytes from 'buf' to 'fd' at the current seek position. +// +// Returns: +// The number of bytes successfully written. +// < 0 on error. +static ssize_t +devfile_write(struct Fd *fd, const void *buf, size_t n) +{ + // Make an FSREQ_WRITE request to the file system server. Be + // careful: fsipcbuf.write.req_buf is only so large, but + // remember that write is always allowed to write *fewer* + // bytes than requested. + // LAB 5: Your code here + panic("devfile_write not implemented"); +} + +static int +devfile_stat(struct Fd *fd, struct Stat *st) +{ + int r; + + fsipcbuf.stat.req_fileid = fd->fd_file.id; + if ((r = fsipc(FSREQ_STAT, NULL)) < 0) + return r; + strcpy(st->st_name, fsipcbuf.statRet.ret_name); + st->st_size = fsipcbuf.statRet.ret_size; + st->st_isdir = fsipcbuf.statRet.ret_isdir; + return 0; +} + +// Truncate or extend an open file to 'size' bytes +static int +devfile_trunc(struct Fd *fd, off_t newsize) +{ + fsipcbuf.set_size.req_fileid = fd->fd_file.id; + fsipcbuf.set_size.req_size = newsize; + return fsipc(FSREQ_SET_SIZE, NULL); +} + + +// Synchronize disk with buffer cache +int +sync(void) +{ + // Ask the file server to update the disk + // by writing any dirty blocks in the buffer cache. + + return fsipc(FSREQ_SYNC, NULL); +} + diff --git a/lab/Untitled Project.si4project/Backup/fork(6291).c b/lab/Untitled Project.si4project/Backup/fork(6291).c new file mode 100644 index 0000000..644e0c9 --- /dev/null +++ b/lab/Untitled Project.si4project/Backup/fork(6291).c @@ -0,0 +1,167 @@ +// implement fork from user space + +#include +#include + +// PTE_COW marks copy-on-write page table entries. +// It is one of the bits explicitly allocated to user processes (PTE_AVAIL). +#define PTE_COW 0x800 + +// +// Custom page fault handler - if faulting page is copy-on-write, +// map in our own private writable copy. +// +static void +pgfault(struct UTrapframe *utf) +{ + void *addr = (void *) utf->utf_fault_va; + uint32_t err = utf->utf_err; + int r; + + // Check that the faulting access was (1) a write, and (2) to a + // copy-on-write page. If not, panic. + // Hint: + // Use the read-only page table mappings at uvpt + // (see ). + + // LAB 4: Your code here. + if (! ( (err & FEC_WR) && (uvpd[PDX(addr)] & PTE_P) && (uvpt[PGNUM(addr)] & PTE_P) && (uvpt[PGNUM(addr)] & PTE_COW))) + panic("Neither the fault is a write nor COW page. \n"); + // Allocate a new page, map it at a temporary location (PFTEMP), + // copy the data from the old page to the new page, then move the new + // page to the old page's address. + // Hint: + // You should make three system calls. + + // LAB 4: Your code here. + envid_t envid = sys_getenvid(); + // cprintf("pgfault: envid: %d\n", ENVX(envid)); + // 临时页暂存 + if ((r = sys_page_alloc(envid, (void *)PFTEMP, PTE_P| PTE_W|PTE_U)) < 0) + panic("pgfault: page allocation fault:%e\n", r); + addr = ROUNDDOWN(addr, PGSIZE); + memcpy((void *) PFTEMP, (const void *) addr, PGSIZE); + if ((r = sys_page_map(envid, (void *) PFTEMP, envid, addr , PTE_P|PTE_W|PTE_U)) < 0 ) + panic("pgfault: page map failed %e\n", r); + + if ((r = sys_page_unmap(envid, (void *) PFTEMP)) < 0) + panic("pgfault: page unmap failed %e\n", r); + + + + // panic("pgfault not implemented"); +} + +// +// Map our virtual page pn (address pn*PGSIZE) into the target envid +// at the same virtual address. If the page is writable or copy-on-write, +// the new mapping must be created copy-on-write, and then our mapping must be +// marked copy-on-write as well. (Exercise: Why do we need to mark ours +// copy-on-write again if it was already copy-on-write at the beginning of +// this function?) +// +// Returns: 0 on success, < 0 on error. +// It is also OK to panic on error. +// + +static int +duppage(envid_t envid, unsigned pn) +{ + + // LAB 4: Your code here. + pte_t *pte; + int ret; + // 用户空间的地址较低 + uint32_t va = pn * PGSIZE; + + + if ( (uvpt[pn] & PTE_W) || (uvpt[pn] & PTE_COW)) { + + // 子进程标记 + if ((ret = sys_page_map(thisenv->env_id, (void *) va, envid, (void *) va, PTE_P|PTE_U|PTE_COW)) < 0) + return ret; + // 父进程标记 + if ((ret = sys_page_map(thisenv->env_id, (void *)va, thisenv->env_id, (void *)va, PTE_P|PTE_U|PTE_COW)) < 0) + return ret; + } + else { + // 简单映射 + if((ret = sys_page_map(thisenv->env_id, (void *) va, envid, (void * )va, PTE_P|PTE_U)) <0 ) + return ret; + } + + return 0; + // panic("duppage not implemented"); +} + + +// +// User-level fork with copy-on-write. +// Set up our page fault handler appropriately. +// Create a child. +// Copy our address space and page fault handler setup to the child. +// Then mark the child as runnable and return. +// +// Returns: child's envid to the parent, 0 to the child, < 0 on error. +// It is also OK to panic on error. +// +// Hint: +// Use uvpd, uvpt, and duppage. +// Remember to fix "thisenv" in the child process. +// Neither user exception stack should ever be marked copy-on-write, +// so you must allocate a new page for the child's user exception stack. +// +envid_t +fork(void) +{ + // LAB 4: Your code here. + envid_t envid; + int r; + size_t i, j, pn; + // Set up our page fault handler + set_pgfault_handler(pgfault); + + envid = sys_exofork(); + + if (envid < 0) { + panic("sys_exofork failed: %e", envid); + } + + if (envid == 0) { + // child + thisenv = &envs[ENVX(sys_getenvid())]; + return 0; + } + // here is parent ! + // Copy our address space and page fault handler setup to the child. + + for (pn = PGNUM(UTEXT); pn < PGNUM(USTACKTOP); pn++) { + if ( (uvpd[pn >> 10] & PTE_P) && (uvpt[pn] & PTE_P)) { + // 页表 + if ( (r = duppage(envid, pn)) < 0) + return r; + + } + } + // alloc a page and map child exception stack + if ((r = sys_page_alloc(envid, (void *)(UXSTACKTOP-PGSIZE), PTE_U | PTE_P | PTE_W)) < 0) + return r; + extern void _pgfault_upcall(void); + if ((r = sys_env_set_pgfault_upcall(envid, _pgfault_upcall)) < 0) + return r; + + // Start the child environment running + if ((r = sys_env_set_status(envid, ENV_RUNNABLE)) < 0) + panic("sys_env_set_status: %e", r); + + return envid; + // panic("fork not implemented"); +} + +// Challenge! +int +sfork(void) +{ + panic("sfork not implemented"); + return -E_INVAL; +} diff --git a/lab/Untitled Project.si4project/Backup/fs(6931).c b/lab/Untitled Project.si4project/Backup/fs(6931).c new file mode 100644 index 0000000..45ecaf8 --- /dev/null +++ b/lab/Untitled Project.si4project/Backup/fs(6931).c @@ -0,0 +1,456 @@ +#include +#include + +#include "fs.h" + +// -------------------------------------------------------------- +// Super block +// -------------------------------------------------------------- + +// Validate the file system super-block. +void +check_super(void) +{ + if (super->s_magic != FS_MAGIC) + panic("bad file system magic number"); + + if (super->s_nblocks > DISKSIZE/BLKSIZE) + panic("file system is too large"); + + cprintf("superblock is good\n"); +} + +// -------------------------------------------------------------- +// Free block bitmap +// -------------------------------------------------------------- + +// Check to see if the block bitmap indicates that block 'blockno' is free. +// Return 1 if the block is free, 0 if not. +bool +block_is_free(uint32_t blockno) +{ + if (super == 0 || blockno >= super->s_nblocks) + return 0; + if (bitmap[blockno / 32] & (1 << (blockno % 32))) + return 1; + return 0; +} + +// Mark a block free in the bitmap +void +free_block(uint32_t blockno) +{ + // Blockno zero is the null pointer of block numbers. + if (blockno == 0) + panic("attempt to free zero block"); + bitmap[blockno/32] |= 1<<(blockno%32); +} + +// Search the bitmap for a free block and allocate it. When you +// allocate a block, immediately flush the changed bitmap block +// to disk. +// +// Return block number allocated on success, +// -E_NO_DISK if we are out of blocks. +// +// Hint: use free_block as an example for manipulating the bitmap. +int +alloc_block(void) +{ + // The bitmap consists of one or more blocks. A single bitmap block + // contains the in-use bits for BLKBITSIZE blocks. There are + // super->s_nblocks blocks in the disk altogether. + + // LAB 5: Your code here. + panic("alloc_block not implemented"); + return -E_NO_DISK; +} + +// Validate the file system bitmap. +// +// Check that all reserved blocks -- 0, 1, and the bitmap blocks themselves -- +// are all marked as in-use. +void +check_bitmap(void) +{ + uint32_t i; + + // Make sure all bitmap blocks are marked in-use + for (i = 0; i * BLKBITSIZE < super->s_nblocks; i++) + assert(!block_is_free(2+i)); + + // Make sure the reserved and root blocks are marked in-use. + assert(!block_is_free(0)); + assert(!block_is_free(1)); + + cprintf("bitmap is good\n"); +} + +// -------------------------------------------------------------- +// File system structures +// -------------------------------------------------------------- + + + +// Initialize the file system +void +fs_init(void) +{ + static_assert(sizeof(struct File) == 256); + + // Find a JOS disk. Use the second IDE disk (number 1) if available + if (ide_probe_disk1()) + ide_set_disk(1); + else + ide_set_disk(0); + bc_init(); + + // Set "super" to point to the super block. + super = diskaddr(1); + check_super(); + + // Set "bitmap" to the beginning of the first bitmap block. + bitmap = diskaddr(2); + check_bitmap(); + +} + +// Find the disk block number slot for the 'filebno'th block in file 'f'. +// Set '*ppdiskbno' to point to that slot. +// The slot will be one of the f->f_direct[] entries, +// or an entry in the indirect block. +// When 'alloc' is set, this function will allocate an indirect block +// if necessary. +// +// Returns: +// 0 on success (but note that *ppdiskbno might equal 0). +// -E_NOT_FOUND if the function needed to allocate an indirect block, but +// alloc was 0. +// -E_NO_DISK if there's no space on the disk for an indirect block. +// -E_INVAL if filebno is out of range (it's >= NDIRECT + NINDIRECT). +// +// Analogy: This is like pgdir_walk for files. +// Hint: Don't forget to clear any block you allocate. +static int +file_block_walk(struct File *f, uint32_t filebno, uint32_t **ppdiskbno, bool alloc) +{ + // LAB 5: Your code here. + panic("file_block_walk not implemented"); +} + +// Set *blk to the address in memory where the filebno'th +// block of file 'f' would be mapped. +// +// Returns 0 on success, < 0 on error. Errors are: +// -E_NO_DISK if a block needed to be allocated but the disk is full. +// -E_INVAL if filebno is out of range. +// +// Hint: Use file_block_walk and alloc_block. +int +file_get_block(struct File *f, uint32_t filebno, char **blk) +{ + // LAB 5: Your code here. + panic("file_get_block not implemented"); +} + +// Try to find a file named "name" in dir. If so, set *file to it. +// +// Returns 0 and sets *file on success, < 0 on error. Errors are: +// -E_NOT_FOUND if the file is not found +static int +dir_lookup(struct File *dir, const char *name, struct File **file) +{ + int r; + uint32_t i, j, nblock; + char *blk; + struct File *f; + + // Search dir for name. + // We maintain the invariant that the size of a directory-file + // is always a multiple of the file system's block size. + assert((dir->f_size % BLKSIZE) == 0); + nblock = dir->f_size / BLKSIZE; + for (i = 0; i < nblock; i++) { + if ((r = file_get_block(dir, i, &blk)) < 0) + return r; + f = (struct File*) blk; + for (j = 0; j < BLKFILES; j++) + if (strcmp(f[j].f_name, name) == 0) { + *file = &f[j]; + return 0; + } + } + return -E_NOT_FOUND; +} + +// Set *file to point at a free File structure in dir. The caller is +// responsible for filling in the File fields. +static int +dir_alloc_file(struct File *dir, struct File **file) +{ + int r; + uint32_t nblock, i, j; + char *blk; + struct File *f; + + assert((dir->f_size % BLKSIZE) == 0); + nblock = dir->f_size / BLKSIZE; + for (i = 0; i < nblock; i++) { + if ((r = file_get_block(dir, i, &blk)) < 0) + return r; + f = (struct File*) blk; + for (j = 0; j < BLKFILES; j++) + if (f[j].f_name[0] == '\0') { + *file = &f[j]; + return 0; + } + } + dir->f_size += BLKSIZE; + if ((r = file_get_block(dir, i, &blk)) < 0) + return r; + f = (struct File*) blk; + *file = &f[0]; + return 0; +} + +// Skip over slashes. +static const char* +skip_slash(const char *p) +{ + while (*p == '/') + p++; + return p; +} + +// Evaluate a path name, starting at the root. +// On success, set *pf to the file we found +// and set *pdir to the directory the file is in. +// If we cannot find the file but find the directory +// it should be in, set *pdir and copy the final path +// element into lastelem. +static int +walk_path(const char *path, struct File **pdir, struct File **pf, char *lastelem) +{ + const char *p; + char name[MAXNAMELEN]; + struct File *dir, *f; + int r; + + // if (*path != '/') + // return -E_BAD_PATH; + path = skip_slash(path); + f = &super->s_root; + dir = 0; + name[0] = 0; + + if (pdir) + *pdir = 0; + *pf = 0; + while (*path != '\0') { + dir = f; + p = path; + while (*path != '/' && *path != '\0') + path++; + if (path - p >= MAXNAMELEN) + return -E_BAD_PATH; + memmove(name, p, path - p); + name[path - p] = '\0'; + path = skip_slash(path); + + if (dir->f_type != FTYPE_DIR) + return -E_NOT_FOUND; + + if ((r = dir_lookup(dir, name, &f)) < 0) { + if (r == -E_NOT_FOUND && *path == '\0') { + if (pdir) + *pdir = dir; + if (lastelem) + strcpy(lastelem, name); + *pf = 0; + } + return r; + } + } + + if (pdir) + *pdir = dir; + *pf = f; + return 0; +} + +// -------------------------------------------------------------- +// File operations +// -------------------------------------------------------------- + +// Create "path". On success set *pf to point at the file and return 0. +// On error return < 0. +int +file_create(const char *path, struct File **pf) +{ + char name[MAXNAMELEN]; + int r; + struct File *dir, *f; + + if ((r = walk_path(path, &dir, &f, name)) == 0) + return -E_FILE_EXISTS; + if (r != -E_NOT_FOUND || dir == 0) + return r; + if ((r = dir_alloc_file(dir, &f)) < 0) + return r; + + strcpy(f->f_name, name); + *pf = f; + file_flush(dir); + return 0; +} + +// Open "path". On success set *pf to point at the file and return 0. +// On error return < 0. +int +file_open(const char *path, struct File **pf) +{ + return walk_path(path, 0, pf, 0); +} + +// Read count bytes from f into buf, starting from seek position +// offset. This meant to mimic the standard pread function. +// Returns the number of bytes read, < 0 on error. +ssize_t +file_read(struct File *f, void *buf, size_t count, off_t offset) +{ + int r, bn; + off_t pos; + char *blk; + + if (offset >= f->f_size) + return 0; + + count = MIN(count, f->f_size - offset); + + for (pos = offset; pos < offset + count; ) { + if ((r = file_get_block(f, pos / BLKSIZE, &blk)) < 0) + return r; + bn = MIN(BLKSIZE - pos % BLKSIZE, offset + count - pos); + memmove(buf, blk + pos % BLKSIZE, bn); + pos += bn; + buf += bn; + } + + return count; +} + + +// Write count bytes from buf into f, starting at seek position +// offset. This is meant to mimic the standard pwrite function. +// Extends the file if necessary. +// Returns the number of bytes written, < 0 on error. +int +file_write(struct File *f, const void *buf, size_t count, off_t offset) +{ + int r, bn; + off_t pos; + char *blk; + + // Extend file if necessary + if (offset + count > f->f_size) + if ((r = file_set_size(f, offset + count)) < 0) + return r; + + for (pos = offset; pos < offset + count; ) { + if ((r = file_get_block(f, pos / BLKSIZE, &blk)) < 0) + return r; + bn = MIN(BLKSIZE - pos % BLKSIZE, offset + count - pos); + memmove(blk + pos % BLKSIZE, buf, bn); + pos += bn; + buf += bn; + } + + return count; +} + +// Remove a block from file f. If it's not there, just silently succeed. +// Returns 0 on success, < 0 on error. +static int +file_free_block(struct File *f, uint32_t filebno) +{ + int r; + uint32_t *ptr; + + if ((r = file_block_walk(f, filebno, &ptr, 0)) < 0) + return r; + if (*ptr) { + free_block(*ptr); + *ptr = 0; + } + return 0; +} + +// Remove any blocks currently used by file 'f', +// but not necessary for a file of size 'newsize'. +// For both the old and new sizes, figure out the number of blocks required, +// and then clear the blocks from new_nblocks to old_nblocks. +// If the new_nblocks is no more than NDIRECT, and the indirect block has +// been allocated (f->f_indirect != 0), then free the indirect block too. +// (Remember to clear the f->f_indirect pointer so you'll know +// whether it's valid!) +// Do not change f->f_size. +static void +file_truncate_blocks(struct File *f, off_t newsize) +{ + int r; + uint32_t bno, old_nblocks, new_nblocks; + + old_nblocks = (f->f_size + BLKSIZE - 1) / BLKSIZE; + new_nblocks = (newsize + BLKSIZE - 1) / BLKSIZE; + for (bno = new_nblocks; bno < old_nblocks; bno++) + if ((r = file_free_block(f, bno)) < 0) + cprintf("warning: file_free_block: %e", r); + + if (new_nblocks <= NDIRECT && f->f_indirect) { + free_block(f->f_indirect); + f->f_indirect = 0; + } +} + +// Set the size of file f, truncating or extending as necessary. +int +file_set_size(struct File *f, off_t newsize) +{ + if (f->f_size > newsize) + file_truncate_blocks(f, newsize); + f->f_size = newsize; + flush_block(f); + return 0; +} + +// Flush the contents and metadata of file f out to disk. +// Loop over all the blocks in file. +// Translate the file block number into a disk block number +// and then check whether that disk block is dirty. If so, write it out. +void +file_flush(struct File *f) +{ + int i; + uint32_t *pdiskbno; + + for (i = 0; i < (f->f_size + BLKSIZE - 1) / BLKSIZE; i++) { + if (file_block_walk(f, i, &pdiskbno, 0) < 0 || + pdiskbno == NULL || *pdiskbno == 0) + continue; + flush_block(diskaddr(*pdiskbno)); + } + flush_block(f); + if (f->f_indirect) + flush_block(diskaddr(f->f_indirect)); +} + + +// Sync the entire file system. A big hammer. +void +fs_sync(void) +{ + int i; + for (i = 1; i < super->s_nblocks; i++) + flush_block(diskaddr(i)); +} + diff --git a/lab/Untitled Project.si4project/Backup/fs(7516).c b/lab/Untitled Project.si4project/Backup/fs(7516).c new file mode 100644 index 0000000..0b9b76e --- /dev/null +++ b/lab/Untitled Project.si4project/Backup/fs(7516).c @@ -0,0 +1,515 @@ +#include +#include + +#include "fs.h" + +// -------------------------------------------------------------- +// Super block +// -------------------------------------------------------------- + +// Validate the file system super-block. +void +check_super(void) +{ + if (super->s_magic != FS_MAGIC) + panic("bad file system magic number"); + + if (super->s_nblocks > DISKSIZE/BLKSIZE) + panic("file system is too large"); + + cprintf("superblock is good\n"); +} + +// -------------------------------------------------------------- +// Free block bitmap +// -------------------------------------------------------------- + +// Check to see if the block bitmap indicates that block 'blockno' is free. +// Return 1 if the block is free, 0 if not. +bool +block_is_free(uint32_t blockno) +{ + if (super == 0 || blockno >= super->s_nblocks) + return 0; + if (bitmap[blockno / 32] & (1 << (blockno % 32))) + return 1; + return 0; +} + +// Mark a block free in the bitmap +void +free_block(uint32_t blockno) +{ + // Blockno zero is the null pointer of block numbers. + // 0 块启动块 + if (blockno == 0) + panic("attempt to free zero block"); + bitmap[blockno/32] |= 1<<(blockno%32); +} + +// Search the bitmap for a free block and allocate it. When you +// allocate a block, immediately flush the changed bitmap block +// to disk. +// +// Return block number allocated on success, +// -E_NO_DISK if we are out of blocks. +// +// Hint: use free_block as an example for manipulating the bitmap. +int +alloc_block(void) +{ + // The bitmap consists of one or more blocks. A single bitmap block + // contains the in-use bits for BLKBITSIZE blocks. There are + // super->s_nblocks blocks in the disk altogether. + + // LAB 5: Your code here. + size_t i; + for(i=1; i < super->s_nblocks; i++) { + if (block_is_free(i)) { + bitmap[i/32] &= ~(1<<(i%32)); + flush_block(&bitmap[i/32]); + return i; + } + } + // panic("alloc_block not implemented"); + return -E_NO_DISK; +} + +// Validate the file system bitmap. +// +// Check that all reserved blocks -- 0, 1, and the bitmap blocks themselves -- +// are all marked as in-use. +void +check_bitmap(void) +{ + uint32_t i; + + // Make sure all bitmap blocks are marked in-use + for (i = 0; i * BLKBITSIZE < super->s_nblocks; i++) + assert(!block_is_free(2+i)); + + // Make sure the reserved and root blocks are marked in-use. + assert(!block_is_free(0)); + assert(!block_is_free(1)); + + cprintf("bitmap is good\n"); +} + +// -------------------------------------------------------------- +// File system structures +// -------------------------------------------------------------- + + + +// Initialize the file system +void +fs_init(void) +{ + static_assert(sizeof(struct File) == 256); + + // Find a JOS disk. Use the second IDE disk (number 1) if available + if (ide_probe_disk1()) + ide_set_disk(1); + else + ide_set_disk(0); + bc_init(); + + // Set "super" to point to the super block. + super = diskaddr(1); + check_super(); + + // Set "bitmap" to the beginning of the first bitmap block. + bitmap = diskaddr(2); + check_bitmap(); + +} + +// Find the disk block number slot for the 'filebno'th block in file 'f'. +// Set '*ppdiskbno' to point to that slot. +// The slot will be one of the f->f_direct[] entries, +// or an entry in the indirect block. +// When 'alloc' is set, this function will allocate an indirect block +// if necessary. +// +// Returns: +// 0 on success (but note that *ppdiskbno might equal 0). +// -E_NOT_FOUND if the function needed to allocate an indirect block, but +// alloc was 0. +// -E_NO_DISK if there's no space on the disk for an indirect block. +// -E_INVAL if filebno is out of range (it's >= NDIRECT + NINDIRECT). +// +// Analogy: This is like pgdir_walk for files. +// Hint: Don't forget to clear any block you allocate. +static int +file_block_walk(struct File *f, uint32_t filebno, uint32_t **ppdiskbno, bool alloc) +{ + // LAB 5: Your code here. + // ppdiskbno 块指针 + if (filebno < NDIRECT) { + // but note that *ppdiskbno might equal 0 + if(ppdiskbno) + *ppdiskbno = &(f->f_direct[filebno]); + + return 0; + } + + if (filebno >= (NDIRECT + NINDIRECT)) + return -E_INVAL; + + filebno -= NDIRECT; + // indirect 还未分配 + if (!f->f_indirect) { + if (alloc == 0) + return -E_NOT_FOUND; + // 分配一个 indirect block + uint32_t blockno; + if ( (blockno = alloc_block()) < 0) + return blockno; + // f_indirect 直接记录块号,而不是记地址 + // f->f_indirect = (uint32_t)diskaddr(blockno); + f->f_indirect = blockno; + memset(diskaddr(blockno), 0, BLKSIZE); + flush_block(diskaddr(blockno)); + } + if (ppdiskbno) + *ppdiskbno = (uint32_t *)diskaddr(f->f_indirect) + filebno; + return 0; + // panic("file_block_walk not implemented"); +} + +// Set *blk to the address in memory where the filebno'th +// block of file 'f' would be mapped. +// +// Returns 0 on success, < 0 on error. Errors are: +// -E_NO_DISK if a block needed to be allocated but the disk is full. +// -E_INVAL if filebno is out of range. +// +// Hint: Use file_block_walk and alloc_block. +int +file_get_block(struct File *f, uint32_t filebno, char **blk) +{ + // LAB 5: Your code here. + uint32_t *pdiskbno; + int r; + if ( (r = file_block_walk(f, filebno, &pdiskbno, 1))< 0) + return r; + + if(*pdiskbno == 0) { + // 文件块还未分配 + if ( (r = alloc_block()) < 0) + return r; + *pdiskbno = r; + memset(diskaddr(r), 0, BLKSIZE); + flush_block(diskaddr(r)); + } + + // 最终指向块 + *blk = diskaddr(*pdiskbno); + return 0; + //panic("file_get_block not implemented"); +} + +// Try to find a file named "name" in dir. If so, set *file to it. +// +// Returns 0 and sets *file on success, < 0 on error. Errors are: +// -E_NOT_FOUND if the file is not found +static int +dir_lookup(struct File *dir, const char *name, struct File **file) +{ + int r; + uint32_t i, j, nblock; + char *blk; + struct File *f; + + // Search dir for name. + // We maintain the invariant that the size of a directory-file + // is always a multiple of the file system's block size. + // 目录size 必须为 文件系统块size的倍数。 + assert((dir->f_size % BLKSIZE) == 0); + nblock = dir->f_size / BLKSIZE; + for (i = 0; i < nblock; i++) { + if ((r = file_get_block(dir, i, &blk)) < 0) + return r; + f = (struct File*) blk; + for (j = 0; j < BLKFILES; j++) + // 不会出现子目录与文件同名吗? + if (strcmp(f[j].f_name, name) == 0) { + *file = &f[j]; + return 0; + } + } + return -E_NOT_FOUND; +} + +// Set *file to point at a free File structure in dir. The caller is +// responsible for filling in the File fields. +static int +dir_alloc_file(struct File *dir, struct File **file) +{ + int r; + uint32_t nblock, i, j; + char *blk; + struct File *f; + + assert((dir->f_size % BLKSIZE) == 0); + nblock = dir->f_size / BLKSIZE; + for (i = 0; i < nblock; i++) { + if ((r = file_get_block(dir, i, &blk)) < 0) + return r; + f = (struct File*) blk; + for (j = 0; j < BLKFILES; j++) + if (f[j].f_name[0] == '\0') { + *file = &f[j]; + return 0; + } + } + // 目录里没有空项,增添一个块 + dir->f_size += BLKSIZE; + if ((r = file_get_block(dir, i, &blk)) < 0) + return r; + f = (struct File*) blk; + *file = &f[0]; + return 0; +} + +// Skip over slashes. +static const char* +skip_slash(const char *p) +{ + while (*p == '/') + p++; + return p; +} + +// Evaluate a path name, starting at the root. +// On success, set *pf to the file we found +// and set *pdir to the directory the file is in. +// If we cannot find the file but find the directory +// it should be in, set *pdir and copy the final path +// element into lastelem. +static int +walk_path(const char *path, struct File **pdir, struct File **pf, char *lastelem) +{ + const char *p; + char name[MAXNAMELEN]; + struct File *dir, *f; + int r; + + // if (*path != '/') + // return -E_BAD_PATH; + path = skip_slash(path); + f = &super->s_root; + dir = 0; + name[0] = 0; + + if (pdir) + *pdir = 0; + *pf = 0; + while (*path != '\0') { + dir = f; + p = path; + while (*path != '/' && *path != '\0') + path++; + if (path - p >= MAXNAMELEN) + return -E_BAD_PATH; + memmove(name, p, path - p); + name[path - p] = '\0'; + path = skip_slash(path); + + if (dir->f_type != FTYPE_DIR) + return -E_NOT_FOUND; + + if ((r = dir_lookup(dir, name, &f)) < 0) { + if (r == -E_NOT_FOUND && *path == '\0') { + if (pdir) + *pdir = dir; + if (lastelem) + strcpy(lastelem, name); + *pf = 0; + } + return r; + } + } + + if (pdir) + *pdir = dir; + *pf = f; + return 0; +} + +// -------------------------------------------------------------- +// File operations +// -------------------------------------------------------------- + +// Create "path". On success set *pf to point at the file and return 0. +// On error return < 0. +int +file_create(const char *path, struct File **pf) +{ + char name[MAXNAMELEN]; + int r; + struct File *dir, *f; + + if ((r = walk_path(path, &dir, &f, name)) == 0) + return -E_FILE_EXISTS; + if (r != -E_NOT_FOUND || dir == 0) + return r; + if ((r = dir_alloc_file(dir, &f)) < 0) + return r; + + strcpy(f->f_name, name); + *pf = f; + file_flush(dir); + return 0; +} + +// Open "path". On success set *pf to point at the file and return 0. +// On error return < 0. +int +file_open(const char *path, struct File **pf) +{ + return walk_path(path, 0, pf, 0); +} + +// Read count bytes from f into buf, starting from seek position +// offset. This meant to mimic the standard pread function. +// Returns the number of bytes read, < 0 on error. +ssize_t +file_read(struct File *f, void *buf, size_t count, off_t offset) +{ + int r, bn; + off_t pos; + char *blk; + + if (offset >= f->f_size) + return 0; + + count = MIN(count, f->f_size - offset); + + for (pos = offset; pos < offset + count; ) { + if ((r = file_get_block(f, pos / BLKSIZE, &blk)) < 0) + return r; + bn = MIN(BLKSIZE - pos % BLKSIZE, offset + count - pos); + memmove(buf, blk + pos % BLKSIZE, bn); + pos += bn; + buf += bn; + } + + return count; +} + + +// Write count bytes from buf into f, starting at seek position +// offset. This is meant to mimic the standard pwrite function. +// Extends the file if necessary. +// Returns the number of bytes written, < 0 on error. +int +file_write(struct File *f, const void *buf, size_t count, off_t offset) +{ + int r, bn; + off_t pos; + char *blk; + + // Extend file if necessary + if (offset + count > f->f_size) + if ((r = file_set_size(f, offset + count)) < 0) + return r; + + for (pos = offset; pos < offset + count; ) { + if ((r = file_get_block(f, pos / BLKSIZE, &blk)) < 0) + return r; + bn = MIN(BLKSIZE - pos % BLKSIZE, offset + count - pos); + memmove(blk + pos % BLKSIZE, buf, bn); + pos += bn; + buf += bn; + } + + return count; +} + +// Remove a block from file f. If it's not there, just silently succeed. +// Returns 0 on success, < 0 on error. +static int +file_free_block(struct File *f, uint32_t filebno) +{ + int r; + uint32_t *ptr; + + if ((r = file_block_walk(f, filebno, &ptr, 0)) < 0) + return r; + if (*ptr) { + free_block(*ptr); + *ptr = 0; + } + return 0; +} + +// Remove any blocks currently used by file 'f', +// but not necessary for a file of size 'newsize'. +// For both the old and new sizes, figure out the number of blocks required, +// and then clear the blocks from new_nblocks to old_nblocks. +// If the new_nblocks is no more than NDIRECT, and the indirect block has +// been allocated (f->f_indirect != 0), then free the indirect block too. +// (Remember to clear the f->f_indirect pointer so you'll know +// whether it's valid!) +// Do not change f->f_size. +static void +file_truncate_blocks(struct File *f, off_t newsize) +{ + int r; + uint32_t bno, old_nblocks, new_nblocks; + + old_nblocks = (f->f_size + BLKSIZE - 1) / BLKSIZE; + new_nblocks = (newsize + BLKSIZE - 1) / BLKSIZE; + for (bno = new_nblocks; bno < old_nblocks; bno++) + if ((r = file_free_block(f, bno)) < 0) + cprintf("warning: file_free_block: %e", r); + + if (new_nblocks <= NDIRECT && f->f_indirect) { + free_block(f->f_indirect); + f->f_indirect = 0; + } +} + +// Set the size of file f, truncating or extending as necessary. +int +file_set_size(struct File *f, off_t newsize) +{ + if (f->f_size > newsize) + file_truncate_blocks(f, newsize); + f->f_size = newsize; + flush_block(f); + return 0; +} + +// Flush the contents and metadata of file f out to disk. +// Loop over all the blocks in file. +// Translate the file block number into a disk block number +// and then check whether that disk block is dirty. If so, write it out. +void +file_flush(struct File *f) +{ + int i; + uint32_t *pdiskbno; + + for (i = 0; i < (f->f_size + BLKSIZE - 1) / BLKSIZE; i++) { + if (file_block_walk(f, i, &pdiskbno, 0) < 0 || + pdiskbno == NULL || *pdiskbno == 0) + continue; + flush_block(diskaddr(*pdiskbno)); + } + flush_block(f); + if (f->f_indirect) + flush_block(diskaddr(f->f_indirect)); +} + + +// Sync the entire file system. A big hammer. +void +fs_sync(void) +{ + int i; + for (i = 1; i < super->s_nblocks; i++) + flush_block(diskaddr(i)); +} + diff --git a/lab/Untitled Project.si4project/Backup/init(5052).c b/lab/Untitled Project.si4project/Backup/init(5052).c new file mode 100644 index 0000000..0ca8221 --- /dev/null +++ b/lab/Untitled Project.si4project/Backup/init(5052).c @@ -0,0 +1,180 @@ +/* See COPYRIGHT for copyright information. */ + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static void boot_aps(void); + + +void +i386_init(void) +{ + // Initialize the console. + // Can't call cprintf until after we do this! + cons_init(); + + cprintf("6828 decimal is %o octal!\n", 6828); + + // Lab 2 memory management initialization functions + mem_init(); + + // Lab 3 user environment initialization functions + env_init(); + trap_init(); + + // Lab 4 multiprocessor initialization functions + mp_init(); + lapic_init(); + + // Lab 4 multitasking initialization functions + pic_init(); + + // Acquire the big kernel lock before waking up APs + // Your code here: + lock_kernel(); + // Starting non-boot CPUs + boot_aps(); + + // Start fs. + ENV_CREATE(fs_fs, ENV_TYPE_FS); + +#if defined(TEST) + // Don't touch -- used by grading script! + ENV_CREATE(TEST, ENV_TYPE_USER); +#else + // Touch all you want. +<<<<<<< HEAD + ENV_CREATE(user_icode, ENV_TYPE_USER); +======= + //ENV_CREATE(user_primes, ENV_TYPE_USER); + ENV_CREATE(user_yield, ENV_TYPE_USER); + ENV_CREATE(user_yield, ENV_TYPE_USER); + ENV_CREATE(user_yield, ENV_TYPE_USER); + ENV_CREATE(user_yield, ENV_TYPE_USER); + + +>>>>>>> lab4 +#endif // TEST* + + // Should not be necessary - drains keyboard because interrupt has given up. + kbd_intr(); + + // Schedule and run the first user environment! + sched_yield(); +} + +// While boot_aps is booting a given CPU, it communicates the per-core +// stack pointer that should be loaded by mpentry.S to that CPU in +// this variable. +void *mpentry_kstack; + +// Start the non-boot (AP) processors. +static void +boot_aps(void) +{ + extern unsigned char mpentry_start[], mpentry_end[]; + void *code; + struct CpuInfo *c; + + // Write entry code to unused memory at MPENTRY_PADDR + code = KADDR(MPENTRY_PADDR); + memmove(code, mpentry_start, mpentry_end - mpentry_start); + + // Boot each AP one at a time + for (c = cpus; c < cpus + ncpu; c++) { + if (c == cpus + cpunum()) // We've started already. + continue; + + // Tell mpentry.S what stack to use + mpentry_kstack = percpu_kstacks[c - cpus] + KSTKSIZE; + // Start the CPU at mpentry_start + lapic_startap(c->cpu_id, PADDR(code)); + // Wait for the CPU to finish some basic setup in mp_main() + while(c->cpu_status != CPU_STARTED) + ; + } +} + +// Setup code for APs +void +mp_main(void) +{ + // We are in high EIP now, safe to switch to kern_pgdir + lcr3(PADDR(kern_pgdir)); + cprintf("SMP: CPU %d starting\n", cpunum()); + + lapic_init(); + env_init_percpu(); + trap_init_percpu(); + xchg(&thiscpu->cpu_status, CPU_STARTED); // tell boot_aps() we're up + + // Now that we have finished some basic setup, call sched_yield() + // to start running processes on this CPU. But make sure that + // only one CPU can enter the scheduler at a time! + // + // Your code here: + lock_kernel(); + + sched_yield(); + // Remove this after you finish Exercise 6 + for (;;); +} + +/* + * Variable panicstr contains argument to first call to panic; used as flag + * to indicate that the kernel has already called panic. + */ +const char *panicstr; + +/* + * Panic is called on unresolvable fatal errors. + * It prints "panic: mesg", and then enters the kernel monitor. + */ +void +_panic(const char *file, int line, const char *fmt,...) +{ + va_list ap; + + if (panicstr) + goto dead; + panicstr = fmt; + + // Be extra sure that the machine is in as reasonable state + asm volatile("cli; cld"); + + va_start(ap, fmt); + cprintf("kernel panic on CPU %d at %s:%d: ", cpunum(), file, line); + vcprintf(fmt, ap); + cprintf("\n"); + va_end(ap); + +dead: + /* break into the kernel monitor */ + while (1) + monitor(NULL); +} + +/* like panic, but don't */ +void +_warn(const char *file, int line, const char *fmt,...) +{ + va_list ap; + + va_start(ap, fmt); + cprintf("kernel warning at %s:%d: ", file, line); + vcprintf(fmt, ap); + cprintf("\n"); + va_end(ap); +} diff --git a/lab/Untitled Project.si4project/Backup/init(7465).c b/lab/Untitled Project.si4project/Backup/init(7465).c new file mode 100644 index 0000000..afe4745 --- /dev/null +++ b/lab/Untitled Project.si4project/Backup/init(7465).c @@ -0,0 +1,174 @@ +/* See COPYRIGHT for copyright information. */ + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static void boot_aps(void); + + +void +i386_init(void) +{ + // Initialize the console. + // Can't call cprintf until after we do this! + cons_init(); + + cprintf("6828 decimal is %o octal!\n", 6828); + + // Lab 2 memory management initialization functions + mem_init(); + + // Lab 3 user environment initialization functions + env_init(); + trap_init(); + + // Lab 4 multiprocessor initialization functions + mp_init(); + lapic_init(); + + // Lab 4 multitasking initialization functions + pic_init(); + + // Acquire the big kernel lock before waking up APs + // Your code here: + lock_kernel(); + // Starting non-boot CPUs + boot_aps(); + + // Start fs. + ENV_CREATE(fs_fs, ENV_TYPE_FS); + +#if defined(TEST) + // Don't touch -- used by grading script! + ENV_CREATE(TEST, ENV_TYPE_USER); +#else + // Touch all you want. + ENV_CREATE(user_yield, ENV_TYPE_USER); + ENV_CREATE(user_yield, ENV_TYPE_USER); + ENV_CREATE(user_yield, ENV_TYPE_USER); + ENV_CREATE(user_yield, ENV_TYPE_USER); + +#endif // TEST* + + // Should not be necessary - drains keyboard because interrupt has given up. + kbd_intr(); + + // Schedule and run the first user environment! + sched_yield(); +} + +// While boot_aps is booting a given CPU, it communicates the per-core +// stack pointer that should be loaded by mpentry.S to that CPU in +// this variable. +void *mpentry_kstack; + +// Start the non-boot (AP) processors. +static void +boot_aps(void) +{ + extern unsigned char mpentry_start[], mpentry_end[]; + void *code; + struct CpuInfo *c; + + // Write entry code to unused memory at MPENTRY_PADDR + code = KADDR(MPENTRY_PADDR); + memmove(code, mpentry_start, mpentry_end - mpentry_start); + + // Boot each AP one at a time + for (c = cpus; c < cpus + ncpu; c++) { + if (c == cpus + cpunum()) // We've started already. + continue; + + // Tell mpentry.S what stack to use + mpentry_kstack = percpu_kstacks[c - cpus] + KSTKSIZE; + // Start the CPU at mpentry_start + lapic_startap(c->cpu_id, PADDR(code)); + // Wait for the CPU to finish some basic setup in mp_main() + while(c->cpu_status != CPU_STARTED) + ; + } +} + +// Setup code for APs +void +mp_main(void) +{ + // We are in high EIP now, safe to switch to kern_pgdir + lcr3(PADDR(kern_pgdir)); + cprintf("SMP: CPU %d starting\n", cpunum()); + + lapic_init(); + env_init_percpu(); + trap_init_percpu(); + xchg(&thiscpu->cpu_status, CPU_STARTED); // tell boot_aps() we're up + + // Now that we have finished some basic setup, call sched_yield() + // to start running processes on this CPU. But make sure that + // only one CPU can enter the scheduler at a time! + // + // Your code here: + lock_kernel(); + + sched_yield(); + // Remove this after you finish Exercise 6 + for (;;); +} + +/* + * Variable panicstr contains argument to first call to panic; used as flag + * to indicate that the kernel has already called panic. + */ +const char *panicstr; + +/* + * Panic is called on unresolvable fatal errors. + * It prints "panic: mesg", and then enters the kernel monitor. + */ +void +_panic(const char *file, int line, const char *fmt,...) +{ + va_list ap; + + if (panicstr) + goto dead; + panicstr = fmt; + + // Be extra sure that the machine is in as reasonable state + asm volatile("cli; cld"); + + va_start(ap, fmt); + cprintf("kernel panic on CPU %d at %s:%d: ", cpunum(), file, line); + vcprintf(fmt, ap); + cprintf("\n"); + va_end(ap); + +dead: + /* break into the kernel monitor */ + while (1) + monitor(NULL); +} + +/* like panic, but don't */ +void +_warn(const char *file, int line, const char *fmt,...) +{ + va_list ap; + + va_start(ap, fmt); + cprintf("kernel warning at %s:%d: ", file, line); + vcprintf(fmt, ap); + cprintf("\n"); + va_end(ap); +} diff --git a/lab/Untitled Project.si4project/Backup/serv(2429).c b/lab/Untitled Project.si4project/Backup/serv(2429).c new file mode 100644 index 0000000..76c1d99 --- /dev/null +++ b/lab/Untitled Project.si4project/Backup/serv(2429).c @@ -0,0 +1,345 @@ +/* + * File system server main loop - + * serves IPC requests from other environments. + */ + +#include +#include + +#include "fs.h" + + +#define debug 0 + +// The file system server maintains three structures +// for each open file. +// +// 1. The on-disk 'struct File' is mapped into the part of memory +// that maps the disk. This memory is kept private to the file +// server. +// 2. Each open file has a 'struct Fd' as well, which sort of +// corresponds to a Unix file descriptor. This 'struct Fd' is kept +// on *its own page* in memory, and it is shared with any +// environments that have the file open. +// 3. 'struct OpenFile' links these other two structures, and is kept +// private to the file server. The server maintains an array of +// all open files, indexed by "file ID". (There can be at most +// MAXOPEN files open concurrently.) The client uses file IDs to +// communicate with the server. File IDs are a lot like +// environment IDs in the kernel. Use openfile_lookup to translate +// file IDs to struct OpenFile. + +struct OpenFile { + uint32_t o_fileid; // file id + struct File *o_file; // mapped descriptor for open file + int o_mode; // open mode + struct Fd *o_fd; // Fd page +}; + +// Max number of open files in the file system at once +#define MAXOPEN 1024 +#define FILEVA 0xD0000000 + +// initialize to force into data section +struct OpenFile opentab[MAXOPEN] = { + { 0, 0, 1, 0 } +}; + +// Virtual address at which to receive page mappings containing client requests. +union Fsipc *fsreq = (union Fsipc *)0x0ffff000; + +void +serve_init(void) +{ + int i; + uintptr_t va = FILEVA; + for (i = 0; i < MAXOPEN; i++) { + opentab[i].o_fileid = i; + opentab[i].o_fd = (struct Fd*) va; + va += PGSIZE; + } +} + +// Allocate an open file. +int +openfile_alloc(struct OpenFile **o) +{ + int i, r; + + // Find an available open-file table entry + for (i = 0; i < MAXOPEN; i++) { + switch (pageref(opentab[i].o_fd)) { + case 0: + if ((r = sys_page_alloc(0, opentab[i].o_fd, PTE_P|PTE_U|PTE_W)) < 0) + return r; + /* fall through */ + case 1: + opentab[i].o_fileid += MAXOPEN; + *o = &opentab[i]; + memset(opentab[i].o_fd, 0, PGSIZE); + return (*o)->o_fileid; + } + } + return -E_MAX_OPEN; +} + +// Look up an open file for envid. +int +openfile_lookup(envid_t envid, uint32_t fileid, struct OpenFile **po) +{ + struct OpenFile *o; + + o = &opentab[fileid % MAXOPEN]; + if (pageref(o->o_fd) <= 1 || o->o_fileid != fileid) + return -E_INVAL; + *po = o; + return 0; +} + +// Open req->req_path in mode req->req_omode, storing the Fd page and +// permissions to return to the calling environment in *pg_store and +// *perm_store respectively. +int +serve_open(envid_t envid, struct Fsreq_open *req, + void **pg_store, int *perm_store) +{ + char path[MAXPATHLEN]; + struct File *f; + int fileid; + int r; + struct OpenFile *o; + + if (debug) + cprintf("serve_open %08x %s 0x%x\n", envid, req->req_path, req->req_omode); + + // Copy in the path, making sure it's null-terminated + memmove(path, req->req_path, MAXPATHLEN); + path[MAXPATHLEN-1] = 0; + + // Find an open file ID + if ((r = openfile_alloc(&o)) < 0) { + if (debug) + cprintf("openfile_alloc failed: %e", r); + return r; + } + fileid = r; + + // Open the file + if (req->req_omode & O_CREAT) { + if ((r = file_create(path, &f)) < 0) { + if (!(req->req_omode & O_EXCL) && r == -E_FILE_EXISTS) + goto try_open; + if (debug) + cprintf("file_create failed: %e", r); + return r; + } + } else { +try_open: + if ((r = file_open(path, &f)) < 0) { + if (debug) + cprintf("file_open failed: %e", r); + return r; + } + } + + // Truncate + if (req->req_omode & O_TRUNC) { + if ((r = file_set_size(f, 0)) < 0) { + if (debug) + cprintf("file_set_size failed: %e", r); + return r; + } + } + if ((r = file_open(path, &f)) < 0) { + if (debug) + cprintf("file_open failed: %e", r); + return r; + } + + // Save the file pointer + o->o_file = f; + + // Fill out the Fd structure + o->o_fd->fd_file.id = o->o_fileid; + o->o_fd->fd_omode = req->req_omode & O_ACCMODE; + o->o_fd->fd_dev_id = devfile.dev_id; + o->o_mode = req->req_omode; + + if (debug) + cprintf("sending success, page %08x\n", (uintptr_t) o->o_fd); + + // Share the FD page with the caller by setting *pg_store, + // store its permission in *perm_store + *pg_store = o->o_fd; + *perm_store = PTE_P|PTE_U|PTE_W|PTE_SHARE; + + return 0; +} + +// Set the size of req->req_fileid to req->req_size bytes, truncating +// or extending the file as necessary. +int +serve_set_size(envid_t envid, struct Fsreq_set_size *req) +{ + struct OpenFile *o; + int r; + + if (debug) + cprintf("serve_set_size %08x %08x %08x\n", envid, req->req_fileid, req->req_size); + + // Every file system IPC call has the same general structure. + // Here's how it goes. + + // First, use openfile_lookup to find the relevant open file. + // On failure, return the error code to the client with ipc_send. + if ((r = openfile_lookup(envid, req->req_fileid, &o)) < 0) + return r; + + // Second, call the relevant file system function (from fs/fs.c). + // On failure, return the error code to the client. + return file_set_size(o->o_file, req->req_size); +} + +// Read at most ipc->read.req_n bytes from the current seek position +// in ipc->read.req_fileid. Return the bytes read from the file to +// the caller in ipc->readRet, then update the seek position. Returns +// the number of bytes successfully read, or < 0 on error. +int +serve_read(envid_t envid, union Fsipc *ipc) +{ + struct Fsreq_read *req = &ipc->read; + struct Fsret_read *ret = &ipc->readRet; + + if (debug) + cprintf("serve_read %08x %08x %08x\n", envid, req->req_fileid, req->req_n); + + // Lab 5: Your code here: + return 0; +} + + +// Write req->req_n bytes from req->req_buf to req_fileid, starting at +// the current seek position, and update the seek position +// accordingly. Extend the file if necessary. Returns the number of +// bytes written, or < 0 on error. +int +serve_write(envid_t envid, struct Fsreq_write *req) +{ + if (debug) + cprintf("serve_write %08x %08x %08x\n", envid, req->req_fileid, req->req_n); + + // LAB 5: Your code here. + panic("serve_write not implemented"); +} + +// Stat ipc->stat.req_fileid. Return the file's struct Stat to the +// caller in ipc->statRet. +int +serve_stat(envid_t envid, union Fsipc *ipc) +{ + struct Fsreq_stat *req = &ipc->stat; + struct Fsret_stat *ret = &ipc->statRet; + struct OpenFile *o; + int r; + + if (debug) + cprintf("serve_stat %08x %08x\n", envid, req->req_fileid); + + if ((r = openfile_lookup(envid, req->req_fileid, &o)) < 0) + return r; + + strcpy(ret->ret_name, o->o_file->f_name); + ret->ret_size = o->o_file->f_size; + ret->ret_isdir = (o->o_file->f_type == FTYPE_DIR); + return 0; +} + +// Flush all data and metadata of req->req_fileid to disk. +int +serve_flush(envid_t envid, struct Fsreq_flush *req) +{ + struct OpenFile *o; + int r; + + if (debug) + cprintf("serve_flush %08x %08x\n", envid, req->req_fileid); + + if ((r = openfile_lookup(envid, req->req_fileid, &o)) < 0) + return r; + file_flush(o->o_file); + return 0; +} + + +int +serve_sync(envid_t envid, union Fsipc *req) +{ + fs_sync(); + return 0; +} + +typedef int (*fshandler)(envid_t envid, union Fsipc *req); + +fshandler handlers[] = { + // Open is handled specially because it passes pages + /* [FSREQ_OPEN] = (fshandler)serve_open, */ + [FSREQ_READ] = serve_read, + [FSREQ_STAT] = serve_stat, + [FSREQ_FLUSH] = (fshandler)serve_flush, + [FSREQ_WRITE] = (fshandler)serve_write, + [FSREQ_SET_SIZE] = (fshandler)serve_set_size, + [FSREQ_SYNC] = serve_sync +}; + +void +serve(void) +{ + uint32_t req, whom; + int perm, r; + void *pg; + + while (1) { + perm = 0; + req = ipc_recv((int32_t *) &whom, fsreq, &perm); + if (debug) + cprintf("fs req %d from %08x [page %08x: %s]\n", + req, whom, uvpt[PGNUM(fsreq)], fsreq); + + // All requests must contain an argument page + if (!(perm & PTE_P)) { + cprintf("Invalid request from %08x: no argument page\n", + whom); + continue; // just leave it hanging... + } + + pg = NULL; + if (req == FSREQ_OPEN) { + r = serve_open(whom, (struct Fsreq_open*)fsreq, &pg, &perm); + } else if (req < ARRAY_SIZE(handlers) && handlers[req]) { + r = handlers[req](whom, fsreq); + } else { + cprintf("Invalid request code %d from %08x\n", req, whom); + r = -E_INVAL; + } + ipc_send(whom, r, pg, perm); + sys_page_unmap(0, fsreq); + } +} + +void +umain(int argc, char **argv) +{ + static_assert(sizeof(struct File) == 256); + binaryname = "fs"; + cprintf("FS is running\n"); + + // Check that we are able to do I/O + outw(0x8A00, 0x8A00); + cprintf("FS can do I/O\n"); + + serve_init(); + fs_init(); + fs_test(); + serve(); +} + diff --git a/lab/Untitled Project.si4project/Backup/sh(7186).c b/lab/Untitled Project.si4project/Backup/sh(7186).c new file mode 100644 index 0000000..26f501a --- /dev/null +++ b/lab/Untitled Project.si4project/Backup/sh(7186).c @@ -0,0 +1,322 @@ +#include + +#define BUFSIZ 1024 /* Find the buffer overrun bug! */ +int debug = 0; + + +// gettoken(s, 0) prepares gettoken for subsequent calls and returns 0. +// gettoken(0, token) parses a shell token from the previously set string, +// null-terminates that token, stores the token pointer in '*token', +// and returns a token ID (0, '<', '>', '|', or 'w'). +// Subsequent calls to 'gettoken(0, token)' will return subsequent +// tokens from the string. +int gettoken(char *s, char **token); + + +// Parse a shell command from string 's' and execute it. +// Do not return until the shell command is finished. +// runcmd() is called in a forked child, +// so it's OK to manipulate file descriptor state. +#define MAXARGS 16 +void +runcmd(char* s) +{ + char *argv[MAXARGS], *t, argv0buf[BUFSIZ]; + int argc, c, i, r, p[2], fd, pipe_child; + + pipe_child = 0; + gettoken(s, 0); + +again: + argc = 0; + while (1) { + switch ((c = gettoken(0, &t))) { + + case 'w': // Add an argument + if (argc == MAXARGS) { + cprintf("too many arguments\n"); + exit(); + } + argv[argc++] = t; + break; + + case '<': // Input redirection + // Grab the filename from the argument list + if (gettoken(0, &t) != 'w') { + cprintf("syntax error: < not followed by word\n"); + exit(); + } + // Open 't' for reading as file descriptor 0 + // (which environments use as standard input). + // We can't open a file onto a particular descriptor, + // so open the file as 'fd', + // then check whether 'fd' is 0. + // If not, dup 'fd' onto file descriptor 0, + // then close the original 'fd'. + + // LAB 5: Your code here. + panic("< redirection not implemented"); + break; + + case '>': // Output redirection + // Grab the filename from the argument list + if (gettoken(0, &t) != 'w') { + cprintf("syntax error: > not followed by word\n"); + exit(); + } + if ((fd = open(t, O_WRONLY|O_CREAT|O_TRUNC)) < 0) { + cprintf("open %s for write: %e", t, fd); + exit(); + } + if (fd != 1) { + dup(fd, 1); + close(fd); + } + break; + + case '|': // Pipe + if ((r = pipe(p)) < 0) { + cprintf("pipe: %e", r); + exit(); + } + if (debug) + cprintf("PIPE: %d %d\n", p[0], p[1]); + if ((r = fork()) < 0) { + cprintf("fork: %e", r); + exit(); + } + if (r == 0) { + if (p[0] != 0) { + dup(p[0], 0); + close(p[0]); + } + close(p[1]); + goto again; + } else { + pipe_child = r; + if (p[1] != 1) { + dup(p[1], 1); + close(p[1]); + } + close(p[0]); + goto runit; + } + panic("| not implemented"); + break; + + case 0: // String is complete + // Run the current command! + goto runit; + + default: + panic("bad return %d from gettoken", c); + break; + + } + } + +runit: + // Return immediately if command line was empty. + if(argc == 0) { + if (debug) + cprintf("EMPTY COMMAND\n"); + return; + } + + // Clean up command line. + // Read all commands from the filesystem: add an initial '/' to + // the command name. + // This essentially acts like 'PATH=/'. + if (argv[0][0] != '/') { + argv0buf[0] = '/'; + strcpy(argv0buf + 1, argv[0]); + argv[0] = argv0buf; + } + argv[argc] = 0; + + // Print the command. + if (debug) { + cprintf("[%08x] SPAWN:", thisenv->env_id); + for (i = 0; argv[i]; i++) + cprintf(" %s", argv[i]); + cprintf("\n"); + } + + // Spawn the command! + if ((r = spawn(argv[0], (const char**) argv)) < 0) + cprintf("spawn %s: %e\n", argv[0], r); + + // In the parent, close all file descriptors and wait for the + // spawned command to exit. + close_all(); + if (r >= 0) { + if (debug) + cprintf("[%08x] WAIT %s %08x\n", thisenv->env_id, argv[0], r); + wait(r); + if (debug) + cprintf("[%08x] wait finished\n", thisenv->env_id); + } + + // If we were the left-hand part of a pipe, + // wait for the right-hand part to finish. + if (pipe_child) { + if (debug) + cprintf("[%08x] WAIT pipe_child %08x\n", thisenv->env_id, pipe_child); + wait(pipe_child); + if (debug) + cprintf("[%08x] wait finished\n", thisenv->env_id); + } + + // Done! + exit(); +} + + +// Get the next token from string s. +// Set *p1 to the beginning of the token and *p2 just past the token. +// Returns +// 0 for end-of-string; +// < for <; +// > for >; +// | for |; +// w for a word. +// +// Eventually (once we parse the space where the \0 will go), +// words get nul-terminated. +#define WHITESPACE " \t\r\n" +#define SYMBOLS "<|>&;()" + +int +_gettoken(char *s, char **p1, char **p2) +{ + int t; + + if (s == 0) { + if (debug > 1) + cprintf("GETTOKEN NULL\n"); + return 0; + } + + if (debug > 1) + cprintf("GETTOKEN: %s\n", s); + + *p1 = 0; + *p2 = 0; + + while (strchr(WHITESPACE, *s)) + *s++ = 0; + if (*s == 0) { + if (debug > 1) + cprintf("EOL\n"); + return 0; + } + if (strchr(SYMBOLS, *s)) { + t = *s; + *p1 = s; + *s++ = 0; + *p2 = s; + if (debug > 1) + cprintf("TOK %c\n", t); + return t; + } + *p1 = s; + while (*s && !strchr(WHITESPACE SYMBOLS, *s)) + s++; + *p2 = s; + if (debug > 1) { + t = **p2; + **p2 = 0; + cprintf("WORD: %s\n", *p1); + **p2 = t; + } + return 'w'; +} + +int +gettoken(char *s, char **p1) +{ + static int c, nc; + static char* np1, *np2; + + if (s) { + nc = _gettoken(s, &np1, &np2); + return 0; + } + c = nc; + *p1 = np1; + nc = _gettoken(np2, &np1, &np2); + return c; +} + + +void +usage(void) +{ + cprintf("usage: sh [-dix] [command-file]\n"); + exit(); +} + +void +umain(int argc, char **argv) +{ + int r, interactive, echocmds; + struct Argstate args; + + interactive = '?'; + echocmds = 0; + argstart(&argc, argv, &args); + while ((r = argnext(&args)) >= 0) + switch (r) { + case 'd': + debug++; + break; + case 'i': + interactive = 1; + break; + case 'x': + echocmds = 1; + break; + default: + usage(); + } + + if (argc > 2) + usage(); + if (argc == 2) { + close(0); + if ((r = open(argv[1], O_RDONLY)) < 0) + panic("open %s: %e", argv[1], r); + assert(r == 0); + } + if (interactive == '?') + interactive = iscons(0); + + while (1) { + char *buf; + + buf = readline(interactive ? "$ " : NULL); + if (buf == NULL) { + if (debug) + cprintf("EXITING\n"); + exit(); // end of file + } + if (debug) + cprintf("LINE: %s\n", buf); + if (buf[0] == '#') + continue; + if (echocmds) + printf("# %s\n", buf); + if (debug) + cprintf("BEFORE FORK\n"); + if ((r = fork()) < 0) + panic("fork: %e", r); + if (debug) + cprintf("FORK: %d\n", r); + if (r == 0) { + runcmd(buf); + exit(); + } else + wait(r); + } +} + diff --git a/lab/Untitled Project.si4project/Backup/spawn(5260).c b/lab/Untitled Project.si4project/Backup/spawn(5260).c new file mode 100644 index 0000000..9d0eb07 --- /dev/null +++ b/lab/Untitled Project.si4project/Backup/spawn(5260).c @@ -0,0 +1,307 @@ +#include +#include + +#define UTEMP2USTACK(addr) ((void*) (addr) + (USTACKTOP - PGSIZE) - UTEMP) +#define UTEMP2 (UTEMP + PGSIZE) +#define UTEMP3 (UTEMP2 + PGSIZE) + +// Helper functions for spawn. +static int init_stack(envid_t child, const char **argv, uintptr_t *init_esp); +static int map_segment(envid_t child, uintptr_t va, size_t memsz, + int fd, size_t filesz, off_t fileoffset, int perm); +static int copy_shared_pages(envid_t child); + +// Spawn a child process from a program image loaded from the file system. +// prog: the pathname of the program to run. +// argv: pointer to null-terminated array of pointers to strings, +// which will be passed to the child as its command-line arguments. +// Returns child envid on success, < 0 on failure. +int +spawn(const char *prog, const char **argv) +{ + unsigned char elf_buf[512]; + struct Trapframe child_tf; + envid_t child; + + int fd, i, r; + struct Elf *elf; + struct Proghdr *ph; + int perm; + + // This code follows this procedure: + // + // - Open the program file. + // + // - Read the ELF header, as you have before, and sanity check its + // magic number. (Check out your load_icode!) + // + // - Use sys_exofork() to create a new environment. + // + // - Set child_tf to an initial struct Trapframe for the child. + // + // - Call the init_stack() function above to set up + // the initial stack page for the child environment. + // + // - Map all of the program's segments that are of p_type + // ELF_PROG_LOAD into the new environment's address space. + // Use the p_flags field in the Proghdr for each segment + // to determine how to map the segment: + // + // * If the ELF flags do not include ELF_PROG_FLAG_WRITE, + // then the segment contains text and read-only data. + // Use read_map() to read the contents of this segment, + // and map the pages it returns directly into the child + // so that multiple instances of the same program + // will share the same copy of the program text. + // Be sure to map the program text read-only in the child. + // Read_map is like read but returns a pointer to the data in + // *blk rather than copying the data into another buffer. + // + // * If the ELF segment flags DO include ELF_PROG_FLAG_WRITE, + // then the segment contains read/write data and bss. + // As with load_icode() in Lab 3, such an ELF segment + // occupies p_memsz bytes in memory, but only the FIRST + // p_filesz bytes of the segment are actually loaded + // from the executable file - you must clear the rest to zero. + // For each page to be mapped for a read/write segment, + // allocate a page in the parent temporarily at UTEMP, + // read() the appropriate portion of the file into that page + // and/or use memset() to zero non-loaded portions. + // (You can avoid calling memset(), if you like, if + // page_alloc() returns zeroed pages already.) + // Then insert the page mapping into the child. + // Look at init_stack() for inspiration. + // Be sure you understand why you can't use read_map() here. + // + // Note: None of the segment addresses or lengths above + // are guaranteed to be page-aligned, so you must deal with + // these non-page-aligned values appropriately. + // The ELF linker does, however, guarantee that no two segments + // will overlap on the same page; and it guarantees that + // PGOFF(ph->p_offset) == PGOFF(ph->p_va). + // + // - Call sys_env_set_trapframe(child, &child_tf) to set up the + // correct initial eip and esp values in the child. + // + // - Start the child process running with sys_env_set_status(). + + if ((r = open(prog, O_RDONLY)) < 0) + return r; + fd = r; + + // Read elf header + elf = (struct Elf*) elf_buf; + if (readn(fd, elf_buf, sizeof(elf_buf)) != sizeof(elf_buf) + || elf->e_magic != ELF_MAGIC) { + close(fd); + cprintf("elf magic %08x want %08x\n", elf->e_magic, ELF_MAGIC); + return -E_NOT_EXEC; + } + + // Create new child environment + if ((r = sys_exofork()) < 0) + return r; + child = r; + + // Set up trap frame, including initial stack. + child_tf = envs[ENVX(child)].env_tf; + child_tf.tf_eip = elf->e_entry; + + if ((r = init_stack(child, argv, &child_tf.tf_esp)) < 0) + return r; + + // Set up program segments as defined in ELF header. + ph = (struct Proghdr*) (elf_buf + elf->e_phoff); + for (i = 0; i < elf->e_phnum; i++, ph++) { + if (ph->p_type != ELF_PROG_LOAD) + continue; + perm = PTE_P | PTE_U; + if (ph->p_flags & ELF_PROG_FLAG_WRITE) + perm |= PTE_W; + if ((r = map_segment(child, ph->p_va, ph->p_memsz, + fd, ph->p_filesz, ph->p_offset, perm)) < 0) + goto error; + } + close(fd); + fd = -1; + + // Copy shared library state. + if ((r = copy_shared_pages(child)) < 0) + panic("copy_shared_pages: %e", r); + + child_tf.tf_eflags |= FL_IOPL_3; // devious: see user/faultio.c + if ((r = sys_env_set_trapframe(child, &child_tf)) < 0) + panic("sys_env_set_trapframe: %e", r); + + if ((r = sys_env_set_status(child, ENV_RUNNABLE)) < 0) + panic("sys_env_set_status: %e", r); + + return child; + +error: + sys_env_destroy(child); + close(fd); + return r; +} + +// Spawn, taking command-line arguments array directly on the stack. +// NOTE: Must have a sentinal of NULL at the end of the args +// (none of the args may be NULL). +int +spawnl(const char *prog, const char *arg0, ...) +{ + // We calculate argc by advancing the args until we hit NULL. + // The contract of the function guarantees that the last + // argument will always be NULL, and that none of the other + // arguments will be NULL. + int argc=0; + va_list vl; + va_start(vl, arg0); + while(va_arg(vl, void *) != NULL) + argc++; + va_end(vl); + + // Now that we have the size of the args, do a second pass + // and store the values in a VLA, which has the format of argv + const char *argv[argc+2]; + argv[0] = arg0; + argv[argc+1] = NULL; + + va_start(vl, arg0); + unsigned i; + for(i=0;i= filesz) { + // allocate a blank page + if ((r = sys_page_alloc(child, (void*) (va + i), perm)) < 0) + return r; + } else { + // from file + if ((r = sys_page_alloc(0, UTEMP, PTE_P|PTE_U|PTE_W)) < 0) + return r; + if ((r = seek(fd, fileoffset + i)) < 0) + return r; + if ((r = readn(fd, UTEMP, MIN(PGSIZE, filesz-i))) < 0) + return r; + if ((r = sys_page_map(0, UTEMP, child, (void*) (va + i), perm)) < 0) + panic("spawn: sys_page_map data: %e", r); + sys_page_unmap(0, UTEMP); + } + } + return 0; +} + +// Copy the mappings for shared pages into the child address space. +static int +copy_shared_pages(envid_t child) +{ + // LAB 5: Your code here. + return 0; +} + diff --git a/lab/LAB4.si4project/Backup/syscall(1286).c b/lab/Untitled Project.si4project/Backup/syscall(7911).c similarity index 84% rename from lab/LAB4.si4project/Backup/syscall(1286).c rename to lab/Untitled Project.si4project/Backup/syscall(7911).c index 6ee15ee..cf2eb2f 100644 --- a/lab/LAB4.si4project/Backup/syscall(1286).c +++ b/lab/Untitled Project.si4project/Backup/syscall(7911).c @@ -55,10 +55,6 @@ sys_env_destroy(envid_t envid) if ((r = envid2env(envid, &e, 1)) < 0) return r; - if (e == curenv) - cprintf("[%08x] exiting gracefully\n", curenv->env_id); - else - cprintf("[%08x] destroying %08x\n", curenv->env_id, e->env_id); env_destroy(e); return 0; } @@ -94,6 +90,7 @@ sys_exofork(void) newenv->env_tf = curenv->env_tf; // newenv的返回值为0, 实现子进程返回0值 newenv->env_tf.tf_regs.reg_eax = 0; + // 返回值存放在eax中 return newenv->env_id; @@ -127,6 +124,22 @@ sys_env_set_status(envid_t envid, int status) return 0; } +// Set envid's trap frame to 'tf'. +// tf is modified to make sure that user environments always run at code +// protection level 3 (CPL 3), interrupts enabled, and IOPL of 0. +// +// Returns 0 on success, < 0 on error. Errors are: +// -E_BAD_ENV if environment envid doesn't currently exist, +// or the caller doesn't have permission to change envid. +static int +sys_env_set_trapframe(envid_t envid, struct Trapframe *tf) +{ + // LAB 5: Your code here. + // Remember to check whether the user has supplied us with a good + // address! + panic("sys_env_set_trapframe not implemented"); +} + // Set the page fault upcall for 'envid' by modifying the corresponding struct // Env's 'env_pgfault_upcall' field. When 'envid' causes a page fault, the // kernel will push a fault record onto the exception stack, then branch to @@ -142,7 +155,7 @@ sys_env_set_pgfault_upcall(envid_t envid, void *func) struct Env *e; if (envid2env(envid, &e, 1)) return -E_BAD_ENV; - + // cprintf("set pgfault upcall\n"); e->env_pgfault_upcall = func; return 0; // panic("sys_env_set_pgfault_upcall not implemented"); @@ -311,13 +324,61 @@ sys_page_unmap(envid_t envid, void *va) // current environment's address space. // -E_NO_MEM if there's not enough memory to map srcva in envid's // address space. + static int sys_ipc_try_send(envid_t envid, uint32_t value, void *srcva, unsigned perm) { // LAB 4: Your code here. - panic("sys_ipc_try_send not implemented"); + struct Env *dstenv; + pte_t *pte; + struct PageInfo *pp; + int r; + if ( (r = envid2env( envid, &dstenv, 0)) < 0) + return r; + + // 不处于等待接收状态, 或有进程已经请求发送数据 + if ( (dstenv->env_ipc_recving != true) || dstenv->env_ipc_from != 0) + return -E_IPC_NOT_RECV; + + if ((uint32_t)srcva < UTOP) { + if ( PGOFF(srcva)) + return -E_INVAL; + if ( !(perm & PTE_P ) || !(perm & PTE_U) ) + return -E_INVAL; + if (perm & (~ PTE_SYSCALL)) + return -E_INVAL; + + + if ((pp = page_lookup(curenv->env_pgdir, srcva, &pte)) == NULL ) + return -E_INVAL; + + + if ((perm & PTE_W) && !(*pte & PTE_W) ) + return -E_INVAL; + + // 接收进程愿意接收一个页 + if (dstenv->env_ipc_dstva) { + // 开始映射 + if( (r = page_insert(dstenv->env_pgdir, pp, dstenv->env_ipc_dstva, perm)) < 0) + return r; + dstenv->env_ipc_perm = perm; + } + + } + + + dstenv->env_ipc_from = curenv->env_id; + dstenv->env_ipc_recving = false; + dstenv->env_ipc_value = value; + dstenv->env_status = ENV_RUNNABLE; + // 返回值 + dstenv->env_tf.tf_regs.reg_eax = 0; + return 0; + + //panic("sys_ipc_try_send not implemented"); } + // Block until a value is ready. Record that you want to receive // using the env_ipc_recving and env_ipc_dstva fields of struct Env, // mark yourself not runnable, and then give up the CPU. @@ -333,7 +394,18 @@ static int sys_ipc_recv(void *dstva) { // LAB 4: Your code here. - panic("sys_ipc_recv not implemented"); + if ((uint32_t) dstva < UTOP ) { + if (PGOFF(dstva)) + return -E_INVAL; + + } + // 大于小于都可以赋值为desva。 + curenv->env_ipc_dstva = dstva; + curenv->env_status = ENV_NOT_RUNNABLE; + curenv->env_ipc_recving = true; + curenv->env_ipc_from = 0; + sched_yield(); + // panic("sys_ipc_recv not implemented"); return 0; } @@ -372,6 +444,10 @@ syscall(uint32_t syscallno, uint32_t a1, uint32_t a2, uint32_t a3, uint32_t a4, case SYS_env_set_status: return sys_env_set_status((envid_t) a1, (int) a2); + case SYS_ipc_recv: + return sys_ipc_recv( (void *) a1); + case SYS_ipc_try_send: + return sys_ipc_try_send((envid_t) a1, (uint32_t) a2, (void *) a3, (int) a4); case NSYSCALLS: return -E_INVAL; diff --git a/lab/LAB4.si4project/Backup/syscall(7459).c b/lab/Untitled Project.si4project/Backup/syscall(8111).c similarity index 84% rename from lab/LAB4.si4project/Backup/syscall(7459).c rename to lab/Untitled Project.si4project/Backup/syscall(8111).c index 4b2925a..d28128c 100644 --- a/lab/LAB4.si4project/Backup/syscall(7459).c +++ b/lab/Untitled Project.si4project/Backup/syscall(8111).c @@ -55,6 +55,7 @@ sys_env_destroy(envid_t envid) if ((r = envid2env(envid, &e, 1)) < 0) return r; + if (e == curenv) cprintf("[%08x] exiting gracefully\n", curenv->env_id); else @@ -128,6 +129,22 @@ sys_env_set_status(envid_t envid, int status) return 0; } +// Set envid's trap frame to 'tf'. +// tf is modified to make sure that user environments always run at code +// protection level 3 (CPL 3), interrupts enabled, and IOPL of 0. +// +// Returns 0 on success, < 0 on error. Errors are: +// -E_BAD_ENV if environment envid doesn't currently exist, +// or the caller doesn't have permission to change envid. +static int +sys_env_set_trapframe(envid_t envid, struct Trapframe *tf) +{ + // LAB 5: Your code here. + // Remember to check whether the user has supplied us with a good + // address! + panic("sys_env_set_trapframe not implemented"); +} + // Set the page fault upcall for 'envid' by modifying the corresponding struct // Env's 'env_pgfault_upcall' field. When 'envid' causes a page fault, the // kernel will push a fault record onto the exception stack, then branch to @@ -312,13 +329,61 @@ sys_page_unmap(envid_t envid, void *va) // current environment's address space. // -E_NO_MEM if there's not enough memory to map srcva in envid's // address space. + static int sys_ipc_try_send(envid_t envid, uint32_t value, void *srcva, unsigned perm) { // LAB 4: Your code here. - panic("sys_ipc_try_send not implemented"); + struct Env *dstenv; + pte_t *pte; + struct PageInfo *pp; + int r; + if ( (r = envid2env( envid, &dstenv, 0)) < 0) + return r; + + // 不处于等待接收状态, 或有进程已经请求发送数据 + if ( (dstenv->env_ipc_recving != true) || dstenv->env_ipc_from != 0) + return -E_IPC_NOT_RECV; + + if ((uint32_t)srcva < UTOP) { + if ( PGOFF(srcva)) + return -E_INVAL; + if ( !(perm & PTE_P ) || !(perm & PTE_U) ) + return -E_INVAL; + if (perm & (~ PTE_SYSCALL)) + return -E_INVAL; + + + if ((pp = page_lookup(curenv->env_pgdir, srcva, &pte)) == NULL ) + return -E_INVAL; + + + if ((perm & PTE_W) && !(*pte & PTE_W) ) + return -E_INVAL; + + // 接收进程愿意接收一个页 + if (dstenv->env_ipc_dstva) { + // 开始映射 + if( (r = page_insert(dstenv->env_pgdir, pp, dstenv->env_ipc_dstva, perm)) < 0) + return r; + dstenv->env_ipc_perm = perm; + } + + } + + + dstenv->env_ipc_from = curenv->env_id; + dstenv->env_ipc_recving = false; + dstenv->env_ipc_value = value; + dstenv->env_status = ENV_RUNNABLE; + // 返回值 + dstenv->env_tf.tf_regs.reg_eax = 0; + return 0; + + //panic("sys_ipc_try_send not implemented"); } + // Block until a value is ready. Record that you want to receive // using the env_ipc_recving and env_ipc_dstva fields of struct Env, // mark yourself not runnable, and then give up the CPU. @@ -334,7 +399,18 @@ static int sys_ipc_recv(void *dstva) { // LAB 4: Your code here. - panic("sys_ipc_recv not implemented"); + if ((uint32_t) dstva < UTOP ) { + if (PGOFF(dstva)) + return -E_INVAL; + + } + // 大于小于都可以赋值为desva。 + curenv->env_ipc_dstva = dstva; + curenv->env_status = ENV_NOT_RUNNABLE; + curenv->env_ipc_recving = true; + curenv->env_ipc_from = 0; + sched_yield(); + // panic("sys_ipc_recv not implemented"); return 0; } @@ -373,6 +449,10 @@ syscall(uint32_t syscallno, uint32_t a1, uint32_t a2, uint32_t a3, uint32_t a4, case SYS_env_set_status: return sys_env_set_status((envid_t) a1, (int) a2); + case SYS_ipc_recv: + return sys_ipc_recv( (void *) a1); + case SYS_ipc_try_send: + return sys_ipc_try_send((envid_t) a1, (uint32_t) a2, (void *) a3, (int) a4); case NSYSCALLS: return -E_INVAL; diff --git a/lab/LAB4.si4project/Backup/trap(6309).c b/lab/Untitled Project.si4project/Backup/trap(3657).c similarity index 85% rename from lab/LAB4.si4project/Backup/trap(6309).c rename to lab/Untitled Project.si4project/Backup/trap(3657).c index e814e98..c36b562 100644 --- a/lab/LAB4.si4project/Backup/trap(6309).c +++ b/lab/Untitled Project.si4project/Backup/trap(3657).c @@ -92,7 +92,14 @@ trap_init(void) void simderr_handler(); void syscall_handler(); void dblflt_handler(); + void timer_handler(); + void kbd_handler(); + void serial_handler(); + void spurious_handler(); + void ide_handler(); + void error_handler(); + // LAB 3: Your code here. // GD_KT 全局描述符, kernel text SETGATE(idt[T_DIVIDE], 0, GD_KT, divide_handler, 0); @@ -114,6 +121,13 @@ trap_init(void) SETGATE(idt[T_MCHK], 0, GD_KT, mchk_handler, 0); SETGATE(idt[T_SIMDERR], 0, GD_KT, simderr_handler, 0); SETGATE(idt[T_SYSCALL], 0, GD_KT, syscall_handler, 3); + // IRQ + SETGATE(idt[IRQ_OFFSET + IRQ_TIMER], 0, GD_KT, timer_handler, 3); + SETGATE(idt[IRQ_OFFSET + IRQ_KBD], 0, GD_KT, kbd_handler, 3); + SETGATE(idt[IRQ_OFFSET + IRQ_SERIAL], 0, GD_KT, serial_handler, 3); + SETGATE(idt[IRQ_OFFSET + IRQ_SPURIOUS], 0, GD_KT, spurious_handler, 3); + SETGATE(idt[IRQ_OFFSET + IRQ_IDE], 0, GD_KT, ide_handler, 3); + SETGATE(idt[IRQ_OFFSET + IRQ_ERROR], 0, GD_KT, error_handler, 3); // Per-CPU setup trap_init_percpu(); @@ -229,6 +243,12 @@ trap_dispatch(struct Trapframe *tf) tf->tf_regs.reg_edi, tf->tf_regs.reg_esi); break; + case (IRQ_OFFSET + IRQ_TIMER): + // 回应8259A 接收中断。 + lapic_eoi(); + sched_yield(); + break; + default: // Unexpected trap: The user process or the kernel has a bug. print_trapframe(tf); @@ -246,6 +266,10 @@ trap_dispatch(struct Trapframe *tf) // interrupt using lapic_eoi() before calling the scheduler! // LAB 4: Your code here. +<<<<<<< HEAD + // Handle keyboard and serial interrupts. + // LAB 5: Your code here. + // Unexpected trap: The user process or the kernel has a bug. print_trapframe(tf); if (tf->tf_cs == GD_KT) @@ -253,9 +277,10 @@ trap_dispatch(struct Trapframe *tf) else { env_destroy(curenv); return; - } +======= +>>>>>>> lab4 } void @@ -371,14 +396,41 @@ page_fault_handler(struct Trapframe *tf) // (the 'tf' variable points at 'curenv->env_tf'). // LAB 4: Your code here. + struct UTrapframe *utf; + // cprintf("I'M in page_fault_handler [%08x] user fault va %08x \n",curenv->env_id, fault_va); + if (curenv->env_pgfault_upcall) { + + if (tf->tf_esp >= UXSTACKTOP-PGSIZE && tf->tf_esp < UXSTACKTOP) { + // 异常模式下陷入 + utf = (struct UTrapframe *)(tf->tf_esp - sizeof(struct UTrapframe) - 4); - - // user_mem_assert(curenv, (const void *) fault_va, PGSIZE, 0); - - // Destroy the environment that caused the fault. - cprintf("[%08x] user fault va %08x ip %08x\n", - curenv->env_id, fault_va, tf->tf_eip); - print_trapframe(tf); - env_destroy(curenv); + } + else { + // 非异常模式下陷入 + utf = (struct UTrapframe *)(UXSTACKTOP - sizeof(struct UTrapframe)); + } + // 检查异常栈是否溢出 + user_mem_assert(curenv, (const void *) utf, sizeof(struct UTrapframe), PTE_P|PTE_W); + + utf->utf_fault_va = fault_va; + utf->utf_err = tf->tf_trapno; + utf->utf_regs = tf->tf_regs; + utf->utf_eflags = tf->tf_eflags; + // 保存陷入时现场,用于返回 + utf->utf_eip = tf->tf_eip; + utf->utf_esp = tf->tf_esp; + // 再次转向执行 + curenv->env_tf.tf_eip = (uint32_t) curenv->env_pgfault_upcall; + // 异常栈 + curenv->env_tf.tf_esp = (uint32_t) utf; + env_run(curenv); + } + else { + // Destroy the environment that caused the fault. + cprintf("[%08x] user fault va %08x ip %08x\n", + curenv->env_id, fault_va, tf->tf_eip); + print_trapframe(tf); + env_destroy(curenv); + } } diff --git a/lab/LAB4.si4project/Backup/trap(2812).c b/lab/Untitled Project.si4project/Backup/trap(5971).c similarity index 83% rename from lab/LAB4.si4project/Backup/trap(2812).c rename to lab/Untitled Project.si4project/Backup/trap(5971).c index d9a201f..96bf71c 100644 --- a/lab/LAB4.si4project/Backup/trap(2812).c +++ b/lab/Untitled Project.si4project/Backup/trap(5971).c @@ -92,7 +92,14 @@ trap_init(void) void simderr_handler(); void syscall_handler(); void dblflt_handler(); + void timer_handler(); + void kbd_handler(); + void serial_handler(); + void spurious_handler(); + void ide_handler(); + void error_handler(); + // LAB 3: Your code here. // GD_KT 全局描述符, kernel text SETGATE(idt[T_DIVIDE], 0, GD_KT, divide_handler, 0); @@ -114,6 +121,13 @@ trap_init(void) SETGATE(idt[T_MCHK], 0, GD_KT, mchk_handler, 0); SETGATE(idt[T_SIMDERR], 0, GD_KT, simderr_handler, 0); SETGATE(idt[T_SYSCALL], 0, GD_KT, syscall_handler, 3); + // IRQ + SETGATE(idt[IRQ_OFFSET + IRQ_TIMER], 0, GD_KT, timer_handler, 3); + SETGATE(idt[IRQ_OFFSET + IRQ_KBD], 0, GD_KT, kbd_handler, 3); + SETGATE(idt[IRQ_OFFSET + IRQ_SERIAL], 0, GD_KT, serial_handler, 3); + SETGATE(idt[IRQ_OFFSET + IRQ_SPURIOUS], 0, GD_KT, spurious_handler, 3); + SETGATE(idt[IRQ_OFFSET + IRQ_IDE], 0, GD_KT, ide_handler, 3); + SETGATE(idt[IRQ_OFFSET + IRQ_ERROR], 0, GD_KT, error_handler, 3); // Per-CPU setup trap_init_percpu(); @@ -229,6 +243,24 @@ trap_dispatch(struct Trapframe *tf) tf->tf_regs.reg_edi, tf->tf_regs.reg_esi); break; + // Handle clock interrupts. Don't forget to acknowledge the + // interrupt using lapic_eoi() before calling the scheduler! + // LAB 4: Your code here. + case (IRQ_OFFSET + IRQ_TIMER): + // 回应8259A 接收中断。 + lapic_eoi(); + sched_yield(); + break; + + case (IRQ_OFFSET + IRQ_KBD): + lapic_eoi(); + kbd_intr(); + break; + case (IRQ_OFFSET + IRQ_SERIAL): + lapic_eoi(); + serial_intr(); + break; + default: // Unexpected trap: The user process or the kernel has a bug. print_trapframe(tf); @@ -242,11 +274,7 @@ trap_dispatch(struct Trapframe *tf) } - // Handle clock interrupts. Don't forget to acknowledge the - // interrupt using lapic_eoi() before calling the scheduler! - // LAB 4: Your code here. - } void @@ -362,14 +390,41 @@ page_fault_handler(struct Trapframe *tf) // (the 'tf' variable points at 'curenv->env_tf'). // LAB 4: Your code here. + struct UTrapframe *utf; + // cprintf("I'M in page_fault_handler [%08x] user fault va %08x \n",curenv->env_id, fault_va); + if (curenv->env_pgfault_upcall) { + + if (tf->tf_esp >= UXSTACKTOP-PGSIZE && tf->tf_esp < UXSTACKTOP) { + // 异常模式下陷入 + utf = (struct UTrapframe *)(tf->tf_esp - sizeof(struct UTrapframe) - 4); - - // user_mem_assert(curenv, (const void *) fault_va, PGSIZE, 0); - - // Destroy the environment that caused the fault. - cprintf("[%08x] user fault va %08x ip %08x\n", - curenv->env_id, fault_va, tf->tf_eip); - print_trapframe(tf); - env_destroy(curenv); + } + else { + // 非异常模式下陷入 + utf = (struct UTrapframe *)(UXSTACKTOP - sizeof(struct UTrapframe)); + } + // 检查异常栈是否溢出 + user_mem_assert(curenv, (const void *) utf, sizeof(struct UTrapframe), PTE_P|PTE_W); + + utf->utf_fault_va = fault_va; + utf->utf_err = tf->tf_trapno; + utf->utf_regs = tf->tf_regs; + utf->utf_eflags = tf->tf_eflags; + // 保存陷入时现场,用于返回 + utf->utf_eip = tf->tf_eip; + utf->utf_esp = tf->tf_esp; + // 再次转向执行 + curenv->env_tf.tf_eip = (uint32_t) curenv->env_pgfault_upcall; + // 异常栈 + curenv->env_tf.tf_esp = (uint32_t) utf; + env_run(curenv); + } + else { + // Destroy the environment that caused the fault. + cprintf("[%08x] user fault va %08x ip %08x\n", + curenv->env_id, fault_va, tf->tf_eip); + print_trapframe(tf); + env_destroy(curenv); + } } diff --git a/lab/LAB4.si4project/Backup/trap(1475).c b/lab/Untitled Project.si4project/Backup/trap(6591).c similarity index 94% rename from lab/LAB4.si4project/Backup/trap(1475).c rename to lab/Untitled Project.si4project/Backup/trap(6591).c index b80f42b..b4153b6 100644 --- a/lab/LAB4.si4project/Backup/trap(1475).c +++ b/lab/Untitled Project.si4project/Backup/trap(6591).c @@ -92,7 +92,14 @@ trap_init(void) void simderr_handler(); void syscall_handler(); void dblflt_handler(); + void timer_handler(); + void kbd_handler(); + void serial_handler(); + void spurious_handler(); + void ide_handler(); + void error_handler(); + // LAB 3: Your code here. // GD_KT 全局描述符, kernel text SETGATE(idt[T_DIVIDE], 0, GD_KT, divide_handler, 0); @@ -114,6 +121,13 @@ trap_init(void) SETGATE(idt[T_MCHK], 0, GD_KT, mchk_handler, 0); SETGATE(idt[T_SIMDERR], 0, GD_KT, simderr_handler, 0); SETGATE(idt[T_SYSCALL], 0, GD_KT, syscall_handler, 3); + // IRQ + SETGATE(idt[IRQ_OFFSET + IRQ_TIMER], 0, GD_KT, timer_handler, 3); + SETGATE(idt[IRQ_OFFSET + IRQ_KBD], 0, GD_KT, kbd_handler, 3); + SETGATE(idt[IRQ_OFFSET + IRQ_SERIAL], 0, GD_KT, serial_handler, 3); + SETGATE(idt[IRQ_OFFSET + IRQ_SPURIOUS], 0, GD_KT, spurious_handler, 3); + SETGATE(idt[IRQ_OFFSET + IRQ_IDE], 0, GD_KT, ide_handler, 3); + SETGATE(idt[IRQ_OFFSET + IRQ_ERROR], 0, GD_KT, error_handler, 3); // Per-CPU setup trap_init_percpu(); @@ -229,6 +243,12 @@ trap_dispatch(struct Trapframe *tf) tf->tf_regs.reg_edi, tf->tf_regs.reg_esi); break; + case (IRQ_OFFSET + IRQ_TIMER): + // 回应8259A 接收中断。 + lapic_eoi(); + sched_yield(); + break; + default: // Unexpected trap: The user process or the kernel has a bug. print_trapframe(tf); diff --git a/lab/LAB4.si4project/Backup/trap(359).c b/lab/Untitled Project.si4project/Backup/trap(6593).c similarity index 89% rename from lab/LAB4.si4project/Backup/trap(359).c rename to lab/Untitled Project.si4project/Backup/trap(6593).c index 2621500..141c7df 100644 --- a/lab/LAB4.si4project/Backup/trap(359).c +++ b/lab/Untitled Project.si4project/Backup/trap(6593).c @@ -92,7 +92,14 @@ trap_init(void) void simderr_handler(); void syscall_handler(); void dblflt_handler(); + void timer_handler(); + void kbd_handler(); + void serial_handler(); + void spurious_handler(); + void ide_handler(); + void error_handler(); + // LAB 3: Your code here. // GD_KT 全局描述符, kernel text SETGATE(idt[T_DIVIDE], 0, GD_KT, divide_handler, 0); @@ -114,6 +121,13 @@ trap_init(void) SETGATE(idt[T_MCHK], 0, GD_KT, mchk_handler, 0); SETGATE(idt[T_SIMDERR], 0, GD_KT, simderr_handler, 0); SETGATE(idt[T_SYSCALL], 0, GD_KT, syscall_handler, 3); + // IRQ + SETGATE(idt[IRQ_OFFSET + IRQ_TIMER], 0, GD_KT, timer_handler, 3); + SETGATE(idt[IRQ_OFFSET + IRQ_KBD], 0, GD_KT, kbd_handler, 3); + SETGATE(idt[IRQ_OFFSET + IRQ_SERIAL], 0, GD_KT, serial_handler, 3); + SETGATE(idt[IRQ_OFFSET + IRQ_SPURIOUS], 0, GD_KT, spurious_handler, 3); + SETGATE(idt[IRQ_OFFSET + IRQ_IDE], 0, GD_KT, ide_handler, 3); + SETGATE(idt[IRQ_OFFSET + IRQ_ERROR], 0, GD_KT, error_handler, 3); // Per-CPU setup trap_init_percpu(); @@ -229,6 +243,15 @@ trap_dispatch(struct Trapframe *tf) tf->tf_regs.reg_edi, tf->tf_regs.reg_esi); break; + // Handle clock interrupts. Don't forget to acknowledge the + // interrupt using lapic_eoi() before calling the scheduler! + // LAB 4: Your code here. + case (IRQ_OFFSET + IRQ_TIMER): + // 回应8259A 接收中断。 + lapic_eoi(); + sched_yield(); + break; + default: // Unexpected trap: The user process or the kernel has a bug. print_trapframe(tf); @@ -242,11 +265,7 @@ trap_dispatch(struct Trapframe *tf) } - // Handle clock interrupts. Don't forget to acknowledge the - // interrupt using lapic_eoi() before calling the scheduler! - // LAB 4: Your code here. - } void @@ -363,7 +382,7 @@ page_fault_handler(struct Trapframe *tf) // LAB 4: Your code here. struct UTrapframe *utf; - + // cprintf("I'M in page_fault_handler [%08x] user fault va %08x \n",curenv->env_id, fault_va); if (curenv->env_pgfault_upcall) { if (tf->tf_esp >= UXSTACKTOP-PGSIZE && tf->tf_esp < UXSTACKTOP) { @@ -373,29 +392,30 @@ page_fault_handler(struct Trapframe *tf) } else { // 非异常模式下陷入 - utf = (struct UTrapframe *)(UXSTACKTOP - sizeof(struct UTrapframe) - 4); + utf = (struct UTrapframe *)(UXSTACKTOP - sizeof(struct UTrapframe)); } // 检查异常栈是否溢出 - user_mem_assert(curenv, (const void *) utf, sizeof(struct UTrapframe), PTE_U|PTE_W); + user_mem_assert(curenv, (const void *) utf, sizeof(struct UTrapframe), PTE_P|PTE_W); utf->utf_fault_va = fault_va; utf->utf_err = tf->tf_trapno; utf->utf_regs = tf->tf_regs; utf->utf_eflags = tf->tf_eflags; - // 保存上次陷入时现场,用于返回 + // 保存陷入时现场,用于返回 utf->utf_eip = tf->tf_eip; utf->utf_esp = tf->tf_esp; // 再次转向执行 - tf->tf_eip = (uint32_t) curenv->env_pgfault_upcall; - tf->tf_esp = (uint32_t) utf; + curenv->env_tf.tf_eip = (uint32_t) curenv->env_pgfault_upcall; + // 异常栈 + curenv->env_tf.tf_esp = (uint32_t) utf; env_run(curenv); } - - - // Destroy the environment that caused the fault. - cprintf("[%08x] user fault va %08x ip %08x\n", - curenv->env_id, fault_va, tf->tf_eip); - print_trapframe(tf); - env_destroy(curenv); + else { + // Destroy the environment that caused the fault. + cprintf("[%08x] user fault va %08x ip %08x\n", + curenv->env_id, fault_va, tf->tf_eip); + print_trapframe(tf); + env_destroy(curenv); + } } diff --git a/lab/Untitled Project.si4project/Backup/trap(7420).c b/lab/Untitled Project.si4project/Backup/trap(7420).c new file mode 100644 index 0000000..96bf71c --- /dev/null +++ b/lab/Untitled Project.si4project/Backup/trap(7420).c @@ -0,0 +1,430 @@ +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static struct Taskstate ts; + +/* For debugging, so print_trapframe can distinguish between printing + * a saved trapframe and printing the current trapframe and print some + * additional information in the latter case. + */ +static struct Trapframe *last_tf; + +/* Interrupt descriptor table. (Must be built at run time because + * shifted function addresses can't be represented in relocation records.) + */ +struct Gatedesc idt[256] = { { 0 } }; +struct Pseudodesc idt_pd = { + sizeof(idt) - 1, (uint32_t) idt +}; + + +static const char *trapname(int trapno) +{ + static const char * const excnames[] = { + "Divide error", + "Debug", + "Non-Maskable Interrupt", + "Breakpoint", + "Overflow", + "BOUND Range Exceeded", + "Invalid Opcode", + "Device Not Available", + "Double Fault", + "Coprocessor Segment Overrun", + "Invalid TSS", + "Segment Not Present", + "Stack Fault", + "General Protection", + "Page Fault", + "(unknown trap)", + "x87 FPU Floating-Point Error", + "Alignment Check", + "Machine-Check", + "SIMD Floating-Point Exception" + }; + + if (trapno < ARRAY_SIZE(excnames)) + return excnames[trapno]; + if (trapno == T_SYSCALL) + return "System call"; + if (trapno >= IRQ_OFFSET && trapno < IRQ_OFFSET + 16) + return "Hardware Interrupt"; + return "(unknown trap)"; +} + +// You will also need to modify trap_init() to initialize the idt to +// point to each of these entry points defined in trapentry.S; +// the SETGATE macro will be helpful here +void +trap_init(void) +{ + + extern struct Segdesc gdt[]; + void divide_handler(); + void debug_handler(); + void nmi_handler(); + void brkpt_handler(); + void oflow_handler(); + void bound_handler(); + void device_handler(); + void illop_handler(); + void tss_handler(); + void segnp_handler(); + void stack_handler(); + void gpflt_handler(); + void pgflt_handler(); + void fperr_handler(); + void align_handler(); + void mchk_handler(); + void simderr_handler(); + void syscall_handler(); + void dblflt_handler(); + void timer_handler(); + void kbd_handler(); + void serial_handler(); + void spurious_handler(); + void ide_handler(); + void error_handler(); + + + // LAB 3: Your code here. + // GD_KT 全局描述符, kernel text + SETGATE(idt[T_DIVIDE], 0, GD_KT, divide_handler, 0); + SETGATE(idt[T_DEBUG], 0, GD_KT, debug_handler, 0); + SETGATE(idt[T_NMI], 0, GD_KT, nmi_handler, 0); + SETGATE(idt[T_BRKPT], 0, GD_KT, brkpt_handler, 3); + SETGATE(idt[T_OFLOW], 0, GD_KT, oflow_handler, 0); + SETGATE(idt[T_BOUND], 0, GD_KT, bound_handler, 0); + SETGATE(idt[T_DEVICE], 0, GD_KT, device_handler, 0); + SETGATE(idt[T_ILLOP], 0, GD_KT, illop_handler, 0); + SETGATE(idt[T_DBLFLT], 0, GD_KT, dblflt_handler, 0); + SETGATE(idt[T_TSS], 0, GD_KT, tss_handler, 0); + SETGATE(idt[T_SEGNP], 0, GD_KT, segnp_handler, 0); + SETGATE(idt[T_STACK], 0, GD_KT, stack_handler, 0); + SETGATE(idt[T_GPFLT], 0, GD_KT, gpflt_handler, 0); + SETGATE(idt[T_PGFLT], 0, GD_KT, pgflt_handler, 0); + SETGATE(idt[T_FPERR], 0, GD_KT, fperr_handler, 0); + SETGATE(idt[T_ALIGN], 0, GD_KT, align_handler, 0); + SETGATE(idt[T_MCHK], 0, GD_KT, mchk_handler, 0); + SETGATE(idt[T_SIMDERR], 0, GD_KT, simderr_handler, 0); + SETGATE(idt[T_SYSCALL], 0, GD_KT, syscall_handler, 3); + // IRQ + SETGATE(idt[IRQ_OFFSET + IRQ_TIMER], 0, GD_KT, timer_handler, 3); + SETGATE(idt[IRQ_OFFSET + IRQ_KBD], 0, GD_KT, kbd_handler, 3); + SETGATE(idt[IRQ_OFFSET + IRQ_SERIAL], 0, GD_KT, serial_handler, 3); + SETGATE(idt[IRQ_OFFSET + IRQ_SPURIOUS], 0, GD_KT, spurious_handler, 3); + SETGATE(idt[IRQ_OFFSET + IRQ_IDE], 0, GD_KT, ide_handler, 3); + SETGATE(idt[IRQ_OFFSET + IRQ_ERROR], 0, GD_KT, error_handler, 3); + + // Per-CPU setup + trap_init_percpu(); +} + +// Initialize and load the per-CPU TSS and IDT +void +trap_init_percpu(void) +{ + // The example code here sets up the Task State Segment (TSS) and + // the TSS descriptor for CPU 0. But it is incorrect if we are + // running on other CPUs because each CPU has its own kernel stack. + // Fix the code so that it works for all CPUs. + // + // Hints: + // - The macro "thiscpu" always refers to the current CPU's + // struct CpuInfo; + // - The ID of the current CPU is given by cpunum() or + // thiscpu->cpu_id; + // - Use "thiscpu->cpu_ts" as the TSS for the current CPU, + // rather than the global "ts" variable; + // - Use gdt[(GD_TSS0 >> 3) + i] for CPU i's TSS descriptor; + // - You mapped the per-CPU kernel stacks in mem_init_mp() + // - Initialize cpu_ts.ts_iomb to prevent unauthorized environments + // from doing IO (0 is not the correct value!) + // + // ltr sets a 'busy' flag in the TSS selector, so if you + // accidentally load the same TSS on more than one CPU, you'll + // get a triple fault. If you set up an individual CPU's TSS + // wrong, you may not get a fault until you try to return from + // user space on that CPU. + // + // LAB 4: Your code here: + thiscpu->cpu_ts.ts_esp0 = KSTACKTOP - cpunum() * (KSTKGAP + KSTKSIZE); + thiscpu->cpu_ts.ts_ss0 = GD_KD; + + // Initialize the TSS slot of the gdt. + gdt[(GD_TSS0 >> 3) + cpunum()] = SEG16(STS_T32A, (uint32_t) (&thiscpu->cpu_ts), sizeof(struct Taskstate) - 1, 0); + gdt[(GD_TSS0 >> 3) + cpunum()].sd_s = 0; + + // Load the TSS selector (like other segment selectors, the + // bottom three bits are special; we leave them 0) + ltr(GD_TSS0 + sizeof(struct Segdesc) * cpunum()); + + // Load the IDT + lidt(&idt_pd); +} + +void +print_trapframe(struct Trapframe *tf) +{ + cprintf("TRAP frame at %p from CPU %d\n", tf, cpunum()); + print_regs(&tf->tf_regs); + cprintf(" es 0x----%04x\n", tf->tf_es); + cprintf(" ds 0x----%04x\n", tf->tf_ds); + cprintf(" trap 0x%08x %s\n", tf->tf_trapno, trapname(tf->tf_trapno)); + // If this trap was a page fault that just happened + // (so %cr2 is meaningful), print the faulting linear address. + if (tf == last_tf && tf->tf_trapno == T_PGFLT) + cprintf(" cr2 0x%08x\n", rcr2()); + cprintf(" err 0x%08x", tf->tf_err); + // For page faults, print decoded fault error code: + // U/K=fault occurred in user/kernel mode + // W/R=a write/read caused the fault + // PR=a protection violation caused the fault (NP=page not present). + if (tf->tf_trapno == T_PGFLT) + cprintf(" [%s, %s, %s]\n", + tf->tf_err & 4 ? "user" : "kernel", + tf->tf_err & 2 ? "write" : "read", + tf->tf_err & 1 ? "protection" : "not-present"); + else + cprintf("\n"); + cprintf(" eip 0x%08x\n", tf->tf_eip); + cprintf(" cs 0x----%04x\n", tf->tf_cs); + cprintf(" flag 0x%08x\n", tf->tf_eflags); + if ((tf->tf_cs & 3) != 0) { + cprintf(" esp 0x%08x\n", tf->tf_esp); + cprintf(" ss 0x----%04x\n", tf->tf_ss); + } +} + +void +print_regs(struct PushRegs *regs) +{ + cprintf(" edi 0x%08x\n", regs->reg_edi); + cprintf(" esi 0x%08x\n", regs->reg_esi); + cprintf(" ebp 0x%08x\n", regs->reg_ebp); + cprintf(" oesp 0x%08x\n", regs->reg_oesp); + cprintf(" ebx 0x%08x\n", regs->reg_ebx); + cprintf(" edx 0x%08x\n", regs->reg_edx); + cprintf(" ecx 0x%08x\n", regs->reg_ecx); + cprintf(" eax 0x%08x\n", regs->reg_eax); +} + +static void +trap_dispatch(struct Trapframe *tf) +{ + // Handle processor exceptions. + // LAB 3: Your code here. + switch(tf->tf_trapno) { + case T_PGFLT: + page_fault_handler(tf); + break; + case T_BRKPT: + monitor(tf); + break; + case T_SYSCALL: + + tf->tf_regs.reg_eax = syscall(tf->tf_regs.reg_eax, + tf->tf_regs.reg_edx, + tf->tf_regs.reg_ecx, + tf->tf_regs.reg_ebx, + tf->tf_regs.reg_edi, + tf->tf_regs.reg_esi); + break; + // Handle clock interrupts. Don't forget to acknowledge the + // interrupt using lapic_eoi() before calling the scheduler! + // LAB 4: Your code here. + case (IRQ_OFFSET + IRQ_TIMER): + // 回应8259A 接收中断。 + lapic_eoi(); + sched_yield(); + break; + + case (IRQ_OFFSET + IRQ_KBD): + lapic_eoi(); + kbd_intr(); + break; + case (IRQ_OFFSET + IRQ_SERIAL): + lapic_eoi(); + serial_intr(); + break; + + default: + // Unexpected trap: The user process or the kernel has a bug. + print_trapframe(tf); + if (tf->tf_cs == GD_KT) + panic("unhandled trap in kernel"); + else { + env_destroy(curenv); + return; + } + break; + + } + + +} + +void +trap(struct Trapframe *tf) +{ + // The environment may have set DF and some versions + // of GCC rely on DF being clear + asm volatile("cld" ::: "cc"); + + // Halt the CPU if some other CPU has called panic() + extern char *panicstr; + if (panicstr) + asm volatile("hlt"); + + // Re-acqurie the big kernel lock if we were halted in + // sched_yield() + if (xchg(&thiscpu->cpu_status, CPU_STARTED) == CPU_HALTED) + lock_kernel(); + // Check that interrupts are disabled. If this assertion + // fails, DO NOT be tempted to fix it by inserting a "cli" in + // the interrupt path. + assert(!(read_eflags() & FL_IF)); + + if ((tf->tf_cs & 3) == 3) { + // Trapped from user mode. + // Acquire the big kernel lock before doing any + // serious kernel work. + // LAB 4: Your code here. + lock_kernel(); + assert(curenv); + + // Garbage collect if current enviroment is a zombie + if (curenv->env_status == ENV_DYING) { + env_free(curenv); + curenv = NULL; + sched_yield(); + } + + // Copy trap frame (which is currently on the stack) + // into 'curenv->env_tf', so that running the environment + // will restart at the trap point. + curenv->env_tf = *tf; + // The trapframe on the stack should be ignored from here on. + tf = &curenv->env_tf; + } + + // Record that tf is the last real trapframe so + // print_trapframe can print some additional information. + last_tf = tf; + + // Dispatch based on what type of trap occurred + trap_dispatch(tf); + + // If we made it to this point, then no other environment was + // scheduled, so we should return to the current environment + // if doing so makes sense. + if (curenv && curenv->env_status == ENV_RUNNING) + env_run(curenv); + else + sched_yield(); +} + + +void +page_fault_handler(struct Trapframe *tf) +{ + uint32_t fault_va; + + // Read processor's CR2 register to find the faulting address + fault_va = rcr2(); + + // Handle kernel-mode page faults. + + // LAB 3: Your code here. + + // 怎么判断是内核模式, CPL位 + + if(tf->tf_cs && 3 == 0) { + panic("page_fault in kernel mode, fault address %d\n", fault_va); + } + + // We've already handled kernel-mode exceptions, so if we get here, + // the page fault happened in user mode. + + + // Call the environment's page fault upcall, if one exists. Set up a + // page fault stack frame on the user exception stack (below + // UXSTACKTOP), then branch to curenv->env_pgfault_upcall. + // + // The page fault upcall might cause another page fault, in which case + // we branch to the page fault upcall recursively, pushing another + // page fault stack frame on top of the user exception stack. + // + // It is convenient for our code which returns from a page fault + // (lib/pfentry.S) to have one word of scratch space at the top of the + // trap-time stack; it allows us to more easily restore the eip/esp. In + // the non-recursive case, we don't have to worry about this because + // the top of the regular user stack is free. In the recursive case, + // this means we have to leave an extra word between the current top of + // the exception stack and the new stack frame because the exception + // stack _is_ the trap-time stack. + // + // If there's no page fault upcall, the environment didn't allocate a + // page for its exception stack or can't write to it, or the exception + // stack overflows, then destroy the environment that caused the fault. + // Note that the grade script assumes you will first check for the page + // fault upcall and print the "user fault va" message below if there is + // none. The remaining three checks can be combined into a single test. + // + // Hints: + // user_mem_assert() and env_run() are useful here. + // To change what the user environment runs, modify 'curenv->env_tf' + // (the 'tf' variable points at 'curenv->env_tf'). + + // LAB 4: Your code here. + struct UTrapframe *utf; + // cprintf("I'M in page_fault_handler [%08x] user fault va %08x \n",curenv->env_id, fault_va); + if (curenv->env_pgfault_upcall) { + + if (tf->tf_esp >= UXSTACKTOP-PGSIZE && tf->tf_esp < UXSTACKTOP) { + // 异常模式下陷入 + utf = (struct UTrapframe *)(tf->tf_esp - sizeof(struct UTrapframe) - 4); + + } + else { + // 非异常模式下陷入 + utf = (struct UTrapframe *)(UXSTACKTOP - sizeof(struct UTrapframe)); + } + // 检查异常栈是否溢出 + user_mem_assert(curenv, (const void *) utf, sizeof(struct UTrapframe), PTE_P|PTE_W); + + utf->utf_fault_va = fault_va; + utf->utf_err = tf->tf_trapno; + utf->utf_regs = tf->tf_regs; + utf->utf_eflags = tf->tf_eflags; + // 保存陷入时现场,用于返回 + utf->utf_eip = tf->tf_eip; + utf->utf_esp = tf->tf_esp; + // 再次转向执行 + curenv->env_tf.tf_eip = (uint32_t) curenv->env_pgfault_upcall; + // 异常栈 + curenv->env_tf.tf_esp = (uint32_t) utf; + env_run(curenv); + } + else { + // Destroy the environment that caused the fault. + cprintf("[%08x] user fault va %08x ip %08x\n", + curenv->env_id, fault_va, tf->tf_eip); + print_trapframe(tf); + env_destroy(curenv); + } +} + diff --git a/lab/Untitled Project.si4project/Untitled Project.SearchResults b/lab/Untitled Project.si4project/Untitled Project.SearchResults new file mode 100644 index 0000000..943d2e3 --- /dev/null +++ b/lab/Untitled Project.si4project/Untitled Project.SearchResults @@ -0,0 +1,3 @@ +---- IOPL Matches (2 in 2 files) ---- +env_create in env.c (kern) : newenv->env_tf.tf_eflags |= IOPL +syscall.c (kern) line 134 : // protection level 3 (CPL 3), interrupts enabled, and IOPL of 0. diff --git a/lab/LAB4.si4project/LAB4.bookmarks.xml b/lab/Untitled Project.si4project/Untitled Project.bookmarks.xml similarity index 100% rename from lab/LAB4.si4project/LAB4.bookmarks.xml rename to lab/Untitled Project.si4project/Untitled Project.bookmarks.xml diff --git a/lab/Untitled Project.si4project/Untitled Project.sip_sym b/lab/Untitled Project.si4project/Untitled Project.sip_sym new file mode 100644 index 0000000000000000000000000000000000000000..ca00bffebd9c4baf7d199b6dbe9ddd0b20188c80 GIT binary patch literal 1215512 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�AEEU$o!k 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 literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/Untitled Project.sip_xad b/lab/Untitled Project.si4project/Untitled Project.sip_xad new file mode 100644 index 0000000000000000000000000000000000000000..c715f24ccd0c62cf3f31eba9d321f0a6b7bd2503 GIT binary patch literal 1008 zcmc(eu}eZx6vmHcicnw>5w$oJM3ZxqB^r^K_-u(F#iUx&%$6W|5Dh_rw6sLHHEPfr zNK>Oh&}v&t;7~0=^nK^P==}#Cc;EZ(xxaVsx$m8KF)ET3@rg(J8X@feJkZw?bn_7? zuNhn)sA>GO8R(tg1vpvoil6r(5qmyHCvvQM6x5p|hd#skFkV<$O)-5+iGqvLm{=F_ z(t)#M459dmf>>8da3)c3%t z9JriesFv$Jr{X5B=O}|K|8vtQ%r6tVZ#uuF=Qz>n8oq~9JjQdlf--BkN~u8Ponm7> zo5sYRYu`*lmYLP_*1^>s2)Ap~BD$WnEqdM?PB*|cXiTg*CGfpi)sj}O%k;qY{wR?t zkNF<>742-?!tW?@Noj#=(U^GhYHMoKRQEUZy!V`HgKHbct^986;WzZ~<5yFA_!m|o BR2~2T literal 0 HcmV?d00001 diff --git a/lab/LAB4.si4project/LAB4.sip_xc b/lab/Untitled Project.si4project/Untitled Project.sip_xc similarity index 64% rename from lab/LAB4.si4project/LAB4.sip_xc rename to lab/Untitled Project.si4project/Untitled Project.sip_xc index 1656324e1f0be4c3907352db3883b150799c2daf..95bb2669a8ecb93593894f50e233b197fc947694 100644 GIT binary patch delta 14851 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

Q1QACr+Xl5_{y|i(bf-!!bGN<6VgL%+;uJ%PREz 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 delta 2936 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 diff --git a/lab/LAB4.si4project/LAB4.sip_xf b/lab/Untitled Project.si4project/Untitled Project.sip_xf similarity index 59% rename from lab/LAB4.si4project/LAB4.sip_xf rename to lab/Untitled Project.si4project/Untitled Project.sip_xf index 09e8462cac1c466af94444449317c1091cf526cd..ed8959b098c9d562e312ee35f7af6cead312c2bb 100644 GIT binary patch delta 23218 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 delta 3572 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 QYJua?)HUPjGyF~If8OJpQ~&?~ diff --git a/lab/Untitled Project.si4project/Untitled Project.sip_xm b/lab/Untitled Project.si4project/Untitled Project.sip_xm new file mode 100644 index 0000000000000000000000000000000000000000..72739aeb182021af1c59d22edb6cb2d35b5d9465 GIT binary patch literal 540 zcmWl|2R9Y~006+x-ZOh;CY!9XvkTdKugWIbWh8#LbMM{vKp?PTs2$eYX_ucpG{rho zO|#n`j|?;248zSd!d^evXTJju`o*svJLIqm7H;WmnvC)et8#ClnXjU4H^zJmEcD!6o7}e9B8#1J+C58r=ZqJY`q59e_}(&S zUH8%;=iK+oYj2#l+zMljGu{PTO|a576Rk4XMgREMTkpL0!GAvb-zTe0vc_Z&eD;k? Fz5t2EBUS(a literal 0 HcmV?d00001 diff --git a/lab/LAB4.si4project/LAB4.sip_xr b/lab/Untitled Project.si4project/Untitled Project.sip_xr similarity index 61% rename from lab/LAB4.si4project/LAB4.sip_xr rename to lab/Untitled Project.si4project/Untitled Project.sip_xr index 0eb429b4f69d3a403a704ece3ada5ea6e3507b88..2458b6b732a7cb690ea8cf78f834939be3788a06 100644 GIT binary patch delta 26256 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 LE03@1!EpruhfXkk literal 0 HcmV?d00001 diff --git a/lab/LAB4.si4project/LAB4.siproj b/lab/Untitled Project.si4project/Untitled Project.siproj similarity index 53% rename from lab/LAB4.si4project/LAB4.siproj rename to lab/Untitled Project.si4project/Untitled Project.siproj index 89a2a82a16182ef9c773e6ef514b9ef937693aba..0e7a9afeb498a69ca4ed502304fc689e793bb007 100644 GIT binary patch literal 44792 zcmeI5d5~1q6~-UPs>pz{2q>~Bpx}rLgCgJnf}jX4prWYs^fvAEMt2V|Y>op0idcrY z;)p3Di5M491SPnlP+Ap3j6_hWG8%;-YNA9j5hmYv`}XVCXL_pgHz!}s$Lrgt{iA=L zyWjVEaBIhz;y5jqI*vmhX=rE|-wZGQFBJq1B9WOM^F`vNeih$Ye#!rQb6>j` z`t58su({*ZA$Yd+4aYl9Tc?FHM*IhiOSv4=k#M{;8I^Gj<)NmY{oXEE57hJ z>wBAMPZ*aX$548DCYa7B%|^$0)IZ;FoY2BCxi=M%=z(afkHz(T0gW*!atx<@fnYRJ zQJSogVHM@Qb+v}$$;iLHsN22qt?AOy#lJpdQsfwk`=|TT>0l~TS}Efi%Fo_bXE?UP zm+j>F!nc6w|Ee6vU^Ju?B0x<$nB`cH*Q4O$taqWF7Zc-BF30#RwHycR-f(JJ+0JGS z;5Gq(+FNgKBWY#Jj7zy3Q>jEsDakF9Z|Fphty(%xF97Ob{f}cLt!$ZbsT{|uia;tD z)(P_SyYDdV6#|$HDgjaj+vA% zsS+Z9%zyJ?GwxY|e7q6m>#c`y(X5CVmvTAQB!g+CAS)hTZu*%`;K;uC2J0P7^w*3_ z9W5z7_EJLOxH%HcDVJlF zKbr7YsjS*tcRXm?$93S?1%UcnUuWyH>{l3LChH)vEV=RFV8%F{B@)JjY zdD+ZWCLe!7{?+2^a*u`{g99j7s&FoWy<$wN5l4j;`@Ju-9FKtGi2%fNdi3Nb>NR6h zd5%e}_=F-Fdz#0VX6yA?*hly)01dHz8Iu{#XXI%{#-&`2XdNS|nHsCLAj`!$|4`#2O@V-}!NfmO`n2nAT`u(p>KGuQPO#n2)dSP3~Awmp) z3dFcno+I|JGa;23+5Q)+&A4YNpq&mt7hAWq^_pWJuNaqdIi~%U!GKDP&ia09Ouc>_ z90LF}#(Ep_5nYWlRzPE1N^n$Ju@9_y!qn?0z_A?waokN0!~CY07?a9#Oh)2LSI(mS z*BFlL!7&3s6Rg+Z8~{?%87ZJKF4dT$zLb2XKFjenaO4@$%d8i+$kM{}ut1DUHsu4$h>F6xE^KsK(bKRD? zH^utGCfY~FrCg5Ypp?R71dyBR-U;qPK3)%w&w<@_c#qzX1qtpmTrGGqCRNB$VKM?p zxaV(8KGuU{SCpq&U)RLEkZ~z;#Qm-nN|$gAj!s)XynG|_k#oYec!%q@bjbR?;}}Y$bZ%Y)$T8IopTB~7-39&0Qz-NHBl=wcBeM$F zE5@X993x4+Eo8q#_nY~36db1l5Z5Z`UZ~g1Pr2{Um{g7<+DNre`dG5!A;Xc+0^m9> z&+gIJpv)l;+eoh%lge>S`r=x*U7fwJuQTJGQp^i^jbTGy8k#Q-Pquym)XI$BOlaKd+<46E1xBkd-Hw|}VHH2lrIFB*=m0f+0j%t887n3D5r z#-#Eb(bH5V6WGL7$MJ*jvK-q04(EYLOXCF=7P_ATF)o$oSRD@6R0gBbggTBJ=Dd{c zX8?!!NN)6Yn35c2nV%`b@my^nM@-smIFcdnF=9QYo7)O3xygEtkLEcBBD3ZOQ~Ht- z45}a8VmPMpnjG1^(9gh>b1vmy zc#SEwIU~+<;(r3imbl{fxB@XI<>82BGdwXRp>JJ$`vX~yKLQTdb~;%P#Q=vXDLFDO zRfHo(FX^=d7m(2QiU9Wu+kR~M1!jCqj_LQmgBzxhq=cy z6!c5BePrGCiZQ7|j)92Ag|oNsTW|95XTV|G*VTHSrA6>oE5W>E~fe&I=inYRr*OMG8hW(OkSH%dwf|h}*6mdaH#cIWi_CIffMu z#P>9N!L*Mh;J6Zicou-3hXD`k^fcHj#-s{4&Q3)#`g-h}=e}X;HRpk>*QZ$DWnsyD zWL&BUM|BnZo^P`pJ6ew1AEY0&up~#hf5?yJIpV-sCKc3|jbJuATd#Y7V?QwIW!(|; z8LoYw0DINTTd=QPj!M^hh~dZOZ<=~N101=w*vEP`gOD8eFfQeCj9@mXsgw4A2pq`f zqYoUp2GQ4=>pjdzj?KMdT*~E$+quHY1Rgc)mmfLm%N;)4VEXHkXb9Pd46`l)M9yVo zy=Gjh5l4mNo(m?vXgHRGV{ZVu$ogr^QLgVWE|uq)ip21QTz%Q-I1Ap$a$F3KLjY)` zbr=mJpKm7nXU3&mj_F`Lko1K$wvkKT-fH@pwcyAz%ww&mf+OBCYiM3>j7#M?CPEpF zhX4R%`>?kR$EN^|9oqH0(5>l%kc+5W4)ea-3DduyUO()#-&`2{3XZ=mD`2R@$0hndLr6G zuI2E|86CF$b%}t+n3T)0CK8M)Tze!BfA3AEUh_OS_ok;?S798EKhtL7;)-!8a>RX_ zA)ONVHI{MOx@=w}$0ayhEaMvNER++sNX5!^BW#A-=D%*l2U6|1&6j!9oC6Ujsp zafN9)WnRi~9E$d_H@Ky&yJKEhOpHsBBcJnuAAwXm6kpN(S;KJ;+Q$h1G|;*wxVFX& zn`@F@F)o$ki1x8qwU-}1D$5USeA#g9iF#d*{<;F+l1^c=-3J_B72ldMDVJkJ?KYP) zc<~*ZPr$fm5;&4s!1{e0;$xRB=hKW!xg3*vZ)Bgi<1Leq)4=g6018^KMj3zRUScmd z#-(x`xuuW_>U^&26!NnEhQZC0xQtixe^m{uD#|hy0 z8UUrO8?f-$)#>2W3TTW={K%%D(;2D*6&JO|_ zV^TSevweD>%XP|xT_zvv!IAeS++n>JSJvy+uvd&rk)yf)+OKrc3_!*`@R{NGPmCW= zL-`i#a{-YI9Dy$>)uI-3-S*;MNy_64rOwe3a)>7?*N6#;ap0D>Z;Tndo6S_5(+@h1@fw9|1@1 z7xsa@Vob{Ai1i+vBTZ_YW{()x-*CJf947)0_ZH|d%EzO}mi-K4QZ7fOeGGYocJ2P+ zd5j<9;C2}XjI;0_eG(=zV=#I=%ny0Qm{gu47bL{l>P9K&&*^N5fpn!$-}5xLom6Hx)`4R`0GemL@|f&;kG#K?aj8O%Iybxar7tubmw;m}0L`~P zu_Qac2?%J6OBHaes!+N6+O79RhT~Fj>387f|Gj7t@8R5=RAZ#4Tx8jg2?V>tlbW<44Z`P`3lVXqjMYQ!<+ z^K08U99vdyI4%dr(EwCyy$NNGCx^pc)p`r|by1GWo}{_v&?v+4ZgAuJO-f(;b9H-))#n!`7=3XJ&Os^Q1 oaygnu&cqTKg(Jx0B9jfrN5Kt8D4ZqMS0NwSK5|Uy72{I>1p>$5GXMYp delta 1885 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 SW9!By>cQv{NMF#0+x`#w-A0K3 literal 0 HcmV?d00001 diff --git a/lab/LAB4.si4project/LAB4.snippets.xml b/lab/Untitled Project.si4project/Untitled Project.snippets.xml similarity index 100% rename from lab/LAB4.si4project/LAB4.snippets.xml rename to lab/Untitled Project.si4project/Untitled Project.snippets.xml diff --git a/lab/Untitled Project.si4project/cache/parse/boot_main.c.sisc b/lab/Untitled Project.si4project/cache/parse/boot_main.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..adb2cb0065e4e5616b01c5448861d163ab0da4d3 GIT binary patch literal 7018 zcmeI0Pi)jh6vuzG1(p`13MwkvwG|Z!(ug2PAw)%MBv|>A_&2n$Te`8d8(M^Ts+>4@ z;NXFShbD%ks8KH_CjJQtnDnRz{6jQWqXz#02^SB>pWn~SyxrNQwv>P|#+ST(GjC?z zynpj%e%m@DNwy|Q-C|)?WvB&mtH0(ipygkG&!Nhyyd%LyAHqB=Lrm)J< zum^2|p`-h^kfttNZX7w8EgK%(y5-TQH*8Udz-EO&mY*P)_IQFZ)*wyG+ah?zhK&!m zKeQQriFtFF2famzFK9D1C-g;b3fDMydAXT=U4_A1Vc>Z@!BOlBtA|7p%t7cEdYI-?p7!W>%?;&XS?K(s za-Oizkv0f6w`El`M(+1@KKqmIBIuO^uHH0%_!{$zE8 z`563!5ZQ6Qs_Vdb_a-3>fgkIUre>A*X59<@g&aaL8UgqNiWhAoc-drH$$2BnDX~g0 zu22@oUL006UbV`55leEy4tX(o|E2~u=VU=y2gQpb<9d;C1LjY~i?IjISf2!C2grl| zgoI5d^5K8AoQz{@$%Q3~knqp6f2u+q>7pUGh?lc&0Vv*)4FQ+zN z?AfIC#7J*sS3jZnlms;1#4?%b0qN5U&*@hyk`+QEw+S%?OO2;nzGV2wsb-e}8g`JT zy0HTwv9Y^Q+D;00vkO_}Tu~b1HvvZXB2~?f-jtug{joypNBGw_sV5yH6>aM4lR9bp*$ar_-g@ zkrBz;CWHQj3V}D(w>o04BcqI4`;zMj&nxN()ar=wvQf659;?20U0k)wJH4jZwK+6d z&N~*`A|yt}%SIv({#Y#%k9r`E(|7jo?Hk;p7UvxacLyqKOH$!wBdP5dC`zn7AazE6 zclSWviDf$q6#<1(AW+tL8lT{_SBcH{<+c~Qp4D;&o(ZCMisGnQ5idSiBYJwXr9qm` zwWiDEx%+wwz4>ghtIf-2Zk)HB%F)B&EIp+$&Qj}dP4yig_?HbYW%hTLi(aXMLcXFK zQL=P`0>)F+%2h-B`0QNpEwi`KH@N(s?Ss_@Co*n-c-@%6$r)A9$Y6{G2*f{Ouq8Vb zuw=h11`o;LC)@m$VFq_#@bPklIUhv%pE8&;XXjDPQu~q&MnIg>?^D zLm!t7#!ybL8EoZVtO|&a76Xyj7%Gd?ro0CI5BLQ*6B}E8N}y-PF1Xv&;k<$j7+{d$0kuK%*RWpDV~fs{6#rH*RWDV)>h;zA z%O!WJa;BokWOFAQpOS9m3ONK=K2f2I{2la`FEloXFO+yrqUy2W4L@fQ0tD@zxZf3_ py*5z2VBKdTUB1Hscvg*Havc9-Unu#A$Lko#dE(aERmNwr!C$+p1110f literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/fs_bc.c.sisc b/lab/Untitled Project.si4project/cache/parse/fs_bc.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..03549f820d44a8943acf8d8315492bcab503e5ca GIT binary patch literal 7300 zcmeI0OKenS6vr>+Ra-`@6obLXKoE;z(I^3;(KIMZLZVfQR#{A^otBO*?bug_xTzb% zvL-HAh|~qKs3Zg-Vju()jF`A^gQ-yxOiUy$42drm#_|8V-#s(mT*q;WLZa~`XU=!e zckcPl``$aPi-Mpd2o|gr26aI&wLA#UAFm7Xb5Zc%SLc_&J9zd`0y;nVAO0&5AosTk zo8{1J!qIT+ds7AJEqjf_*v2W+z1U!R61k)FsESK!EotcdMsQ;7%vMxhU8 zAG|`Lw2MtQW`}wP$1}ajRehs%{i}9}g=rQN!h_1i!i7QuJ3fDQTch!yg+jgLoh0h( zGuhFBbS5+MoGxHkAaB+hC5VQ`v%8H z`%~S6!#x8e5_73HDD{q>jlx~RI9!qL@{mxq_k?2TuJ7sZ?HNdQ_o$J=f_@|13WB#p zQB0*Ahc zC%E4#xNCDh5gd1odRYAV5}p=s@6q+4U9(ZXLMOE!Z)&lMfQ$j>*mX1yLSp+qB^dxo z#a6S;D0{YEUn*nRikBNMZf#QT>;)6U*$fH67>e|kh-%V>2N^Hvawe{()O+zNa>-y1 zhZcwRGc=5$ejtx1Xl=(_AnE3e@UutqiTt;_!pdP3U8iaxsesI_-$Hu2o#BDvN%IO{+9(+0E9nEBVMV48InVANkXdKVkoplh)&}vkbaD`Q-VSv zmMvacJG2iwDI{yqO+u8ihF4uFrZ~Vjd$2yCHCbKhQAPrKjThI;o>5vDD7wE~A!Xm7P*`Eh@SYXfzGTbDL!)~}Q@Ql6-c))}uaqsV>(X^~ zb)1D?7KsP6wzG`qpVfJ^rn9n{-qc8MI@1!pecZcQXW^&cFHP!=wjW);@FA2DCiO(_ zyyS+1y?YZ~Y`j)a6TS(s&C1oNSVf-VUS&Aol>>6ru%lxno$DJ(@9u@^yWA%Cx}uj5 z_HcPhVYu>L$z@U>7MLh5|Je&gsca-D;2yx_D~%N=QEt-_J=3P58O=U6b;-`z3niNf zKV@NQurtIegR8ZP6#H??$)@S(*?UGxr*-&6@!G%76h|p>qM_*n;)H#bd`8ZIb83wf zWAklcht3acS8E%g_Kjy$TgC4_l}a<$2EI*ym`sdNlwv%T=P>kEA;C0W((Cum_v0g! zFgU=u1vc)u*e)cpP-|%8DH_EgqU|zpA9jv~9)H|%oP9_`i7>_*FRqt8gUaKMygV;N zG9@G&Xf>Wcf@byJ%DzFRap(V?&_X!Yu30ltVFX>KrlLnS`KI<;)sL5=_Y=O+?JR7( zRwIZs`{}l{i(M>%>LVyt0@M{Z`%QIGj!j0+vWGyMc;~)$jgGT8iNogXKi%l)_H8<& z^OHZgXTZChtthl>__Tjq`kuGpV~sAcVx#XH&e;c3v9a0b9BcGZt;d9ZBkHmU@%N)X z?Qo`11Z_R%=BC#$CM)DK1iM8G9N^%>(eYgG$ZD;~DhL;C2O`QEb+1}0|L zm1s4YYJ2GVt9^Ig>PpAf#Ea{XU)Q8$4nno+uT{>Do~yjw_iv#!`$r8^-+SjQ&ANb+R@{o7c7&dFHo&Y&m)d$-um>x~|d(G2W&B>Xj} g{N}QEwH{B7_Y0sa{B>WK<|F^Q8rU<2*E56P0l=#cOaK4? literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/fs_fs.c.sisc b/lab/Untitled Project.si4project/cache/parse/fs_fs.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..74ab51761d38b2d05d5df7a84425566e03cc6ad8 GIT binary patch literal 32054 zcmeI5dvxVhb;s{Ka2_E;1_A~_y&y8fAQBkV05c&xopF!}5Fp4S$xIRw8Is#1BUh_! zs;H=4m@c&)U9^oYZ=|L^N5N&*s*kDK)wEqYSw2=%Ejo%qe4w!^x8Kk2oc;Tq`@1*K z;m#jj-D{of^V`33zUSBGOn99izXDW4?60>Q_d0%Ky1s0DrzL zlliE4y?9QOJ6`2_0o-*|CUdOj^^AP^GrFGA^#!VbYE>q)Q{{uI|3rPBQ{Ow(?%y=T zZGM=46~-pD->qvkDW;l4#=UjLcVqn!7YZlDchTvD-oD*?_I7qxPdc6J5+!z>6ooO6{47oA|2k!M5JM-l3ay&5-w~V3>bY0hbkhzlsr_1l8?mtYYPj3Wa0T z@1@ZtlRl=qcaOJq+npVIZpX=StH+}jZfAr4LX{`H3`Sq5^&O2>HWt@~!aCh!d0d-y z5&msmL(b;7%F!wZRha(IRe(Q9Wm3h+;3waip8i^G62hE=U)$L`(6*<)|MtB(W=`;Y zRt4x9;R21%|60Y!teii!bmm88TrgnxbwE3JK?i2e{yk2Z40ED~XQ*1n@nqG8)6?*4 zwT0YL0Kazd_TF6E;GT}bp6hkVN}r;>z+LU3&r$tU!&BYtyzk|WRpBvFD6ElDH>rg) z${H53E!Q#B!}h`XZ}cd)dt}z<4FR&*Wb&fMsw7CUnpIlO#0#sU)!aSM)iKn?tkCp;kt5 zZUcU8H1(l@y?wj2m~M9ta!#C}@@)_JeLo1+{Z5%d_P?gFitTJvC{%0Dxm9M6>S&Nb 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 AyZ`_I literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/fs_fs.h.sisc b/lab/Untitled Project.si4project/cache/parse/fs_fs.h.sisc new file mode 100644 index 0000000000000000000000000000000000000000..6d7d5330e2723577a12faef6a50c291e0b9c7a01 GIT binary patch literal 20216 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 literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/fs_fsformat.c.sisc b/lab/Untitled Project.si4project/cache/parse/fs_fsformat.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..65fd0894c76e58ab44f3ed46e1fac193d607ed4f GIT binary patch literal 19067 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 literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/fs_ide.c.sisc b/lab/Untitled Project.si4project/cache/parse/fs_ide.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..3be2f5c8f2c49b8f79cb7995adc5bc8ec10f121c GIT binary patch literal 7308 zcmeI0ON>-S6oxO&07Hw=3Pz2nH~5G~jV*|eNN_Z0bYn(91U2^HbmMd&)06JO*UF90 zjiWK(E1@@Na5b8kxH6OI&dqEvF)luj+_l&9Q{xK6%P=5g?wO* z40>JT9gP(lJP&9^SKlGsUxjCGNZ)P%--hUatV2~HKmrL zvpruV&N-G#_HOu&-|E<90{B$3NxgWH#^)MeN_Id1w`x42`Ed_c(!Pf^I78{}$nioZ zV{N5hGZvnmB-tvkE34z9`}UVB@wz>Y+}OGii7;uI2IRPhXWk9oZS;SVWOe%y_|*o# zNt5fJy5*+a*k*;sxd&H5j{7s16Av?wb%=9~lEk!2ahBb?<*w45+jc#m4TRQW=eWmZ z-VN6<;Ys2$!HLj)5Zoas$hQ4fBehQ$sU=7fY=MoH44Zn@gnJ607WMAdUNjLh~S`T19iT}C0-V?*&mzv(268k zrTr+E!mk2;qF#HfQbPY5c1eyt8`&VbO#^&9b(4lsTm9cU@mFYndLrIh0e+)0>Cj0% z+`8GL@C?ue8n=5H%-mc!-pprCPE#-Ey~v(Hz;VkCJ>cL6HK1_~1K#N*=^q0w{@Mw= zT=zK*4||q7r`M~K6`t^i6~pL-6Zyiy4_(M|I%1GxR3L|re3EC{`nj1W{0uar7*Z+1 z;-W`KZA?9Jj%l}0G2})-(;CAXoNMW3T%xw@#13;!O9v_iqO;>hg>AMa99U{K!liwUf~(CeatzB{m?=YV$b~=ykj0S z&YH~?nYBC{g*qfjmLHru@K~+3k4b3kj0`(=AT{<6t^KJnOTTV>&`w9n1+MN_Itn_% z(eG)P(N>;}v&ZJW)3J-uvSu_d3!g&2 zFfc_0q4;(h7#u@j3aT9wPiBE(KXugtqiNSHw5(&DbL@GcEF>t91!ZIU*skq7n(UN< z@xsLXTd!j>*_%e!#9*0{*Sa_hvK{vxaO z*ae06>mpl;HLHy4$hM`uFR}$J4c%guSkgDNby%q}^+uX5t7Xhuy%I}y&lPXG4ntd^ zsPdkr3;qfVh8`V}Qbz2z(-%sY_qF$3AC$i|->x}+H~Xz?8`o01llM*^(;%~dtKKDM zbbYc0&L<4Vn=B5pr}a%|_HgM_0)0uNGCE#EQ=UM$)bn-XhKei>P^W%rx+*ELqj}A+ z+?YgDY7&^&cwQ7YOk{D0`RxLlj!V@Bw+9RE2)LCrlXVs#{ADz+0M)Bn0s&<7H4k%& z$z*@Ku@1|lSzO4ZtP>$$yQfx#mhUuF2*2@R^goBf6?X{;P;DNUm!9 z(usWJuPPsMsE;xz*{`cg#X~oOWoZS6OxF9Vw*BK0X>h;p>W1|tes<0=c=|<^cYj|w z6oaRAUq@a^YZC^Wcl&9um3E9%blaJ)X?xz=U~(lT^c|qIcN*K2u`|99^M#GEGm;G* z%!~yFfPNagP52gFyNYlK2Qcq#EZU{ybZu0hsgx!Wgtd4GbA4=C!`x>T+xXSYT!2u; z%(dDo(Hvq=NR|_}zgzugKe(Yzk#uVM3ugUcRys{wmGuYu0v|EfA2dCq{h?cLpl4Wr zupeK>Ip5|A%Nm}ILc8ZxUEMjWUi=i{X94^I4g6`cIH+cYpPIOZkWj80CQG9J?B>P4o&Cuhllhw>u_=c zRFg@bRV%+H=IEdM!{b^<-@O`El1-)x(nc(P*Qw{p^anYlTYo637mWBTW&L49DLs22 zy;4Q*6coeEe)k7UA>%r-omRaoNZUWX`@@h7ZgupBf()K|IWyShWuFbU{(zyD@o>mw zy$vQLDWPxI{t#nWM}Ih`;uO7>84C>Q*3al#f50%iig3tey^Te?lrVN__x@0nx$!&c zw>q248ZCN%kjw^T=32dHe@J0}F=;LdbU@IM)#9NF)?9VQUx7X-u=gZS38e;sUclJrl(&$C{UeFM~jeRLdXU&Z;P4eu z@ab1y{s6qEzxlN@pbImn;QitO=KccVG8y!H!h^!|g{{IyAuzu3Nb}M5rAFM4G%w0z{#5j@MfZuH z7kyQ2x+OzhGrDx(XiLJQZfU49VzzNzDxG6&XU{oC0y~sc`wejaM}cT-U1> z_&~!ta5RiTxz-q=sUxKl9`zt|GUru{F)}(lxO=CDxnEUOySXwNhJiQxFo~haS!%>p_uSh-CsqT+NR;Ajv}nIX(V>eEmvnUB4ii~8~p?%8>ln!&$NsOiY85~3)QjECLLCoyW65pTZ{OOn z`Sv?03tN4ar$H{f+2tlqLhj=Bn{M5F_w}et*EK>(%d8XP2bvf!@t>Fi>J6&Y9g-hL zdmd!gv}7|m;TeIh7p1T9(sC2SiSMKqT^99^4Cg<2k4j9#1|hIXh(zMx!@@KaRu#)x zfVxttS?$rwTi863AATg?HMo0llqg2b$Eg$GZ$y(E+JpvXd`GU>>;?InQfaBe^lW#5 z!b@>PzXGDGXV20xcI8o0%7bQt3>o<2kfBvn+ns(9lDB z3dq3E`Ou*#imJB?`vVVRp*FQHt$uUn%tmiK@`Gm>1<$ZTpA`bn3(YgnIgbCZ>kxJQkNxBeIV1B1um8^r@5wa9}+((fn zxGxA^sq)7H&sBtv@z)ME#U_xY7H59h)uQqu7a&MIU$`Skcqm9E6d#DBnu>)lq{9wl z{1S3f_dMJ)xLYh|@R+(`c=5s`&D)p0g49lNLkRX=MDhNp}q|o&@}a_P`3^N@1)Ae1j#bxHnvo zxtMU;W`zicvLa$$96G8h>*LElQ&L8UrlBrU@n9cWUG_PJh{qK|Viv)a;iUzORfbY2 zwTpVeh-DmX#0OAT4PuRVoMImy>dW7u?zr(HA>jZeh!AVMv{q) z(TX@4QylFZKK?lB)JQ1O?j$1h6qpBa`x*s8ujmaQ+i}}XomZ{jxMAatT|EzWjSTG> z?#+)--l3E3j{d&&1J>{TNXd?z>@F4(FLuoet#w~d8=}|p+@#{OaBp>d(k=}Zyb$~F zz^&ncp6>IDe2t69<2|DF;U&Ef*bWZrYdZv$W@sSZkjZy9~$LXPHZba^tA*QqNN9Rtp$Ty z^-1X}A=@gHV;k*^S6?FfctB3WBRvm_p!?NfMBgEIpUVBJc@)Z7>sa%d zI0;GKK~QTC8YC4&62j zk<6-Z5ONo7yg1fp^k^gT9Xie>*3mDHt8vB9fpA~J*}hNMEncD1$2t#C(1MZBE`47i zRvBn#z&NJeY;i@OyM**<6RwD;ie;YS=tEo^#A~PO=FtukX@j#`NUcZx;x0(iSA|6_ z?v{OjF;gMS1N|h^VhfnXiOQM46*(rlEk%bp3?P?W6}hu*A)D*J#?_Hre||u-7)Aaq)_`B=*vue)DOs zZ9s7h5_f>{>f4)4I{G&4(MjgR8>$V?UV5Z?V`|6EX@bXZO$;V#!INdMtqv$)E9STi zwjEa~)jh4l0ANzaz44oV#eQ8Dy{W)x!{C|!F6T!MIrKYUNJP`OR(_11qtV{h)@(b? zS_vegmuTtSD{Pk@yl9>jekUl}pz_xhX7>nxuC_(BBd7kB>MfV%bqyGe%W~E-R~bHH z{Yxd&)a%SK*K%pU+LJ?|tS}6& z#!HK>v_2WcDLRZqoc*wnoeyd;V7#DM|R zR7(%&_`$*cZ0qo~9DI{Ex~;2+F4f_eu{eW$TF6+R6EYS)GG07Z?q3f!A=98#svb)V zW8HQ7=o;cJ!0N4Czp`!f^%{%FJ447A$aq}HSWL6=;;~x3o3<+zdHG!iys9J)f!;g01ssS}8gr5*1?2AIQW$ug@Yg?4ISZ6RN&vb6P>-I1UQZjQu z$XEx3Hsi*N$7=ch!KNg<3HIt)(2Tp;#+Fvr=-So&%sBFiSM%kV&J<1IerLP*eZmRx zrf&AzF0b0rg?{Kb-{-1+jbT|I3K*~cw#&?TAi9oquIkVZyCpoxykG6GcS^jmj>KO2 z6IAnQ?>&-_PqA%XL{%*F>f6gKdO+XicD`cbLN`6dlbX(rVTxHVnA|Osb6XOV2?r9v ze40!GK)0Pj5}Z*L%jNneqooH-cF$|m#ujAQ8{vUqry9BW)zPvooSTVfGARnor?DN9 zZ^qgd4h1lra(!bl(E}w;MqI^fw;;Q|8e*9`Y@NC6Nb^h-%h-v%W~-eD#i{^wjlo8@ z_VKALZkP6dn{;Xo{%1%1vam%uwT<}aNcf*XBY&ArD%L#Jl6MRkXRbQYhx|>SF(Gmu z6Vjh7F(!l;=hVXY4mQO$*2}5A`g+c2K4ewpREesXmzFhpDgCp`2jx@pLH8Yp+%qJ0 zQS&#HoN9hXRt(n8cysju{o+{Z(7Y@UI@!ETN~i2+lXtxK!=cONx`yC-R5u?Vd zn3sQ>`@E$0I*F|C!L;l>5E3DEte2epG8N{96NmZxWX(%fv9cvKFGcBD_)Ib{oI{A) zlQAz(Y8>X}DWT1a@#1-z(Y?%E*Nc5wuC;${jx&fvSIof{5&fJjK<|F-{n()=OhGMpgibi z9OGr9gMCqFVpWx)>MOYJIUAZ{DH1*s=tfbK3NIT;9skd?RP&RUvruQQ+tr6C_=XVA zL+uXGc=B+Cc5Vr%9Z-D-h(zY(P(+z8v^3svNgSqU97!{Zn!`u@4plz&E4n7ak&th} znvQ5P-=}_?QKK5NJj;rlI&V10iyoMnW1afDWp7h>xY(t3Wd3pS+PeK}#$Ng}kMn6S zcN}r7VJ|TUSh>EvtZxtKyVRfhEy3c9c$zbs(v9!B$}h-|2( zBjcrIVwXWxf*andDq`rckdz5UTeLJ@S|ZxCl`XgA^j2VdwnWiV;JGo^*FQ4LuRYb})% z&y=!lAoGVVczH95y#?{cel@X|sleu1_GZ7AqzvJF1W_B$~#(wyA^MO~Yzn)3EG{jL-{`#;9O*j4pzGme-CFc`4 z^}d$rzCJwi{{H&#E%E`W@{>a1$F5hays*55>LS3YxH3;v(^GMk_{8Gqc;jlT-UhVm zw)1RyV-a%)Eni}$~sXj3)POq zV^kfDqwgyGK&|Nry+EkpTp35kal^Hv_aIQ!plZdXY>Evr~AhGWZcvJGZgo`Xeye8 z7Asl(7BSm({IO!^xKsNr9<78^`)%S6y-{&@(W^v>X}f0q)cV;Ldm`~^X|AC4cR0K~ zx><{ANC7>ib=ve;@__FwwdX;Y?YHKCu__=={fsl$HQ5=YJR{1(J@)+c13qUQ?J&|H zl(klu84Jq#x9h5%EZTGVE;n{TmqSAtUN+jva{3bhvC2^Y0Uy$M-T=J}8p`mpk<_BT zbtP6Asx?g>@GX=OOoZA@8?XL$W^>?YgSQQwV%QoRgG{K?H{zvbCQ|Tjaz!bAz{hVL z*vX;Jv!U#Gk?mraBam{{*}#1toETaxNoWftrbWuU`dZS`16nSqdV?{|d(%?o8;qP* z!{lAziN5}^!gd)nc{jVS?L=`z2Bpe`=ttK$8u1-qJVp2kKbPx}y$8bXYtQAzWN&v@ zVlSS;=J~XD8+HZTT-@mb3fS7IZ!huS0e$^*Ie2ki8g-BFRqalj2Qn_v?ngpD`WLV7~K&&8SiQVr50n z3FnC^+148DwNrXlcO?@KB=$11%;S98Yo~Ns~*tvSl=}mmu=6dcIu*d z*`CB+`eXBa+G{(t&7)B)uyTESQxW6dpy7jf?M=wC17YoT$fUi(nf3av;fmx}p696# z-z~JYhuk>cb?G49I2Z@-0JE(<*8I~7yE}zPplEpQ#|QIrAbe`cVzxf-v&%#@;g2ZkO-DC}z` z6t6?=ftvBsLNUys>VXqT1AsruXUt%lO{4@pQLco}v!D$FCGgZx2k%lDz|ZZ<4(NZ^rST zRjj`e_S?@&!1KZm?MK<4`0sD>r)x;UVbFTnjW!01GuQaf1;xLqK0U$*gs`^g1DkIZ zMHcdn7u!DmWcs_DEo$k3el7Y1(TY~4esxFZ=B|!QyTnBB)-b>wVE`H%FCHNGne=AF z@zDc)&ei~00@q&Ke&@E$cXaWOp#x%5g=j*7was*GVb z+}-|5t`>kA+bKbySmL8;477=XK>=%DE4lg>l{)1#epA@0s7I%6@j7%9jZAc6o}E#m zCqt(;jlVzTrw;MPwSAgSQ1rs>Cqt((jejVm)3|sO(cD=G%$H8s9LH13A@*<-=TRgGZK0`x+ZL~W=a2ln~%E!IYB9w`KKteGd z$~`}07%v-T@!apG6HQ{83*w&PoxKR<0s(jiO0qDa@UoH6;`r=BAE9$RJw;8$_OLIo z7xf7z#TyH6OZeMNECW!c-o9Y%Xv;XX2WFcd+St8_dCMquR@SuCx$m^mLTKoTMcURj z?RU$=vp7NmTc>4f+r9q8i>*j8-RH|z3qkC%iG>2jt8Z&6T6zb1hF7WcvVdj;!Z610 zVHH5@-l12Fhd%YU#DjxzeHxCbd=jzoJshi+tXjO-zGKzHH=IlRxQ&(RZ{_2qzVE7c z-QUKWO$X}hwXr&*CO1u~KUSM#@zXNitLu|B-pLvVzs%=Y^CA00Wu9pNbS%}AS6z2Q z#k%wLt15UV-}i95=CJd`^Fg=`LG9@zl&Yj-7ot}@<@fp<%w+@@KX%@2Ub3nHM$6ZdHk zJMKsE0BxbnKZgU1%MA~}-@O3vxM>7#i+J3a0sO5NKs)aJ0Djv6z_ZsP7X=>t4SWc$ z^~8N%9m<;mrEflz{~}Px=R)}lfzs~tq5OEnI}plWigY!Td`!X(Y`MxLu9R+NJQ2(B?QFxWCNFg$oA&(#q7YqC9)D9Z}F_gtGJn1q;E zGHxnyPtId8u}F9=&*c#Z(Xt4reeITL0AIXN5>0BnOP#sB~S delta 167 zcmZn>Y!Td`!Xzy*)s5d`UnoBV5L{zqV6bIkV7M^_DApl9*`7(1C19>2$L0toAtn}$ zCLXTIc`POtCnme`cN~IfSp?Mb8Hj&?#Lg&k0htUM6+B$5AoG9#M1za~u_sSp650HY tMTv=H1<-?;@*;yGmIzZZkq`4-0aL91n0CFza0y#Mx5&);qCu0Br diff --git a/lab/Untitled Project.si4project/cache/parse/gradelib.py.sisc b/lab/Untitled Project.si4project/cache/parse/gradelib.py.sisc new file mode 100644 index 0000000000000000000000000000000000000000..b312ced2c1630b998740ef82705f4057393c71b7 GIT binary patch literal 57765 zcmeI5dwg71b?*m7wv{+>Xtg+xh=c(fJ0vuf6u(=bV}8Sz9V?FO}N2sg&AErLTUmRJ#8IZLWM- znDX{-+O%%%>G ze_mxsrF#FxXYBmdb?c!S)B-GD_X933acXr6EeD3_gJQ8{*T&cQD~iwOhii=vgv?XiG2I zx*nltJJ&j_L#G4^Z_#nw8Fj!V9=XpYh})|uKnD)QfX4<^HThm zPAiqZAbqY<{g4LnoomEfb)CBIWvc(M+Mgl%ABYaztG1cSt4}YLzM^aYM)*UjzgoO; zSGUf$iT){FzeU%-P}k_t!TAx6X-`pip{mrgIW_hMt8zMTs7{QGO_lc?7~4HHGCp>< zDsi8BEWzF|?Cm&azaaLi%Ar6k)g;t&VF}#E6;M zN`GgEc3|UbwBkD7C_ZoGdi(a9pG!obvqcmbmm{muVlE=*_Tso9BKmK>b9;F^tnr<~ zyR?yZ0eA1fL2@rRq6Qbwd;!zz!;d)157(AV?*WY;KbApoe+pS zeO>9EfFB!ZDdWyfYuDGC0uemG`1FYbV`U_se6h|j>Oo&wdPTr+gqCuiy>#vRLP$h5 zFZ*HFxwkS^-hE(VqN21x4|tKFeWeQUn;yBKftGgAsSaXVgBJ%UHT0&+m6shD93{OH zyRQjMKN|2=ffh5OYWCmO z(b6ca4-^}+-as3kck|EPTHgNb=P3wpeqKKzLok0z1^BE-&MeSU4XWQ;(>!FV6BP-* zuR_S6+~)$rzYG{zp{0yFm)5M0b9JqjgiLjOa>{XL=rC*+RDkQjRDYP-AxYGe!{Z0byT|wM9~>KkIobbf{@T(v17_?& zOPO~*YVG*4zBO37Wb683>|uqXYZ$lRaqIJ*ze5KX zs$3J8jRySGKueh(duqzGFf>e0f7UI}c;@JcQqv1`#@cTxaJ(mAMlQ6J^Zbolle9~&UF!)XgNCukVzE3vRwhToJX5(SFtt4e z;}2TO{MdK8l6f&1*iQJs9D@+D#^k8>631`!8>*Lz{$`aqZL)fHv^%4*ap9VCRWg;8 zHdG=z2=cmPuEB-CYBp4R)Q)QaiyClDyUx`XAMqZiRx9jFzZaCXzMndvd86D`zubpo zY=Hr3d+0iE0i<}NN>#M%1%(CB42xwdt+K!_@kTb5IB0G-rZu-fF)XmarpW`lsuSb8 zE0dFL#f~J^eop=$4jbx0T{Wb#Kup}bF84o@Fmq%otHPAf7N-*e#^D98Q~DKHg6#jgN>7Af~C8+K?)f^yubB#$-=YFss*cl|ik>==6Zd8;x;WxjZ(w zUz0mKSr$gmQh^Qld=+{yTG|6fG^o{*oowENvpEXDwlBh_fYF+>e>erSi>r=SrYdD| z#xKtfJ%Cxnqkz$x_fYIOFwr@=0$TCy85tXy92T{1*e`2{FFnOiebf!9%qkUZ{-t$p zxRX@y0wN$9!=B*;=(G-K69XauzP11Kl*Z3E70oamhgBFYk?E*pI`*nUCj3UQgIggJ zk-&Bx{y_f&7oXABzr|&?OXP$9R2h(*y??##4BB8PkzB-@ov_f>u6qg|`>U(xYi(GIE24z;;V=eu=|Z!T3~_�*;4-7tWg?~e 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 Trt8y3M+q-IBqo9J46^?VFfU^T literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/inc_assert.h.sisc b/lab/Untitled Project.si4project/cache/parse/inc_assert.h.sisc new file mode 100644 index 0000000000000000000000000000000000000000..e476f770a09e6ea5cdfbc7fd83d37c2b540a994a GIT binary patch literal 4137 zcmeH~J#1T56vuB}*GU~hO`8z$=_lI3S=tN?9V!%5AweZdXv%_wEE6ZHCFEL(+eS>0 z+97O_U?@_D3KYI3I#xtxzj5w-{ml=hls$JKEb=lKV2tsn!`v{DrjtE21}0nWg^w;Z7n4&OoLK2LTNeu# zUOT55W=FzWw*1ZE7d!Vc5C5X4cThV;AKb&W1uk+(;%#MTIOsKU&#R0EG#brDC1$E_++## z1Kw3KK>o-bVf7@0rb12Ke_)53Y zZ7tL@^rjFFiY;drCQhP5=3A~`ewtxQD>7p5RBNf-TwF@>txa;M*O6?g<4%CUM>ot4 zI-_mvvDj|5mJ&R2pLsA+vATbt1JV!{mWI zFtpQk@}Aaw=T|yM`(igfYhkLVd)4)_;im?#jJ_AxFJ8XbY641a0Hp(v&x*|ux+H51 zjTH1m{s8Ad7cMlG0mTAfM}w?M8YsHN?W5Z~eP7uHD4XN*IF;x6*I9W;Q&T)6-RLJH z{xaaIi93<x!IVF_V;S}P(%frj&%1O-e+yW+r%DZcKPVLsS0d- i{)+!x#xLgRnRv}Tty#U5t+5YJ`T=5(^_a!U$K}7hm#7i| literal 0 HcmV?d00001 diff --git a/lab/LAB4.si4project/cache/parse/inc_elf.h.sisc b/lab/Untitled Project.si4project/cache/parse/inc_elf.h.sisc similarity index 68% rename from lab/LAB4.si4project/cache/parse/inc_elf.h.sisc rename to lab/Untitled Project.si4project/cache/parse/inc_elf.h.sisc index 57c8451609101b0e84f955ac25f84d6237bac050..e9bd9dffbddd2930cf7923e529d77ed8f5d0a342 100644 GIT binary patch delta 332 zcmX?UaMECd3X^oeRe3H6FKI3YAh^ZKz_6B`fnmZGd9D=)xhC5)iLx|kz318-!BoM> zA|T4fJ^2cA0P6(_Hg1N=jVv;gU0KXo3gm#o4@G1*&t)-Xv0%6+&(+`qG0qfd+>3^JYvNKc-?B(hnKb0@3C2cYT`YehLgDt0pgRRNV3 z03CE;rzG427N8s-5W`FWsRfxZ*@KT~vp&B#vxNfC9T`wls(~h`0JRtZ#SD7c;idqc z$H0$d3eYl$Df2maHqR4cX5kP3y5)iTTdvJ3#S|Dh7J!0kwG#K_i{dgI7l53KjX=&< G@elxC!bem9 delta 332 zcmX?UaMECd3X`-%y&FG=uoM>q5Zq#AU|7q}z)(@^#_#dPX0kn#C`-apM~=-AOcjhQ zCnoZ6O}@e$z^XBghl^oyBa6&rR~B=Yj&7jvLlN1{b6HGTEHZ$`bx1&rGX)xV9%LL) z?7??VE=HggD<<=BF@x*^0s$Zf8P5ZxCr@A!*(}Golhs0_!HqwoCX^qfVmA{|6;QcF zqZ_}&Eorz3EI>IvAcmO$QVTL+vIif}W_^BfW{VD>of6d$Q>uX`r~tKi08Lq8JK%8i>=ij_iOo5T(N1YqLhL1GYHSatl?<@=mDOKBgVE}#iYSl-|^DfBtX!(k?Hu)i)C->^FaCyIL z3S|h4EeY5vf+4<7VgmxW-#{7oK-l192#QV{8G)e_eTyl#@WE#{r~*Ak3P|CDVg{Ow z>VvXJi8iCI6j0@(lbOs>_23M6NX!6}Q9TaK#xU}ITkT-Y)&P89W;{DKqb_U34~s!F z8P$6uw_8c>Ajp$Pve~`+4rPvE5N{C!Xfmp|hpU6Ay;iIop#=o^S_4<$uj-q#;Sn)- zCZl>ByR#}N^nk!#4|ewObVu+U9_gTuw^b5wN--^lq_ardJ>9;<`=lktVh~HK2_8_9@Y!@`!%i(OlRNH33 z-;`}))%gKDFlF8Ft$fc5{K#9O&#Yz6!Z3b zmD$@KH3_=uade9inRrBodzBN0>{tz5SG^2u2_B6nv<&ZPqwPGql=|q4@0M%G*3z=d z*ywEZ=_oo~{8(0>m%dw^G=_n7P4=?nFBMsx%Pujn$a}=Vnyoi%?D8PqTE1SaHiS+#*rHF1 zIUJFOZnii&*)vMa22W{Lm-##+X0IcuGQu`n9GGbu`97lpBC9FFo^RwE&3R(x(s&kg zC@B!2%@&6S!YDE3db2uD%$%yviAf65R?uv{ffHh$tu^%qI4USskIjM$Bv8a`wm7t! zmZ|GW=T`A#pfup&Dw0fQh7yYF0s90 z))cu(j0>~HU64N`-zSR!;bI*w%C*^Cy*S${S5H#nI`zDLVy1w!S}|K3zq1GvN*w&c ze4~{Io%a1=5{0yXKxX?}=&gLES)36X8|Q$S1x8wK%oa!QOg}RZh};ZXZc6o2bAXe& zjF^NX0VDBdi-QAVMev*8i~-XutUr?Xabww%Y(~02 zX&5sj)N0IJX+%k_UQTqg*=Q!0uVa*ZM!M{G#PgfNr@;RNV~YDjjIF4XRy_)JxmK;| zN*g`wWt3DD@AARwIKm9nnb66lQYF##c8nI!9nXMO7Efj2gO$0v6jUD5$V$7k(gH{7 z)g+8s;$80Ra!g=MUTSvdI;l63RlUkY^Psqx3&gwJ7v{kT`Xm~{)uz^x4sK`~Mn&;1 zAFO^L9o156CB6YIZU_};b;VOxxUb7Gfia9E1=BH&G>2uRBu<*T+-{R49_YB`$v$BMwL~^8sNR9l6aTPjtIzKSWV2)+(nA>QS_avmXX zCgV!McndmNEp?JcsOudxxpWRjIq@zZEX}}DP z93^Q%W>O$KPxcDIqgQ#ZF^;{;FdHss`!8Y0#>dzR*#}Q_34dw6#&2zPa1R{gX}EJf V@-I#&o#US#PfRM~95}(3{x>Al#D@R? literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/inc_fd.h.sisc b/lab/Untitled Project.si4project/cache/parse/inc_fd.h.sisc new file mode 100644 index 0000000000000000000000000000000000000000..239d385fa120e39c204794160d8e8085b093b5f0 GIT binary patch literal 9620 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 EU)Ib_#{d8T literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/inc_fs.h.sisc b/lab/Untitled Project.si4project/cache/parse/inc_fs.h.sisc new file mode 100644 index 0000000000000000000000000000000000000000..b77a438eef8abd03975ced228bdacbe4cbb3db9c GIT binary patch literal 12340 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 RK)0pB^|{@*@A8s8>p!otk@Wxo literal 0 HcmV?d00001 diff --git a/lab/LAB4.si4project/cache/parse/inc_kbdreg.h.sisc b/lab/Untitled Project.si4project/cache/parse/inc_kbdreg.h.sisc similarity index 94% rename from lab/LAB4.si4project/cache/parse/inc_kbdreg.h.sisc rename to lab/Untitled Project.si4project/cache/parse/inc_kbdreg.h.sisc index 7df5bb33df2ceb4e4bf9f1d28f322d06de5c20fd..eb7b8fec8dd812cc5cffef6afea7e73bdb0e6091 100644 GIT binary patch delta 90 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 N&|Z6KuE}L$831V$C_(@L diff --git a/lab/Untitled Project.si4project/cache/parse/inc_mmu.h.sisc b/lab/Untitled Project.si4project/cache/parse/inc_mmu.h.sisc new file mode 100644 index 0000000000000000000000000000000000000000..f643bad89061cf6d39dbb8fc3e9d7a34f5a9c6f0 GIT binary patch literal 22408 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 l=H+`sB#qr<Le literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/inc_partition.h.sisc b/lab/Untitled Project.si4project/cache/parse/inc_partition.h.sisc new file mode 100644 index 0000000000000000000000000000000000000000..68e1064c3bcf6059f8457bd01a32ead71db7d2b8 GIT binary patch literal 3003 zcmeHIzfV(96n@qsP$-dKQSetuG||E6;$UJ-5QRCowglL!3)R7oMWCi({`4h{?s zCOFhY1}D)(qnm?+anS|i;N<3@aqD>fzWeTJUrS?+aWa0%mvejWdEYtr-g9q{ZnG@g zviyfY%V$~30n6HW?$i7TORjz1Xr*uM&Ep{LR_j0hl^x*O_kdkk&^_=07zFv-4-&E4 z#lVkHp^4+~a1Nknmf*XQe5if&6UyNARX3JD-5HCmrO{^W7FgzyUXpLU-Rkm}r>X!Yi}1OXl-^fa_J;vCl(FCP)Nr!8j3 zV_}EKeKtH6or0?oYzGN#jXcM-$__^d!-GuG4Dw17+L{y`|6z*Bq~N$#3i<>}NpbG!cDbt< zi9{!+N=bMLxRE-pg*NZ~p^S0&6mqMU2i8P;^Bp92yme1rfi`i5n)sW7n zGPAq@JOkcjVtu(7uvVYxr=lH|_8@fSPBAciV6}-EK71<#xSfn=HGH+H=6wP2Q-j+r zU>?R1^+!gwP1 zJJX`HY(9#LuUZsSB`C#GTyTNS$@!dN zrsch5#p0`0mQFzkxKcTd+4`Wh}e*IQ4@b=Y9qv;bj zBK|slL))k8Wc`G!g$EJCMf_wx)pc?$oZ~@yV=TlJ;%*G4G#E?pDd77?>~oF&{wEE{ B_-FtC literal 0 HcmV?d00001 diff --git a/lab/LAB4.si4project/cache/parse/inc_stab.h.sisc b/lab/Untitled Project.si4project/cache/parse/inc_stab.h.sisc similarity index 84% rename from lab/LAB4.si4project/cache/parse/inc_stab.h.sisc rename to lab/Untitled Project.si4project/cache/parse/inc_stab.h.sisc index 16ba2ad79282f924ac953fa3c06c76063f403383..e073ebfca0ef8fe832622a5b6b3d5aef2ad62ab5 100644 GIT binary patch delta 167 zcmZ3ZyheG03X{x%SMppJB3QT?fM7ir14A}11B1b9c`gOT4_uQSm_%4MIKAiE9Kke~ zi{->~CGN>Td0ts80P4BnAj$#Kvz3v7p`VF?VFOT1LSLQ>$Ypr(REb*_NXr4SJP?D7 zU;)yTCoqX@*5@;2VmEjr&*kCDH#uA2CC3J!Z6D?XjgAqN;Sd0FBvu1Cf&3zqrwB>_ E0Mke;YybcN delta 167 zcmZ3ZyheG03X_b*6gU0=9vcn@AXv}Ez>v+$z#uWzjbEVCnPaj8lL$-3N=J^(5lnNr zSYEX9a83Tn^UC7JWH#6mk!K}!o^e4n{ww0Gp2GKj*fB9D!;N2e-hIOF(!m`jWl!RUZx&C>q)IKqy z$#CwjW@J(WkbD^{x#d!@VMlzF_OY*ohdmlmSP%>7(T+McOBRbxJvaZ3E5RB;l6}&3 zp{Df<;hMlB%N6ucW}~LYe3RtscrWKD#137Uny#L|c)B`0bLQ0Lv(OJZy!Pu#nZ1ekMrWF*sJzWq zZK*Xa4;mVXoT^64#b)ke2h71tjR0mbIm|9@`%}`|VCU zw>UeiP##zZR7C9P=-t7R{g^Kn??*Qt5Ib6*U!0wrPdZ;C?L+He^tPPj$F^0S=o(ZP zE9$*IpU_JFx~zU0D}9_yughaS`yn)BYYdDQDN%e|DbuEnJl6$#ek8RGVpOo9j_oaW ztC$d|AC5aEkeg%gje38FEzv$N`JCQoL{qy^Yg|GJq#TJ_UyzM5*b-qo@jkmMr0iX& zHCvq=p48{%YW(CFhmXYJL{G*cX^e-z!66rCkAQ|tcr{z1bzXjxL&A9-XlB?_VoQYW zq>IDW?ZzCz`8iw@U*C_XbI2@k&ECs)>rQ|8iZF-V<~)bmZaIh96r@f5$sF1Y@`Zpu zwDD)QM7F&Ag1;m31w)$Y0Z&XeS_BdzTZdnMqsfk#9D7+_H azdfvQnhhWN$omYb{(+~dkI`wp)8|i9@$_~8 literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/inc_stdio.h.sisc b/lab/Untitled Project.si4project/cache/parse/inc_stdio.h.sisc new file mode 100644 index 0000000000000000000000000000000000000000..217976c5afd258f41be75a4d96d22c90a7105e18 GIT binary patch literal 13099 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 literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/inc_string.h.sisc b/lab/Untitled Project.si4project/cache/parse/inc_string.h.sisc new file mode 100644 index 0000000000000000000000000000000000000000..1adf4a30f879562d9f7d2969e8c39463b90d8515 GIT binary patch literal 19591 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 XpB%Gf%sG=fXX_J-`wr(o=ZgOepZH*h literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/inc_syscall.h.sisc b/lab/Untitled Project.si4project/cache/parse/inc_syscall.h.sisc new file mode 100644 index 0000000000000000000000000000000000000000..7ac2227d99e1ae48cebe4173840ca19f3b55c826 GIT binary patch literal 2828 zcmeHJJ#Q015M4|N#Bsh!2&pVYLl@D}fkFY16_AV&5s=fxJ{v3kINhBiECiy23JL@b z1x*SH3W`V+6cOSFAfX@%egmRQxxBaM@og@S3(ANmjc0Cl_RZ|<-kukSmAa+W&;^Lf zD5bJW?QUm`{D7ux{o2jZxApb?81-?4{m0Sh0QdeZnlr6akaQ~rBHCL-G&zl6_Oct(aa=v4)$TtdZahR3?pE6N`5;E z$xILHBb#X3PBWYJA(rURT=k;TDn_~E*kHpfnzO|o%$$s}!W?S`vDe(JmG8m9g|oFJ z6m8qdbOZn-5okRjrtwdZ9L!GH3!|Xbxr3n0K7~zFYMiw_b0V z-mnL_91Xo_(uC?YcAA@KOrZ6&m}Xn2Wm`ipa>B@s z+Tl6^SOC{ZTG6&WIK?bx#bEifc8Vx){Yv0AyedY>!c#_O(YBq=vVVgYFe?VLEZAB6 zYQ=5WBd6_`aGLlAvro8iOe)b#C3ZU1{+{)@8#*_eN&T!L6D%!SfLWG#3M@{s74VWPCN}KEp^Yg1fLeaK8m^{^& z6_n5GxX3qvy^t>Q8$?#yhZCPHzB>+OaNrGiEj$4>mR=kv8nv+Py!2Rep(1wgSMKcwK=<$-d1Kn&B)1=hYnIFi+515jxO)OJar?I8RBDCQvhnG0sS z0#K_mlJ?EEl3STL1b}V~cq+y*d7g~;#DK|@m&n}XU;v7Jm=E-Hm#hqj0+1uI8ptVN K5t)2QHUt1q08O|6 delta 321 zcmbPcGtFj$3X{x@DQ^4@(RLgRK(L&LfuV<&fnmmEH-3RmXO77ZOd>1+a~(N0M=%+1 zv%F~K;hKD2PojX`nR>DnJY}o?)_`r1)lQ0ZnGpA3&uAqEcKy8HSrI z3=CFmKrKKcD;PMrVA|z@a(qAx)6NCfzCk#W)kI>d8-K(Ji0zU<+d()2s9i%(6s}zX zs8tzB`(|6otxOydAf4|yxhBt(5uX?^dGZpOdmJ7>ogV_Exh8kX%5X>kITvh!oB|e+ I$%kY^05@<(G5`Po diff --git a/lab/Untitled Project.si4project/cache/parse/inc_types.h.sisc b/lab/Untitled Project.si4project/cache/parse/inc_types.h.sisc new file mode 100644 index 0000000000000000000000000000000000000000..32be6e8b339bfddc2c156f934df3e3e549933e2b GIT binary patch literal 5952 zcmeI0O>9*~6vr>6eDpn#5BVsf_F74-#>DznKcXN3k`}NnEtR5}*OtB)n!szNj|CVL zR)&>vVO*Jri5QJ8>Vl0c7nL%$d2nGMY65Gy*d^ zkD1sRqKI6L0dryI$jRC9$w@gqq$*oV&tu5poVkpQ&OQojDyrAGzYWwS9aLEr$~BLQf;B`D|d za+nMaL71*oO0_{X6UzINZV#YE#nP~Gpa_WF3qO9}S*#B&KE|N5_}RXGI9YLbYz`hp zC!E-_oM$d~);(0BD9gEhl)U8tJRt#3^CM0+7F(9H>)R}6>NV_bLjxoIJ9iEo=;v_&0muONpUh1ItQfHAPZ)i9V+lPj> zA1n>`J-=&2eK=CRNnfWEYRX2vuxX-Bx;oWxJ17-q%eCpsVKwuiG?;I`_Sa6o`Wz#d zVi4sGQ2k0alWBNYaZI=qNDN?S6i#e; z+%`Y`8;(i2IyqJ0uHe(Tn=ZnhSUEOqd8`(Fx;ESujy0r9L1GTf=_P+=Y(4uIyeIiX z^2{$Cg|F6cT+S5lf7e+g!UP9*c*$e;U$d$@_yJ=ct6%RW&tR52Ac31(fIUVtuWt)g z_u=~yMQH$-yQMS^B}S-}u1<5W8zr_-(hQB16WIs`iq;p0>La*XQSA!S2y!>^8n{^z z?ABaF5N#1OTPT~48;l^sS4+?qL9>OjHNy==a7KSQ9x25Ud{;cbOHRwywPS6OjUorR ziTTF;lM&<~_e+?Q8=hsN`DFXHP<0>m5u|4fa&XZ&jN}YVd_B>eC}YGHN}3^xGK|%1 z2A(BWFV@Fz4%^l=ew#$kOgAfj+cX#Hg63Jn8q5}|?BmAb$7pr}O(qy4wouXxjqzio ze+SNA?I`rV5XX-kn3T-xRGXES9`D;-TTen(k8ck4?%g zE}q00Sj>4wUDA!#{$c#AB<8g7)bjfT`tHuZUH|l?FW@_9duI+|<0A%oV&&%Nxd5yU T4(@HRHCC=4cM;ebD`)!)c(DL7 literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/inc_x86.h.sisc b/lab/Untitled Project.si4project/cache/parse/inc_x86.h.sisc new file mode 100644 index 0000000000000000000000000000000000000000..8b8cbd9f23e844fc8334214f27d07fe13082f789 GIT binary patch literal 29351 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 I2AlN%2KCU^Bme*a literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/kern_console.c.sisc b/lab/Untitled Project.si4project/cache/parse/kern_console.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..755a4ea3dd470e1a09ddf1f3be59e10c3fa8c94d GIT binary patch literal 23244 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 literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/kern_console.h.sisc b/lab/Untitled Project.si4project/cache/parse/kern_console.h.sisc new file mode 100644 index 0000000000000000000000000000000000000000..66b4fc03002b0004316becc57fb1c09435796270 GIT binary patch literal 3681 zcmeHJJ!}+56rLD!4tEfK&99JG4oFbN1qD)~C}17IV0_>+35pOW<6CnpoI7jpjFbu| zQY19M53Ui0~(Z6!}qBqY`IWR?xqp2X0Y z9Cw3BPv-mb7mjSpQ@@ISIk&=?0oYFb`9f^8ldLE6#j`w?$XF)uL2C)E_woZso};~_ zdnx^r4zU^lH4m~Aj{S~}Tfo1;7DN8M+?W!4JBeLCLEi&@3H?0Qp2T7Iz>lDxfQ@JC zxgyuJZ69I|FddZi$=brg9QPI~gQbyjX}DN9Sh<8TUBuBsB0V;B&VA&jGQZXiE!c@Y z6vlBQ4*JJxQ8U2bcyOpx4$g*gJ)8<^;dnKSKMiJ@VH`}yjWhB1x6PngYs^elgLqv$re>;P5ViVG1C5A`jwI51Mx7Z+dq$g*wY{nePOoBr2IZ61chh0BtM>UXB_z@VQ_likGQ|WQEDZ}VtH0LaI_ZIF`$xd# zp>K+8Hx^%?6iPl@43|0^M$-?~OmD~)g<3d z^1$|7p)(h$Mi%5VVQYd}=FW{^5~U(jPy0N#DUF;e-`UeuxZH~QuJHzM0+T2SNSCRn zfd@9{3VKg5jb!NEaxX;z&q_2tCD;|rv$yoFYN*7fjWYduB-3LpUwTK}yDplnSHsC5 z@pPVonO&xLOY1~v+Om#l=a}wmdpY;l`XlgQRt^_OM~cIvK;asF-1T}9nYP!Tpgy@1 zmWTCfG+D+@28W+ep{-sLjkYY*b_MCT`r}Y@f*NoetE1^ygJ0XH*Lr0qTc`@Y4BNrk zo&wiC-KkAdX4@CfK9cPv3as zNh*{2(!pwKov+JqPt&m;MG+re?=0*zY=8aOE-bGSuh+XMZ1P=VoFug^9qStu_74QM z_jYHnv#{;@z8x$BL4rI;M96J5!4?XRd z7jx)YKfNHu`rmxI7IifJ<;yk;UpC+D7hkmNd3!V_u9-uz?%Z-~GzNVYSvb9I8b58X E00q8PRsaA1 literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/kern_cpu.h.sisc b/lab/Untitled Project.si4project/cache/parse/kern_cpu.h.sisc new file mode 100644 index 0000000000000000000000000000000000000000..c5a4b5a549a0fe7425657a0a5469152a1b1586d6 GIT binary patch literal 6385 zcmeI0O>9(E6vrQBXkkjRwG;}99T6jyo+CSIJ_hZp8V zrIv%0A)P0R9?K;=8$T0nb>u4<^QAU_yTJ4MH15#&LkWFScv4nu7QQW^=e2vi=!@au ze(irt#(b|l|5d{JJ zy5qp(lUiX_ZaHu?)WW#E7H%Z~AP&y(Vd$bvQmDCO#4RtVXb?f0)M||IIG>Cj^ zm#+I6Eny%RYDPlipNV{RY*KaZk-T-;t0|in{*8w^bRENuT|n@3*{n` zDUthvgO2hlK{7m(%pB-lnY6p5{} zpL{v~!%%wjs^8OS_)OuZ8X02^Pd=o@pF^5Di1YnEDE#?u=O_6PsAe26gD&r-^YN-xQB|;Zc7FTQ2bPK#C-AHz*C9(06 zqETzmRMm*qtA$8#QzRQ*0&0n8yrf)hsYA<1RHsqRC)$$0(;NTnr$G|nN?zE@Z-F$n~2_oy(`O|purY+DrzgVg^`Kp9J z5&Al&^Y~g(!VkV4`AT+xH`CWWl8$qT>@*#L5gJaGH5b0Pk2c(~c&_i^r2W4pQV z<4}6xYf-!5OUuW+T?O9A1zY8m>j@Y1lR`^%XlgY_ z3KP|GQ&*TFK|TqRW>kl%l5^r+do`#Mp5>Md(3{m2?D1i)8O0wP&t4^VYvCtDMY2X` zmxdUv1|cMjAn$rGB?QjtlQq8SPuKYZPKPZ8)AoO7+dtb{d&$?eqr>@y-+=kguY-yj s#Ng@GE=};AHR2NAb47bjd=Tt08TQX)?w@mj<1>Fc7Xo;H>*8+*#H0l literal 0 HcmV?d00001 diff --git a/lab/LAB4.si4project/cache/parse/kern_entrypgdir.c.sisc b/lab/Untitled Project.si4project/cache/parse/kern_entrypgdir.c.sisc similarity index 84% rename from lab/LAB4.si4project/cache/parse/kern_entrypgdir.c.sisc rename to lab/Untitled Project.si4project/cache/parse/kern_entrypgdir.c.sisc index ad405fe19794238aab994a44034677ec70808f5e..1d79897ca995992c841d05273caa8f53258d4989 100644 GIT binary patch delta 93 zcmdm{y-j2$L0v8IwlT| sdN+OpLp83=4_SHzCTELEb9B_Y@n5i&=9=6mD#KF&w-20xM+_@%-`l6`$QnjclijLn9Mc;V3$+dqL zrX7Cq8ylbdQ+9PW3Q0q`@Rs-6HrrPF<_q5W#LO-8t zkD`od&%D_0XwZSOhuwd8Wh(<*x`CH=wkot7ywl@0VdPjWJ-I51URF~$)`XYNilT36 zuv7T1mM9uqCmq&D(ccPxOtkCQM$w~czb)FosQpC!>oosCwNHrekJXNgb5`wg^?^Yd zI3UG7E+xJy{JQXSqFp9@j`%($IRl!5!P+tfm+*eznYysdQEA;Gkse_k3+l9riNlFD>KTib!-i zx5|!Ou{cqblp&44O$*|{VK0UL(o)Xzcg9{guS&{fshA%h@nT?S!Q!wNL%)_7TR`}i z%k{(zPEO{ECBH7PQz$ub*o&cGON^iDQ2lkujSWl2pk~5L;pV_$FN1z98PE*MWimGg z)@4)0WB2BY<5%Ry4@n4%uUL+h7Y-cuLg?2LV!q{ua`|+N?}QW%3>Lf;RJNMnu$Mx= zmK1aCGNhD>PD)Nw(Rl;62pslO=+}~h?FQxYX6w2{+g$Ci0~6!;=)U zC8*k*(*>Dx+T_q^F6#pTy{(8i?8VTpCB}k9!&;lV0Wee``-e3VozLbDfx})1{aQk* z13-I(2cqo!YNt&W^5bI@L-$J3tr|t`bJQ>k{B|`Y7|m4$T^m@ya9u82g^DXcvm$u% zE)AgOFQ`#Y!5KA}8ZFIKLlr2OZ4qOpZDQI#T+HSA$MTbA)?d*{$6dO~OD z(n$sb<#J*G&S~9s^PM;By7~6qH}>@P>Ke1RsA0jiYG@5#qt(|Ojxo?%J(4ZmE{xSX zJl-h`PsWXw=9zFo-^3c|Ys9m^kiAn~oO_cRFs26Ei`Cw*W?-yNeyXQ6Su5DClM27& zrZH!ooSe^IrJr}`iXbhyu_*eeFr0DBK~D=&$ESN*88;}GTQomjLO8due0k;RK3(9+ z2mH)G7Uo9GnDMj_jXs)InKeO;*n4Li zp4QOwt5>D3{mkh(I31K3_jJF_`Vo4^3oqutvv6J)6JqtO@o% ztHHYC*~P4ze2qiz^|*Vem>VqR2*C@~IA#JbdDd5||5U)*x-y7Q%Ga*wy991U=WI?#or(MK2l>?OeYsH>J`}67 z%)jbac>iabHydS=H_ji0i9&yAxK9Hdzc27?uJf$lE!u@OSRZ}0rxj)fpIg+uI* zwWwV@ILTE(C_d{(Iv}=*IbhJi92DO_Nxs)%o$#Z5osaSAYpA3NhJ)9Qx2QvAfjM zW7{J=&e!fjKg#8#9>M)AtyA8WdamF=OoOjbGp^7w0oUW7Omj_q2p>v)|D=vhIf@#7 zhvPLKQ_zevv`oPHq}Giw12z!@$62SOp?g)058Ny=wtP^HkOq@B+-)?Cv!FGhTu$V` zd6i3D3aYK!?ds!e^f#IwS1TNkFWQz8SHrP2Kb&#y?ds|r)itH}Lu$yqN6mN}t%|qS z4Y>y8GSw;ucwYeTtvh2s50(y2c6I5L(cg1hQ&SVNP%@{6EUrzK(W+$q(bBRiZr`#c zcTv~S!J;H@ku3O!c^T!V+A`%YyG5fEX4Mvymk-}_m3!ppkbo{UbR;i@s^Xq&fH?-p z!EV5EGR&2DB>72Bau0E5c>)HErre`aS0Lm^Ju^Tq^(>$5FQx5W&})z0rnn9v6MIjH z*0LwDm-}feX|Kg6wpj*)0i)Ho*Sza%&93o7X@7(=I77T~*yPJ}IG@n@w|yL2j~{4|H3zMbfVF1UQ9 zbi$vZpQa^$+9ze3od2L&r}T{8aiiN@I2>&9`q<$>mo~qT}oHwT#Xj)8%G~cp8|OHiUB_74o?&_`L3I_F>SqadwyqE=k~2z^Nfd!bwZ0Z?-z@) ztXi*VGq1$~#KWH@4456moX`9a&NR`uFVty(U|CgN=}sxpp8x(xC4jJ%ZEmRmdLz4- z1ga3p6)t=MJ z_WA=FUMJm-iS~@I*SxZ@kVTV~I-uDKo97KnWMwt9!gUU4sTJ0N1>c9ZMntwxhVx__FjL^cmkaI(l&w`OD$g$Bqm=}SfSGg<&AO!wgLzf>C*&Fp_(*MQ-$-)MyI z)y=Hk3u@Q}zF3VIFj^*v$K9VuM>shi1NLng&wW_u-sDLRB8;|r%t_0bL(2rrM;}|_ zNv<%chlo;tKFezjLhawwsHk9jb~jo&=q*GwRm;Vq$AE_GM{?u2;$TUysK_TW^ThzO zdMItQG;0l2U{O95;RuIssIY5^spS z_rrWlMU$1zP>USH5?P6+Ml&>R>nyhVy~iFGkBRp14-#9k6A!MWt@s(;!r&&L0i)Ho zHK`BiYmbYBbGWvrWZSf_zCY0-{)Q%Jbl7-igIr*# zio~h(PbK@)V*I-LuL|F+c7td~U?8xAhrKa2%$W7%k4;<~ggVwev1TOfeBA}M&8)0VdeE&1h+s36mPW z%wsq~{L7vr_)^c&Xlaf}GgxGJVPq1XXxHI+f-loG_ZcnC)52I&wBpGXz14+7gZBty z>1ATVLR~G4Wg#tmN}2gW`X%@|njHf?&xxN>I=AO{NaOAK%V1oUwB1V3ZvWWbr?ISB z_wZEPasSxOuS?9gXtB}-IU@xvf53pzl#~q}nbNivWLLr4N}<5kSf1_e#K0;y^T?bwwsT~vZO$9ZAp~RRWbDI%v9N)`N*c?HW^}_a zt2ws&7_Gjs?2R#?>zc{@Z{-%ht2`#t7QDH_kG|4xBOa-_tPh2?|?sC z;dYjMUirQGdn4{G1Jwfi0q{!YGFt-tx9SJE1m=xGNK047>J1jp#enaca#OGg&l-`U zdv<;N660>o{;*oRXj2p8ycBc4BBOjzFYK&Aw1;AJ>3||`fE+{uOPw{2XbxrMumtkU zV7|KhDK`o%#qAfzh8eTIqJ9(C2BB_s&lm{f5eUqIO33x0Wr7pI@u$-#0%pd5k*jh< z2|YMn?D3_H1hh=RarBF6j;Z9_pC2DA-bVo7?cWq1HYBh;^cXE20Gd{Taybd6(>WVZXoY_NrwOS z`W9TA7%*D>QjfVY&|6*O_cSL|&t})gw%SA0DbYIYp-Q$I zmzA^?Kbx%=tB-wP!20!VMY|Z#ckMyF#oN|jf)WFEXCHL3 z;!FJ1;(w;am%{sb8MIl9R|)S?`@Cp?6<_TKHm@$`N}QLdqMs2H_&lK>xS5$o3ybA( z+0VE^t@Bcc_;&Gb&wU`)vBhbx^U|PhB9@POS)U7J87-8x`$TeHLf+!9Plq$OJN`VO zZ*T9e{+`>#vnp9mDKQG`steYvXe~dCi!F3>&r$~F!BVTF12-*;ACn4NCZ z_=;}$8#TK}w^sq1#{X!XBE#FkBWj$+0oyd5^w)+Nv%cbG6W0czoSK^kZ?bSQUtRJ9 z1m>iQ45MX&>OT7QxVj(HmxP)kL%cTX6AY_z9IfenQ3JREjGLKfv~&&DPz4qrt=(sL z>=u9JS%J^iH7t#mX33brqR;LM+1&WVZ5k%W;lMKh*i1KCV_Zw(iuptczj? zK%e-U<(Bc9QpuF=my_(Wd5j~+{71k(trkW-b3(9301Ixz%(1?*DDjx+A-_d0MOAgV z7h5Yn)91168yf%2wois(k7o(nx4?UV!2hxuxpn=u`#yMM-!+$SyK39MvBCZQlM@Gv zL%B)%`}C(U`*gCpoMYRY6)u-yxg&N}Kw(41f__km|4Eo!X044D7PgZ*?uPuzl1wtRyJ-)mmK}0{;Ub-1A6C7Vo{#W|pR5y6Q zuvIzg2E9`nVC+@>V86k1qlGa!`u#LV&WJI<=QN*+-*$&Wa<9hW`y(&w^+1-7%?DggFZ`-KMwEe%AtH16Z2aCW2p^zftdK(zW6afe+pw8D@v{OJ2+b&!vU9OKUSMn?HKrv+gp*rdon(T;2x_J>eejk zrUT>1vFoLDqD}x-AMDSo3^Qi^hU){Tag^cjvoHj#jB-vkS|+Fuqu)tqGk3?}0;V*) zD6izNPM=qIX(sDhkY8t>^XsZV12ZPzmCCC-#T(tsEW;vIX!Y}I9a9}(>bgGth4*lA z@Ia2MFly#y-3cExRCsomY0);Ho$M||3(pJ|HE32VDv5Lh=(3?J(^ z969!2%%9(F5+g7V$QWX@Ob|K8znzX8X2yU~$*y>h9_nEC0Ztw~rS;LrW(rtdNkY?s3YD5jqWN{jXpSAbN z;WSHu&H+6QADnQnRWvP{eyc6V2hFGP)9L87crJJDa_2QFqfx$%&ab7N?zH{jC^O)1A zmwVfu+T-Tjq-%gTod!AI;SD6fGvS9^FN*p-hQ@gn=!=n?_q^}F9R)quM;l)VXnY(1 z9Pt=_{1PAd^MGbAzxX=OfVV#Y|9=UgUAKr6-5 zqK|nD`iSrUuE)rI!1w>eV~{A6O701Vp>o|7fx{Y1CN!vV3fxv={8jui0RjObqqEhO_Zm?R!#PN*DsOfk# z8AoxU!XQzy^rAv6SOkfH+XiF_A$3^^7D#NoXo?ps%r2X@UhyTW$N%^4J@c;LbH}#O zbb&b1nRDN{_nv#c?z#89DfSi$(}hCM=Y@stLgAzFLgDW3x)Xd)6ukYHyZ6Jp{f9RW zLk|@G5C1D3Aoh<4hh@;~!k-C`2zl-i0xNfq_n)0S)=&FS%9pze%A`wE2*MV}I$ z5bp=V8Sy^SxZA>aHFi+*N)q&YFYHB8*4LB-5;~Of`oz_gZ4l}e$Ahgt<_>=2xvA2# z6Bo{vCeB?foxLO$=1PkM66(d%X6aOb8x#JjY1B^6)fctMc?lv1@CPbEM}-JC-j~%5fj)ycX0`*A z?UC-+rqsX-haBHguQ|M(obQJwB#zBy?}53+hU8AFlMa&fVNZ{VqL1;ix~i)Mag2rz zXdU=Yx%s^4LE-(5olyLMOn8`aSZGjxq<4V88^kfjI6!8f^ek0t)#kT&5ZYwuQ6Yk9 zX9X7rvw|PcCQ9OKUSq3c%kx!eju#PEPJkmRmn$O0y=r|uALjLU4 zs|$0u1b5o{&_{(xrfr(@46Hnw)qDq+%r`2PZ)z~bM46BP^pp@mv`w(7yf&0oIVn#X z=~V7V<+(;>wpp1Gi*P+ip8$GXh-lg-+H{_bvZB)}hnEHrU9MbfHWrrfG@c|a0O;3+ z$f9kYHt!CN^bVw(VrNfR%TH>BY0V~9BSHXb2~9hz^}2GzEMR;ble!LA{UBO57Hc?~ zNU=!(=x2n?rJa-eSnoiZ4anWW(e;ITsX32mVnr$g2^9m;v#y=Y*vbK482r zxm$)~>UaAQYZke6d#*23%UNR!x`X`m&F#i+%GizXr^ez5Ec_&lr4Rr{!}h+7#oJ+I z>lk*&8A~{p@rI(k@ze*&WsArXRs3eg62Z``dQ2eot@G|)BTG#Jekq(3qJkxxyb2?twq^-<+apSY{cG9+KQjUNLrM|ZbiJk zt@$&uS}rxwJG6HQdwpzwrM`a&Bk?vzNBdZxy~lWpjqN=(ciemU!@&H*^KMm@Y7SUs zp8Kh$B@(0T&h=?90q7j zwQ9yEqt&mv0(8&UYF;j|4M0ezl97#IhM5ncfcda}GG^-6q7Kool$u$4-;urd{H@UJ z9oo=_TymSwUZ$A$N!e?`g#s4bec7wcH?8;*t1!OnviF3yw^grY?~VSnUULh@d$s}9 z+;Icq4+GY*=e=w|=Go?Z&GEwY z_L{J+6dHSLy!Fy#pG$U2m+;Myb!_$B(xpdhPHX&|Lcr{1J-}$#Zl5-`vbS56;esX; zD`fGi54BU?cu|lw_2F#Rq}Cz*zDn(SwQN^xBz!>#JtZV+#)|@}Yx)GDt`_93*pgbh z)?8>Lmv?-Kl&^YvM${z3ivr0-eX5|(ASZe5N@eaPeIk3AQDFuYRUGcEZoklOQAA#G z+0JJhJjXmV>QuIq0jz<=79l8Ly!P3iIS`Tvv`E^v9)Z50+!+JZACi= zSlx4ZVc{wP3KMxn#=f07`8E~o(+AR%Z%}jWn`OI1PF?E~!Jc<3W!X2C5vOzOOD2!T zlflEjJ0Zxn=iJ{1d;_wR4*^`2phtyx)_74+6Sj0tsjCIMzp1Rrg{wYarZq3w8_Jgr z|8mQRR@@Fi+quxjF%}K?>O#ib-Y~0-(r4}V`C_Z3Cto&QCS~iG|ERPox&Id467Swv znl8K*aakfq+u53~_TQz8)jOkFHmQZseW%NFnuO5^8~5}HQG#K-C`gx;(QLY;A;iG$ z<~&owEq6)&I^ka?UQi$TvL)WxAG=z*u2ac`K->Ay#%b8T^W~zSV`dpembKgGOZu4~ zQx8oyX6y5f*_SIkg%;mZLAl|x=5Oi)3wYtoL#_MLkXTkIuo%n2&CL`bt!X|>9lJGm zr#XH|f&0uagwzD0LLDGWp~J$E7wI{KP;Ra!+^{NxBzy-Q6`DkNk?`XnCvgdh_z_9e zEhuOb;YGp_=rhPkdyiG7$kRB79|JEvQAr zc#(J^w2ug5b+pcY7Q3~;<5W56EYxuuUgr*Hie&j-+L z-2ty7%{J?FCpu#bV0Lk3zon0FH-A2!9E8|KAI=QNyrVH|cib2p3XD6F$YnfWei~H! EKOZm=^8f$< literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/kern_init.c.sisc b/lab/Untitled Project.si4project/cache/parse/kern_init.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..c6b6372747c606f89fd06176912a82094db5d7e3 GIT binary patch literal 8350 zcmeI0e~esJ6~`abW!rVwvPz-F)Hp_sB~9$Y7O1u*n~0&w8mV+E6(if}n>TbayEEg= zfSPEs@h^=2fr-(IKiCo>DE!fAs02-^Q4~qgM!*nb41cQekN#<*$@BZU_nw(IZ>O_e zVEw~*k~8PL^UgiL?z!jP-RbctnvbHf8-!6IihjK_ie7!X;P8*4;A4M&^(thK{pyF4 z&`r_*;eVw9?EUq^ZA$1H!tV;N748y_2_2lOPrk5tZxMccOB7996-8$xd*-DDC-X{C zlmNiDS3U8{S-@77;8Vd9k zEnF1t)$_QX$HhM)<1dT?n|ji2>{)6y zYTaf#IMSZ6R}LHvj^Kwma-|LWYdDIVjZSkhkt4c*$ko^m91V`(*LHNNE^ryOmdY)8 zsmKyxPdFce1~15lc_Dp+G~I5j>!9s}b*smV&A2WE!4Lc}Kdx1RewuO; zJy6bVgMO061EFLDZKvPS-~@hcCnHPNZM%}ivP8(5HVzyOUf_p$u}x&br90YfOea2> zRKm^>^dxHpjs`dIYr7e_Gp$-&YkxNE3}M?uaWwdWALhrJU$2$U$eoE>_sdCDiUfT% zD+G=PC-B3Z3~s+Z1_9Xq>j$^L)2cN>qaD>-!hXAuFrn`h;sKsit)yb3*=J{p)-OD# zX@9TqwBd5s%SnVZUwk5a4wgHXfR$wC1~=2*VS#nSHk`)HGK< zttZtYIwa)8L-B%jlV#7G#O@swNK@N8KZ&<4wUS1+{e^{kr(2HeRD{gugj6IJVw#G6 zOy~iLhvnyIindQksK{7Id!Qoodif3^n+tqVh#C6sK4BhKemPU@yTR~g>0`miy?Lp% zuvD%!2>2S|mxXK>)aqffd_73eVAU43%8gpw>9&tZ149o6&F_m^z+VY6h}{m3|7ND> z!}BlGbUfNL=3P;V@dao3F0pjLX|EMMDT-OP|Ir|WnAuZ*pUasgn=MWgvsW&BuH0^5 zfiYvpU|Khu){8%*i6Sb*B}-6QM|yOSZ58}jvL6<|UpQbE6K4$B+D4gk9tdtcX;c(A!fY3;u;ZZ%-m5BoU3gxy*QSzQ7tnIJ zvo4^R!*BwDWNdwb?Mic~=pxNOtV$ zJBldt;UzeDC=>irt=UgZiUNWGOdskcgTJiH95C5 zd|?LKbXhGqdtvZQJ|x+`vwlu+EhRFLU^e=uXPshHE_>ahmh4YN$+JggRkHEPayy^w z^mlZvec2~FF9Qt43lG;PPd?XAmg3VK8<{K(NNgl&T@3|HHagi{1J)Yde6F*~YbCd_ zQ4O_7T9mF$0F%0lyrKZ~q?0uFpY%euvPX|S#JQ}a$39ASAu!mJ$&EGFJXdjgp zUk@l3IQe%xvQlO)9Q)H8lc)!)jAjQd#yDiqlF*DI({t~#vg0pn7|jk^jD1iDy-{dJ zk(Dw=KmU(8_idEeL7H0eR}b1BNMk|>wLxpLbq-p>$#&Cmb<^SB56;Bn>ZU`wrxc{i z-_%gn(IFc>6DgZ*G!!t|x{ppi*^*}B^ecliaaqak_-Q{`b^+YTWNjvrm^GkHdy|b$ zHrFe|W}TtW+Hjnxqt#D8=WgrdLZjDX5#zAFi60DDSVf* z>EKfVZTYhPz`a;MIxrrj@>YSld8_QL(@r7dKg*jLw)qW1#`a~|Sg(H8=$l!awex2A z|3(~_?Sp=%*8%H$22_ilzU3y@)272`E2}f58}46k^Ez`F5L7&Izx;U)#GbhSq?@nX mgA8(O;O!q>TlKs*$Zif4SvBxq3KU|0Xg!jVoen(b)Zjmap<^Kc literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/kern_kclock.c.sisc b/lab/Untitled Project.si4project/cache/parse/kern_kclock.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..78e9d707bab01d6ebf07159368a70d917bddf235 GIT binary patch literal 2820 zcmeHIziU%b6uu^{#>CW?wl@BNh9FWENeiV06mje#RM9~lY)L{J(xwtybrKh)ZVnC| z1iKV0BDnY;I5@c0K@=)Dh(9}a5T4(6-~C=*H6)>kgLvTN+MouwzgS69M$LcvS0=!_-wW5t#frfC+C=VUV)Fm zc^pzPu(YvEXYGu-4k|(vj_rBffrd47mn!+``9d*$5{vB3+(=~V6!WoeJP}J)x*S~B z%i&C|@VvfY%N%_{j&iYD$(Hlev-vXeT!M~zJUvUSo3WWAJYb%Y7T#wPT66DtN&NEG z{5Z*({Lt`7ZYX!9TAV0cb~+SpsTaSB-sR3HbVIQZnS|Cn_dM29i{24LzfmpC6=@m< z%hKom_{*FRmZ#7~k!uYA+8Fp6XWH1COoGkQk3k6*h)rPOoVqpv$HO@O`2m8QG#x>8<0X&Ygg*!X!{SXDLfkfG8kg}sK^C)|>LDF7BR9}+R zX^kNs;9k_y5LpBRsNp4|#36^@ja#e~pP9w%w*Wb`r5|OZh7}WL*1pw-S76VENoT<< zK@UfgI;|U{r&fin`TA@rKn`DC3QV~l%tSg%hmbS6)*LzK;L8N`Kjh?5NX6t?Iu!Hc zZ!z^%_T#h{Cg$d6=pDYE)3}OJ_b(tkj^S*>;ZffW`mvfu*YhXvsA)+eWiY`l;qljo zZv&4phetL13};h!{RhZ~g{!~Su&$Sqq$}T2!v_(d$FUk=P!2-82WzsRyp91p?ph}> xS|z#Gv#+aTZq`LoeHNkk`lX)u??E<1QrIR9M6N&bZS;xXZ6olnCz zD!B9yK%6SUr4p3@AtWS@91sUiTuMPgqK8W5o7_Pfe!rP{>$SVBtMYL`Jo)XLeKYfW zAM@s|XLc%8S8D8juo_Wn-z`d=|9HgmSCHhh-<}_*?(AphCMZYM|MXwU0MGtT@LmM; zCio0^H<<5ZVA4B3PG|MfU0IGhsF(L{R_eK*rn9f?aXRWr#?#k_e#_qE-|Yk*C@o8S zyyQIXNG-`;O24E}e7-}e{jmK!v;oGy!?{2Fiia^i1O5o0HSi{k<-r#L{yO+x@E3T0 z7VBwOY+9M`=`xsui9SmDV+=iZ#J#&8tJE4x#p?0K(n7hiu+&(53tAXbaL|&K-U7#* zn{-pDPh(24o)$`B6tyE=sINCW8ow0{llp})YK0qmJzNRG=&0^?!brauwb!DR&5rJ@ zx4RpGZnd}cfoALEMmGp`bE{AT8W9;I$x81T$7!+Kh5lhoFEhm1S*kRu^@V3JWSQ97 z5b0s5OM~SR2pQ8$2Vp0VEi{flRh>W9sMY7I^%GDrZ#lo-N)OL*8a!cyjG2(3jeepB zUpi5I8gq0t~)RL7RoZ~cbDI0Du=BnU}rDYEw zx5-Km&hc;(4+xZug6=^w=B^ z#~wJ(*zegRrMyg(0?Zfozwp zgr|V&T7u>*#R z&tW|SCOrXWvXTvpdXng_T|GT7Xn*Xbb~COV0`LY>YOolh4)1a0+;@3+<*;AS0I?2v zIRhz})aeA~yO#zr2l_>@ven(>?&R@o<9MbX8mLDc&+;3t9@(#1XWU0`{^@#5W>9*W z=x(SU2Lo0JZgC*sJawmf0ZU!|TLH`QQj+AzZz$k{0NCqU0wE|9AOs<*X;eFuNNIX*cX@4E4`x9uK Bm}~$5 literal 0 HcmV?d00001 diff --git a/lab/LAB4.si4project/cache/parse/kern_kdebug.c.sisc b/lab/Untitled Project.si4project/cache/parse/kern_kdebug.c.sisc similarity index 66% rename from lab/LAB4.si4project/cache/parse/kern_kdebug.c.sisc rename to lab/Untitled Project.si4project/cache/parse/kern_kdebug.c.sisc index 283db2c11217a70beeb8f729d68abceae7c4c99a..aa08d6cd8dbcdf081b43e04883db39a3358dc610 100644 GIT binary patch delta 1660 zcmZ`)+e;L26#ngwljFGRXlh!Tt8_7XaA`-9f?VIKm$pnQFR|Ty34H7=A?RXIQ>U~W z^n-c}a%?ezz&3~=h+60mXv=O^*3gUfRNtAMZFVgO4zqja_nq^d@0>G3-PCQb2rjcu z&go8AY691wD#ZC>AtI;d^anpCs54lj)E$+{UBO~i8G0>gUvaMz{~&3qxL--nN@~8b1YbPjMJAjAkP0$)epgpQxW_$>7h?q#rY7y@cR`dzVvj;o=ht&IoTm;*LI}S|6n@sB3uxO_sJRjw5NdbdM5$BWX*hSB-p< zdVsnb8|X>MRIRU4SNLDDzRV0L5!4Vb->nXPlX{7J=vjGnGz0d+tEdMl55nSS=JfRF zO)bd3KS-VLP|Br*is*4w4;`vF6tzLy@~}Jc+{GeZ=Aw^9g#t<0RrN;&@(g>qd-0sP zOVl%b&d<$x`SS6Pq5?T0Uf$IZ<{`|0Pdt6)>co2Sc(D1n`sDM)YXXXcKK-oTsidbR zZL2w~+8CDrZLevgnHqHSi=^h-b!G-M;#ae!aeAg^F}2G#HI@^N)cMW>#}s+UD5cd= zMhTGn5lcRBU!dxTw>m+u-sgZCwrkLzw0{MQvm#I&aU1w@V!dQ6Er^@9yehxo$5t)yTB>FZpZfRYf&2QrBo}Qxn}^zCktK=k~C& z$yBVjk~TN>sW!asJ`yip8e}Z5qTB!)Amexgh*yp~P)w#0mL1>$8Vv7`CLpQfE#3g0 z@q`S)C(##HfU&v7^RYd&qxq;g%;&BZwj(wIB`qJz#WUW+7AiSj+lomm>f{OM3F6B^ z0K@BXZj)2+IT+a-p$eSik+c@3QZ%QtFUVAP0j6A#nEazK*REL=cAUtnx!e{YH zIPa5SFcbQ3khT^5S^}SlWACQ)3tgRbca;sR^Qsh`t4+sO#Tt;h#Jmin9s`8JOMiST>4qk=6Jp#GwuWQAyrW@K zRg}6KXaQ}10D96ksc^mSUIj z5v=vUaq)0RS+W3sE|kE&$UJO*B<5@Q>|!~tSb!C@b$MSXg}rGTKR>ipMcu&XLBESy}`kHouPwwi5@b^UT#^OGJ^;lnBswRnnZd zhQ^yCW&wbJqZ9jVk|Ngnr(F{Emd|!kl35f-S1noI3J1Kq<2XF=UmX6L`w zv%3}~Ro(maW{XENM(ox@b3JP{HGxAwBci!}w?0v|^q|xQ?F|O$)#~k9{#LmU8-u25 z+>&Gkk89$#(~rcBSA_aer+~`^7=gf!Po<1-<=6!UElMMQ*o}9Bk{xG4qY!OfDOq{~ zued@iU_CYNlbplG9@A8Y!|3=&GtJKiMLc5T^d-$HCg1F#%#5m6CS0Fa+Y zl7ooNVV8u#TqFM_+0@l1(zw&+w(S-}J>B$T-2_I!8SUAxYlplWGq`xB_O;pnA)HPV W2H)2_^Wc7%#hzTeEqljU>iG*>WMbg} diff --git a/lab/Untitled Project.si4project/cache/parse/kern_kdebug.h.sisc b/lab/Untitled Project.si4project/cache/parse/kern_kdebug.h.sisc new file mode 100644 index 0000000000000000000000000000000000000000..22df6e14a9528d85ec628b96a05706cfbb61ba7c GIT binary patch literal 3159 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 DDPXUc literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/kern_monitor.c.sisc b/lab/Untitled Project.si4project/cache/parse/kern_monitor.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..ad45c6aaf95f7b9e9a4a7509b470ef86bde1ca99 GIT binary patch literal 10831 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 RtV6z>Pw9^P^4C+k{{R8Lp=baA literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/kern_monitor.h.sisc b/lab/Untitled Project.si4project/cache/parse/kern_monitor.h.sisc new file mode 100644 index 0000000000000000000000000000000000000000..b332160c1c74b3da7a06f1cc493424dfce6e15b1 GIT binary patch literal 6180 zcmeI0Pi$0G6vm&Wz|evg1OYMjF&KrI7#52B)36~aqO?FU>cV#H%+LvCW-=|rjfqPV zH!O^C;erjx5EEsgiHXsmV#2bC!Jsj*5>4tq?9zq${C@AgGjsb|ro*CL7*9Cwym#)s z-@WIabHCnU=ZYX041&%b(x4*oA>mPQ+`n4>2@w@A*@m;)nX$^K+@W1?5c7WV( zmabPoZ%W^hb|u;=i&TH5~!e&}d<-`l3Eq)ID*Nvrp+AV0>xd`j6Re zn}i`zv>Fo&{?!1pbER^z@{$~+TB(Tz`?M5r-qYZjpR?WgOrnUGoB+NC@Kg{Ehk|3oq?TJZOkymwVSSH0An2NBr}Vh_(p7Nd1oH` zUWlDIAjnZEbK0pgOPjqv9t4nWLuRv&Mdjx1JX9gtQjmYF@Wr1CD!=MuVLyIF<r-7Df;!!1ZFjiMaRIk)_+&@>*L1c(Jp_1b)OV_zm&2yU+A$yy^X6<tJukUk?d^gO4_o@6tyKQT~GiwGF$V|Am-5yaoD_bR_PEb?!TUcEoeB p4#d{PU2jVBZF<)ob=E^0$I0(=MSbcYxIT8&EFNyCCX7e${R>%r&U63( literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/kern_mpconfig.c.sisc b/lab/Untitled Project.si4project/cache/parse/kern_mpconfig.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..f4a9898269fce61dc0e64a0f981ab495107e5116 GIT binary patch literal 15692 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 literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/kern_picirq.c.sisc b/lab/Untitled Project.si4project/cache/parse/kern_picirq.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..4c3854ea4efc71ba81b844522505fa0fad0ccf52 GIT binary patch literal 2796 zcmeHHO=uHQ5PprRUDvj@SXxBE9J~lZYpGg6M5QWTL_q~9G=^+wmuQU1Ry^h){@^8` zqM(pmD(J0(_Z~cYw90Qna6AOA`P*!x|e5hU~k^b*tuvO!6Z!M&D! z;@Mk@)GN$LgLJ=T-#PWs$b2KEbbyt7-RgyqThZZ&0mjRq2VcgKS(3ByGrpz&ear*E zJm>>x3i}y2T?fx%PqoA_d?=DpHwcO&9!KlZP{sRT zR2VP1S+{fxab{t~{<4AF0zL^&Um}w`Kx82Gm4I%!Tx|T zqhAXJNz?HhHVk>jsLVgnIHuFHfs9OQJ@Kt>#}m+c81)`7mUKMKdX#fsR1&GIysE~7 zmfd{rzbdB1&Q~aVTC-?d{aUw~Dv3Aas{(6#RooNt&hV_1aJn# zzJWapO-RzxZsF9)y6dFrl%3$b><;)|a3(0S6lM-vgXVhYa7L*ysU(NzJQm!X1F<^f z90@uV8RVf;h})nwEq%~WkIQ|$H%0WJ8uaEWbPlMBL2Nv#SxkqcPR?`m@TUfmyEB~c+@Frh10lcWPF6rl2>7I~CI-Enc( z-KoFF`nU39?b#DT`oj?)df2k3XP3>7TWmOhahnuu7Up~#d9d=h=}-P#r@0C669M`O AGynhq literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/kern_picirq.h.sisc b/lab/Untitled Project.si4project/cache/parse/kern_picirq.h.sisc new file mode 100644 index 0000000000000000000000000000000000000000..7d6921aa240d54cae7d8356bc38fc398e0945968 GIT binary patch literal 3515 zcmeHJTW?HJ6yB;uXQ)e+QqhxfNjxb*+#)HN#865HsYo2doa%|1sWVfTH*fp^5f2hx zB(8}_Boc{8@ZbmV!h@{;vdz$j#MXYqq+I#J_zjfJb@6)asN*z+F zaSd2CD0OAFQtzHN7=8~)zVq?jZ0hd3zBh+*y82K5N(FfKOTY_}&^7Q)@O&`mjbPHe zZ=IB)!$QSCB><%aZXwg3N;Oqex#RVZ*-3} zHKL_SskdMU{!c>l5W(#N7ol?j{sw#)ppU?706Ge8vQB@({wn6jA?a6q8ac17n}s#N z$0!<)){HnL?w!AgPFBdm&f{$asVU~-)fHrbDBymKy5#uPuYgEsZHEQvLbMDzf<&3*| z{l+cb>_t8%i|u|&DGi$lJ0_s$lcKf67FNIAA1D>Q0bc9) zOTtuG19^ibe>$Kp$q{uz6H|#h%J%fZl%Yy^at(<>-P9f=rZANzuT=C03fMUpEQK8Z z-Y22Lyhd6}V~3~){=DSWQGad zAuQwWpbcnQC=48RAuNCE6rD{1OB1%cL@@lNGj(@s8!xfqRVaclL#Lj1q-lHib0$rD zX2@{(IfaOQPB|w@A9BpS(vMSpPHBJ8?ulMQ>Pe#8P=9EQKK?nBj6%PS=gWSP0Y#I& zjl^zj3zNN%HU2~J7`n0c#j_+?URhqMsgjlCU}_SV`BcfW$RtTvuAoS+$@q^GCMc68 zfMexKNG2yb=*?+ErN%yF%qNm#lGfv@$j648qg8x~iuG>^t9TS^Y?)8c9eCA|rgJ`I z(h8J+t7TZpXkwBe)U{+$LAf|o$J%zn%RSalsWTKL#UJm{( z?Mi3N-GJIsgI%skS@;bpdnPljmzeP|R+7Zc=dcU^7PmhLPgrc2Pt-=i=EtqjMsks- Sln=6akvdSvt3i_Il)7Il8AmPv literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/kern_pmap.c.sisc b/lab/Untitled Project.si4project/cache/parse/kern_pmap.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..b9e30b0cf93c8f8fe600fc06556cb062c29342c9 GIT binary patch literal 51788 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 bb4;i|KWfL9^#IR{+VOoA0N>dFAou?OZ(Y6& literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/kern_pmap.h.sisc b/lab/Untitled Project.si4project/cache/parse/kern_pmap.h.sisc new file mode 100644 index 0000000000000000000000000000000000000000..0ca201a97f354d1b5296ff8ccecb100fc72232ac GIT binary patch literal 21284 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 A82|tP literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/kern_printf.c.sisc b/lab/Untitled Project.si4project/cache/parse/kern_printf.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..64df07c329a413c7c121f2c650dc07a60dc3b222 GIT binary patch literal 4214 zcmeHKJ7`ov6n$=@SvN+5CNZLzM~tAAf!O##EYl^5f}O@)<1T1il1;!arGkZpg@s_6 zK*T1EAc&x#U|}a(sQ3eM{Y5Jg6rShI%y~O`Y<6Rj6yk-;opk^&I;Gnti)=usBLAelq;Nrl`JIb|4Mh%P-lhf`c^vJNvo%0UM#ROG)k=X!HvQ9C5kFu(0=2@xk7FL3s!)2X7Hp;Bn^odDqG;?%gNfSem1C7 zHa`e4>gVwdj;i?Lg`Ua_Z<8vO9jm7yJ5r)MerSSY*9Hz zZPjidunkC#AG9Ou^=d&=|KIv@z39c8*+ zT{&;RfXp>PHP%HY$~~a0ux^`wT1gCI=ZdLYwDs@p+4@aEAz}bCM@?n>-U2web5@QxA9xB*m>sf4<01l2xN}M3%x-}KTpnHVo1m+#va=g+a_oM)w9 z6rsi?sommL=D7!lSzlr$6*hrPB5}Jz9q+}zrT)bI4UvUF$Exku+LQcZWF%`SeP%oa q#m46Nj(7L_b=#+sVa&eFEMn`tX=OA!JyhgCFN6P&OK&FUL+}T6)VE*& literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/kern_sched.c.sisc b/lab/Untitled Project.si4project/cache/parse/kern_sched.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..6f6c8a5bd835640904f51d36b80152b14d87e17d GIT binary patch literal 5175 zcmeH}&u>&!6vrR6Vx5Xseg%TY34unbNaIf;lr#|%-H@s%CPX`>GuQ{EZ8`(NxTy;x zsEH)F(TGk=h>8n}zgL6>3lqCAAs81f_!HQ5`TTzFy=UgWX=zIc8{}|Kaz%7ld&D{DYVwfXpA+U|%(Ar&DRHe$$A(9b zl`F-aT5KDtRx6XWwvk;WiAcv>IU3xsp3jZg4al-pjWupo<=mXu{;Yf)5+50U07rul z^WBAiK9ak@=}pR&zbXtE*_KMh4p-1T)OB9 zvTU7S=okLFyqBZnV`*)CQjYdZ$bf?YlmKzS8fPnn2BoQ)Lf(;G1MjF%9UiHa2Ss0JTx5Z_rH~mgp87&hwckVeSO%l3-?Z<`N z1J85(ru6&Y1T@oE9x`g`6q zp%W5MhKO7=pA7auJZ+q{N-pKecv^U%}s%d$&!sL_fMj;mnYSVALg^f1v2X;EEwV}z{ zpdO&Kd{BEDxhYU?Q=5Yu zrU%Y!NDmdMb$2(vTX(5AgDO+)Serm{!fE&FNl6pjU-wt|l6Vix@PK$HmY?ZBH_^*u zy2QB96~?!L#m|1REBs10L}kfqvk+g3xhAUrRQNbCVdQ#QAE)1b^7ZFlT3w+F zP4?~NYEx}_8O5iq^@cY8l!%|t)uQydF6)&-uB%h(;8f@;GBTYIZ{7FJuF_3vW?i+( z5i18xU!HAsHvKrV_+Yy>@uUr?`u$=0D>C|tu&(NFKX9?}*MP4iUqbs@Qsw#VGm!@P zS!zt*NS80Awb{Os_Rq*DwrzdOUrE|a;Li&Q6iSgPr14rGEr}X1=g~?BB_qXMLehOf zhzG11FMhPHf86?Lt(2w*?5uR3vD`Oozu1`GEhNwvg}5LAQIp zSSZPzifNNEBFtGk&Y>JF=%=^b@eYa-E8rwfefU$Dx_=LHO?qU)ukoW@> z2nmTc1r4G>qNAav3r*5dfB=afK(V~Hd*hrVOX(3$9?$N~&d1Kq+__PumXs>afmA`M zC)jVlFF5)FPTJbt9;a;U)0+wM!|Ff&l?w3fr$NVYp%l58WHsalSHPgJEj$w6hRcwL_fqm^ziFgjeXF2fr=9?krdp9HZSTr;}~kl_1HwJd9LYxlPFQ%+YpCTKnm zO*aUzXAAIl1oZ@cQ%1i3)^Zjq_?{wjpzT!Hjsnx>T?eXr4?5;4?dGbBJ^fQQEDmJ? zYb&yJIacABPI&Mb_165Bo!RTnxHqzhIyr4V6Eii zy^cDsnr8Xw)0n>HOMd!pL&s;Cr|j8SnP+FeRm&_doiQCwAK1Y3aZlu*hqm&h2TdPs zZ-Ho&Z#BvZk)2nHACf)>r%WE$$1OgJ!{98A(t;$((3*jSSXYvmzr&~J!`EqdNr*EP zGIgJeBF78Pr(`H``L_3e&XnqJ{cJEUbu3o?%u~dD{>q<`T%<2J2U1+Q2W5W&vU;iQ literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/kern_spinlock.c.sisc b/lab/Untitled Project.si4project/cache/parse/kern_spinlock.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..1b4d1a61f267baf8d0e9c39be0146fb240d55856 GIT binary patch literal 8508 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 X$aLUwRbU4KraW=JjfJ+2N5_8v#G7!n literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/kern_spinlock.h.sisc b/lab/Untitled Project.si4project/cache/parse/kern_spinlock.h.sisc new file mode 100644 index 0000000000000000000000000000000000000000..a3a4091cb8a3d22e0bfc28119d4f1ec7b4a98a79 GIT binary patch literal 5818 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 YCPZ5AuB?q^ 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 literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/lib_exit.c.sisc b/lab/Untitled Project.si4project/cache/parse/lib_exit.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..3bd1ca9229760dd54f87a3d9abd94408fc6a33fb GIT binary patch literal 1450 zcmeHGJuE{}6h5kWy+I^puo)_0VlZ?Nb4L|e~j3Qyt z4t5f06JkV+M%#0~``&qOg~2LLa^Cqr_nz&c{@FCJOFCWNBuOGwi!zNc81jCB%f)kg}t7Gp{&256JoGVXkPt=&mD( ztX=L5nOW89)_FFCXbyjh<#%L;3avO=d!Z0An zugjryHC&?PAs4l>91ME-j027>UhyVZp literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/lib_fd.c.sisc b/lab/Untitled Project.si4project/cache/parse/lib_fd.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..e9674759183327becbe265a2236684fabb017874 GIT binary patch literal 24174 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 Fz)#mUdPx8P literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/lib_ipc.c.sisc b/lab/Untitled Project.si4project/cache/parse/lib_ipc.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..dc1616c22684839efda5652a45f7739d5a08f6b1 GIT binary patch literal 6019 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 literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/lib_panic.c.sisc b/lab/Untitled Project.si4project/cache/parse/lib_panic.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..19d74f474ef36616a194b7da69e6eab2e32cb692 GIT binary patch literal 2435 zcmeH|ziU%b6vwY=3^A#a(u&b4i9rOX77-jQ;^=0j72HfrQt}|iAXU1#x(bdCE){=( zxClZO9US}z>Lk+1-=Jd$;rac%_fFnxh%rkS@xaNs_uO;7_x!pqvl-_Wol74RyOeV` zv(BwQO9lK+5?+13K8|kn&BNWuG54STl?u@N{o*MlbVqzwtTAvoaatVE_fqcS++IzF zb8F(_4(H0!wQf%Yy1+(1encxrf8=Bm?ClIp$YzIgbhbBNBzA+SA!SvJFAN2;5bN0Q z2~OglB&P3A_71pv((BaQ*Bj09oE9@}?{cbjdO><(v*e0egF7MKB{s4^Z+)!fO^5XT zjQqy~6?bGVb!#23zEjI&Sy zNUyj@+%sxf7X*Gm_N4MCLO3tUotC~yj%|IyIVPq@TT9#(gOu&5LQJ`l0F|5Wp< xucmo7qma3cV*5uM;vi1Q;-%OHeZz~7!>@|jn8Xg7s+x87NoZp)Tz|Pe`VH`w?l1rV literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/lib_pgfault.c.sisc b/lab/Untitled Project.si4project/cache/parse/lib_pgfault.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..0a8818c86bcbddeb2231de272220834d5e3fffd9 GIT binary patch literal 2569 zcmeH|KWI}?6vl6BwIQ@N5~)@NBP!}-1_wbaodu;rMZrH!Y#JL3HN?irS?!iVRL~(E zIyg8eIJkA_=vpTiaS+6zTgT`3yYHQNU#MWAllZ~Ox$m5F&%NI{=aS+s=cb$+I3;oY z&V9@{xAvjm%V%k1`ODf6w&m3~!{{CEKmL^p(EBmTUJ-gGc`X@`WD_mr8jm-!E3e*T za*KV=UDBMmCmY$x<|l8%4x$7r_c|G7gir6#4_m;_SUIKf=h!US-f&M6+EuGsRV2r? zxg<>vjjxB-x!*Q?yAz+OFn1K?&FtqnUz?w)w<@!R^IDv)*Y5PsUAUt8!rTjQfheV%4~(fotih2ArWhc)Mb z2@OW>MLaB5^-aSXPdBoKYfBkoi{Cm~ii)s@VUbD=3*W$ohBbS)GAvh;Jz?`GGBDd2 z=a~C0(gR|Q;&TTc-mg_Kg=9-2+fH6aRW}^djdLP<{n4^7BxKpc#f>aP!h`hb5q8@4 z;2_ozN2Y%%GSBR7Vm9K|bkn$Py=CH4+Dtc?nuCcxCk+|16`b>(l*zS!_C5uxeO!#e zWI``1mf{?cPyjSfnY?C`y_;9&6rza8806_|&ghr&9pX!JRKm?kVYb6T#`gE#nIBbT z3^I<^s)gQ}A0IE0I-G=g!!U~+r{8qKlXfvWLHFNJsEp^70KkH3ZOS`WJ$y2jjUZ>rWA+? z@wa4;X%mkZu|4D=pUFwB5$*sA`XigT`23I46i02#uN@gC+sqdFQ)@WD4H!>eNLw7{ hZoi`)o+mzP9>x^apR+gO7<=;6!C>8|hCuJZ{Q{u!7FqxR literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/lib_pipe.c.sisc b/lab/Untitled Project.si4project/cache/parse/lib_pipe.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..7edbeaf29dc3c124eceaeb71bd8585482688b470 GIT binary patch literal 16619 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 acO?FMg>Mf9ytTf4dBCHL0hc)v&-*XjwdxrF literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/lib_printf.c.sisc b/lab/Untitled Project.si4project/cache/parse/lib_printf.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..4b39f2efbfd820f96a7aa968da19a906a26fe056 GIT binary patch literal 5213 zcmeH~PiWj#5XXOwiCH(T#58GRRd!udtcQ|Kwe=54$Vqb1R;f@CG0ARY7Gk<2o6z1o zddxxaBG^kIB6t%7FBLs_@Y+&QFsO&%zlI7bD*XI@-g~qAb`v%&B|V4(v-5lN-uuqX zo0<3fZSn3TIh`b(kBO6xB)QO+Bv(G_aC}t~zVywNz347|{{BAXUCICSUpWDCf4{h2 z0lh7LSDX=N#hqg4@{hUf`6mZZCx56$7B$iPb1pma!y%T{DGjtfeBJ38+N8EQx+lmz zk^ovQ+1_|hSn9-k0(e}TzSL+oOuVDrglCJ zR2E9}%jL8AQ9TUTE>zDhb@71kNGx3W|#SI)^wNy|AGJ1ZxH z6`psta=;8aoC8g<$jbEM>oPN?MWonr=wvX%^Uh}WYn3P5-QQ$pzA_^lFG=4e)~(`F zgJa;vIu6w6i|-0O_KZwZcf?MGjZAg1vQV2@o_$dRU0sQ4*8vwK0mkt|Vj}}z`?k__?YdMw0_xGFZ2+eQJUgb1Gqcj;yNK)XhpT<#tGl5|40u{NVmH0UXozk=gv$RkH6D^kj=Z@sMz)#cN5~fO&^NVwnC=Y|-8hu5;83mD-?$7Htve+Rv z*oG}P#2KH5hK`8a2s;+h&E$q6|0`^MK@!{6MkblI=O_FTqjD7clctR-!H3S3bCvQ* zJ>WQfX#GeBVaRlOAEPu$GWUIJ)3e(XpdF>T=OuV#doIYlq(P$7m}7G^ss6ENWSX+l z6F7TjUezzYKg39!7h^Wo3AK(m_f;#RuF60l_Eu)|Ge^f&pJQXkj-NO>0%)B6;!nBk zS9lg!z(QvM)gqvn*G zHEYR*T5GHq71v}a^_K-gti6i=@@I`$4P`fDrPT2)E*nY(GF|&v>-l%(SAYEg5GQwC zef;s$KDo>h@WijVZ1PDXU;?!YBe|9=*2jdyG1)=c`ZyW!I`CtkR)5K5*FqAW6X04C>p zSj=6G9266a>GDx0AGy}r$#%k_pl9ExafP8}e<4WxGfZ^(2y^3VD<&R!0;glT$`wY6 z9u@N{LGoDyr0KdMNU57>>lMb%IN?(&!ZV}32&w$CxTqqmh9cx^1-D>4*{vJKUMhC@ zCS|gokoH}Ncb+)B&eGiUVr#IQs^pE(ac8uMV5g*8kAk(l?q;x5HonD`LUllLkYwr0Lp2T5*O;M<1c=jZ=P6>CHUV+|Ru#gHz!x%AbTg+0Sux+2xC&ZD_zNUO@$?cNCZ->)5*E){(w4009#m~3AhjZcF zAUi(_@J)Sk4SwKz!PcOU*KG1x_Mu;6{W%6upuQmKH;CfmUjX!o7w(sDX6Rur+!y&! JcrFHs_!l9SAb$V= literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/lib_printfmt.c.sisc b/lab/Untitled Project.si4project/cache/parse/lib_printfmt.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..16a168c2e89ee95c35dd81eb754ddb7cc1c6274a GIT binary patch literal 21884 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 literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/lib_string.c.sisc b/lab/Untitled Project.si4project/cache/parse/lib_string.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..fa9ecef6494ecc446c5787a7c542adb16e1900ff GIT binary patch literal 27516 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 literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/lib_wait.c.sisc b/lab/Untitled Project.si4project/cache/parse/lib_wait.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..ba91a7db4b776772b9d78279cca836db1fa0ac40 GIT binary patch literal 1734 zcmeH{Jxd&65XZ;!d|^=$O^QGQ7B*H|SXhYMCkP}O5G=eTd*Gs|g)ix1p+u`hOlc7a z2Gm9a7AXQ(q_hjBN|BFXrB&Gce|tOYu7%eJ|1iw!Gc!B$JUh~EHf2^G5?RUYs?F@; ztd!6%ap>UpMHjY%ABWxWR=dalG68n~Nc2D-^ii}g(lxL^R2G4eo$Fxv%U4YHP4uwE z?Bv~bV6A(d*c@?+`uwL(g&3;)$O-)J;K$~=pUs~kK95jJRm9l>dT(s_dJ4{BA938D zd8yqWExuk@4Qm7A5{4I|SEad$XR_ye>yl31{7j@~ebnEcC$qr@;+Ut@k;v32ufL2| z5b_C@HNeW}#!&wfstT8~{n)+-o0`k5?+jr(%Q zaMyB(b5MtP&}=!xOo=$-vvQ8lWi5pvWGF7BaSL%$wkv yOrljZlQ+BH3pX9RKr2l_PU-=#&33EGTbVpf@_LMO;)vPM!x)=s#CX5-=J*F7p{G#* literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/user_badsegment.c.sisc b/lab/Untitled Project.si4project/cache/parse/user_badsegment.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..5c81a0e498f30de53e0fc2efc6d0ccf6bf0b4213 GIT binary patch literal 1962 zcmeH{v1$}y5XZ;M<-BY(M9y$Vg*$=>R&HToA!2Engb0?NcVZUeMS=+_Eb<5`(g+q7 zM$y7f5bHcZid;xxA$b9PgZ2OW_U3MH3C6}o9GIK=X6Bpu{xh=|SIm~o$~VMTGCS6} z_qi1KP!it#);ou7ckjb_M#aaW4#APuQ_ZrcqcQaM=uj2X{ zvwhjV?_3Br>`>aL&FeoRg@ki(=!cw;?+$)!e)hXa;!dKDjE}^Amza=udT7Hpg(FA# zoM~Dcc&J@Vy6u(q&XeXHDK}S=$ED@Fi?Wl~@lQx6uRaYM7dtto`DSI(ZOAkwD!WaM z@%3k|q>GmC>efLcy8SlmDv;qf>gw}}dX;L^mn)N0aI`0NRqjCkQV!ICq0_qhKrtUf zq}hTbwLF(g+^*j;V^Ib)+F6gv>X$cGlMYD%K|=tKWIPmdThnZ?Mscm!%0klC+S4{k zLtiE9{X|zJJt?+kF6sW%=}9-ZoF9)JHlm~c(l5!^A*sgm@a5Ss7KZK%z+)JX#K_Wf zhCB|PI)6GI;^+H!yjw2uxvsHX8e%1j zzx{7v^%Vq{4;Bfz?e|y<+tOZctzFY)mKGkiA_D^;n9mpX>#@Mc$FpIeG8f6iiuRC; jI*`}o;Xk!F+pp%rzXbL0xkM-Co?`BQ%3{1g{sF%L9uc^g literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/user_breakpoint.c.sisc b/lab/Untitled Project.si4project/cache/parse/user_breakpoint.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..002219841978a58f6b1a788fb1dd515a599a0ccf GIT binary patch literal 1958 zcmeH`v2GJV5QZ1WG3G+hp%9q}BwL7viWKQU5oJn)f|L?tBYaXYC?XMM6kdQxlys1g zfP`phsCfjOii#J2GTrfiyEnd#iGYR%G17Q;XJ-Goe`Y*ib8gwW>J_Q0IQLce;fIRX z16g$E%kVV5olpDI*a`Pv{*?|e`#I@35qd6tA=MhVL|T<1--pel{%W?)`J=RP!nw`Q z&7{A5*8A`yc_D|_z9mZWcOTFXn27BTaeQ{Sw^;Iylb)P+r1q8^kDHc0VrK|M5@Y81 z%qT+bnQYKqUGLp%UDx62YIe8MU%VwhxW*rn;7%4QXz>uR~X%>}kvQY`RgWTAJ3Ts9#D+D>`S>&C)6${5_iBqD1L6szA4T( zWvOLYW(nJQ!8sOXBr$HDTUMxF-FTSw0EGk%fjpM+SUd5xoExptdy$rFBtL<6*6w!! z^?j9XNCCYdHBfx52sEAjJ?I9H)fF3lHm8U2DSQxr303XA6WR5I7 zcf|5IQ|C{|Lw>t>6L-)TlHYt9%SCccj*i8ug}M{j;PE)udGXqN8Mv|%aBcIa-zvF+ zV&DF^xY`QB%La=@%=c@qV=LJ0ch)ZJF-wbQ_tWC@N@!F3Qmip>RdHGDsXtTw_4dLz>ks0_ z3Fkh3nW-Lbp7WU3(I?Gl>(}{{(NR*)iTMMt<{!G?2QK7V$rhENV-plbKO#2U*CjW83}UjX%ufh zD{{q)-Ti;%Y9kmomS#eR{W;g6X=yLER<6pJp@oZ5gk(qv=J~>AzOI6}AJe{}f=7|5 m4xHhOIFQBU9UaQw{@xY;moOcZ=%G_P(EngJ=-AtfFYp`k47{xX literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/user_buggyhello2.c.sisc b/lab/Untitled Project.si4project/cache/parse/user_buggyhello2.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..bb9466b0f7f49c4f8eff9233a24830bd283d52ec GIT binary patch literal 2060 zcmeH{zityj5XKi{JCU6rBL^b>DJK*mQQ?AuB8u_|28AADNBAV;L=lN1B;Elegea&G zK}otu&`?qE04Z=Pij;I|(;eS$Z^u5LB0@uh7-?>HW@o>-*>CO|W#^WiE8dp6f^!QK z&J8{nydKJ;+dl?V#J0cfPGirz|MIWg0Nh`Z&Zwc+(sxq$tw@Vf3H}$^M^Zaa*kja2 zG4?L7k&!HJlGKMgoUOB` z>aO&9tDxfPBlA+#(-5;)X}49oS|(*EDXQ<+?UJ3Rx^lmx^d$>-nq9fwtD4v;n080JFhflQmFcQ3mwj#@V2o z9L~~nAS!;oPw83KUPrp5*u57MRXT!n8vtGgdSp(e$MV>x&Y#jlelwi0+cL|Ztwqaq ze3NlntXde2xc@BQ>yi3838TnJ(Cb(IPToEr^$Lo;``_x-Mlee(WFi*(eXqG`X?I)e z^E%AXqNA%wo1r0eI;b6AQ}c~CGt@jw?8sOinAAh8Hh-Fzy6CO_oBnTMIcCWtXH7Xf NpVA!r?)bNv`~r+hzpnrQ literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/user_cat.c.sisc b/lab/Untitled Project.si4project/cache/parse/user_cat.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..f6a3355be9294dff7ad370824957cb8c1a014f8e GIT binary patch literal 4012 zcmeH}&udgk5XXBniNY})J4LrF&Ui&O2?2vfhHk4!wZWl}Ky9IGX> z4Q;ZmUexq`l_@%8T-6wi9F-e7)>O(l3bB)Khvb6D>K0Hi*IN5QkXcL-W7S7IIvY?Ha!ZPN~25 z+9^r!HhQgdU6NoD;igQ7FwE-sY{a@zlC;SuB~Juq+t{Vvcm!|4Dk!T8=CdkzB=b+= zaaF<0-)}rx{mzaB}(^(|W!47Ix1!uJ9v-r3Ud4hrHq}a}6ZkY|o z2b`n87b)~9Ng5XT(R%%ITsxtGU2(g{I7!kuh%vfKDl`(^FJ2QnQ}Rg}1d$QeTojVa zF+_Bg0CD_g6U3_^;`(Ya2}Qynnog(S>LN9~BH4|Z_i+S7i_Rp-?6WL<7vdzqRjP_rUp56=)Ai_#=(HdfJW zXKs`)8apjLw-k?DTN0}tjGIVfrErP0NAXXtec&Gkv4R4xWUTf;IKwIr37KyBSPKuN zf2enqvIsA>s=%&f7rRO~vqn)}k?z>uhwUVW?f?wIBER+#N@?zUKmH@92eo zK#3NBA2Yd4(m>Hw0??y3nuA`qK0$okH_~3U>7@VmKH+WuXRc1 ziO**~ZIuLhx0pnLYPy|)kJX9v?P%Fkl8~~Ld;$kAk5=NtzZ{GYk=KLqzJ25{tk|P^ zo^yp(bYB%a)R8_Ln|s??2H1NyOZy`^~r_kLlCUBm474H9SV-*?h@lZY`R=c-<^$? zZ945Bz^{9tsJ9kW{htQLhX>w$D^J4cY$CxpXD{ z?vdcx!)C(@c*g93Tg6bfURwG5!(59N_)IL2#YIyp(;dz| vr-}HuSOXy3Gp9XMXVX0fp8m7Os_}cXC!P8)4G!u`g;P=Z0%1xcgwTBf3EQm# literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/user_divzero.c.sisc b/lab/Untitled Project.si4project/cache/parse/user_divzero.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..3ca2c41c89f92458f33e43e7c5fd4fb2639baafd GIT binary patch literal 2059 zcmeH{zityj5XKkdIN_WGBPU7_2wNx(6)xyN2=N2~g&t!^_@v-i7D7K|ujU zibO$jLqSKu15n_If+BAKCEfA;Zg1``aR5c>5T7(RyR)<3-2Ay~l$={~u6RY_3eH_0 zcW(H;5X+u4vh{5^iEZoC_7wWG`;UL60`&g8WJU>XN?uFoZy+g3Vhn4+&v&yEtk0fu zZdUT~OD)*nJQv%%lXFpm!R_yXT;jc*X|!S(C+EbmS+cum?>YMXAX8g%U&4LkjCCcm zaW*ZF|B`xD8kEw7{!g{ z{_0&V*yx*!QPvYe_WJHpSYn^&OJ&XtQA9{j4A0owqh{D;m2X!=?V8{A?V^^*E!lc! z<|bepR7z#;utp!%E}3IwNgS_T_jG$F;h>b3B__*0zrN-i6PV&)yRx_7eT(a>VcYsc z*+?Eu&k1CURS*rVf@;e}Z}Cq! zZ68GzEg6ll`}lCKZ9U7sr>L9UA$#maoB^C@)fM$m~!MP;hK1b@~4gmABYlIJ6p}QBy+c*A02VfnNZfb z$8yQeLX$0ZS}K>P=4NmM=Bgt(n9whB zi^8Lh!w;MoHvX)3r8BZHCu`%Kb#7o24zn1pD~0oyo?ib=;#>TtP)3SWC+Qqs-6s3IuiHFpj3gJ+3Fg)2W zg`a(_c;fNmz+ian7&rT=TTq%---}b1aw!RmD%FYnhdFMbW7$oXx?(p>UE9Yx_n6IA zrj62_y#R6IjAf5e)@-aaJv7!iB}Gt(V@~>?$X=QZCL`*?+J*wbjK#YddMH zl_YjqqC)}WHMf<#hyi`ur{||CO#Q$P%dp`6IIyf??1*?12U24(lAxKf7AUdm07v?; z-N2%zuhTUJU^w|M(4%e%C&jDIepBm{6qK(MV?WTQ2m1`TXS+ImuDt}mB{9l^VINzg z$hPs{?vJB7jN(+KeYNdvV7!7?&-vf7t&EVwfML5z7Z>&Iu?~rddxg*kgqUKyf-m-u ztk_KAOqEI%x*2R*El!1UJ3@_@?Pgl4!EN2F!bv~uYlJL)XYw4#+Ivl9wvm*c^_jAGx!%-XOV^#W*HYV3!>HLy z3N^PklP-Mvae*J)yaJg|f?H7(J7w93c&8q`QhV!JI$57VY@?d?zrx&OPO`q#=!~`n zUkJw)1(FNskRDexZxfDbPJjkj5E%8x&Fi~y(0Tfkv=0ku+E9A}8LxTSq#X=9J6tkZ zg+C$=UWS@f<29F>37KEvk8+I=Y9TRRbD=me22^dS@U=$LaUp#TYEL!eJ?S+fE!Tp{ z__nY0%tDFaq16c?_dO@X!MMSA{u^lH_w2uu_*@E-w&`>cHk1)O{#6d3$ zk?r$**&~vjIud=;hX)=w%=-%04)rhTq4D(T#iIk`V=qjM4Ysx-x2{5lRSoM&g|Jo< zuBjcI>WSL{f3q+ghoTVe&oW-qI!FT%vrz`H{aaNCd;F?h(fyY`s(&46C{|De4Ka||!4M6DkT{rt{0RmOP7G38ffu2W3XP+SI=Fy9V$`7v zF*>P!vFS{Mcw%)(!WNmf->0jvp|NgZ2qzc*)KNIU3xRf|4j_5%-HT38W zBKJ<*+v42n{c>vc*m`@UuYAG^ZQm-j%fxXsJuxA>JLr+w*?fH;?0w4VFfGQnj=E|x zbjRwH^*F+?r>Z4)Pms^fujFo~N42>yAKXaHja`)-Y=)WM5EoCwt8G=k_pKE51{oBF zZR(vsiLh^5S;z$W!`k^>9amRfrK?4y>X+&Cy>jaD;M1skuYQ(NAh1r+RnE;i);tcmz);_Hk6j|B}y83?^Xmh}LMCMAwQHB4S&9Wq?Ss~)E*EIBVHmaWn%NE zwSGOm8BIR55(U45tkou;TsBXvkjegDE0-fC?33BKOo5~SW78@&y&e~fj$(II?2n_h zV!79ZvSRH=NmNHP#3zzMX7B%qSX2A@n1+O@Yoi`h2~6EJOkm+69TcXsip`q}TOHa) zKb<<^Qx�?+EwyhbPg+m&(Z0cDA*dyqV1GqnzM@3>)uDm-2p|d>zdJxD2yzGcKD; YQ?ZQ=Aoz`VHz0c%^nO&If72oR1LgKHh5!Hn literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/user_evilhello.c.sisc b/lab/Untitled Project.si4project/cache/parse/user_evilhello.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..c887123c752f1e08c103bbf6def21800a8910142 GIT binary patch literal 1966 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 literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/user_faultbadhandler.c.sisc b/lab/Untitled Project.si4project/cache/parse/user_faultbadhandler.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..ae7d619f47a14959eb4c9b87765c4afdd4c4a493 GIT binary patch literal 1974 zcmeH{F;7!b6vwZ%l==_?DW)1t+87rnJ2((E%#PJy;%IG+yaX#D!o<*zKq8BYg9`~d z5Ec@`#J~q&u*AWE_yt_up8wx{@9=Ibu`Vvgll*(`J@?#m?*E+A*C;u+;9T*x;0n%t z)4sn~@HmkMTVMN^v27iFoJ3!A|K(q)0KLB^%!<&a@LtduxJW1p$YH-0{kVUn%=$p6 zUU2SIw$sfSZ^MoxnQYI0kL2R_{y;y(L~M3A$7XxGi^lIf>B#s@;O>}!cs-rlIGge( z`A--#Nh)UtDvh%j_%yUwjxa>p1#;I8^O=PZKB?+%e zUr3Iz)mN>!%POpD?{h7hn@g(-Ww0UJ@}+8-Y>lg>2{N!opI23xy;!H%kOv^6s`^Ae zpS-7YkED$yCSxD2?>fhzoXKEi^H-3+xb`~k5R}JLHpruC4~fiH531Uz43}~!XlvzV zo1kPMKsD3Xr7bA7dJyz@YIM*wE{E+oR4cyROWU)cGls9Jp?|tQ?%P7sZ2))-?U5Q7 zdiIF-acE_q^nloFgEjQSk47SCxWup;y-wbnI7O!&l2WKSU+LLX+mvbeG zz5Q=-wGj*(OEVF({hsU4w6qsnE4Or+p#^yFy8Yg1 zEb+*%T87}Se57+ma(lhavTe`5O>#hKfbRo0gGFi3e7O`ME5{p2UTck}GWqb~oUt5$ zp#+FG$UyPsQlR@Mehs?9VJftI6|wK-wfH+UEq@^0mv4MEW+Y!XW15XeA%C2aynWV~ z-5?gR8*I)7&5S%)w zi;Ii1gQJ5f4h|yjc659Fex5g%ym=|s#YH^$=I*(>=kB>5Z<-~uRkPv+!3t*IbRNDf z1nh}}-7mu<=yu<~JPMz+|MahPfY~nzCsfc=;klqSut+Eh(4$ZFsJy&bMt&#MX3SQG z^{BUVJm}Cv$%qCQe?)Q#=U~teF(Ka_?CAXLcj5RQL|rLcg5Sj_#H~zp*p6YyP&Q_g zRL2%_SL1$XZKHdyab3ctwfJtKcjK1y#P#~=1##zvIl;+mdULw8;5vAc;FWrkV{YR? zJMJT8ySl9oe!h}+m6E|%>6$aOGTADNr3Es0wFh-o=0N^Z4&(vQVO_l~pI5=t?4~%m zJeG6JE?+idQN}dgS@%lw7dIcqU4l{s&7gQV;~|mj8fN1)+CQ0ZWiDuY{eFj_p|9e# zQJ^#89u!?86SP@9Jm@Buv*W4k)uZKW>3CLU>k2J>2p_iQ!&n%)F945WJYrKz&lz$* zWb*v!c<^5t-SKWY$L6xea+b5x^jJJwns+wtKhD=WP+fPfrnRyX)VeL*&nJ^wiQ;en zTebQMQkM@F4!Q34wdS^^(`&Dv*JYL#Oj?l^LqUMg7x?v-zQbqVm%>1$&Xc?4^&u8{ iAkWFeKPuj-*XP2&1o^NzN5*F$pZyo9k0;3ft^5M@`?@0l literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/user_faultio.c.sisc b/lab/Untitled Project.si4project/cache/parse/user_faultio.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..6b2090fe1d8aba7d8cd0cf8a4a32cf2961c3c3c4 GIT binary patch literal 2697 zcmeH|&r4NN5XXPi>6QotGZr{(jciy{PC3Mjy`ob{h%suBjGiT4}A!~Do(VK8?_gX1H`Yqi5&{aOL9#piY6 zgYiZ_WUk=PKBhZQ%f}_HhKt<6UJ1N=B)XOr*qN+;=x*Y>A&MHbzS&Pb&*bPpF=R^h zX0#2xq)Od;bR)pdZtUloY=AWTc70EG!RH66_=|VG;!ngeh0BMfpriYokE&DAVIo>| zwhLBEWgmk+xpdp$hxLFit!86H4Ihj|my^>!^(3H1V!qiUGv`iJ-sn`uB zkF>8Svi^)?s-GGw79b@lO2UDlX)hd^E$1A0c(gBeH`y4yj&xvrC=V%FL$E*52c?Y^ zTP{WVW)q}S7qp242!*ylbLNnmO-E9RRA&DT4WfvZF$k_^8b%J0ExQw~TTo%dmSwbJ z>eG70ahjf_X#tqgcA93(GIII`n%;n?hHzpqKLIOG3iaVT+E~rDC03D!W0%E3=9Cjw zG#PVBX3Mfx8;I=5G=?vBp*T?r$1o6--O$`@DY!Yh^&3hU@R-XP-Nx@P;~Uy1dqHwr zw&5Q`{ypaXu%jd`Zm5*PtiFxRfvsbVA1f+r4Sd@OJu+E};n5OV{Z)v)BkNE3dW1I9FZ;a_xCs3fg~GbA^R{e=}EmamdT=F&dcd&$(Llk{2gGJTQJl zo7)nxB<$xvLI^)g#I`T#dG2VeKC$|gg)Pn6H$BHMaRG~udr?*~=00`#X0kP=S;v|d OHTm+Fcnxzv{D$9!bl@KV literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/user_faultnostack.c.sisc b/lab/Untitled Project.si4project/cache/parse/user_faultnostack.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..d5df1b4281bab9ae3b3c43590e54c012166e8fdd GIT binary patch literal 2303 zcmeHHJ#Q015FLzTN9P1va=;`+vV{b$CYZK#B-G-VFk82=9%d~^ur!K z+|IQ>)V;44ZRc*|ECBY=x$cvq$rhIjCEma|W?|=`#yZD6MJwT2{kfi|b2rl%Td&s5 z=xlvKghM!z@s4Svtuw#%C=6JzOZEjv@{%RXxg*}gwqL8wvS5;B42dXN+TDw=HIiLt zed$m69a(ua~sQMQq*=Z*NJKAbp4G}2wq5$eF{s4gowEm8a}`~Y<^kfJRBtIKIX%GypN*y g^3Si0oRzmH&EKy2sHPu%cH#5=x%JUE$J$hW0#=UXssI20 literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/user_faultread.c.sisc b/lab/Untitled Project.si4project/cache/parse/user_faultread.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..3e03b6b6fca35339444b2816096198003b3b2e45 GIT binary patch literal 1958 zcmeH{v1?R85XRTL%XwZjJc;2Dl^kMYWeN?5K~h?(M6k?xC*Fg2hG5d9kyI%SSX$Vm zFh#5cu}a||kitu45v=TN?VjIn_szY{BdCpyI50Q6Gqc~kZ)Uiex^oN8)viii#ksG# z58qe39>}8GUxuggZGU=u23vLi7z>j_I>%mHU5wUcPv*KFUBcJ>f`3aW*M1*8NXwz zPdn*=Q{2@z>fmPHRVbr-pQoGi)mDRQ`n&uJJe?&%Va<;bvI+1;u*OL;1d~pY&s4=(YfS4C9eG zvh>^$%i~O)KOGPGck?%K2Yn&=&8M+kB-iBVSgcy8TTKVg%UqKK@tO@>SqZo6#o5XaZM%XwZ@PA=gh3OU5a$`qmoB=`{$iC~%YPRxUNLNIAkn9?#u%0RRT zM0=Z5Df|EyUa+tTsnY2;c>aI8Z|?0qg4)=K1M_D0zq2#@pBdgv)wxCIDz~JroZ!WPk2^T`qp_5A-1>Vza|JnCck%IY8#%_=Wey^V zW2R|yctY-G((kUU^`5mKXmNWbd0JYYdnBB=#vhWz9m`b4i*ed&RmTm(rYW9*8Q-zB z7oDWfYNV=z>H6v2P*o_So5CKJTQ#yZCadFQFt%q^RmWcJrEJI(a_1e1E8s6=pU1Kv zvh{*2xh$4hj%|I%IR<4YaojXDuaLj8{xazi6cQ8!@>tqq=E;0O`bn(5B~Gnow$NNk#NJ*mh1SMjJCzHg}mjY|EkFKvv}3+2d<0+T#to)eVub9 zioN}BakUYImo*lP81`$fg=y(7cUEueGDC~zr3hpoWW|V^-#8Natod>&N}eS;Ar3hZ h%g3V+RmdN^H~b&Me9Yp9&!+ySZ{7tT3w}Yk$xjTkyB7ce literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/user_faultregs.c.sisc b/lab/Untitled Project.si4project/cache/parse/user_faultregs.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..3cd4cee91abaab1d9df29263c392232e827ae8f2 GIT binary patch literal 7457 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 literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/user_faultwritekernel.c.sisc b/lab/Untitled Project.si4project/cache/parse/user_faultwritekernel.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..5f802013e778eb6f5990bc6b77b1562e9d2eabbf GIT binary patch literal 1958 zcmeH{F;7%M5XaZ!KzxXSpt%@G?qX;th!hsY5NpeWK!4|*k(c0+5Fnwu((;NcG%?YJ zM6GO0jFp8SfP$m4AbbJ&2G9R*-RiX089(bLEG##w)p zR&F?VD&J{;+WYV$NhV8+zaoYBy+6U<4)y1&hBs! zNQjvvGs6>d&%~Y9)?WL0ZAFWRTk*5f=94w~!8QJn1a~x38861EK07vHK5UW@nKI)$ zy7#gfcUXm0?H*U74_Q^AjDDBz^K@mLZ0ABHgR#A=syg;!FJ(iXGtqq<-}KWZa7B0xnd~`pv|2Z zEkJ!;Wh+uZXQc*;uNHvTYuAJBb2)5JT?77VB^~;8owcP6ehA&0zAZG}27t%V9+?Y6 z&mOTj*5vuq_7Gps?t~TeiR3q*+A>G1$;Gx|vFfNM{_uLn6- zQ0(o0i>r+wysWWU#C%tCElf*mv$->`%M2}=mm(ztAuC4M{Hc>_^g1huLW+`S2~NNv j2V(hn^m`Su_vV5Bhp-s4#1Yfb@BaK<8e`zMZ25q?> literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/user_forktree.c.sisc b/lab/Untitled Project.si4project/cache/parse/user_forktree.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..4b48576b6d42966f5c016c3aeaffa4304a62fdbb GIT binary patch literal 4847 zcmeH~&re)c6vv+}P#BYwgGsXf!=W7SiGsI(U+;r=`{%p;(8J09@L$OQwSQcAOaXl<{934% zNJ_#EA#h{8T)Okha5v+V>XB!K_r*(J{|m7OWC6xr{G-$kaROAbc@eMA&H?j`Sy z_XN?LOzC$>n|>0#!e+rQq8CM(T7OOlnmpEy3S)?EWZ6(-315clv(=f!sp<5b1~1Ii zFCD7A`nLG!bv|+$Y%nG<#Ih4)8QCZR8=Y^wIX-dWU5%J|C-i9{9y4Z7f0&CTYe&0! zp@uBW3zARK(|!5s{6`D()6?&1Vz*cw7CH?*FakJb<7rnf>xL}rQMg5AQQU*#YOOvq zh0C~gB8b{u92p5bY+2iKf2(FBi)3tanG6$iDg;gmQG)2G&|sI>M!I@YU??(NaQN+9 zyfRszMLO=|i@%mjOD`3Dd{=9K3+Kd}>p9VlwUvQFEBo+;R_m_-vAJEE}-7Z}Tq9*Rb7j?P`5$Tmw7*gvKa+N@zpy(xP8AN|MS@YfCwd zBA~<7#d-F|NxY?lKN6BiFjK-CO5(=#BfZ$BO`!m^T@o#aEOu;twTUOE^r&PzS~sC0K%r4QZM~Tw(0& zHCQ^8L{DG@6gYU_0H&;Y{LtOQ9dTR;)u$o1X?ak?FQQ|O9 zeEXa{&|RdZ24qE>s}DdJAXIQwwwpihzOYbuj@edvRIpQ6@aR~6WumMi1_J)Nvin!&mr|5mVR2oMUm z8TTD5o8!vfQeZdF6;}pp+>a|H;L~QX1W9!rtnWLqHUWu@!AY|GcGnE@=#G6#)NLCr zAHGyREtQ%dK72tx$EjVn*$0W`c0AwBr`8Xj-w>wg^Z22!E*>GnLMTWA%}b-RJ3iQY z%{Yv3A8hmCn^R#&!YkNEc166}=S5+8?2vc>+AfKfLlz%xeYYec@4Me|nX=~bzPlI) z;*MEXU>8ELyy3xB@ivY(JBCi7YuqsevRy}Vff}&0*I-HVH({fLPQ%=ksmJ^78kACr zQ6a%Y`L94A=A}{BRJOdpo1qa@$K?EnRg^M80sRbpQfQ^{(n#srmN(c|rPtUTm*+Jd z=44t8rWbfc z1r~cR;BD<>caqtOAM4sy2EU05aD3bqbMk%Q`)6|BErWtsW|@B&-xe}{!SN0;42A(0 TJ)lQf_ z(8gEqARYhRwYa{B-ovR_g71fWK zwZ1i?!RDEuLl2S+JGXvBG70B!p&xt#-yQDJ`PtvXu{#P~DVIdNg+Sm_g^u&-a8vx0 zeJ06tenIT%xZhb`?LKJEOSrlm->>v;+>ySV8%5$*pGMvjiFr+z4`(JhJCbBvV%j}o zjITaw$9<%7SKq0Fd-G{mDH-}G-IIxWjcA_-Gm~V23_q%?QU~~?I1mQ{qq=%mHm`!E z*==!R`CI2)yF6>gqU89!vqcuzSJxiLU7V6US6)2hA&~2uX89Uz91OQ|$Z31!VF#xn zf_Oc1bV1ymqHC6%*1n8(y2fMAP@>)Z-iUr)Psg*Ub5}Ga-G^rw4rJjmsi za0YINOdN0LsPSOGkiGG4Ip@x0jpZU|M>&Ti@n~t>vAF+qxYiw3@mg9dD?zObs m%DUhK|G;DMA285A=iqg^eZ=9;IWjgcWV8MzwekGO$MFl`E5M!r literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/user_icode.c.sisc b/lab/Untitled Project.si4project/cache/parse/user_icode.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..1965434eb950cf5e625fc02617d7668af310be60 GIT binary patch literal 2381 zcmeH{J!=$U5XYa~i(ZyQf+qw~;R+iouduLCKY)dvA%b>yxi#Klyujh*8yMRY6$MkA zXbSBV1QClAegK<@g^iUK7FJ%l{(rkW`;r8&N+S*oGds`Be_oz>wtm35MdwPV#IE4n z`HFMfZwn!RmV`IIZqH!b{P=PfS#uhhO-{*O?e^L$1OG6r)hjhQZ+shtv%v-hL0Pjq z9P0R&2e(_@-a%>Esn#{YVLa7~O0_E2#=WuEdH&2JTm8q#qXKj!Q$_AIq3kt~$Eut( z)vNM-CH}1>T-Ac)3lfU1h%GnYjB_kbLfP7a!1gDqr?j@(^#LWA0vQI9>mrfa zYR)D748QLj?GDgZ|7IIdg5mjCa#se5t(FD-IT>{AvVzD}&M>0|G-FFDl{q{^LP20d ziV7<%`ypDgOk7uU4;!w-+c4d*>s-_*k9OYFJ% z=EpgCEc>L*$Ddv;#+DHYfrG9M=lLg;-*C$o`4_vrJG*+lJN6nIQLnryf?$+_j{g+$&;Ba82sH)C6T^>_<<$ok{@G zXQH?FY^-gS`0#n-cqCsU{z%km&djx@!$}Q}-ad7r&^}$49bP+MqO%x`2gQ&%$J#Mw zqAQAVLEdl;XS;Sv8?T;a4$E`tW38MUHHhP3oiQ~fJag9?QHLA$s~3K&21_T?>Rl3j zL3DLhuY2HUK(zMfTAAIJE!AW0-{!xd_zr-%4p>@c`pu7+!~+(WZ^<~{zh~*IG#{GT_c^0;b)Tj__WkMoN2CuGUcS&k HkJJ4E%IWP6 literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/user_init.c.sisc b/lab/Untitled Project.si4project/cache/parse/user_init.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..6fbac5bebdb45902a5578aba6a44d4f400ba2824 GIT binary patch literal 5444 zcmeI0O=w(I6vuD#(I(GU$25Ln!MAW@3wA0lgv1iHZn}`ERtgH5Y0`EElS#-Vtsp`d zer_acZHpE&QX<$@D!3DL;m%Drl`dRFMBS*Jjl|vf|GoRp%$+ww5~10M2Tsp@=iT$a z=j)y~X@0wNN1f|?NbGu?%kOsX`d2*({~!r3|9E{Ty5;Y_*oEwM|I>dZ1JwRL@vs6q zC%zlZ1Ap za+@UQSTC7vXp?SD#IOv$NfjlnzZOsGd0Y%u8|7L$-re5zvfZynLk*u2zU(enCZ-l9 zPsF2I?4K$h?XsQ#}=at!47kdgP4gwPIzaGFhB2zJ5fHs0?yI zYg`7}bV#GzYAp)GZ8X^F37kGq3oOK(iZPNLU}(A!RO&WrG=TENs`q%c3MMu?z1opA z@NjrnszX>la=&DA(5wAa+y~rSU6_7WYczME6de+SnHS$JHZsioAGN6E8FlP;gHDr6 zguZ`ax>&BTnhA4giWX1PmzBKuwng)s`l81APRK+Oqie zS~UKN&*F=EHz^)h7Hj90l5CMhqQcIysAbnI;;fNH&huun$X&$7FsPaZZ#wl3@i(bG zgGA*Ce}lUSR2cG#!dpG>L;h4}-V~2Xck#FHn~j5w6|>ve^9T8q*xGD(-YDe1Q=`u% zHLBfV`B0D~1$GrpO4Zao>KqfjN$n}XV^6Gl%a!?OBuO7vncN}i8O||X>~Fg?&Mp3) zz25Bf1m?CXh^(-_Czba~8X~$lKwP<*oopGz3W)Uc9b$5bq}AAGI_a56O=@9~>(*1^ zW0_1E5@w*lhKMeUC{>d>2Ic(BJhovM)zvZM7kw8o0=PJ_bSsNX17w^*iNqs(p^GGL z`Nd&M;G0#`Bxl)LU9*R0qxP;L_nz>zZ=zJ3%LaQ*Q(`d6!8* zpcIl%HHksm&kWPW!F|l>hHFccIzWqarzQX;dH|>x@_sQvnJx}M3-ygbPut{R{?K+v zn;fRg-t#nz+SzS#fM`e*6_i0SR;;^C4svDGF^lFv#3!t22PBi-5Yc6Qv^LSJ&gu3l zspRK2NYn*6BsN5JSwvzo>Zs3|Vr3psg45p&iMvP}nWpP_aD0*E*Z?6w=c_Jr6Cuip3^5glD@+dtuQr@?ZX+-yph%tRi%n=-Gy6}j?Pubs^ z_LqzA&mCt<<*5_#0kFWe;h5J1m`(py;!GysB2zJ)fc%EFM!;^X#=T8IyND)rWO9!< zTQ`24ao=h#R!qQbtmBGnC7pmwB4Vv6e)oZ&_V#<7c(*cEdJ^AkKA4oMsaro*tDdiI z@@d03ENo8W-lac)c}K8Ly0HtbU}+|jWx?9`W@|_|8_4HrxkgFr2d4 zfB~NI(^|uX4=w8dPwImoQiYK0b*SsM-pszu?CFNRp6*s)h8W?x?OgIkP9e)JqrafM z-8g!c7D#f-I~pb2<8%c|FZn(8hmc`mXTNT!htb}2u|Jh+&Ey-vq1X@;n-)_ J#2S|8e*ld~OV9uS literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/user_initsh.c.sisc b/lab/Untitled Project.si4project/cache/parse/user_initsh.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..74f0f8d7d94223e06c0ac4f49222de096c6e73b0 GIT binary patch literal 2892 zcmeH}yK7WY5XMhp9_uw~G?DlSxP^_CD_B?rNo^q;jfmK|CedAt8(H$OOr^090%}AI zWHqGFPC*c>6#fBeVr3B!GzdZ(+4B1R?!B`)cO%BeMjV)(bLPx^^EhX2l52Br(7Bf5 zV%O|kZ{XbO+vbQrO2SK@Ry)uweR#PWxx@XZf29N5{ULF;3VI}-7wZ`~Jp(<6gznXX zwWn`Tx%c9pCg*a}z1#aRlUPI|OlbLLH6s(p*3Q9%?Co%l&i3Z(`(W?Wur^o4_@=0H zQ^(n!)L}Z0Fzl+I61%HZ9vYn(9?AA;abmP|t+{ySy!7N|IUm*%^@>sZ6WG`;;FBED_rn&pIpt$%vAlk;4YCs08k#tqV zn(C^y5$&{vByoreZP(R{vU!D_cz{5nAChMka8YtVdyCH*c^KLHlyf|uI{7ykhV?fT z<*T(iXfEFq@h5*GG?n&ekNdrZf^*~oXZx1?o zPEN#X^_VLF)YGMgfHR{o+}x2^Qwc=##EmtVXNZX|g=meInJ%;eu>vAFfwU`;9g>Ea z=u(K}VzdSE4y|k#gUG!g_lpfN(WMZvG1_wJQ-$*Qpic4FCkBXFqA-d#-BIs;a_iL~ z4N6Kek$(GBu{1i8JqeaSRZbI>Prg;ez>7-UBnOZwlfAzs;t)SrdH*4j= zSbuExkPz`%|Gw6SfgUOrDviaisaW?c{#;%XAjRfY?8@9`u@uQH{LNx72%p@##XJxz zm=a8vddT0aLHc6JFeaMQR=S?8^yN_a@3^1Rp2X#HM!6emLI3PR1~=w|G$17J*xqHN z^nT3FRQN+?@23}^#J|TRC#+_-nppP}jVLRl literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/user_ls.c.sisc b/lab/Untitled Project.si4project/cache/parse/user_ls.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..6b8a8ff225156e0faf0e729009c2f2e8ea9b23fa GIT binary patch literal 10217 zcmeI2OKe(Ug82yk1{SV3w#h%O3L;6#ALL)0bdBLOv@ddBgHsWb98 z<+aHM%46e21%-Ao2nC6#s-~5wKy18V!P1)|7DyOSp}f5d5)#Azcklh*Ilg0$J(lbR z;**ZQbH8)X|D5l6&%NXF4N-J9ipEZ=MWa!4?>$lU`cFoa_A7DP)!)26f$Zupeta|h zQ1pNLU$Fqbf4kaIDfFD$i)u&IN@`d(@24elnI z?8z9rWz*p1J$Add=cDZF_WI&n<8rkYKcvq6jrvog3m<+&a&)0#ANb8`U|V)r{q3mR zwN+Ey$L1TAi=WlqEa)NlaWz2c1IQvQ0ImG3Z968{-EMD5a1J+G)%wzmdY;W~+;hJg zsPv1d}Wti9{Yn4~nxY<|W-9nY+nqCQ=zFVe%zUcd9T>!tGZX%3T=wD_CXODkV}rNn9*e{GkN z+3K?!av1qm`DjcHCt=GxXr~;0RQFs)+d)cx}m^Sneer zi!tvY6VJuYT+1hw9lqzp1MJoeh}6Y{mc>Ehb>7%Tju4Aj1%Q(ozfatt$l@UJHvYH^ zP$q}&xuRH{%+5BB#YrV&{A3!7;X{$l>~}2MTIO0Zx8TsRSX6dRaTgV;Oh*Qo$*K&> zq9pSUN?Cgr4%yp7E6c>tv#}J5UPu$~N7Cras*5X<-TCs*^Cup2D3?dn@GMG)UnGqypG37DWtD=_#97UW*=-vUg<)!XcEUKeV!hT39E_D4U%|{v}ILCsw6w zyVI)^%%QnXsJmsIaQ-sR{TK<_sZLOzs1aw?h^}kNtX{3SBfB=|()~Tx3QopvQG@%G zY*`%S--cdebW2WsNAIv!0B~Fl{$4dHl=P9s0qEp<5fpo+gw?WIL1vSJcd8L-aEuJB zWyQ>9%+#0J^Hs`^q3|a#=x0b|MM#Nq>MK8sAhLVj*eE~nThu_btcbXIlfA1Xt>(FA zPp&>QipSZ)gL_(WJNsywkbWmlET?(%n)@Q_6W&o@b@mhLnBt-#^SxDa=9HovIHd(Zn2# z1npFPI0C(-`yQ7ks6H==kKz@PPb(+V%lvx^mzE7(fjC(3#GO*(6AK*cvZiHmSSv0JhTyOI=6_oWpfKqhSH84=NQ6exI6Ak;MV(~$3S)!X2P1Heywom z*id$CoXrj$`a;Lbps@OWr#-H5aKa(WhEDsUveQ!bO7>NNl&h+(^LBQjr!0yx@1T@* z%D^F%r9YIiPhGmyC@OnJicMxGEaC}eo06?%PcOc`63!&Vekx0SU~eeqOol_24OX^L zA1=+$U+8;Nh~(P%#lqJup4Ff4xfUE}(LuzqOAH)BTl#~wEtD8O2E38vO;oJA@v`%H96qdCx4osA5fBc zRu;pC3+XbUy`CQ^V2{YM*Ti`@$4k7?Kt4a5N-y(YIk>cJXd?hh`kYq77;qoBEsKMP z(#%d@1}jS!=K#er0K6^Z?+`~3%i;iZ@-J=H&Z*B`0)2*81JdZDY9u|JM>L?8Ngi50 z8Pjk=eJ>kzpBz4>@!Qnkyb6M7SrKtmW2UXP*}{Wt>l13+Y+Dd9mW5CGj&x^1Q@7jG z02_|CzF1$LTZoh05_&AageTNk0Gn7A0x%ao=YYnlY8#TZ z&!iQXU(9R*7aQgb7O<@x%RMI6v8lP&cHR5 zuc3Be?KT#U>)xYT^Bm@b=k_`EY5BhO&ojR~`a-WhYHSE$74LOk2sj91&{&8O z_6N-wGzLaEzFmLEweSbNg6uPDKrDYOJoyTtmH3P?F2Z}tdO2yIOYb3;AY;)#!5`5F zQkMMX1sQrEWs#n0`6t?YG8ybt);}M}NPUQef|$!=7viM_LPoYiBp0OQ%KN?#nNOP2 H>YM%xxoxts literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/user_lsfd.c.sisc b/lab/Untitled Project.si4project/cache/parse/user_lsfd.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..bb7d6ccf3340561266d9eef92d08861c17f1c908 GIT binary patch literal 3032 zcmeHIzfV*_5MGZT!UgmM6n`b2XpAHzUSVOOgug%!1sf9Olu(l0Thn8owm5aHV0=;t82__AI>GdGkH`l4_Un)r-DZRFveb9D(+R8U` z!5lUGdZke>v*PMCjy>k=1?sgvz8cnL>02c!Y>bBW!cbQ)u1Si7bDl$eQZw}$g&u9> zLnG}qKWz+KFDAeK)~Z|FxvdMgf;=Pj!Dbc#?6Cv;23~)FtB`#jdK;#WU>UT6Cs?}m z57Ox>3)eiSS+GpQVt9`AC=UfG5%RB*dz$}sBIuM^WHQ9;dY-9u+Tnl% zNvT#Sj_J4T=H_Rn=#;3b*&mIEFv=-qY0qi438xF^VZ@Yofq5%9@*dHtWRTarCEOEP zTU&*t3@&3!o@hodd%^NZS))hhN@T6l?%;Noi-qai^TAx{0#q1Vx5v9Nr)S9;J*!Qi zg0`xiLwTZDVov#dusD07QNc>KwabQUfI=0o!VyvK2lK?EU=>cXBVJCc-y2_&9#}Y{ zT~9Ebo-UShrIW$XiDGGR_*{mN*#|m3g3LYIJqB*0@cFp%#;W+pVn?jI$P$UH*i11h`D}%Zr~-;IDdEX-mA@iIu&h*mNH` zl8BY_t+5J`Yme5c+1$L0wY3CbBheGeJr>p=0h9P&sIUY{eSy{cPgS27tWQd{^!-Bk zddIQoi&!??r$6yA%*l#7i+|d3VTB?2q-|fO`Br<<`P106E#oB?k}&bL%HqE~d*x-= itI{D>UuOiE&P+HRy-~z0;@u_B!eVQLAMLU2<;v&n{F?X);*kd3vZYnTL$tp6DY05BrZAvcmd;y(t%~Dz7K6UkO-k@y9r@G!YHu z1)^T1Qjp$=bu60g%Ii}t^sMIpC4Nfd&%Bcx8na!*VVO0_6dOO0CK^>j+1OgG+;&}9 zh{{iE8fgOvK_hpIS;%x@`brw-itBOitT8hsK<=8uBO|Qu^3saHbYaG0AL+EV!7!Z;=wz^D|nID^HDyuA;pAFCE zAPF=Z)2h~A_ggR|?7QV?gC6tHr2=cvW4Mq=1(KLptCxSa$cS}rHYV!)3o+kBSG4FU z56)`Px~xe}Yj@sT?k_lHk7?5+0=ZYrnx+dgw^;E;%(OObYFaZ(ug>BWv^e0DAYpTg zF3dQs|GvG`3)W@smoceFl2)9WPI|k6q)p!?1O063GD#;iPnhAwdMjged5_r(bCbvD z6ny%~Q{E`0<+NYT*VYhE?VJVDG96c5tC$Gn%u`%FgEB2zQbHjgh zTQ`{04cT}uy)^jNvY-iVr@Mg_jY+`Rc~ntP9nIhzLAjWw#Lf+krMIt>;`LW?4@q7v2=Cc`q)@N;^5x^`-orbQ3CdCx@=8P z{*>$&C?`&*bFhK*uYxx5F$~?A3a4U8J|lP>$>^+~J??dgLw-E&CAJhD#N`U1`x{qo B5>@~J literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/user_pingpong.c.sisc b/lab/Untitled Project.si4project/cache/parse/user_pingpong.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..e9cdd976bfba7db4e39c4939845eb57ca3e09a15 GIT binary patch literal 2739 zcmeH{yH8X>6vjs$vM#7RgNkNXG!ZJ-#KadEN-BejwX7_-8xaT*C~Pb&EH$w)F|nf1 zibe}9B+-J>1`1j3+tw%>CxfdC%l_IydZGU9Z^HICp!O zb1TnlJg-W^3m;aRz!u&<-Hohu|LI?;0KMNYZdXDN#gD}r1D6)piJ|7Nne@HBjuh*c z;?5n;<-TOn#Rn}O1BaqAy*u_jEfxRoH}t_KWV6FQnEl&XBzjv>LEwm(vv$tQ<_gB% z9&t#a%_wS1wm92XnjD>&EsSORv^YLdx>i#>e@Qs8)t5E9B(d8m)^$n9a#~yMZcIQe zqNrYHTRnu2`q`WL(j+Its^(PHwKH*5_sCR-R7X_R<-08@ybZ2*H{yXclB&{?FdO}P zYOsYQetcCV(KQNGlI0bxo{2BxMD#+E@?R7KSp`fAO0bj8F*FI`$9|&7W+#rNZf>en zz$l4WA&|5RM}}pcOGYa7sk*FHM)Nb*M=?sa7_k0WzYGhFu6_Qq(YYZR!xy3GJ@m3k zl1L3xNs>qf`#mHSMb>~gxZ3&R)K%e>krBWSnNy7r%LF!4@4Fi-RTTA2F z9@*_5pPISR)7yKvKR2u`a@KY5E_AQG3tSo&x>)`gPnfnnMNwsraNRIpEKQ7MPY`Z6 zxr^(W^x)Zea`9OZ4``aFUv>G3u^H&hfI$(ek^61+O5u@3(+Rd-~$IH zwM^EU(u4dPh4wbJsWf@3I@cxTy6;q+E4PJQr-hBYuH;J07RPqwYB!P`ZO)O9VZYC{ z>hg>h^D`U{8+%8IrOw64vPZJbdXkpjRFY+0?G}@)H46QZC`d?u+t}&`41Cj*csh=W zhnbj$gbf8TQ2^3IZdU^?$TqRHhabbFbtI{Nh%(S;9{ zne3oNbt9FJuTzX{`kHFEu@%Ptuki5fhBYw}Gi0$d5l+|t$CLPJH63yab+XdA|0ve+ ZXS5&QP5(v++bf3jRQYF%^#ML2u%FT26+!?2 literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/user_pingpongs.c.sisc b/lab/Untitled Project.si4project/cache/parse/user_pingpongs.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..607c83a082e7a51fc68f5e0957f1b8be011f6fc1 GIT binary patch literal 2844 zcmeH}ziU%b6vtm{YultPk+z6d%xiE+CL;)TXvNV>v_|j*Oe1{ zou2oy&-1n(c82^)5?+6^)sJrd#k~RK9`8T>D;1#k2gJilXia=aOn(#NE;01%V>)qh zVx*V%!4A(G7H@n?C+chaLLGW2h$)-m{ zwA_(`z%q;TTrO0mWQn#XKH*D(cTnsW(rT4`pGmTB6a?M!JrXX#>0Y{8C@+BKcFX^q zPV|mP-6{xb08{BUr}{#)o9{A7R3Ibi78$t}(lR7BD*Rv%VQUm=wm&aud0%{9PS)cT z`VC_3K(-F*9V&}9Y-Uqs1ZA#Jcsr*`18K{zyO8?2R5^^7)Y zAt`}@ggIxrR!nQ9Ow`V%2lO4~89nvO(5N97hWfg?v=e3ThfI=vqxLH{?`IY1g~ve8bjo3Wd98eUmuzHSJm@)hmb!2WKa~M literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/user_primes.c.sisc b/lab/Untitled Project.si4project/cache/parse/user_primes.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..984f42606b75fb52124f109ecec095097855100c GIT binary patch literal 3355 zcmeH}%WG6g6vnSfIwsvZMv`F^AKkPMbTt`Ne2j>=a^a`$jYZ)+?*R&R}s4)50t%^JUXgCxj{#B03{ zVG%q1xLRV}C`k%B?=AzUFn(+(ZqC;z%-Q6Na`D_2m$UtXdMln%&YoW@_JDTzX|==+ zj6or1dJ1ObOw*LYBy$h@p}BIlSKxnW-&OHP@g?uZ2g%_X^tTYwIQNwkBB{v zK(qWM&qT&t|ESEvgE4)do?om-GPpOqWN@%mR_qjzBEbn-g(u zuSNvV`o$!uHWqrDV1ng{QRnf|)&WVXXr&mOsu)YS-*n{wv+<-_vR6Y}WGSZ|fjR#~ zBOa+&enAskuSmX70Bi-#g%hJlHV?n|{BpqNCt?3NPqV3e?mF*8JGdze- zp-qvx^5kY`(*=RP7xzgw)m@tIO0bCs5}S~-;bXTE_k5{MblyK=p4olgv3(jdTqA}| zhU50#m}Lk%x+X^B8lX6`R!k6(R+6Tx1c|=)EdPY&K!?VT4g<;!0Q}_TGD)mAT_pg0 z{%CH{3Em9uS|=uy$Zj#9rjvd~nfu6T2kFUX80X#$L*f`H#J~{Iie*Ct((5S_1!QKOre$}X00XL$2#|LB{Wxkvxhf=GnP`5tl3z# zvz)n6SkFmfx4C;eA$6~)+hL7)rW*k*WTA$ zNe?%M##Za_fafd}E~o?o-sIViR}_%lE6Qm?we+=QFkgEvzrP($yR|&dXLEceCXmI3 u#P-SWC0AWb+a6*T?rG_fKXcygvA-3o0rJF023qArq>s(?gSXM^5T5{6|263V literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/user_primespipe.c.sisc b/lab/Untitled Project.si4project/cache/parse/user_primespipe.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..bdffcd6ed283c3ee610e566500b32e34cf6b659a GIT binary patch literal 4635 zcmeH}O=w(I6vuDA>SSy+v=Q;6IMgoc#*E^wR*P<=m73Zp3L=e}q_nvp}|9sth z?o_uqH{;ysU1B%vTzaE(7rz+xd`S{M_x;7~=+1rn;SS`8`=9_%4ogZ7~j-RLLxGRnB_G4^}H=4=G`9^bj?s3h~+~dDFcSsVH zTgCSV9l|o!`MFg#E9ld7%#FF73_Z@+%E{TJe!XVY(DK_-eLmRJ^7UDhxfjM%vsX9D zm!J9CqfPwUDq{g;yrE`{<2-5V$#TF1JFJJURkNqH=8zVDBKep24;efvBWJ~jHGVII zxS{zI`i_0GWm2lH?!GKURGwmA(=rjx!4sZTwWrbL<%kV6ShQaN_B4asq0o#~2* zIR=#|IGK1S%{h_@4DlKyx*}u_0%UH$JK31l4#EV<_$G}F5nU0HoknSz&lrs~7HVK# zCuZ->L2?lc6I~J0j<`O_%L3+0S$Qmpw`&d9Ttve}SHvVPqrS+ScsVZ4E?q7`G@Z^= zPr+rOOMPCRT5fRQDY1FBM`QAjC#Jh2!fflp_IjC{BL}5qp_0@N9H<`Cgj>2#Oseh{ z15BDt7Xx>GYnAgPlG5A^`fUr#&C34$#EQR`{Ruq^7v9Vsg&FB<;tOgzzkK?gZ!9!K zJ5RVngOLz?{wOeqY#n3lm^;^MFs!FG?6JFSl5aLvwIM?6G zV&xmLo>8n%wewhQy~S$2vpyz#jcJfr%?A5B@~QJquTK@#xT<_wJiFF?bcmOFBRLbCr??)Pdg8trVP~^>;$D3u=AQ?T%_B1QzT}@F z@kga+XwR=nsk*wWKQwj&GM`3IFDErX35xfdgdllrFl4$)beUIwZ?UXPX<7iCZJw9| zl&Arq4>H4{sMv0mVCoRDbP4Ug_jpZ4@nXhyG$3i+4fJZGHEjE`@>@W8<)tRnLnsYbv#_E8R=^vNO#_vkNzK8K5=NP z8!gAs&bS?7(bH!0`o)by?BR%4nfC)9?pbg@84Hs+?W6W literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/user_sendpage.c.sisc b/lab/Untitled Project.si4project/cache/parse/user_sendpage.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..3caaa5b1306dd0a9bf4b35c77b8907f9b86b8901 GIT binary patch literal 2805 zcmeH{%}bO~6vl5lrp}m(_CX)yAW<`m$f89=nv#J*f|<1n)SPUFOk+}OSDT_gpk}bMHC#xzn-UxgqBg zS(&SHZlT_}<;PW_y^zP|UoSThn}5Er0blL@<6r3jcfVD(Q3c(V-IGZYE-6dMz~aZY zWL?juI>tMtk-ZYYl@D#nfjh}CMjQk>G0`n)o|R=ts*!)W&|DJo}iIY%M;Xvc}~U zc`9qv;=F80HllC1j3@NX#ue&~4rz;I7*@8CIoaU9EsK4xZIi8;Irb6=Bn?AG_DJ;fw|LWJIvjbYhUYrgw;n@IEi>bw-niUE`&JYCF{OB60ujQwPmE>Ba(U51G zJXcAH7Hji3GjH2dWfrcyMKdE1Zz+tYGve(WpDJF;WV4-}9UQ?|m;2O~e9#%GYe>1A ztXr}C?b;Muqgm50M?+n571d?)$g__f&6MTeK68A~PS)5Zn`e%Vr6!(M2|nMNb`~b5 zSJ%3zmsHmk)rz92^_gP%8|7L#Gwc3lt@d)L%k+o`7W;Xvt3*DQA1$(Y#l`9`B6Bn< zmK?=)DE94Exmb$i(yUm!D1}ylhWPm1i`}I~ynoErzyqJz9*r?8DJ}82{=|w`t@Q7} zDEzsVVt)RQ$DE(KfYnGJn|1!aN6{aM&7sHsoH>c^%l&AM6-o~bymi2z6wsS@KLBpC B0EGYm literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/user_sh.c.sisc b/lab/Untitled Project.si4project/cache/parse/user_sh.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..4dfc58dd3064a95a80de3a49a2043a0402b67134 GIT binary patch literal 19566 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 A4gdfE literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/user_softint.c.sisc b/lab/Untitled Project.si4project/cache/parse/user_softint.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..fbf40ef2023ddc713c7d0c09eb5f8d0bcf389617 GIT binary patch literal 1958 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 literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/user_testbss.c.sisc b/lab/Untitled Project.si4project/cache/parse/user_testbss.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..cacc47a532c721bbc22709156aa89deccde16ba0 GIT binary patch literal 2299 zcmeH{ziU%b6vuDV#O8-T3RQ|fAR)RqnZZd!?BL)cZLESK+N6=@K^rC5f}4xt=-?ta zbSbEdU0j{~16(R91)Wt;aEUJ0@8`aEl7~ezxk$foa_&99&$;KNw!^tu=dwpdF5}$y zG3Pd3WCFbrht@VXb|PDQ^>i0})NSK`nE-FUU$j>ZJrq3_Wktn=i@BSh%EjK5eR{r5U@iT=Oazm1p3|8a z7B}$mfehVlQ5xyk-cR&Z)G!fs<`eBhMm(N_#4GG@Zzz>P2+GI8jC<8@$iCoZAzw1kNolHKGm?(+g44e zY7vye865+FvsENAS!EF4wck}sQuVPVXrsF@Pf#)tU^3wc#VshZN-Ajn{qUeG=j22K zq-UgXHi@7nliVgDX{-we{dkXM42m0xxTha|U60;Q{sm^GYl&)l^xoaE5;J0z;DAba zbk6A^a|dR}nLK0!!yX-*X%Rj)f8*%vtcT`v>LXo)_m(ZrI~sLv{od(q{kw literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/user_testfdsharing.c.sisc b/lab/Untitled Project.si4project/cache/parse/user_testfdsharing.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..a95f96c8d38f61f748f18f203004bfb1abc7eb78 GIT binary patch literal 2957 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 bhY@&#?12k=Ddy2_;zxuIY(iVSNOeB|*ZW-f literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/user_testpipe.c.sisc b/lab/Untitled Project.si4project/cache/parse/user_testpipe.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..6a0d8c8858c4015de143ad77fc923ebac6c1e99e GIT binary patch literal 3651 zcmeH|&udgy6vuDUiP2{a@dwn>f^Q*;t4>9FbtQ?Jn0XlEppD&*o5qw1 z0bRK0B1K197ZRnRU1rfm7qbvVap59=g1exb=lAp8JMZ0@!~{h*;(;^g&bjA)&(C*n zd4qF9&Xx9wU8i#=dYpT-(3$XKNx1R!Q4hMte}8R3e&jyT`%(dV|A}~q61pz_T}*!i zaY+n4yRsb2|9Kyk>+NuEhj@5;IhgIewh^6CoYCUhxs4hn$6wpyKV+DKNc`9=*;)Tg za=`nkX#KBvSj_nr>ML~Y^|oxb#uCTd^IiOJk0wVarYd7$zZRcQM5jBeUmug6m|=Y) ziTq9yY}0jV{VIxM%PhYBhJc8Tfg|ahL0H`(>TtbWNQb zi6&`_->qSFtKLYvH6(X6@dN3qH~&b`hU?9MDDZ-$TV%Le>H3-NQU8(CUbQLBha9m}h9Km*5rBR|eKE=~|z>C*YA0w~E*Qi4V@4)`=( z=v+R!;Y<^=oK}F2To@k(6b}G=oXJlm4HRAIf!43A4|<6qBY|!)EkIhNrjx@wQf(&= zkdsLngr{P}8+zQZ1u6#xf-m?udvI1Wp?>7>1akB66}pL9rsrT2vuQ zGUU*fOm3AlOmyv07Oe)eEy~)D8OpW{WtSv*QBO}-MEOfIXhqy4%an+IQ*~<**n~U$@J3Gd=~pY0gyQ&B z;erN=IjwVh+kGH?MLaLvjk^y6JaWq*Ae~<)H6odiQY$k?W#z{r{gLS7Nqv?$P*W?xi&@jaEl4aM*8bO;2$7R+=n(BwM4g3q`VY(h5zo)+p?KB3PeZr?GxaeQH3M z4I6mGR9Bqe{9VMv;DT?%_O@fP=2{6u#WZ(2t<%XYCZ{@md9R3xSh(XXCN1Ck2QVZ| zV&ehlLpms?4)n)#{yj4ITQg|=0Jt$z;#~L7)o5ZY`~r>NgIU#ksjUaI%6I4ehsndw zRbu@{zKgloEnHr0*k(z~B!7IugBe?&<`uX5^&Y9LMrO9!-deghIrk=K+G8*blkNL! z{--|F4zfBjCxhzalcBUmW`o|hS&~ilRBB_+2W4Z#n+5GnMe>I6LPBBko4#v2P0&}V NNbHzX=uj#W-AhXDg^>UN literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/user_testpiperace.c.sisc b/lab/Untitled Project.si4project/cache/parse/user_testpiperace.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..9c8b126a0e0d0d54793c1f97bc2085f4c29570b8 GIT binary patch literal 3682 zcmeH}&udjz5XX-%NfT2o3C3z^vA3XL4eDFC5RypLm77*eTuG%b@8&g^#N_d!!JQ(7 zR@?|`i(uh_h_>CRAXFD63zseeVpm<{Kd8GbuiwwTckZu9o{MHv9GExf%$fO~nK|do zebo<~n{clCOR=jscV&xnubxyQ{#z2h_s^>>=y)Brl&tCASyipAf&IXf}=_B7rPiz+RQH{YJ z7hAjNgsVvG2KXt`^McVL7U7RjpD%uN_tJUzttzIJc}yyDx4< z)$@LM(N6^IjHIggzO6!Ar8i<9i?UNyPs{dq@oR0cs*Qe;<8ko`%{jWe(w!3jN&uo$ zVvC1)qGp(m55;LlI)3u;hM{F2$Jo6%ANYU*M9|a`$q}-V={)DstJc0=E_VsE*808< zD9-SXM1Cr1py<3j=(WzEi(ko!y>wD3Z`K&loGy)2>SzrKg&~$P5!j|Ci01iWGUfmc zG0_ze^F?2S*g7e1_4EjpDuO;JHpE0%KqMBUFwAC*x|)Gcl)YlGcs@w3vSB8=budeL z2SkZENFOIsZ74-dbOpp>-lZtd)h>Q5e@=t!i56+6V><0uz|2rMooom6mBkv6TuIJG5c6nomv+5)X;paV;~`L7^@9Y-jwn&tf^rzcfOqK_|?_^fxB_8v`KPp zD%ZogT-gi1jm*_rE_+!cLqeuoKUX`w*uJ|yU2Bz-y{vE1c#`a-fJxS=06U*%2TPJb zZDg`%g->j|#k7WfVv^)~nl68lS9IZu2TQAq3BSR{e9H^Qsw2Uu8pKF2JY3Gat<0B` z%p3B!Ek22EQ*As3A&8c9a zK0CiKdQP8>Z7N!WsJ9Ux7U)1M93QOR$#^)YR literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/user_testpiperace2.c.sisc b/lab/Untitled Project.si4project/cache/parse/user_testpiperace2.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..2567df43c73afbdb0b1312846fa1557a3d79a5fc GIT binary patch literal 3434 zcmeH}yK7WI6voFqd|Y1U4tW3sFdtR!6&1fQiv zG(=P^R8+(&g=Gps6bp;|2`QA6*Y9`lJ@-ylF6xpSXhH^ux}5}x?_X$888_fJ+Lo85oUF!8HezCIh&9wk*hC9^^Cq$)iy{vg2H$epQxC>SHD zD&GBUG>u7@HY0rC6`HTACuH+f{9R7Q#oy%UzW9)s)*Zz;Qq0hBO|oX=Jd zB679Z5YaUvTI;m*bBy5;X_ur-Y>YtxkukbP#JMr%Gdwl*SGy&s61*vuTP1-s-R~ju zkQp_f3#-Q^X@(^W9*)<{)n&~o-<}HcgG1sZlMt9o!u~?NR4Vpq%(3hggV!ZyUGZf) z`O0voM;me1%Q7MMtru=Bto4N#dIyIu^i_A%P8LsfY%3K>-p+q)uBY|+MDj3@Tvgny z$KvtRkMV=Rb7Pfd9}ffj{0qk%GCRijArNT3hXEU!#U8thCRwwwEUkjQeT@T2^ycK^G|kVWGa~3SngIr>|4`6 zTrY&B;@+@pcTwM+J6ZFO^o&~CogQh{$o!Ucoi9EHAaEy%2tv|kJEF1D`mINp76nx?G()@#<#2I{_~Ov zWG2aM{_n5sf2ErrY2hsXIv#39Jt3Zvpci%{<7vJx(Pw1MQ zD{pY_p7%X0B8aR4Ve4aNyJgvOJ z8o$&^KZPVQ$>4L-*<+`4ndiW^3f(1&xyEbOI)>QIB;i&7uV-lNa<8_e4MZn&uMj!o z{aPot0-!S`od?fpfspwJ-6}*WYtA+b4SH^s(=~62HKqjcj`a@|2Mbp(jg92551$qv zB~};~fgR$l4>JC13VWu?z7XvwNt$KAX1_&w^Y~D{IE=}Z*B;MzPUEd=F7XIZi)LxM zoUVCpCI`+klM##iBYSfx?JE6oMrQ@#qp zWW-z4q`*gf_0iXQHGQ>aiA#{O1B~};UmHrWe;_}KaGcopniQEQVN!5LVrRs=|Gefb zPU5&ZYhzBVIv|iS5G26v$B76h;oF#ilHPBB6l}5tjEHymRc%yLw#eD^Ler1*TTyb( z{gv9peM`U|HUgvZS_$a%hm}uk!w*L_N{|4}7-TWdaKF}IN(kgg$l`nQwh}P0mE4W* z{8c%8vB;Re6wqBwjn93ryf1c#IK+3d>b8ON;STWvh=+j<$lb;eW!eGT196&q?mJkR BWY7Qr literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/user_testpteshare.c.sisc b/lab/Untitled Project.si4project/cache/parse/user_testpteshare.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..3033f9f95e3892dfb06340de9194ed03dd227dd6 GIT binary patch literal 3500 zcmeHIO-qzf6uwTH_M#yueOWX`WkHdIgo}*&1Epa>n;3J_nbJ`-wOtZ@*e)VkwGc{3 zS0zQZ2^TI}%tA0*weTO*PFlS^&%N(6b7!2?0yoitGv~g~z4v_IGfi8K=`g1J7}&&& zX|6VA>3z)dS4i^Yx20-glk-zGlv~Vy`d2c*+V2L}BcNyC7vL&z04@iUemq(U;;&~2 znJ?&(88pB$u!ZlREJmCZMl^S8qN*(Vwj21tHA~wf$$i>UFX=92bfiGc9YV#QPwij$Ve+7kMotD<8x^$+icQ|ZCjjrcNKjXO0SW(y}9JFNe-kSFvDhl@7OZC)QL- zjEZZ(qPhFoAnzI-r7MnzS9hh-y~+OWp@GiP%q0L+q6U<=`+)gfEH4uevOWyu6>wk& zPP;5r4EJ@WGjy3HX(S9f4yL;d<0#k>5l74SvH`;oIhS27R=Lb;^g*d=db|>}Mep!3 z@Fcixd?jd^T@0*=huJ{AL8tf*A?&-P^hse7<6Y%(y?4m-EI#k}bs|m@)@%$%N{;+@ z9fpd?*)1RGPbZlbKiCBfm?y8?(3yg@pWp#tZ*G3b1xsTLSiv$V-w-}6DJlG*os9;| zBu|6eVOvv4!K;rXaV*zce;hoO(s?F8%xT3e>pSk^1Y*qC)8ghV%4p|cPZyOkQYzpx zqHF+5DY3Yxbnfo@N=Gi>5^d?xQ!>3&Dhw&MeFw-A_e5cs|DtncgB|!~QS{RHV9i|6 zim?5j#tC$}-@Rd|o^#<=rn}>Vt*uS8!;qDkIsS`Hx`v|7BzOX^XV=F?tB(&}dg;$* zy&jHZ`KH=ZlJt!R+UpSa>o@hPah%TFmOjNghFH(Nbg^nu7{og6#cHz;^_v;19t-1A z3sRDVtsSc(iY7%@s&i16wKayo2BKiO$HK-jDqE)Wg=LT|u7cH=15`ly=5+8zCq;1q z7U0uDQ2`RbX5ZyUHQxyDX?oG3Uub@l)RbKF{6>A^c@?0MA0SD8jRMr$&FIJXq2#DO zgoC_6mNUFd=fo$lCaXvZj`QB<1#F2n<8&i$Qx@Asb9 zeN69F&J8$M+AMaR&bf`wUHGok^Usp-^e-3Ip_~5k%~UZ_h$=nXG9=B z{%C8oc?eXpV119PjkVjwmIXDF%*-E~EnAk*M^U$1=N_i%E$beCb+FL{6~tYrMbC>t zC6c?vfjSajsuS&~C3l@4mf8wJw&E)9UMx?>759Sr$bMD2TTY)ZGqzv0GTWj<#pyFw zaePBrpP0)WXt|1G%sz2;j?Jad+K>1%6HTCO1xFDX2*mi(kR z3+PwzC*mihpVpX*7$6qN`*;`#)G7^vH9X#9EjFFcJpTbP5U0gy=JhBK!=5ah*dC z0Z9~@gY(FBVuM6igiJvw@ANA`Zrh_NSa)@p>LuSmnyv`RRHGZ z%)|8>2_gw#QZz_AwM|#V%==zQP}Ap}@G+g5MBXVjGtm_x^R5>mw-HUs2B^DZd9S2F zqANmD6Gm;GkJjtl0hXCfYJ<)nC$Mju)VZ`H{H^xX>>s? zjn!+f4XD9obDJ3R?iUjyfK8_mP;Z`Q-kdGtj!_h)h6B2$QLnUi?(BV8ZHjWMm}R+C z!Nmd7WpSt8nJuU0QTWUb1a41#v{g|McJ^-HF0o|`#^SY2>eVGN_f>d<;Z#lRq&s)! zyuY=xw>QwMbt6(w*hY94Ik~QKtiTl+E>e7xN=HE!-Fj*XA@h|O+WTUaF#w2J1=L4ze$~? zg4r_Wtlj2P<%ob}$wF=8vx&%#qn)*BN`*CXB5%`zY&vl&wFz5rZ?$Z)!m<$d%ch0+ zNyy9Nck!fj)fazAo`l4R@kllR#j=>s>7EXW{HJl+r!`Lslh@B5k`yOog|aJrCXZu2 zO{YTH79i$^3^ID3E?a4f9vav{OXU7 zX!CVWy0zb@c_pX#d!>A}on{v;zS6#2UpHya#+cKrhrE$Hm}3scM`%I5PyBiOZ+D7@ z*ib)yg??5Vb0zUs63fS&oIsWvPOM2?!F?}%>$fs_p^t^LW9F5c;a9>K=0N@aH~jE8 Xg?0qtPih{*&;vnu-LAMj5KF{gQfWov literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/user_writemotd.c.sisc b/lab/Untitled Project.si4project/cache/parse/user_writemotd.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..96f3ea75ba911b3aa48430a77b38b991bb362177 GIT binary patch literal 2797 zcmeH}zfV*_5XYC}P@|RbgjIHj!{3{jU?)OXgDxrtc$5K557f7>GWaZvw z@O9|}Cihv|+v42%+-9)R@t_@>NtnpW_+qmU1>F z-3=RiU8&79k1*`1?-IMGQXQR`E|zkqH90X+8OfB-UX~qh#`&n`;2x10Urp=#EAy*S zZLlF>*rxjRMRWYyrf(K1RW(+ss&0NW$Ul#(+9kIsX--uwFFgy0wtjatfB|zxs!F-H zs*oR^IL30js$P}vYv~IG`6<1iKz3zUw0^4fCG8srP3u|v^OMf;fa>CN3`2WIF|X{* zWTglwNkJ6yj9eRm%$9Sm{=DwYHJ7*vv{1V-3Mhxs-ef$W(Lk}~JW#i=J?PA!4iT%( zQ)mI|+3HMXj`kRlFoaGl5xLq}5llNv_RKq_hMCw>m{iN;H_X`>Q{Qsut5wu&ij%@@ z)Nl))BhzCSg||CVI5Gzdp3IXRQkZF;c*a8REmaV4=d_JHSVP3t%(78GST-Tn#&rS& zyXZrj!vSudtNPY+Sa*%6Ywta6Jxq`yEoy^s~NW`)}XGF~Q=Unaf zV*l)DxlrS~QjVW{+eSmF)SCjburZ+q7iuqGU=51@Xm7ZT|j6_hHEdmp`D^PxF>pJDlw Vug5;tIMl&}-bZrLU+4HP`~rAj5(5AL literal 0 HcmV?d00001 diff --git a/lab/Untitled Project.si4project/cache/parse/user_yield.c.sisc b/lab/Untitled Project.si4project/cache/parse/user_yield.c.sisc new file mode 100644 index 0000000000000000000000000000000000000000..38c40dcfaabf1a5a2742dcd7a124b350f0952474 GIT binary patch literal 2340 zcmeH|y-$=u5XP6|5ORn>(16k8F2q7Z;T0MS(3;AK!OD+-cj~HScqA@)#Gugon}ZRY-0A>I}CV5iVSw3F+jy+mM*q^rod8f^pV z5obi4y>|7AY+s3|6vWy-r9CmNdXs`O?2K~^Oh$1|-nUMWM}BcWsp6F6tqDl3i9m*x zoXf^(a=X2yZBAz!cPcm~0uF|o@|dJK1uI2Pw?6;f>EcBlB38E;$4J_XQ^SO3nFtJDjsd>g~H;K;H8l>aw zjp7`g!MiB`a_UBref|STN zU#ZPD*v1#@^qV`LUB{eQSe-@}jzZl}zwP4PQC#34Rpxlngmy?F98edFYUj$XtzZ)7w1I<>I? O$@.asm + +# How to build the file system image +$(OBJDIR)/fs/fsformat: fs/fsformat.c + @echo + mk $(OBJDIR)/fs/fsformat + $(V)mkdir -p $(@D) + $(V)$(NCC) $(NATIVE_CFLAGS) -o $(OBJDIR)/fs/fsformat fs/fsformat.c + +$(OBJDIR)/fs/clean-fs.img: $(OBJDIR)/fs/fsformat $(FSIMGFILES) + @echo + mk $(OBJDIR)/fs/clean-fs.img + $(V)mkdir -p $(@D) + $(V)$(OBJDIR)/fs/fsformat $(OBJDIR)/fs/clean-fs.img 1024 $(FSIMGFILES) + +$(OBJDIR)/fs/fs.img: $(OBJDIR)/fs/clean-fs.img + @echo + cp $(OBJDIR)/fs/clean-fs.img $@ + $(V)cp $(OBJDIR)/fs/clean-fs.img $@ + +all: $(OBJDIR)/fs/fs.img + +#all: $(addsuffix .sym, $(USERAPPS)) + +#all: $(addsuffix .asm, $(USERAPPS)) + diff --git a/lab/fs/bc.c b/lab/fs/bc.c new file mode 100644 index 0000000..dd5f20d --- /dev/null +++ b/lab/fs/bc.c @@ -0,0 +1,169 @@ + +#include "fs.h" + +// Return the virtual address of this disk block. +void* +diskaddr(uint32_t blockno) +{ + if (blockno == 0 || (super && blockno >= super->s_nblocks)) + panic("bad block number %08x in diskaddr", blockno); + return (char*) (DISKMAP + blockno * BLKSIZE); +} + +// Is this virtual address mapped? +bool +va_is_mapped(void *va) +{ + return (uvpd[PDX(va)] & PTE_P) && (uvpt[PGNUM(va)] & PTE_P); +} + +// Is this virtual address dirty? +bool +va_is_dirty(void *va) +{ + return (uvpt[PGNUM(va)] & PTE_D) != 0; +} + +// Fault any disk block that is read in to memory by +// loading it from disk. +static void +bc_pgfault(struct UTrapframe *utf) +{ + void *addr = (void *) utf->utf_fault_va; + uint32_t blockno = ((uint32_t)addr - DISKMAP) / BLKSIZE; + int r; + + // Check that the fault was within the block cache region + if (addr < (void*)DISKMAP || addr >= (void*)(DISKMAP + DISKSIZE)) + panic("page fault in FS: eip %08x, va %08x, err %04x", + utf->utf_eip, addr, utf->utf_err); + + // Sanity check the block number. + if (super && blockno >= super->s_nblocks) + panic("reading non-existent block %08x\n", blockno); + + // Allocate a page in the disk map region, read the contents + // of the block from the disk into that page. + // Hint: first round addr to page boundary. fs/ide.c has code to read + // the disk. + // + // LAB 5: you code here: + // envid 传入 0? 在最初的哪个进程下 alloc 一个page ? + addr =(void *) ROUNDDOWN(addr, PGSIZE); + if ( (r = sys_page_alloc(0, addr, PTE_P |PTE_W|PTE_U)) < 0) { + panic("in bc_pgfault, sys_page_alloc: %e", r); + } + // size_t secno = (addr - DISKMAP) / BLKSIZE; + if ( (r = ide_read(blockno*BLKSECTS, addr, BLKSECTS)) < 0) { + panic("in bc_pgfault, ide_read: %e",r); + } + + // Clear the dirty bit for the disk block page since we just read the + // block from disk + // 只是为了修改标志位 + if ((r = sys_page_map(0, addr, 0, addr, uvpt[PGNUM(addr)] & PTE_SYSCALL)) < 0) + panic("in bc_pgfault, sys_page_map: %e", r); + + // Check that the block we read was allocated. (exercise for + // the reader: why do we do this *after* reading the block + // in?) + if (bitmap && block_is_free(blockno)) + panic("reading free block %08x\n", blockno); +} + +// Flush the contents of the block containing VA out to disk if +// necessary, then clear the PTE_D bit using sys_page_map. +// If the block is not in the block cache or is not dirty, does +// nothing. +// Hint: Use va_is_mapped, va_is_dirty, and ide_write. +// Hint: Use the PTE_SYSCALL constant when calling sys_page_map. +// Hint: Don't forget to round addr down. +void +flush_block(void *addr) +{ + uint32_t blockno = ((uint32_t)addr - DISKMAP) / BLKSIZE; + + if (addr < (void*)DISKMAP || addr >= (void*)(DISKMAP + DISKSIZE)) + panic("flush_block of bad va %08x", addr); + int r; + // LAB 5: Your code here. + addr = (void *)ROUNDDOWN(addr, PGSIZE); + if (va_is_mapped(addr) && va_is_dirty(addr)) { + + ide_write(blockno*BLKSECTS, addr , BLKSECTS); + if ((r = sys_page_map(0, addr, 0, addr, uvpt[PGNUM(addr)] & PTE_SYSCALL)) < 0) + panic("in flush_block, sys_page_map: %e", r); + } + + // panic("flush_block not implemented"); +} + +// Test that the block cache works, by smashing the superblock and +// reading it back. +static void +check_bc(void) +{ + struct Super backup; + + // back up super block + memmove(&backup, diskaddr(1), sizeof backup); + + // smash it + strcpy(diskaddr(1), "OOPS!\n"); + flush_block(diskaddr(1)); + assert(va_is_mapped(diskaddr(1))); + assert(!va_is_dirty(diskaddr(1))); + + // clear it out + sys_page_unmap(0, diskaddr(1)); + assert(!va_is_mapped(diskaddr(1))); + + // read it back in + assert(strcmp(diskaddr(1), "OOPS!\n") == 0); + + // fix it + memmove(diskaddr(1), &backup, sizeof backup); + flush_block(diskaddr(1)); + + // Now repeat the same experiment, but pass an unaligned address to + // flush_block. + + // back up super block + memmove(&backup, diskaddr(1), sizeof backup); + + // smash it + strcpy(diskaddr(1), "OOPS!\n"); + + // Pass an unaligned address to flush_block. + flush_block(diskaddr(1) + 20); + assert(va_is_mapped(diskaddr(1))); + + // Skip the !va_is_dirty() check because it makes the bug somewhat + // obscure and hence harder to debug. + //assert(!va_is_dirty(diskaddr(1))); + + // clear it out + sys_page_unmap(0, diskaddr(1)); + assert(!va_is_mapped(diskaddr(1))); + + // read it back in + assert(strcmp(diskaddr(1), "OOPS!\n") == 0); + + // fix it + memmove(diskaddr(1), &backup, sizeof backup); + flush_block(diskaddr(1)); + + cprintf("block cache is good\n"); +} + +void +bc_init(void) +{ + struct Super super; + set_pgfault_handler(bc_pgfault); + check_bc(); + + // cache the super block by reading it once + memmove(&super, diskaddr(1), sizeof super); +} + diff --git a/lab/fs/fs.c b/lab/fs/fs.c new file mode 100644 index 0000000..0b9b76e --- /dev/null +++ b/lab/fs/fs.c @@ -0,0 +1,515 @@ +#include +#include + +#include "fs.h" + +// -------------------------------------------------------------- +// Super block +// -------------------------------------------------------------- + +// Validate the file system super-block. +void +check_super(void) +{ + if (super->s_magic != FS_MAGIC) + panic("bad file system magic number"); + + if (super->s_nblocks > DISKSIZE/BLKSIZE) + panic("file system is too large"); + + cprintf("superblock is good\n"); +} + +// -------------------------------------------------------------- +// Free block bitmap +// -------------------------------------------------------------- + +// Check to see if the block bitmap indicates that block 'blockno' is free. +// Return 1 if the block is free, 0 if not. +bool +block_is_free(uint32_t blockno) +{ + if (super == 0 || blockno >= super->s_nblocks) + return 0; + if (bitmap[blockno / 32] & (1 << (blockno % 32))) + return 1; + return 0; +} + +// Mark a block free in the bitmap +void +free_block(uint32_t blockno) +{ + // Blockno zero is the null pointer of block numbers. + // 0 块启动块 + if (blockno == 0) + panic("attempt to free zero block"); + bitmap[blockno/32] |= 1<<(blockno%32); +} + +// Search the bitmap for a free block and allocate it. When you +// allocate a block, immediately flush the changed bitmap block +// to disk. +// +// Return block number allocated on success, +// -E_NO_DISK if we are out of blocks. +// +// Hint: use free_block as an example for manipulating the bitmap. +int +alloc_block(void) +{ + // The bitmap consists of one or more blocks. A single bitmap block + // contains the in-use bits for BLKBITSIZE blocks. There are + // super->s_nblocks blocks in the disk altogether. + + // LAB 5: Your code here. + size_t i; + for(i=1; i < super->s_nblocks; i++) { + if (block_is_free(i)) { + bitmap[i/32] &= ~(1<<(i%32)); + flush_block(&bitmap[i/32]); + return i; + } + } + // panic("alloc_block not implemented"); + return -E_NO_DISK; +} + +// Validate the file system bitmap. +// +// Check that all reserved blocks -- 0, 1, and the bitmap blocks themselves -- +// are all marked as in-use. +void +check_bitmap(void) +{ + uint32_t i; + + // Make sure all bitmap blocks are marked in-use + for (i = 0; i * BLKBITSIZE < super->s_nblocks; i++) + assert(!block_is_free(2+i)); + + // Make sure the reserved and root blocks are marked in-use. + assert(!block_is_free(0)); + assert(!block_is_free(1)); + + cprintf("bitmap is good\n"); +} + +// -------------------------------------------------------------- +// File system structures +// -------------------------------------------------------------- + + + +// Initialize the file system +void +fs_init(void) +{ + static_assert(sizeof(struct File) == 256); + + // Find a JOS disk. Use the second IDE disk (number 1) if available + if (ide_probe_disk1()) + ide_set_disk(1); + else + ide_set_disk(0); + bc_init(); + + // Set "super" to point to the super block. + super = diskaddr(1); + check_super(); + + // Set "bitmap" to the beginning of the first bitmap block. + bitmap = diskaddr(2); + check_bitmap(); + +} + +// Find the disk block number slot for the 'filebno'th block in file 'f'. +// Set '*ppdiskbno' to point to that slot. +// The slot will be one of the f->f_direct[] entries, +// or an entry in the indirect block. +// When 'alloc' is set, this function will allocate an indirect block +// if necessary. +// +// Returns: +// 0 on success (but note that *ppdiskbno might equal 0). +// -E_NOT_FOUND if the function needed to allocate an indirect block, but +// alloc was 0. +// -E_NO_DISK if there's no space on the disk for an indirect block. +// -E_INVAL if filebno is out of range (it's >= NDIRECT + NINDIRECT). +// +// Analogy: This is like pgdir_walk for files. +// Hint: Don't forget to clear any block you allocate. +static int +file_block_walk(struct File *f, uint32_t filebno, uint32_t **ppdiskbno, bool alloc) +{ + // LAB 5: Your code here. + // ppdiskbno 块指针 + if (filebno < NDIRECT) { + // but note that *ppdiskbno might equal 0 + if(ppdiskbno) + *ppdiskbno = &(f->f_direct[filebno]); + + return 0; + } + + if (filebno >= (NDIRECT + NINDIRECT)) + return -E_INVAL; + + filebno -= NDIRECT; + // indirect 还未分配 + if (!f->f_indirect) { + if (alloc == 0) + return -E_NOT_FOUND; + // 分配一个 indirect block + uint32_t blockno; + if ( (blockno = alloc_block()) < 0) + return blockno; + // f_indirect 直接记录块号,而不是记地址 + // f->f_indirect = (uint32_t)diskaddr(blockno); + f->f_indirect = blockno; + memset(diskaddr(blockno), 0, BLKSIZE); + flush_block(diskaddr(blockno)); + } + if (ppdiskbno) + *ppdiskbno = (uint32_t *)diskaddr(f->f_indirect) + filebno; + return 0; + // panic("file_block_walk not implemented"); +} + +// Set *blk to the address in memory where the filebno'th +// block of file 'f' would be mapped. +// +// Returns 0 on success, < 0 on error. Errors are: +// -E_NO_DISK if a block needed to be allocated but the disk is full. +// -E_INVAL if filebno is out of range. +// +// Hint: Use file_block_walk and alloc_block. +int +file_get_block(struct File *f, uint32_t filebno, char **blk) +{ + // LAB 5: Your code here. + uint32_t *pdiskbno; + int r; + if ( (r = file_block_walk(f, filebno, &pdiskbno, 1))< 0) + return r; + + if(*pdiskbno == 0) { + // 文件块还未分配 + if ( (r = alloc_block()) < 0) + return r; + *pdiskbno = r; + memset(diskaddr(r), 0, BLKSIZE); + flush_block(diskaddr(r)); + } + + // 最终指向块 + *blk = diskaddr(*pdiskbno); + return 0; + //panic("file_get_block not implemented"); +} + +// Try to find a file named "name" in dir. If so, set *file to it. +// +// Returns 0 and sets *file on success, < 0 on error. Errors are: +// -E_NOT_FOUND if the file is not found +static int +dir_lookup(struct File *dir, const char *name, struct File **file) +{ + int r; + uint32_t i, j, nblock; + char *blk; + struct File *f; + + // Search dir for name. + // We maintain the invariant that the size of a directory-file + // is always a multiple of the file system's block size. + // 目录size 必须为 文件系统块size的倍数。 + assert((dir->f_size % BLKSIZE) == 0); + nblock = dir->f_size / BLKSIZE; + for (i = 0; i < nblock; i++) { + if ((r = file_get_block(dir, i, &blk)) < 0) + return r; + f = (struct File*) blk; + for (j = 0; j < BLKFILES; j++) + // 不会出现子目录与文件同名吗? + if (strcmp(f[j].f_name, name) == 0) { + *file = &f[j]; + return 0; + } + } + return -E_NOT_FOUND; +} + +// Set *file to point at a free File structure in dir. The caller is +// responsible for filling in the File fields. +static int +dir_alloc_file(struct File *dir, struct File **file) +{ + int r; + uint32_t nblock, i, j; + char *blk; + struct File *f; + + assert((dir->f_size % BLKSIZE) == 0); + nblock = dir->f_size / BLKSIZE; + for (i = 0; i < nblock; i++) { + if ((r = file_get_block(dir, i, &blk)) < 0) + return r; + f = (struct File*) blk; + for (j = 0; j < BLKFILES; j++) + if (f[j].f_name[0] == '\0') { + *file = &f[j]; + return 0; + } + } + // 目录里没有空项,增添一个块 + dir->f_size += BLKSIZE; + if ((r = file_get_block(dir, i, &blk)) < 0) + return r; + f = (struct File*) blk; + *file = &f[0]; + return 0; +} + +// Skip over slashes. +static const char* +skip_slash(const char *p) +{ + while (*p == '/') + p++; + return p; +} + +// Evaluate a path name, starting at the root. +// On success, set *pf to the file we found +// and set *pdir to the directory the file is in. +// If we cannot find the file but find the directory +// it should be in, set *pdir and copy the final path +// element into lastelem. +static int +walk_path(const char *path, struct File **pdir, struct File **pf, char *lastelem) +{ + const char *p; + char name[MAXNAMELEN]; + struct File *dir, *f; + int r; + + // if (*path != '/') + // return -E_BAD_PATH; + path = skip_slash(path); + f = &super->s_root; + dir = 0; + name[0] = 0; + + if (pdir) + *pdir = 0; + *pf = 0; + while (*path != '\0') { + dir = f; + p = path; + while (*path != '/' && *path != '\0') + path++; + if (path - p >= MAXNAMELEN) + return -E_BAD_PATH; + memmove(name, p, path - p); + name[path - p] = '\0'; + path = skip_slash(path); + + if (dir->f_type != FTYPE_DIR) + return -E_NOT_FOUND; + + if ((r = dir_lookup(dir, name, &f)) < 0) { + if (r == -E_NOT_FOUND && *path == '\0') { + if (pdir) + *pdir = dir; + if (lastelem) + strcpy(lastelem, name); + *pf = 0; + } + return r; + } + } + + if (pdir) + *pdir = dir; + *pf = f; + return 0; +} + +// -------------------------------------------------------------- +// File operations +// -------------------------------------------------------------- + +// Create "path". On success set *pf to point at the file and return 0. +// On error return < 0. +int +file_create(const char *path, struct File **pf) +{ + char name[MAXNAMELEN]; + int r; + struct File *dir, *f; + + if ((r = walk_path(path, &dir, &f, name)) == 0) + return -E_FILE_EXISTS; + if (r != -E_NOT_FOUND || dir == 0) + return r; + if ((r = dir_alloc_file(dir, &f)) < 0) + return r; + + strcpy(f->f_name, name); + *pf = f; + file_flush(dir); + return 0; +} + +// Open "path". On success set *pf to point at the file and return 0. +// On error return < 0. +int +file_open(const char *path, struct File **pf) +{ + return walk_path(path, 0, pf, 0); +} + +// Read count bytes from f into buf, starting from seek position +// offset. This meant to mimic the standard pread function. +// Returns the number of bytes read, < 0 on error. +ssize_t +file_read(struct File *f, void *buf, size_t count, off_t offset) +{ + int r, bn; + off_t pos; + char *blk; + + if (offset >= f->f_size) + return 0; + + count = MIN(count, f->f_size - offset); + + for (pos = offset; pos < offset + count; ) { + if ((r = file_get_block(f, pos / BLKSIZE, &blk)) < 0) + return r; + bn = MIN(BLKSIZE - pos % BLKSIZE, offset + count - pos); + memmove(buf, blk + pos % BLKSIZE, bn); + pos += bn; + buf += bn; + } + + return count; +} + + +// Write count bytes from buf into f, starting at seek position +// offset. This is meant to mimic the standard pwrite function. +// Extends the file if necessary. +// Returns the number of bytes written, < 0 on error. +int +file_write(struct File *f, const void *buf, size_t count, off_t offset) +{ + int r, bn; + off_t pos; + char *blk; + + // Extend file if necessary + if (offset + count > f->f_size) + if ((r = file_set_size(f, offset + count)) < 0) + return r; + + for (pos = offset; pos < offset + count; ) { + if ((r = file_get_block(f, pos / BLKSIZE, &blk)) < 0) + return r; + bn = MIN(BLKSIZE - pos % BLKSIZE, offset + count - pos); + memmove(blk + pos % BLKSIZE, buf, bn); + pos += bn; + buf += bn; + } + + return count; +} + +// Remove a block from file f. If it's not there, just silently succeed. +// Returns 0 on success, < 0 on error. +static int +file_free_block(struct File *f, uint32_t filebno) +{ + int r; + uint32_t *ptr; + + if ((r = file_block_walk(f, filebno, &ptr, 0)) < 0) + return r; + if (*ptr) { + free_block(*ptr); + *ptr = 0; + } + return 0; +} + +// Remove any blocks currently used by file 'f', +// but not necessary for a file of size 'newsize'. +// For both the old and new sizes, figure out the number of blocks required, +// and then clear the blocks from new_nblocks to old_nblocks. +// If the new_nblocks is no more than NDIRECT, and the indirect block has +// been allocated (f->f_indirect != 0), then free the indirect block too. +// (Remember to clear the f->f_indirect pointer so you'll know +// whether it's valid!) +// Do not change f->f_size. +static void +file_truncate_blocks(struct File *f, off_t newsize) +{ + int r; + uint32_t bno, old_nblocks, new_nblocks; + + old_nblocks = (f->f_size + BLKSIZE - 1) / BLKSIZE; + new_nblocks = (newsize + BLKSIZE - 1) / BLKSIZE; + for (bno = new_nblocks; bno < old_nblocks; bno++) + if ((r = file_free_block(f, bno)) < 0) + cprintf("warning: file_free_block: %e", r); + + if (new_nblocks <= NDIRECT && f->f_indirect) { + free_block(f->f_indirect); + f->f_indirect = 0; + } +} + +// Set the size of file f, truncating or extending as necessary. +int +file_set_size(struct File *f, off_t newsize) +{ + if (f->f_size > newsize) + file_truncate_blocks(f, newsize); + f->f_size = newsize; + flush_block(f); + return 0; +} + +// Flush the contents and metadata of file f out to disk. +// Loop over all the blocks in file. +// Translate the file block number into a disk block number +// and then check whether that disk block is dirty. If so, write it out. +void +file_flush(struct File *f) +{ + int i; + uint32_t *pdiskbno; + + for (i = 0; i < (f->f_size + BLKSIZE - 1) / BLKSIZE; i++) { + if (file_block_walk(f, i, &pdiskbno, 0) < 0 || + pdiskbno == NULL || *pdiskbno == 0) + continue; + flush_block(diskaddr(*pdiskbno)); + } + flush_block(f); + if (f->f_indirect) + flush_block(diskaddr(f->f_indirect)); +} + + +// Sync the entire file system. A big hammer. +void +fs_sync(void) +{ + int i; + for (i = 1; i < super->s_nblocks; i++) + flush_block(diskaddr(i)); +} + diff --git a/lab/fs/fs.h b/lab/fs/fs.h new file mode 100644 index 0000000..0350d78 --- /dev/null +++ b/lab/fs/fs.h @@ -0,0 +1,49 @@ +#include +#include + +#define SECTSIZE 512 // bytes per disk sector +#define BLKSECTS (BLKSIZE / SECTSIZE) // sectors per block + +/* Disk block n, when in memory, is mapped into the file system + * server's address space at DISKMAP + (n*BLKSIZE). */ +#define DISKMAP 0x10000000 + +/* Maximum disk size we can handle (3GB) */ +#define DISKSIZE 0xC0000000 + +struct Super *super; // superblock +uint32_t *bitmap; // bitmap blocks mapped in memory + +/* ide.c */ +bool ide_probe_disk1(void); +void ide_set_disk(int diskno); +void ide_set_partition(uint32_t first_sect, uint32_t nsect); +int ide_read(uint32_t secno, void *dst, size_t nsecs); +int ide_write(uint32_t secno, const void *src, size_t nsecs); + +/* bc.c */ +void* diskaddr(uint32_t blockno); +bool va_is_mapped(void *va); +bool va_is_dirty(void *va); +void flush_block(void *addr); +void bc_init(void); + +/* fs.c */ +void fs_init(void); +int file_get_block(struct File *f, uint32_t file_blockno, char **pblk); +int file_create(const char *path, struct File **f); +int file_open(const char *path, struct File **f); +ssize_t file_read(struct File *f, void *buf, size_t count, off_t offset); +int file_write(struct File *f, const void *buf, size_t count, off_t offset); +int file_set_size(struct File *f, off_t newsize); +void file_flush(struct File *f); +int file_remove(const char *path); +void fs_sync(void); + +/* int map_block(uint32_t); */ +bool block_is_free(uint32_t blockno); +int alloc_block(void); + +/* test.c */ +void fs_test(void); + diff --git a/lab/fs/fsformat.c b/lab/fs/fsformat.c new file mode 100644 index 0000000..4dab07a --- /dev/null +++ b/lab/fs/fsformat.c @@ -0,0 +1,244 @@ +/* + * JOS file system format + */ + +// We don't actually want to define off_t! +#define off_t xxx_off_t +#define bool xxx_bool +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#undef off_t +#undef bool + +// Prevent inc/types.h, included from inc/fs.h, +// from attempting to redefine types defined in the host's inttypes.h. +#define JOS_INC_TYPES_H +// Typedef the types that inc/mmu.h needs. +typedef uint32_t physaddr_t; +typedef uint32_t off_t; +typedef int bool; + +#include +#include + +#define ROUNDUP(n, v) ((n) - 1 + (v) - ((n) - 1) % (v)) +#define MAX_DIR_ENTS 128 + +struct Dir +{ + struct File *f; + struct File *ents; + int n; +}; + +uint32_t nblocks; +char *diskmap, *diskpos; +struct Super *super; +uint32_t *bitmap; + +void +panic(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + va_end(ap); + fputc('\n', stderr); + abort(); +} + +void +readn(int f, void *out, size_t n) +{ + size_t p = 0; + while (p < n) { + ssize_t m = read(f, out + p, n - p); + if (m < 0) + panic("read: %s", strerror(errno)); + if (m == 0) + panic("read: Unexpected EOF"); + p += m; + } +} + +uint32_t +blockof(void *pos) +{ + return ((char*)pos - diskmap) / BLKSIZE; +} + +void * +alloc(uint32_t bytes) +{ + void *start = diskpos; + diskpos += ROUNDUP(bytes, BLKSIZE); + if (blockof(diskpos) >= nblocks) + panic("out of disk blocks"); + return start; +} + +void +opendisk(const char *name) +{ + int r, diskfd, nbitblocks; + + if ((diskfd = open(name, O_RDWR | O_CREAT, 0666)) < 0) + panic("open %s: %s", name, strerror(errno)); + + if ((r = ftruncate(diskfd, 0)) < 0 + || (r = ftruncate(diskfd, nblocks * BLKSIZE)) < 0) + panic("truncate %s: %s", name, strerror(errno)); + + if ((diskmap = mmap(NULL, nblocks * BLKSIZE, PROT_READ|PROT_WRITE, + MAP_SHARED, diskfd, 0)) == MAP_FAILED) + panic("mmap %s: %s", name, strerror(errno)); + + close(diskfd); + + diskpos = diskmap; + alloc(BLKSIZE); + super = alloc(BLKSIZE); + super->s_magic = FS_MAGIC; + super->s_nblocks = nblocks; + super->s_root.f_type = FTYPE_DIR; + strcpy(super->s_root.f_name, "/"); + + nbitblocks = (nblocks + BLKBITSIZE - 1) / BLKBITSIZE; + bitmap = alloc(nbitblocks * BLKSIZE); + memset(bitmap, 0xFF, nbitblocks * BLKSIZE); +} + +void +finishdisk(void) +{ + int r, i; + + for (i = 0; i < blockof(diskpos); ++i) + bitmap[i/32] &= ~(1<<(i%32)); + + if ((r = msync(diskmap, nblocks * BLKSIZE, MS_SYNC)) < 0) + panic("msync: %s", strerror(errno)); +} + +void +finishfile(struct File *f, uint32_t start, uint32_t len) +{ + int i; + f->f_size = len; + len = ROUNDUP(len, BLKSIZE); + for (i = 0; i < len / BLKSIZE && i < NDIRECT; ++i) + f->f_direct[i] = start + i; + if (i == NDIRECT) { + uint32_t *ind = alloc(BLKSIZE); + f->f_indirect = blockof(ind); + for (; i < len / BLKSIZE; ++i) + ind[i - NDIRECT] = start + i; + } +} + +void +startdir(struct File *f, struct Dir *dout) +{ + dout->f = f; + dout->ents = malloc(MAX_DIR_ENTS * sizeof *dout->ents); + dout->n = 0; +} + +struct File * +diradd(struct Dir *d, uint32_t type, const char *name) +{ + struct File *out = &d->ents[d->n++]; + if (d->n > MAX_DIR_ENTS) + panic("too many directory entries"); + strcpy(out->f_name, name); + out->f_type = type; + return out; +} + +void +finishdir(struct Dir *d) +{ + int size = d->n * sizeof(struct File); + struct File *start = alloc(size); + memmove(start, d->ents, size); + finishfile(d->f, blockof(start), ROUNDUP(size, BLKSIZE)); + free(d->ents); + d->ents = NULL; +} + +void +writefile(struct Dir *dir, const char *name) +{ + int r, fd; + struct File *f; + struct stat st; + const char *last; + char *start; + + if ((fd = open(name, O_RDONLY)) < 0) + panic("open %s: %s", name, strerror(errno)); + if ((r = fstat(fd, &st)) < 0) + panic("stat %s: %s", name, strerror(errno)); + if (!S_ISREG(st.st_mode)) + panic("%s is not a regular file", name); + if (st.st_size >= MAXFILESIZE) + panic("%s too large", name); + + last = strrchr(name, '/'); + if (last) + last++; + else + last = name; + + f = diradd(dir, FTYPE_REG, last); + start = alloc(st.st_size); + readn(fd, start, st.st_size); + finishfile(f, blockof(start), st.st_size); + close(fd); +} + +void +usage(void) +{ + fprintf(stderr, "Usage: fsformat fs.img NBLOCKS files...\n"); + exit(2); +} + +int +main(int argc, char **argv) +{ + int i; + char *s; + struct Dir root; + + assert(BLKSIZE % sizeof(struct File) == 0); + + if (argc < 3) + usage(); + + nblocks = strtol(argv[2], &s, 0); + if (*s || s == argv[2] || nblocks < 2 || nblocks > 1024) + usage(); + + opendisk(argv[1]); + + startdir(&super->s_root, &root); + for (i = 3; i < argc; i++) + writefile(&root, argv[i]); + finishdir(&root); + + finishdisk(); + return 0; +} + diff --git a/lab/fs/ide.c b/lab/fs/ide.c new file mode 100644 index 0000000..2d8b4bf --- /dev/null +++ b/lab/fs/ide.c @@ -0,0 +1,112 @@ +/* + * Minimal PIO-based (non-interrupt-driven) IDE driver code. + * For information about what all this IDE/ATA magic means, + * see the materials available on the class references page. + */ + +#include "fs.h" +#include + +#define IDE_BSY 0x80 +#define IDE_DRDY 0x40 +#define IDE_DF 0x20 +#define IDE_ERR 0x01 + +static int diskno = 1; + +static int +ide_wait_ready(bool check_error) +{ + int r; + + while (((r = inb(0x1F7)) & (IDE_BSY|IDE_DRDY)) != IDE_DRDY) + /* do nothing */; + + if (check_error && (r & (IDE_DF|IDE_ERR)) != 0) + return -1; + return 0; +} + +bool +ide_probe_disk1(void) +{ + int r, x; + + // wait for Device 0 to be ready + ide_wait_ready(0); + + // switch to Device 1 + outb(0x1F6, 0xE0 | (1<<4)); + + // check for Device 1 to be ready for a while + for (x = 0; + x < 1000 && ((r = inb(0x1F7)) & (IDE_BSY|IDE_DF|IDE_ERR)) != 0; + x++) + /* do nothing */; + + // switch back to Device 0 + outb(0x1F6, 0xE0 | (0<<4)); + + cprintf("Device 1 presence: %d\n", (x < 1000)); + return (x < 1000); +} + +void +ide_set_disk(int d) +{ + if (d != 0 && d != 1) + panic("bad disk number"); + diskno = d; +} + + +int +ide_read(uint32_t secno, void *dst, size_t nsecs) +{ + int r; + + assert(nsecs <= 256); + + ide_wait_ready(0); + + outb(0x1F2, nsecs); + outb(0x1F3, secno & 0xFF); + outb(0x1F4, (secno >> 8) & 0xFF); + outb(0x1F5, (secno >> 16) & 0xFF); + outb(0x1F6, 0xE0 | ((diskno&1)<<4) | ((secno>>24)&0x0F)); + outb(0x1F7, 0x20); // CMD 0x20 means read sector + + for (; nsecs > 0; nsecs--, dst += SECTSIZE) { + if ((r = ide_wait_ready(1)) < 0) + return r; + insl(0x1F0, dst, SECTSIZE/4); + } + + return 0; +} + +int +ide_write(uint32_t secno, const void *src, size_t nsecs) +{ + int r; + + assert(nsecs <= 256); + + ide_wait_ready(0); + + outb(0x1F2, nsecs); + outb(0x1F3, secno & 0xFF); + outb(0x1F4, (secno >> 8) & 0xFF); + outb(0x1F5, (secno >> 16) & 0xFF); + outb(0x1F6, 0xE0 | ((diskno&1)<<4) | ((secno>>24)&0x0F)); + outb(0x1F7, 0x30); // CMD 0x30 means write sector + + for (; nsecs > 0; nsecs--, src += SECTSIZE) { + if ((r = ide_wait_ready(1)) < 0) + return r; + outsl(0x1F0, src, SECTSIZE/4); + } + + return 0; +} + diff --git a/lab/fs/lorem b/lab/fs/lorem new file mode 100644 index 0000000..c7c76e5 --- /dev/null +++ b/lab/fs/lorem @@ -0,0 +1,12 @@ +Lorem ipsum dolor sit amet, consectetur +adipisicing elit, sed do eiusmod tempor +incididunt ut labore et dolore magna +aliqua. Ut enim ad minim veniam, quis +nostrud exercitation ullamco laboris +nisi ut aliquip ex ea commodo consequat. +Duis aute irure dolor in reprehenderit +in voluptate velit esse cillum dolore eu +fugiat nulla pariatur. Excepteur sint +occaecat cupidatat non proident, sunt in +culpa qui officia deserunt mollit anim +id est laborum. diff --git a/lab/fs/motd b/lab/fs/motd new file mode 100644 index 0000000..3643fef --- /dev/null +++ b/lab/fs/motd @@ -0,0 +1,4 @@ +This is /motd, the message of the day. + +Welcome to the JOS kernel, now with a file system! + diff --git a/lab/fs/newmotd b/lab/fs/newmotd new file mode 100644 index 0000000..58c9cf2 --- /dev/null +++ b/lab/fs/newmotd @@ -0,0 +1,2 @@ +This is the NEW message of the day! + diff --git a/lab/fs/script b/lab/fs/script new file mode 100644 index 0000000..e4291d4 --- /dev/null +++ b/lab/fs/script @@ -0,0 +1,5 @@ +echo This is from the script. +cat lorem | num | cat +echo These are my file descriptors. +lsfd -1 +echo This is the end of the script. diff --git a/lab/fs/serv.c b/lab/fs/serv.c new file mode 100644 index 0000000..0d7e75f --- /dev/null +++ b/lab/fs/serv.c @@ -0,0 +1,365 @@ +/* + * File system server main loop - + * serves IPC requests from other environments. + */ + +#include +#include + +#include "fs.h" + + +#define debug 0 + +// The file system server maintains three structures +// for each open file. +// +// 1. The on-disk 'struct File' is mapped into the part of memory +// that maps the disk. This memory is kept private to the file +// server. +// 2. Each open file has a 'struct Fd' as well, which sort of +// corresponds to a Unix file descriptor. This 'struct Fd' is kept +// on *its own page* in memory, and it is shared with any +// environments that have the file open. +// 3. 'struct OpenFile' links these other two structures, and is kept +// private to the file server. The server maintains an array of +// all open files, indexed by "file ID". (There can be at most +// MAXOPEN files open concurrently.) The client uses file IDs to +// communicate with the server. File IDs are a lot like +// environment IDs in the kernel. Use openfile_lookup to translate +// file IDs to struct OpenFile. + +struct OpenFile { + uint32_t o_fileid; // file id + struct File *o_file; // mapped descriptor for open file + int o_mode; // open mode + struct Fd *o_fd; // Fd page +}; + +// Max number of open files in the file system at once +#define MAXOPEN 1024 +#define FILEVA 0xD0000000 + +// initialize to force into data section +struct OpenFile opentab[MAXOPEN] = { + { 0, 0, 1, 0 } +}; + +// Virtual address at which to receive page mappings containing client requests. +union Fsipc *fsreq = (union Fsipc *)0x0ffff000; + +void +serve_init(void) +{ + int i; + uintptr_t va = FILEVA; + for (i = 0; i < MAXOPEN; i++) { + opentab[i].o_fileid = i; + opentab[i].o_fd = (struct Fd*) va; + va += PGSIZE; + } +} + +// Allocate an open file. +int +openfile_alloc(struct OpenFile **o) +{ + int i, r; + + // Find an available open-file table entry + for (i = 0; i < MAXOPEN; i++) { + switch (pageref(opentab[i].o_fd)) { + case 0: + if ((r = sys_page_alloc(0, opentab[i].o_fd, PTE_P|PTE_U|PTE_W)) < 0) + return r; + /* fall through */ + case 1: + opentab[i].o_fileid += MAXOPEN; + *o = &opentab[i]; + memset(opentab[i].o_fd, 0, PGSIZE); + return (*o)->o_fileid; + } + } + return -E_MAX_OPEN; +} + +// Look up an open file for envid. +int +openfile_lookup(envid_t envid, uint32_t fileid, struct OpenFile **po) +{ + struct OpenFile *o; + + o = &opentab[fileid % MAXOPEN]; + if (pageref(o->o_fd) <= 1 || o->o_fileid != fileid) + return -E_INVAL; + *po = o; + return 0; +} + +// Open req->req_path in mode req->req_omode, storing the Fd page and +// permissions to return to the calling environment in *pg_store and +// *perm_store respectively. +int +serve_open(envid_t envid, struct Fsreq_open *req, + void **pg_store, int *perm_store) +{ + char path[MAXPATHLEN]; + struct File *f; + int fileid; + int r; + struct OpenFile *o; + + if (debug) + cprintf("serve_open %08x %s 0x%x\n", envid, req->req_path, req->req_omode); + + // Copy in the path, making sure it's null-terminated + memmove(path, req->req_path, MAXPATHLEN); + path[MAXPATHLEN-1] = 0; + + // Find an open file ID + if ((r = openfile_alloc(&o)) < 0) { + if (debug) + cprintf("openfile_alloc failed: %e", r); + return r; + } + fileid = r; + + // Open the file + if (req->req_omode & O_CREAT) { + if ((r = file_create(path, &f)) < 0) { + if (!(req->req_omode & O_EXCL) && r == -E_FILE_EXISTS) + goto try_open; + if (debug) + cprintf("file_create failed: %e", r); + return r; + } + } else { +try_open: + if ((r = file_open(path, &f)) < 0) { + if (debug) + cprintf("file_open failed: %e", r); + return r; + } + } + + // Truncate + if (req->req_omode & O_TRUNC) { + if ((r = file_set_size(f, 0)) < 0) { + if (debug) + cprintf("file_set_size failed: %e", r); + return r; + } + } + if ((r = file_open(path, &f)) < 0) { + if (debug) + cprintf("file_open failed: %e", r); + return r; + } + + // Save the file pointer + o->o_file = f; + + // Fill out the Fd structure + o->o_fd->fd_file.id = o->o_fileid; + o->o_fd->fd_omode = req->req_omode & O_ACCMODE; + o->o_fd->fd_dev_id = devfile.dev_id; + o->o_mode = req->req_omode; + + if (debug) + cprintf("sending success, page %08x\n", (uintptr_t) o->o_fd); + + // Share the FD page with the caller by setting *pg_store, + // store its permission in *perm_store + *pg_store = o->o_fd; + *perm_store = PTE_P|PTE_U|PTE_W|PTE_SHARE; + + return 0; +} + +// Set the size of req->req_fileid to req->req_size bytes, truncating +// or extending the file as necessary. +int +serve_set_size(envid_t envid, struct Fsreq_set_size *req) +{ + struct OpenFile *o; + int r; + + if (debug) + cprintf("serve_set_size %08x %08x %08x\n", envid, req->req_fileid, req->req_size); + + // Every file system IPC call has the same general structure. + // Here's how it goes. + + // First, use openfile_lookup to find the relevant open file. + // On failure, return the error code to the client with ipc_send. + if ((r = openfile_lookup(envid, req->req_fileid, &o)) < 0) + return r; + + // Second, call the relevant file system function (from fs/fs.c). + // On failure, return the error code to the client. + return file_set_size(o->o_file, req->req_size); +} + +// Read at most ipc->read.req_n bytes from the current seek position +// in ipc->read.req_fileid. Return the bytes read from the file to +// the caller in ipc->readRet, then update the seek position. Returns +// the number of bytes successfully read, or < 0 on error. +int +serve_read(envid_t envid, union Fsipc *ipc) +{ + struct Fsreq_read *req = &ipc->read; + struct Fsret_read *ret = &ipc->readRet; + int r; + if (debug) + cprintf("serve_read %08x %08x %08x\n", envid, req->req_fileid, req->req_n); + + // Lab 5: Your code here: + struct OpenFile *of; + if ( (r = openfile_lookup(envid, req->req_fileid, &of) )< 0) + return r; + + if ( (r = file_read(of->o_file, ret->ret_buf, req->req_n, of->o_fd->fd_offset))< 0) + return r; + + // then update the seek position. + of->o_fd->fd_offset += r; + return r; +} + + +// Write req->req_n bytes from req->req_buf to req_fileid, starting at +// the current seek position, and update the seek position +// accordingly. Extend the file if necessary. Returns the number of +// bytes written, or < 0 on error. +int +serve_write(envid_t envid, struct Fsreq_write *req) +{ + if (debug) + cprintf("serve_write %08x %08x %08x\n", envid, req->req_fileid, req->req_n); + int r; + struct OpenFile *of; + int reqn; + if ( (r = openfile_lookup(envid, req->req_fileid, &of)) < 0) + return r; + reqn = req->req_n > PGSIZE? PGSIZE:req->req_n; + + if ( (r = file_write(of->o_file, req->req_buf, reqn, of->o_fd->fd_offset)) < 0) + return r; + + of->o_fd->fd_offset += r; + return r; + // LAB 5: Your code here. + // panic("serve_write not implemented"); +} + +// Stat ipc->stat.req_fileid. Return the file's struct Stat to the +// caller in ipc->statRet. +int +serve_stat(envid_t envid, union Fsipc *ipc) +{ + struct Fsreq_stat *req = &ipc->stat; + struct Fsret_stat *ret = &ipc->statRet; + struct OpenFile *o; + int r; + + if (debug) + cprintf("serve_stat %08x %08x\n", envid, req->req_fileid); + + if ((r = openfile_lookup(envid, req->req_fileid, &o)) < 0) + return r; + + strcpy(ret->ret_name, o->o_file->f_name); + ret->ret_size = o->o_file->f_size; + ret->ret_isdir = (o->o_file->f_type == FTYPE_DIR); + return 0; +} + +// Flush all data and metadata of req->req_fileid to disk. +int +serve_flush(envid_t envid, struct Fsreq_flush *req) +{ + struct OpenFile *o; + int r; + + if (debug) + cprintf("serve_flush %08x %08x\n", envid, req->req_fileid); + + if ((r = openfile_lookup(envid, req->req_fileid, &o)) < 0) + return r; + file_flush(o->o_file); + return 0; +} + + +int +serve_sync(envid_t envid, union Fsipc *req) +{ + fs_sync(); + return 0; +} + +typedef int (*fshandler)(envid_t envid, union Fsipc *req); + +fshandler handlers[] = { + // Open is handled specially because it passes pages + /* [FSREQ_OPEN] = (fshandler)serve_open, */ + [FSREQ_READ] = serve_read, + [FSREQ_STAT] = serve_stat, + [FSREQ_FLUSH] = (fshandler)serve_flush, + [FSREQ_WRITE] = (fshandler)serve_write, + [FSREQ_SET_SIZE] = (fshandler)serve_set_size, + [FSREQ_SYNC] = serve_sync +}; + +void +serve(void) +{ + uint32_t req, whom; + int perm, r; + void *pg; + + while (1) { + perm = 0; + req = ipc_recv((int32_t *) &whom, fsreq, &perm); + if (debug) + cprintf("fs req %d from %08x [page %08x: %s]\n", + req, whom, uvpt[PGNUM(fsreq)], fsreq); + + // All requests must contain an argument page + if (!(perm & PTE_P)) { + cprintf("Invalid request from %08x: no argument page\n", + whom); + continue; // just leave it hanging... + } + + pg = NULL; + if (req == FSREQ_OPEN) { + r = serve_open(whom, (struct Fsreq_open*)fsreq, &pg, &perm); + } else if (req < ARRAY_SIZE(handlers) && handlers[req]) { + r = handlers[req](whom, fsreq); + } else { + cprintf("Invalid request code %d from %08x\n", req, whom); + r = -E_INVAL; + } + ipc_send(whom, r, pg, perm); + sys_page_unmap(0, fsreq); + } +} + +void +umain(int argc, char **argv) +{ + static_assert(sizeof(struct File) == 256); + binaryname = "fs"; + cprintf("FS is running\n"); + + // Check that we are able to do I/O + outw(0x8A00, 0x8A00); + cprintf("FS can do I/O\n"); + + serve_init(); + fs_init(); + fs_test(); + serve(); +} + diff --git a/lab/fs/testshell.sh b/lab/fs/testshell.sh new file mode 100644 index 0000000..c4f5984 --- /dev/null +++ b/lab/fs/testshell.sh @@ -0,0 +1,7 @@ +echo hello world | cat +cat lorem +cat lorem |num +cat lorem |num |num |num |num |num +lsfd -1 +cat script +sh