From 87de947c747042fe7de95ace74b272a88ff686a8 Mon Sep 17 00:00:00 2001 From: Robert Morris Date: Thu, 7 Sep 2023 09:24:01 -0400 Subject: [PATCH 01/10] 2nd lab --- .gitignore | 9 + Makefile | 259 ++++++++++++++++++- conf/lab.mk | 1 + grade-lab-syscall | 69 +++++ gradelib.py | 611 +++++++++++++++++++++++++++++++++++++++++++++ kernel/sysinfo.h | 4 + user/sysinfotest.c | 153 ++++++++++++ user/trace.c | 27 ++ 8 files changed, 1122 insertions(+), 11 deletions(-) create mode 100644 conf/lab.mk create mode 100755 grade-lab-syscall create mode 100644 gradelib.py create mode 100644 kernel/sysinfo.h create mode 100644 user/sysinfotest.c create mode 100644 user/trace.c diff --git a/.gitignore b/.gitignore index 07216f3..3d25221 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,12 @@ mkfs kernel/kernel user/usys.S .gdbinit +myapi.key +*-handin.tar.gz +xv6.out* +.vagrant/ +submissions/ +ph +barrier +/lab-*.json +.DS_Store \ No newline at end of file diff --git a/Makefile b/Makefile index 39a99d7..aabd280 100644 --- a/Makefile +++ b/Makefile @@ -1,14 +1,16 @@ + +# To compile and run with a lab solution, set the lab name in conf/lab.mk +# (e.g., LAB=util). Run make grade to test solution with the lab's +# grade script (e.g., grade-lab-util). + +-include conf/lab.mk + K=kernel U=user OBJS = \ $K/entry.o \ - $K/start.o \ - $K/console.o \ - $K/printf.o \ - $K/uart.o \ $K/kalloc.o \ - $K/spinlock.o \ $K/string.o \ $K/main.o \ $K/vm.o \ @@ -30,6 +32,34 @@ OBJS = \ $K/plic.o \ $K/virtio_disk.o +OBJS_KCSAN = \ + $K/start.o \ + $K/console.o \ + $K/printf.o \ + $K/uart.o \ + $K/spinlock.o + +ifdef KCSAN +OBJS_KCSAN += \ + $K/kcsan.o +endif + +ifeq ($(LAB),$(filter $(LAB), lock)) +OBJS += \ + $K/stats.o\ + $K/sprintf.o +endif + + +ifeq ($(LAB),net) +OBJS += \ + $K/e1000.o \ + $K/net.o \ + $K/sysnet.o \ + $K/pci.o +endif + + # riscv64-unknown-elf- or riscv64-linux-gnu- # perhaps in /opt/riscv/bin #TOOLPREFIX = @@ -57,12 +87,28 @@ OBJCOPY = $(TOOLPREFIX)objcopy OBJDUMP = $(TOOLPREFIX)objdump CFLAGS = -Wall -Werror -O -fno-omit-frame-pointer -ggdb -gdwarf-2 + +ifdef LAB +LABUPPER = $(shell echo $(LAB) | tr a-z A-Z) +XCFLAGS += -DSOL_$(LABUPPER) -DLAB_$(LABUPPER) +endif + +CFLAGS += $(XCFLAGS) CFLAGS += -MD CFLAGS += -mcmodel=medany CFLAGS += -ffreestanding -fno-common -nostdlib -mno-relax CFLAGS += -I. CFLAGS += $(shell $(CC) -fno-stack-protector -E -x c /dev/null >/dev/null 2>&1 && echo -fno-stack-protector) +ifeq ($(LAB),net) +CFLAGS += -DNET_TESTS_PORT=$(SERVERPORT) +endif + +ifdef KCSAN +CFLAGS += -DKCSAN +KCSANFLAG = -fsanitize=thread -fno-inline +endif + # Disable PIE when possible (for Ubuntu 16.10 toolchain) ifneq ($(shell $(CC) -dumpspecs 2>/dev/null | grep -e '[^f]no-pie'),) CFLAGS += -fno-pie -no-pie @@ -73,11 +119,17 @@ endif LDFLAGS = -z max-page-size=4096 -$K/kernel: $(OBJS) $K/kernel.ld $U/initcode - $(LD) $(LDFLAGS) -T $K/kernel.ld -o $K/kernel $(OBJS) +$K/kernel: $(OBJS) $(OBJS_KCSAN) $K/kernel.ld $U/initcode + $(LD) $(LDFLAGS) -T $K/kernel.ld -o $K/kernel $(OBJS) $(OBJS_KCSAN) $(OBJDUMP) -S $K/kernel > $K/kernel.asm $(OBJDUMP) -t $K/kernel | sed '1,/SYMBOL TABLE/d; s/ .* / /; /^$$/d' > $K/kernel.sym +$(OBJS): EXTRAFLAG := $(KCSANFLAG) + +$K/%.o: $K/%.c + $(CC) $(CFLAGS) $(EXTRAFLAG) -c -o $@ $< + + $U/initcode: $U/initcode.S $(CC) $(CFLAGS) -march=rv64g -nostdinc -I. -Ikernel -c $U/initcode.S -o $U/initcode.o $(LD) $(LDFLAGS) -N -e start -Ttext 0 -o $U/initcode.out $U/initcode.o @@ -89,6 +141,10 @@ tags: $(OBJS) _init ULIB = $U/ulib.o $U/usys.o $U/printf.o $U/umalloc.o +ifeq ($(LAB),$(filter $(LAB), lock)) +ULIB += $U/statistics.o +endif + _%: %.o $(ULIB) $(LD) $(LDFLAGS) -T $U/user.ld -o $@ $^ $(OBJDUMP) -S $@ > $*.asm @@ -107,7 +163,7 @@ $U/_forktest: $U/forktest.o $(ULIB) $(OBJDUMP) -S $U/_forktest > $U/forktest.asm mkfs/mkfs: mkfs/mkfs.c $K/fs.h $K/param.h - gcc -Werror -Wall -I. -o mkfs/mkfs mkfs/mkfs.c + gcc $(XCFLAGS) -Werror -Wall -I. -o mkfs/mkfs mkfs/mkfs.c # Prevent deletion of intermediate files, e.g. cat.o, after first build, so # that disk image changes after first build are persistent until clean. More @@ -133,8 +189,79 @@ UPROGS=\ $U/_wc\ $U/_zombie\ -fs.img: mkfs/mkfs README $(UPROGS) - mkfs/mkfs fs.img README $(UPROGS) + + + +ifeq ($(LAB),$(filter $(LAB), lock)) +UPROGS += \ + $U/_stats +endif + +ifeq ($(LAB),traps) +UPROGS += \ + $U/_call\ + $U/_bttest +endif + +ifeq ($(LAB),lazy) +UPROGS += \ + $U/_lazytests +endif + +ifeq ($(LAB),cow) +UPROGS += \ + $U/_cowtest +endif + +ifeq ($(LAB),thread) +UPROGS += \ + $U/_uthread + +$U/uthread_switch.o : $U/uthread_switch.S + $(CC) $(CFLAGS) -c -o $U/uthread_switch.o $U/uthread_switch.S + +$U/_uthread: $U/uthread.o $U/uthread_switch.o $(ULIB) + $(LD) $(LDFLAGS) -N -e main -Ttext 0 -o $U/_uthread $U/uthread.o $U/uthread_switch.o $(ULIB) + $(OBJDUMP) -S $U/_uthread > $U/uthread.asm + +ph: notxv6/ph.c + gcc -o ph -g -O2 $(XCFLAGS) notxv6/ph.c -pthread + +barrier: notxv6/barrier.c + gcc -o barrier -g -O2 $(XCFLAGS) notxv6/barrier.c -pthread +endif + +ifeq ($(LAB),pgtbl) +UPROGS += \ + $U/_pgtbltest +endif + +ifeq ($(LAB),lock) +UPROGS += \ + $U/_kalloctest\ + $U/_bcachetest +endif + +ifeq ($(LAB),fs) +UPROGS += \ + $U/_bigfile +endif + + + +ifeq ($(LAB),net) +UPROGS += \ + $U/_nettests +endif + +UEXTRA= +ifeq ($(LAB),util) + UEXTRA += user/xargstest.sh +endif + + +fs.img: mkfs/mkfs README $(UEXTRA) $(UPROGS) + mkfs/mkfs fs.img README $(UEXTRA) $(UPROGS) -include kernel/*.d user/*.d @@ -144,7 +271,8 @@ clean: $U/initcode $U/initcode.out $K/kernel fs.img \ mkfs/mkfs .gdbinit \ $U/usys.S \ - $(UPROGS) + $(UPROGS) \ + ph barrier # try to generate a unique GDB port GDBPORT = $(shell expr `id -u` % 5000 + 25000) @@ -155,12 +283,22 @@ QEMUGDB = $(shell if $(QEMU) -help | grep -q '^-gdb'; \ ifndef CPUS CPUS := 3 endif +ifeq ($(LAB),fs) +CPUS := 1 +endif + +FWDPORT = $(shell expr `id -u` % 5000 + 25999) QEMUOPTS = -machine virt -bios none -kernel $K/kernel -m 128M -smp $(CPUS) -nographic QEMUOPTS += -global virtio-mmio.force-legacy=false QEMUOPTS += -drive file=fs.img,if=none,format=raw,id=x0 QEMUOPTS += -device virtio-blk-device,drive=x0,bus=virtio-mmio-bus.0 +ifeq ($(LAB),net) +QEMUOPTS += -netdev user,id=net0,hostfwd=udp::$(FWDPORT)-:2000 -object filter-dump,id=net0,netdev=net0,file=packets.pcap +QEMUOPTS += -device e1000,netdev=net0,bus=pcie.0 +endif + qemu: $K/kernel fs.img $(QEMU) $(QEMUOPTS) @@ -171,3 +309,102 @@ qemu-gdb: $K/kernel .gdbinit fs.img @echo "*** Now run 'gdb' in another window." 1>&2 $(QEMU) $(QEMUOPTS) -S $(QEMUGDB) +ifeq ($(LAB),net) +# try to generate a unique port for the echo server +SERVERPORT = $(shell expr `id -u` % 5000 + 25099) + +server: + python3 server.py $(SERVERPORT) + +ping: + python3 ping.py $(FWDPORT) +endif + +## +## FOR testing lab grading script +## + +ifneq ($(V),@) +GRADEFLAGS += -v +endif + +print-gdbport: + @echo $(GDBPORT) + +grade: + @echo $(MAKE) clean + @$(MAKE) clean || \ + (echo "'make clean' failed. HINT: Do you have another running instance of xv6?" && exit 1) + ./grade-lab-$(LAB) $(GRADEFLAGS) + +## +## FOR web handin +## + + +WEBSUB := https://6828.scripts.mit.edu/2023/handin.py + +handin: tarball-pref myapi.key + @SUF=$(LAB); \ + curl -f -F file=@lab-$$SUF-handin.tar.gz -F key=\ /dev/null || { \ + echo ; \ + echo Submit seems to have failed.; \ + echo Please go to $(WEBSUB)/ and upload the tarball manually.; } + +handin-check: + @if ! test -d .git; then \ + echo No .git directory, is this a git repository?; \ + false; \ + fi + @if test "$$(git symbolic-ref HEAD)" != refs/heads/$(LAB); then \ + git branch; \ + read -p "You are not on the $(LAB) branch. Hand-in the current branch? [y/N] " r; \ + test "$$r" = y; \ + fi + @if ! git diff-files --quiet || ! git diff-index --quiet --cached HEAD; then \ + git status -s; \ + echo; \ + echo "You have uncomitted changes. Please commit or stash them."; \ + false; \ + fi + @if test -n "`git status -s`"; then \ + git status -s; \ + read -p "Untracked files will not be handed in. Continue? [y/N] " r; \ + test "$$r" = y; \ + fi + +UPSTREAM := $(shell git remote -v | grep -m 1 "xv6-labs-2023" | awk '{split($$0,a," "); print a[1]}') + +tarball: handin-check + git archive --format=tar HEAD | gzip > lab-$(LAB)-handin.tar.gz + +tarball-pref: handin-check + @SUF=$(LAB); \ + git archive --format=tar HEAD > lab-$$SUF-handin.tar; \ + git diff $(UPSTREAM)/$(LAB) > /tmp/lab-$$SUF-diff.patch; \ + tar -rf lab-$$SUF-handin.tar /tmp/lab-$$SUF-diff.patch; \ + gzip -c lab-$$SUF-handin.tar > lab-$$SUF-handin.tar.gz; \ + rm lab-$$SUF-handin.tar; \ + rm /tmp/lab-$$SUF-diff.patch; \ + +myapi.key: + @echo Get an API key for yourself by visiting $(WEBSUB)/ + @read -p "Please enter your API key: " k; \ + if test `echo "$$k" |tr -d '\n' |wc -c` = 32 ; then \ + TF=`mktemp -t tmp.XXXXXX`; \ + if test "x$$TF" != "x" ; then \ + echo "$$k" |tr -d '\n' > $$TF; \ + mv -f $$TF $@; \ + else \ + echo mktemp failed; \ + false; \ + fi; \ + else \ + echo Bad API key: $$k; \ + echo An API key should be 32 characters long.; \ + false; \ + fi; + + +.PHONY: handin tarball tarball-pref clean grade handin-check diff --git a/conf/lab.mk b/conf/lab.mk new file mode 100644 index 0000000..278d1a8 --- /dev/null +++ b/conf/lab.mk @@ -0,0 +1 @@ +LAB=syscall diff --git a/grade-lab-syscall b/grade-lab-syscall new file mode 100755 index 0000000..18d3b72 --- /dev/null +++ b/grade-lab-syscall @@ -0,0 +1,69 @@ +#!/usr/bin/env python3 + +import re +from gradelib import * + +r = Runner(save("xv6.out")) + +@test(5, "answers-syscall.txt") +def test_answers(): + # just a simple sanity check, will be graded manually + check_answers("answers-syscall.txt") + +@test(5, "trace 32 grep") +def test_trace_32_grep(): + r.run_qemu(shell_script([ + 'trace 32 grep hello README' + ])) + r.match('^\\d+: syscall read -> 1023') + r.match('^\\d+: syscall read -> 961') + r.match('^\\d+: syscall read -> 321') + r.match('^\\d+: syscall read -> 0') + +@test(5, "trace all grep") +def test_trace_all_grep(): + r.run_qemu(shell_script([ + 'trace 2147483647 grep hello README' + ])) + r.match('^\\d+: syscall trace -> 0') + r.match('^\\d+: syscall exec -> 3') + r.match('^\\d+: syscall open -> 3') + r.match('^\\d+: syscall read -> 1023') + r.match('^\\d+: syscall read -> 961') + r.match('^\\d+: syscall read -> 321') + r.match('^\\d+: syscall read -> 0') + r.match('^\\d+: syscall close -> 0') + +@test(5, "trace nothing") +def test_trace_nothing(): + r.run_qemu(shell_script([ + 'grep hello README' + ])) + r.match(no=[".* syscall .*"]) + +@test(5, "trace children") +def test_trace_children(): + r.run_qemu(shell_script([ + 'trace 2 usertests forkforkfork' + ])) + r.match('3: syscall fork -> 4') + r.match('^5: syscall fork -> \\d+') + r.match('^6: syscall fork -> \\d+') + r.match('^\\d+: syscall fork -> -1') + r.match('^ALL TESTS PASSED') + +@test(14, "sysinfotest") +def test_sysinfotest(): + r.run_qemu(shell_script([ + 'sysinfotest' + ])) + r.match('^sysinfotest: OK', no=[".* FAIL .*"]) + +@test(1, "time") +def test_time(): + check_time() + +run_tests() + + + diff --git a/gradelib.py b/gradelib.py new file mode 100644 index 0000000..e8d7814 --- /dev/null +++ b/gradelib.py @@ -0,0 +1,611 @@ +from __future__ import print_function + +import sys, os, re, time, socket, select, subprocess, errno, shutil, random, string +from subprocess import check_call, Popen +from optparse import OptionParser + +__all__ = [] + +################################################################## +# Test structure +# + +__all__ += ["test", "end_part", "run_tests", "get_current_test"] + +TESTS = [] +TOTAL = POSSIBLE = 0 +PART_TOTAL = PART_POSSIBLE = 0 +CURRENT_TEST = None + +def test(points, title=None, parent=None): + """Decorator for declaring test functions. If title is None, the + title of the test will be derived from the function name by + stripping the leading "test_" and replacing underscores with + spaces.""" + + def register_test(fn, title=title): + if not title: + assert fn.__name__.startswith("test_") + title = fn.__name__[5:].replace("_", " ") + if parent: + title = " " + title + + def run_test(): + global TOTAL, POSSIBLE, CURRENT_TEST + + # Handle test dependencies + if run_test.complete: + return run_test.ok + run_test.complete = True + parent_failed = False + if parent: + parent_failed = not parent() + + # Run the test + fail = None + start = time.time() + CURRENT_TEST = run_test + sys.stdout.write("== Test %s == " % title) + if parent: + sys.stdout.write("\n") + sys.stdout.flush() + try: + if parent_failed: + raise AssertionError('Parent failed: %s' % parent.__name__) + fn() + except AssertionError as e: + fail = str(e) + + # Display and handle test result + POSSIBLE += points + if points: + print("%s: %s" % (title, \ + (color("red", "FAIL") if fail else color("green", "OK"))), end=' ') + if time.time() - start > 0.1: + print("(%.1fs)" % (time.time() - start), end=' ') + print() + if fail: + print(" %s" % fail.replace("\n", "\n ")) + else: + TOTAL += points + for callback in run_test.on_finish: + callback(fail) + CURRENT_TEST = None + + run_test.ok = not fail + return run_test.ok + + # Record test metadata on the test wrapper function + run_test.__name__ = fn.__name__ + run_test.title = title + run_test.complete = False + run_test.ok = False + run_test.on_finish = [] + TESTS.append(run_test) + return run_test + return register_test + +def end_part(name): + def show_part(): + global PART_TOTAL, PART_POSSIBLE + print("Part %s score: %d/%d" % \ + (name, TOTAL - PART_TOTAL, POSSIBLE - PART_POSSIBLE)) + print() + PART_TOTAL, PART_POSSIBLE = TOTAL, POSSIBLE + show_part.title = "" + TESTS.append(show_part) + +def run_tests(): + """Set up for testing and run the registered test functions.""" + + # Handle command line + global options + parser = OptionParser(usage="usage: %prog [-v] [filters...]") + parser.add_option("-v", "--verbose", action="store_true", + help="print commands") + parser.add_option("--color", choices=["never", "always", "auto"], + default="auto", help="never, always, or auto") + (options, args) = parser.parse_args() + + # Start with a full build to catch build errors + make() + + # Clean the file system if there is one + reset_fs() + + # Run tests + limit = list(map(str.lower, args)) + try: + for test in TESTS: + if not limit or any(l in test.title.lower() for l in limit): + test() + if not limit: + print("Score: %d/%d" % (TOTAL, POSSIBLE)) + except KeyboardInterrupt: + pass + if TOTAL < POSSIBLE: + sys.exit(1) + +def get_current_test(): + if not CURRENT_TEST: + raise RuntimeError("No test is running") + return CURRENT_TEST + +################################################################## +# Assertions +# + +__all__ += ["assert_equal", "assert_lines_match"] + +def assert_equal(got, expect, msg=""): + if got == expect: + return + if msg: + msg += "\n" + raise AssertionError("%sgot:\n %s\nexpected:\n %s" % + (msg, str(got).replace("\n", "\n "), + str(expect).replace("\n", "\n "))) + +def assert_lines_match(text, *regexps, **kw): + """Assert that all of regexps match some line in text. If a 'no' + keyword argument is given, it must be a list of regexps that must + *not* match any line in text.""" + + def assert_lines_match_kw(no=[]): + return no + no = assert_lines_match_kw(**kw) + + # Check text against regexps + lines = text.splitlines() + good = set() + bad = set() + for i, line in enumerate(lines): + if any(re.match(r, line) for r in regexps): + good.add(i) + regexps = [r for r in regexps if not re.match(r, line)] + if any(re.match(r, line) for r in no): + bad.add(i) + + if not regexps and not bad: + return + + # We failed; construct an informative failure message + show = set() + for lineno in good.union(bad): + for offset in range(-2, 3): + show.add(lineno + offset) + if regexps: + show.update(n for n in range(len(lines) - 5, len(lines))) + + msg = [] + last = -1 + for lineno in sorted(show): + if 0 <= lineno < len(lines): + if lineno != last + 1: + msg.append("...") + last = lineno + msg.append("%s %s" % (color("red", "BAD ") if lineno in bad else + color("green", "GOOD") if lineno in good + else " ", + lines[lineno])) + if last != len(lines) - 1: + msg.append("...") + if bad: + msg.append("unexpected lines in output") + for r in regexps: + msg.append(color("red", "MISSING") + " '%s'" % r) + raise AssertionError("\n".join(msg)) + +################################################################## +# Utilities +# + +__all__ += ["make", "maybe_unlink", "reset_fs", "color", "random_str", "check_time", "check_answers"] + +MAKE_TIMESTAMP = 0 + +def pre_make(): + """Delay prior to running make to ensure file mtimes change.""" + while int(time.time()) == MAKE_TIMESTAMP: + time.sleep(0.1) + +def post_make(): + """Record the time after make completes so that the next run of + make can be delayed if needed.""" + global MAKE_TIMESTAMP + MAKE_TIMESTAMP = int(time.time()) + +def make(*target): + pre_make() + if Popen(("make",) + target).wait(): + sys.exit(1) + post_make() + +def show_command(cmd): + from pipes import quote + print("\n$", " ".join(map(quote, cmd))) + +def maybe_unlink(*paths): + for path in paths: + try: + os.unlink(path) + except EnvironmentError as e: + if e.errno != errno.ENOENT: + raise + +COLORS = {"default": "\033[0m", "red": "\033[31m", "green": "\033[32m"} + +def color(name, text): + if options.color == "always" or (options.color == "auto" and os.isatty(1)): + return COLORS[name] + text + COLORS["default"] + return text + +def reset_fs(): + if os.path.exists("obj/fs/clean-fs.img"): + shutil.copyfile("obj/fs/clean-fs.img", "obj/fs/fs.img") + +def random_str(n=8): + letters = string.ascii_letters + string.digits + return ''.join(random.choice(letters) for _ in range(n)) + +def check_time(): + try: + print("") + with open('time.txt') as f: + d = f.read().strip() + if not re.match(r'^\d+$', d): + raise AssertionError('time.txt does not contain a single integer (number of hours spent on the lab)') + except IOError: + raise AssertionError('Cannot read time.txt') + +def check_answers(file, n=10): + try: + with open(file) as f: + d = f.read().strip() + if len(d) < n: + raise AssertionError('%s does not seem to contain enough text' % file) + except IOError: + raise AssertionError('Cannot read %s' % file) + + +################################################################## +# Controllers +# + +__all__ += ["QEMU", "GDBClient"] + +class QEMU(object): + _GDBPORT = None + + def __init__(self, *make_args): + # Check that QEMU is not currently running + try: + GDBClient(self.get_gdb_port(), timeout=0).close() + except socket.error: + pass + else: + print("""\ +GDB stub found on port %d. +QEMU appears to already be running. Please exit it if possible or use +'killall qemu' or 'killall qemu.real'.""" % self.get_gdb_port(), file=sys.stderr) + sys.exit(1) + + if options.verbose: + show_command(("make",) + make_args) + cmd = ("make", "-s", "--no-print-directory") + make_args + self.proc = Popen(cmd, stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + stdin=subprocess.PIPE) + # Accumulated output as a string + self.output = "" + # Accumulated output as a bytearray + self.outbytes = bytearray() + self.on_output = [] + + @staticmethod + def get_gdb_port(): + if QEMU._GDBPORT is None: + p = Popen(["make", "-s", "--no-print-directory", "print-gdbport"], + stdout=subprocess.PIPE) + (out, _) = p.communicate() + if p.returncode: + raise RuntimeError( + "Failed to get gdbport: make exited with %d" % + p.returncode) + QEMU._GDBPORT = int(out) + return QEMU._GDBPORT + + def fileno(self): + if self.proc: + return self.proc.stdout.fileno() + + def handle_read(self): + buf = os.read(self.proc.stdout.fileno(), 4096) + self.outbytes.extend(buf) + self.output = self.outbytes.decode("utf-8", "replace") + for callback in self.on_output: + callback(buf) + if buf == b"": + self.wait() + return + + def write(self, buf): + if isinstance(buf, str): + buf = buf.encode('utf-8') + self.proc.stdin.write(buf) + self.proc.stdin.flush() + + def wait(self): + if self.proc: + self.proc.wait() + self.proc = None + + def kill(self): + if self.proc: + self.proc.terminate() + +class GDBClient(object): + def __init__(self, port, timeout=15): + start = time.time() + while True: + self.sock = socket.socket() + try: + self.sock.settimeout(1) + self.sock.connect(("localhost", port)) + break + except socket.error: + if time.time() >= start + timeout: + raise + self.__buf = "" + + def fileno(self): + if self.sock: + return self.sock.fileno() + + def handle_read(self): + try: + data = self.sock.recv(4096).decode("ascii", "replace") + except socket.error: + data = "" + if data == "": + self.sock.close() + self.sock = None + return + self.__buf += data + + while True: + m = re.search(r"\$([^#]*)#[0-9a-zA-Z]{2}", self.__buf) + if not m: + break + pkt = m.group(1) + self.__buf = self.__buf[m.end():] + + if pkt.startswith("T05"): + # Breakpoint + raise TerminateTest + + def __send(self, cmd): + packet = "$%s#%02x" % (cmd, sum(map(ord, cmd)) % 256) + self.sock.sendall(packet.encode("ascii")) + + def __send_break(self): + self.sock.sendall(b"\x03") + + def close(self): + if self.sock: + self.sock.close() + self.sock = None + + def cont(self): + self.__send("c") + + def breakpoint(self, addr): + self.__send("Z1,%x,1" % addr) + + +################################################################## +# QEMU test runner +# + +__all__ += ["TerminateTest", "Runner"] + +class TerminateTest(Exception): + pass + +class Runner(): + def __init__(self, *default_monitors): + self.__default_monitors = default_monitors + + def run_qemu(self, *monitors, **kw): + """Run a QEMU-based test. monitors should functions that will + be called with this Runner instance once QEMU and GDB are + started. Typically, they should register callbacks that throw + TerminateTest when stop events occur. The target_base + argument gives the make target to run. The make_args argument + should be a list of additional arguments to pass to make. The + timeout argument bounds how long to run before returning.""" + + def run_qemu_kw(target_base="qemu", make_args=[], timeout=30): + return target_base, make_args, timeout + target_base, make_args, timeout = run_qemu_kw(**kw) + + # Start QEMU + pre_make() + self.qemu = QEMU(target_base + "-gdb", *make_args) + self.gdb = None + + try: + # Wait for QEMU to start or make to fail. This will set + # self.gdb if QEMU starts. + self.qemu.on_output = [self.__monitor_start] + self.__react([self.qemu], timeout=90) + self.qemu.on_output = [] + if self.gdb is None: + print("Failed to connect to QEMU; output:") + print(self.qemu.output) + sys.exit(1) + post_make() + + # QEMU and GDB are up + self.reactors = [self.qemu, self.gdb] + + # Start monitoring + for m in self.__default_monitors + monitors: + m(self) + + # Run and react + self.gdb.cont() + self.__react(self.reactors, timeout) + finally: + # Shutdown QEMU + try: + if self.gdb is None: + sys.exit(1) + self.qemu.kill() + self.__react(self.reactors, 5) + self.gdb.close() + self.qemu.wait() + except: + print("""\ +Failed to shutdown QEMU. You might need to 'killall qemu' or +'killall qemu.real'. +""") + raise + + def __monitor_start(self, output): + if b"\n" in output: + try: + self.gdb = GDBClient(self.qemu.get_gdb_port(), timeout=2) + raise TerminateTest + except socket.error: + pass + if not len(output): + raise TerminateTest + + def __react(self, reactors, timeout): + deadline = time.time() + timeout + try: + while True: + timeleft = deadline - time.time() + if timeleft < 0: + sys.stdout.write("Timeout! ") + sys.stdout.flush() + return + + rset = [r for r in reactors if r.fileno() is not None] + if not rset: + return + + rset, _, _ = select.select(rset, [], [], timeleft) + for reactor in rset: + reactor.handle_read() + except TerminateTest: + pass + + def user_test(self, binary, *monitors, **kw): + """Run a user test using the specified binary. Monitors and + keyword arguments are as for run_qemu. This runs on a disk + snapshot unless the keyword argument 'snapshot' is False.""" + + maybe_unlink("obj/kern/init.o", "obj/kern/kernel") + if kw.pop("snapshot", True): + kw.setdefault("make_args", []).append("QEMUEXTRA+=-snapshot") + self.run_qemu(target_base="run-%s" % binary, *monitors, **kw) + + def match(self, *args, **kwargs): + """Shortcut to call assert_lines_match on the most recent QEMU + output.""" + + assert_lines_match(self.qemu.output, *args, **kwargs) + +################################################################## +# Monitors +# + +__all__ += ["save", "stop_breakpoint", "call_on_line", "stop_on_line", "shell_script"] + +def save(path): + """Return a monitor that writes QEMU's output to path. If the + test fails, copy the output to path.test-name.""" + + def setup_save(runner): + f.seek(0) + f.truncate() + runner.qemu.on_output.append(f.write) + get_current_test().on_finish.append(save_on_finish) + + def save_on_finish(fail): + f.flush() + save_path = path + "." + get_current_test().__name__[5:] + if fail: + shutil.copyfile(path, save_path) + print(" QEMU output saved to %s" % save_path) + elif os.path.exists(save_path): + os.unlink(save_path) + print(" (Old %s failure log removed)" % save_path) + + f = open(path, "wb") + return setup_save + +def stop_breakpoint(addr): + """Returns a monitor that stops when addr is reached. addr may be + a number or the name of a symbol.""" + + def setup_breakpoint(runner): + if isinstance(addr, str): + addrs = [int(sym[:16], 16) for sym in open("kernel/kernel.sym") + if sym[17:].strip() == addr] + assert len(addrs), "Symbol %s not found" % addr + runner.gdb.breakpoint(addrs[0]) + else: + runner.gdb.breakpoint(addr) + return setup_breakpoint + +def call_on_line(regexp, callback): + """Returns a monitor that calls 'callback' when QEMU prints a line + matching 'regexp'.""" + + def setup_call_on_line(runner): + buf = bytearray() + def handle_output(output): + buf.extend(output) + while b"\n" in buf: + line, buf[:] = buf.split(b"\n", 1) + line = line.decode("utf-8", "replace") + if re.match(regexp, line): + callback(line) + runner.qemu.on_output.append(handle_output) + return setup_call_on_line + +def stop_on_line(regexp): + """Returns a monitor that stops when QEMU prints a line matching + 'regexp'.""" + + def stop(line): + raise TerminateTest + return call_on_line(regexp, stop) + +def shell_script(script, terminate_match=None): + """Returns a monitor that plays the script, and stops when the script is + done executing.""" + + def setup_call_on_line(runner): + class context: + n = 0 + buf = bytearray() + def handle_output(output): + context.buf.extend(output) + if terminate_match is not None: + if re.match(terminate_match, context.buf.decode('utf-8', 'replace')): + raise TerminateTest + if b'$ ' in context.buf: + context.buf = bytearray() + if context.n < len(script): + runner.qemu.write(script[context.n]) + runner.qemu.write('\n') + context.n += 1 + else: + if terminate_match is None: + raise TerminateTest + runner.qemu.on_output.append(handle_output) + return setup_call_on_line diff --git a/kernel/sysinfo.h b/kernel/sysinfo.h new file mode 100644 index 0000000..fb878e6 --- /dev/null +++ b/kernel/sysinfo.h @@ -0,0 +1,4 @@ +struct sysinfo { + uint64 freemem; // amount of free memory (bytes) + uint64 nproc; // number of process +}; diff --git a/user/sysinfotest.c b/user/sysinfotest.c new file mode 100644 index 0000000..8a648a6 --- /dev/null +++ b/user/sysinfotest.c @@ -0,0 +1,153 @@ +#include "kernel/types.h" +#include "kernel/riscv.h" +#include "kernel/sysinfo.h" +#include "user/user.h" + + +void +sinfo(struct sysinfo *info) { + if (sysinfo(info) < 0) { + printf("FAIL: sysinfo failed"); + exit(1); + } +} + +// +// use sbrk() to count how many free physical memory pages there are. +// +int +countfree() +{ + uint64 sz0 = (uint64)sbrk(0); + struct sysinfo info; + int n = 0; + + while(1){ + if((uint64)sbrk(PGSIZE) == 0xffffffffffffffff){ + break; + } + n += PGSIZE; + } + sinfo(&info); + if (info.freemem != 0) { + printf("FAIL: there is no free mem, but sysinfo.freemem=%d\n", + info.freemem); + exit(1); + } + sbrk(-((uint64)sbrk(0) - sz0)); + return n; +} + +void +testmem() { + struct sysinfo info; + uint64 n = countfree(); + + sinfo(&info); + + if (info.freemem!= n) { + printf("FAIL: free mem %d (bytes) instead of %d\n", info.freemem, n); + exit(1); + } + + if((uint64)sbrk(PGSIZE) == 0xffffffffffffffff){ + printf("sbrk failed"); + exit(1); + } + + sinfo(&info); + + if (info.freemem != n-PGSIZE) { + printf("FAIL: free mem %d (bytes) instead of %d\n", n-PGSIZE, info.freemem); + exit(1); + } + + if((uint64)sbrk(-PGSIZE) == 0xffffffffffffffff){ + printf("sbrk failed"); + exit(1); + } + + sinfo(&info); + + if (info.freemem != n) { + printf("FAIL: free mem %d (bytes) instead of %d\n", n, info.freemem); + exit(1); + } +} + +void +testcall() { + struct sysinfo info; + + if (sysinfo(&info) < 0) { + printf("FAIL: sysinfo failed\n"); + exit(1); + } + + if (sysinfo((struct sysinfo *) 0xeaeb0b5b00002f5e) != 0xffffffffffffffff) { + printf("FAIL: sysinfo succeeded with bad argument\n"); + exit(1); + } +} + +void testproc() { + struct sysinfo info; + uint64 nproc; + int status; + int pid; + + sinfo(&info); + nproc = info.nproc; + + pid = fork(); + if(pid < 0){ + printf("sysinfotest: fork failed\n"); + exit(1); + } + if(pid == 0){ + sinfo(&info); + if(info.nproc != nproc+1) { + printf("sysinfotest: FAIL nproc is %d instead of %d\n", info.nproc, nproc+1); + exit(1); + } + exit(0); + } + wait(&status); + sinfo(&info); + if(info.nproc != nproc) { + printf("sysinfotest: FAIL nproc is %d instead of %d\n", info.nproc, nproc); + exit(1); + } +} + +void testbad() { + int pid = fork(); + int xstatus; + + if(pid < 0){ + printf("sysinfotest: fork failed\n"); + exit(1); + } + if(pid == 0){ + sinfo(0x0); + exit(0); + } + wait(&xstatus); + if(xstatus == -1) // kernel killed child? + exit(0); + else { + printf("sysinfotest: testbad succeeded %d\n", xstatus); + exit(xstatus); + } +} + +int +main(int argc, char *argv[]) +{ + printf("sysinfotest: start\n"); + testcall(); + testmem(); + testproc(); + printf("sysinfotest: OK\n"); + exit(0); +} diff --git a/user/trace.c b/user/trace.c new file mode 100644 index 0000000..dd77760 --- /dev/null +++ b/user/trace.c @@ -0,0 +1,27 @@ +#include "kernel/param.h" +#include "kernel/types.h" +#include "kernel/stat.h" +#include "user/user.h" + +int +main(int argc, char *argv[]) +{ + int i; + char *nargv[MAXARG]; + + if(argc < 3 || (argv[1][0] < '0' || argv[1][0] > '9')){ + fprintf(2, "Usage: %s mask command\n", argv[0]); + exit(1); + } + + if (trace(atoi(argv[1])) < 0) { + fprintf(2, "%s: trace failed\n", argv[0]); + exit(1); + } + + for(i = 2; i < argc && i < MAXARG; i++){ + nargv[i-2] = argv[i]; + } + exec(nargv[0], nargv); + exit(0); +} From aa846139f836f4997ef1955bc891a9ec91983b95 Mon Sep 17 00:00:00 2001 From: Sanjit Bhat Date: Tue, 12 Sep 2023 14:08:11 -0400 Subject: [PATCH 02/10] Makefile: new submission system --- Makefile | 51 +++++---------------------------------------------- 1 file changed, 5 insertions(+), 46 deletions(-) diff --git a/Makefile b/Makefile index aabd280..5844ba3 100644 --- a/Makefile +++ b/Makefile @@ -338,21 +338,10 @@ grade: ./grade-lab-$(LAB) $(GRADEFLAGS) ## -## FOR web handin +## FOR submissions ## - -WEBSUB := https://6828.scripts.mit.edu/2023/handin.py - -handin: tarball-pref myapi.key - @SUF=$(LAB); \ - curl -f -F file=@lab-$$SUF-handin.tar.gz -F key=\ /dev/null || { \ - echo ; \ - echo Submit seems to have failed.; \ - echo Please go to $(WEBSUB)/ and upload the tarball manually.; } - -handin-check: +submit-check: @if ! test -d .git; then \ echo No .git directory, is this a git repository?; \ false; \ @@ -374,37 +363,7 @@ handin-check: test "$$r" = y; \ fi -UPSTREAM := $(shell git remote -v | grep -m 1 "xv6-labs-2023" | awk '{split($$0,a," "); print a[1]}') - -tarball: handin-check - git archive --format=tar HEAD | gzip > lab-$(LAB)-handin.tar.gz - -tarball-pref: handin-check - @SUF=$(LAB); \ - git archive --format=tar HEAD > lab-$$SUF-handin.tar; \ - git diff $(UPSTREAM)/$(LAB) > /tmp/lab-$$SUF-diff.patch; \ - tar -rf lab-$$SUF-handin.tar /tmp/lab-$$SUF-diff.patch; \ - gzip -c lab-$$SUF-handin.tar > lab-$$SUF-handin.tar.gz; \ - rm lab-$$SUF-handin.tar; \ - rm /tmp/lab-$$SUF-diff.patch; \ - -myapi.key: - @echo Get an API key for yourself by visiting $(WEBSUB)/ - @read -p "Please enter your API key: " k; \ - if test `echo "$$k" |tr -d '\n' |wc -c` = 32 ; then \ - TF=`mktemp -t tmp.XXXXXX`; \ - if test "x$$TF" != "x" ; then \ - echo "$$k" |tr -d '\n' > $$TF; \ - mv -f $$TF $@; \ - else \ - echo mktemp failed; \ - false; \ - fi; \ - else \ - echo Bad API key: $$k; \ - echo An API key should be 32 characters long.; \ - false; \ - fi; - +zipball: submit-check + git archive --format=zip --output lab.zip HEAD -.PHONY: handin tarball tarball-pref clean grade handin-check +.PHONY: zipball clean grade submit-check From 105f8bdb3517d81826928e6c52f1c084812158aa Mon Sep 17 00:00:00 2001 From: Sanjit Bhat Date: Tue, 12 Sep 2023 17:20:02 -0400 Subject: [PATCH 03/10] remove answers --- grade-lab-syscall | 5 ----- 1 file changed, 5 deletions(-) diff --git a/grade-lab-syscall b/grade-lab-syscall index 18d3b72..3f6abdd 100755 --- a/grade-lab-syscall +++ b/grade-lab-syscall @@ -5,11 +5,6 @@ from gradelib import * r = Runner(save("xv6.out")) -@test(5, "answers-syscall.txt") -def test_answers(): - # just a simple sanity check, will be graded manually - check_answers("answers-syscall.txt") - @test(5, "trace 32 grep") def test_trace_32_grep(): r.run_qemu(shell_script([ From dddd6948a22cdbe03bf0f8a91bb7d542f23b508c Mon Sep 17 00:00:00 2001 From: Sanjit Bhat Date: Wed, 13 Sep 2023 16:14:07 -0400 Subject: [PATCH 04/10] revert answers --- grade-lab-syscall | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/grade-lab-syscall b/grade-lab-syscall index 3f6abdd..18d3b72 100755 --- a/grade-lab-syscall +++ b/grade-lab-syscall @@ -5,6 +5,11 @@ from gradelib import * r = Runner(save("xv6.out")) +@test(5, "answers-syscall.txt") +def test_answers(): + # just a simple sanity check, will be graded manually + check_answers("answers-syscall.txt") + @test(5, "trace 32 grep") def test_trace_32_grep(): r.run_qemu(shell_script([ From c546b2fd10adbda71411a5c0b313c5317afb5522 Mon Sep 17 00:00:00 2001 From: Sanjit Bhat Date: Tue, 19 Sep 2023 14:21:29 -0400 Subject: [PATCH 05/10] update grading and zipball rule --- .gitignore | 5 ++--- Makefile | 5 +++-- gradelib.py | 21 +++++++++++++++++++-- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index 3d25221..5c33438 100644 --- a/.gitignore +++ b/.gitignore @@ -15,12 +15,11 @@ mkfs kernel/kernel user/usys.S .gdbinit -myapi.key -*-handin.tar.gz +*.zip xv6.out* .vagrant/ submissions/ ph barrier /lab-*.json -.DS_Store \ No newline at end of file +.DS_Store diff --git a/Makefile b/Makefile index 5844ba3..c60ea76 100644 --- a/Makefile +++ b/Makefile @@ -272,6 +272,7 @@ clean: mkfs/mkfs .gdbinit \ $U/usys.S \ $(UPROGS) \ + lab.zip \ ph barrier # try to generate a unique GDB port @@ -363,7 +364,7 @@ submit-check: test "$$r" = y; \ fi -zipball: submit-check - git archive --format=zip --output lab.zip HEAD +zipball: clean submit-check + git archive --verbose --format zip --output lab.zip HEAD .PHONY: zipball clean grade submit-check diff --git a/gradelib.py b/gradelib.py index e8d7814..f0d4934 100644 --- a/gradelib.py +++ b/gradelib.py @@ -1,6 +1,6 @@ from __future__ import print_function -import sys, os, re, time, socket, select, subprocess, errno, shutil, random, string +import sys, os, re, time, socket, select, subprocess, errno, shutil, random, string, json from subprocess import check_call, Popen from optparse import OptionParser @@ -16,6 +16,7 @@ TOTAL = POSSIBLE = 0 PART_TOTAL = PART_POSSIBLE = 0 CURRENT_TEST = None +GRADES = {} def test(points, title=None, parent=None): """Decorator for declaring test functions. If title is None, the @@ -31,7 +32,7 @@ def register_test(fn, title=title): title = " " + title def run_test(): - global TOTAL, POSSIBLE, CURRENT_TEST + global TOTAL, POSSIBLE, CURRENT_TEST, GRADES # Handle test dependencies if run_test.complete: @@ -68,6 +69,9 @@ def run_test(): print(" %s" % fail.replace("\n", "\n ")) else: TOTAL += points + if points: + GRADES[title] = 0 if fail else points + for callback in run_test.on_finish: callback(fail) CURRENT_TEST = None @@ -95,6 +99,16 @@ def show_part(): show_part.title = "" TESTS.append(show_part) +def write_results(): + global options + if not options.results: + return + try: + with open(options.results, "w") as f: + f.write(json.dumps(GRADES)) + except OSError as e: + print("Provided a bad results path. Error:", e) + def run_tests(): """Set up for testing and run the registered test functions.""" @@ -105,6 +119,7 @@ def run_tests(): help="print commands") parser.add_option("--color", choices=["never", "always", "auto"], default="auto", help="never, always, or auto") + parser.add_option("--results", help="results file path") (options, args) = parser.parse_args() # Start with a full build to catch build errors @@ -120,6 +135,7 @@ def run_tests(): if not limit or any(l in test.title.lower() for l in limit): test() if not limit: + write_results() print("Score: %d/%d" % (TOTAL, POSSIBLE)) except KeyboardInterrupt: pass @@ -260,6 +276,7 @@ def check_time(): def check_answers(file, n=10): try: + print("") with open(file) as f: d = f.read().strip() if len(d) < n: From e3b3f8f9b0b1dc9c9e42622b90e2155ff7f7b40a Mon Sep 17 00:00:00 2001 From: Sanjit Bhat Date: Thu, 21 Sep 2023 10:30:02 -0400 Subject: [PATCH 06/10] clean all zip files, even old ones --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index c60ea76..365c91b 100644 --- a/Makefile +++ b/Makefile @@ -272,7 +272,7 @@ clean: mkfs/mkfs .gdbinit \ $U/usys.S \ $(UPROGS) \ - lab.zip \ + *.zip \ ph barrier # try to generate a unique GDB port From fe4abeb0ab8b3fd30f2de25d1a86f87e62da4080 Mon Sep 17 00:00:00 2001 From: novice <619671969@qq.com> Date: Wed, 31 Jul 2024 15:35:25 +0800 Subject: [PATCH 07/10] I finished lab2 system call traceing at first try! --- .../clangd/index/bio.c.34489AC9E3FB27B2.idx | Bin 0 -> 3466 bytes .../clangd/index/buf.h.7DA89D0539A50AFB.idx | Bin 0 -> 870 bytes .../index/console.c.A959DCA84FDA00CD.idx | Bin 0 -> 3094 bytes .../clangd/index/defs.h.72A9C4FFB86E6400.idx | Bin 0 -> 12248 bytes .../clangd/index/elf.h.B51ED6807EFE6571.idx | Bin 0 -> 2096 bytes .../clangd/index/entry.S.7790893A73F2EC77.idx | Bin 0 -> 266 bytes .../clangd/index/exec.c.C583EF6E813AE52A.idx | Bin 0 -> 2618 bytes .../clangd/index/fcntl.h.204FC1983BB1DFC2.idx | Bin 0 -> 260 bytes .../clangd/index/file.c.E75BF18666EA6C16.idx | Bin 0 -> 3814 bytes .../clangd/index/file.h.2A63A83574D7D652.idx | Bin 0 -> 2180 bytes .cache/clangd/index/fs.c.DE158A81433875BE.idx | Bin 0 -> 10460 bytes .cache/clangd/index/fs.h.F83902F1C88C3791.idx | Bin 0 -> 1726 bytes .../index/initcode.S.373AF54AA740F373.idx | Bin 0 -> 486 bytes .../index/kalloc.c.2F15DD93067E2B26.idx | Bin 0 -> 2050 bytes .../index/kernelvec.S.06F25524429F6CAE.idx | Bin 0 -> 266 bytes .../clangd/index/log.c.D81C51C68A1AD96E.idx | Bin 0 -> 5634 bytes .../clangd/index/main.c.2DC262271CAFD048.idx | Bin 0 -> 1142 bytes .../index/memlayout.h.0B2C565D58B84A48.idx | Bin 0 -> 562 bytes .../clangd/index/param.h.37451DCC2B36E012.idx | Bin 0 -> 444 bytes .../clangd/index/pipe.c.2473E067140E4F18.idx | Bin 0 -> 2820 bytes .../clangd/index/plic.c.2EA8519EDD3A2B20.idx | Bin 0 -> 1156 bytes .../index/printf.c.0918689B2930FAE2.idx | Bin 0 -> 2014 bytes .../clangd/index/proc.c.5346DCDE506E9F58.idx | Bin 0 -> 10580 bytes .../clangd/index/proc.h.27341B4843D3B8B6.idx | Bin 0 -> 6066 bytes .../clangd/index/riscv.h.6737E35D6CB953E7.idx | Bin 0 -> 4872 bytes .../index/sleeplock.c.BC30DEE970D57711.idx | Bin 0 -> 1442 bytes .../index/sleeplock.h.56E9B1C95DBCB92F.idx | Bin 0 -> 486 bytes .../index/spinlock.c.1B29CD753041D103.idx | Bin 0 -> 1592 bytes .../index/spinlock.h.7E8FC04641EE310E.idx | Bin 0 -> 446 bytes .../clangd/index/start.c.92F9EB51DC5F96B3.idx | Bin 0 -> 1684 bytes .../clangd/index/stat.h.AEE4CE7ADDE89C85.idx | Bin 0 -> 608 bytes .../index/string.c.87F56374FD494C3A.idx | Bin 0 -> 1020 bytes .../clangd/index/swtch.S.11DB57B07ECB88BC.idx | Bin 0 -> 266 bytes .../index/syscall.c.05D088F49A8C83CC.idx | Bin 0 -> 4572 bytes .../index/syscall.h.66E962A052CADC6A.idx | Bin 0 -> 630 bytes .../index/sysfile.c.C337A604B3627C12.idx | Bin 0 -> 6948 bytes .../index/sysproc.c.E5BC46BBC06178C3.idx | Bin 0 -> 1774 bytes .../index/trampoline.S.ABB830BE366004AD.idx | Bin 0 -> 406 bytes .../clangd/index/trap.c.E331BC8CB04ABF35.idx | Bin 0 -> 3624 bytes .../clangd/index/types.h.9C15A82D28EB699F.idx | Bin 0 -> 620 bytes .../clangd/index/uart.c.382E637B5067D2B7.idx | Bin 0 -> 1858 bytes .../index/virtio.h.7AE2FDAEE3C87964.idx | Bin 0 -> 2640 bytes .../index/virtio_disk.c.8DF9309BB95BE078.idx | Bin 0 -> 7156 bytes .cache/clangd/index/vm.c.70D05D5C0213F437.idx | Bin 0 -> 7370 bytes Makefile | 2 +- compile_commands.json | 702 ++++++++++++++++++ kernel/proc.c | 4 + kernel/proc.h | 1 + kernel/syscall.c | 15 +- kernel/syscall.h | 1 + kernel/sysproc.c | 11 + user/user.h | 1 + user/usys.pl | 1 + 53 files changed, 736 insertions(+), 2 deletions(-) create mode 100644 .cache/clangd/index/bio.c.34489AC9E3FB27B2.idx create mode 100644 .cache/clangd/index/buf.h.7DA89D0539A50AFB.idx create mode 100644 .cache/clangd/index/console.c.A959DCA84FDA00CD.idx create mode 100644 .cache/clangd/index/defs.h.72A9C4FFB86E6400.idx create mode 100644 .cache/clangd/index/elf.h.B51ED6807EFE6571.idx create mode 100644 .cache/clangd/index/entry.S.7790893A73F2EC77.idx create mode 100644 .cache/clangd/index/exec.c.C583EF6E813AE52A.idx create mode 100644 .cache/clangd/index/fcntl.h.204FC1983BB1DFC2.idx create mode 100644 .cache/clangd/index/file.c.E75BF18666EA6C16.idx create mode 100644 .cache/clangd/index/file.h.2A63A83574D7D652.idx create mode 100644 .cache/clangd/index/fs.c.DE158A81433875BE.idx create mode 100644 .cache/clangd/index/fs.h.F83902F1C88C3791.idx create mode 100644 .cache/clangd/index/initcode.S.373AF54AA740F373.idx create mode 100644 .cache/clangd/index/kalloc.c.2F15DD93067E2B26.idx create mode 100644 .cache/clangd/index/kernelvec.S.06F25524429F6CAE.idx create mode 100644 .cache/clangd/index/log.c.D81C51C68A1AD96E.idx create mode 100644 .cache/clangd/index/main.c.2DC262271CAFD048.idx create mode 100644 .cache/clangd/index/memlayout.h.0B2C565D58B84A48.idx create mode 100644 .cache/clangd/index/param.h.37451DCC2B36E012.idx create mode 100644 .cache/clangd/index/pipe.c.2473E067140E4F18.idx create mode 100644 .cache/clangd/index/plic.c.2EA8519EDD3A2B20.idx create mode 100644 .cache/clangd/index/printf.c.0918689B2930FAE2.idx create mode 100644 .cache/clangd/index/proc.c.5346DCDE506E9F58.idx create mode 100644 .cache/clangd/index/proc.h.27341B4843D3B8B6.idx create mode 100644 .cache/clangd/index/riscv.h.6737E35D6CB953E7.idx create mode 100644 .cache/clangd/index/sleeplock.c.BC30DEE970D57711.idx create mode 100644 .cache/clangd/index/sleeplock.h.56E9B1C95DBCB92F.idx create mode 100644 .cache/clangd/index/spinlock.c.1B29CD753041D103.idx create mode 100644 .cache/clangd/index/spinlock.h.7E8FC04641EE310E.idx create mode 100644 .cache/clangd/index/start.c.92F9EB51DC5F96B3.idx create mode 100644 .cache/clangd/index/stat.h.AEE4CE7ADDE89C85.idx create mode 100644 .cache/clangd/index/string.c.87F56374FD494C3A.idx create mode 100644 .cache/clangd/index/swtch.S.11DB57B07ECB88BC.idx create mode 100644 .cache/clangd/index/syscall.c.05D088F49A8C83CC.idx create mode 100644 .cache/clangd/index/syscall.h.66E962A052CADC6A.idx create mode 100644 .cache/clangd/index/sysfile.c.C337A604B3627C12.idx create mode 100644 .cache/clangd/index/sysproc.c.E5BC46BBC06178C3.idx create mode 100644 .cache/clangd/index/trampoline.S.ABB830BE366004AD.idx create mode 100644 .cache/clangd/index/trap.c.E331BC8CB04ABF35.idx create mode 100644 .cache/clangd/index/types.h.9C15A82D28EB699F.idx create mode 100644 .cache/clangd/index/uart.c.382E637B5067D2B7.idx create mode 100644 .cache/clangd/index/virtio.h.7AE2FDAEE3C87964.idx create mode 100644 .cache/clangd/index/virtio_disk.c.8DF9309BB95BE078.idx create mode 100644 .cache/clangd/index/vm.c.70D05D5C0213F437.idx create mode 100644 compile_commands.json diff --git a/.cache/clangd/index/bio.c.34489AC9E3FB27B2.idx b/.cache/clangd/index/bio.c.34489AC9E3FB27B2.idx new file mode 100644 index 0000000000000000000000000000000000000000..4605511d84c484ac33e803dbd80e30f12da881eb GIT binary patch literal 3466 zcmY*b3s6+o89wK-5AN>SyANO&cZC8)z`GCFO@adg?ea>r3&=7kGz8?8R2I~*D~O=% zE<{FoR7Fx6jWkoB)<_`o@+Kqwg3LFo*c?5 z;$8igk#MG=IZ^J5Y%Ey}t=U%JJwGu&k(co8!umd4^3`&E$FnC|p8KiEC7Jl-?%v|b z&@+ylH;>(2tY%*^yMC7OuY;4{>}lLE8hyMu{(;*R_i}0RPWOSL>x28Y^fa+OH(rQ2 zJD6;LJ|(TKHg~+OX6)*P4|fbzERI)<@0j|lIcNOO|GYi_Jo}HZTLqP<6kU{V)s);6 zT^j5x`pXBQsZ+zh{dD}wejoFSBqPwdf$nE?cK;bL*LG4EndFkyIGSveR%Br>4hI0{zw_V zT3_y}*!V??q%q>Z3tyKS*GxM<=H41*VC~;;^p$+(lJ5H9Te+^7k$d|`*FV@{j~A7G zW;xMRFzY`p`N`Rf2fuPDcc;I8?96y%(XC4N`cXatQ35#@#EMNwg~9+E6cjB8f8Uo; zK60*cI|APq$Yr2RY*MHc0$IX<a%pJBRxymg_k`1_AXT)yVDgsq ztY0=9pL~QsoIpMT!4W7isa5L0?Vz#tW%me6JgkNppxKDDDNa#?VNnf)Xpdv#OFwIG~~)6Nl^gdG=sAL=NNV~PA|D^MOq;~ zAtXUZ49(DFXo=)(ZML2ur`AcKR!ysxsM-ZJU68^(P}2joSR2ImK}{cx`=O>EY6G$7 z2cTwv;DTWZ+jQp6Dhc9~v`JJ{a&$QcqEL~ph(h(cdPAT}_$FPGfvDFK(xStt;Nam8 zH{WlF;}CD+Od4XlMQV{#NN;se9fIG^Y*%4Xm{}0H)Kjp?4@!zpmVD8^Ns9O^HcLs&&6DM+ z2r6U?DO#JjjWTU7yO+xJUMTK`a*{4bq4+42#v$xB#HVm6YNARSn}!H_QTigKSUFpcutJEhTlYsO=c^{4Yp}e0&83`RzK0q+e z#vs{>*^79y+Dy6A9Bq!p?i7DhRFz+^I245VP3$I)_@|Ps0WpySfS zWBTX<8-UCJDX@<`&n#qX4F3^sHmD6@xW@?bT4P>|(PngQY-0-hNG5#Za7L=`5~YdM zq_S$Q)QEIw9n>^(Bs=J7q-duyxLwyy%^ok5dg)YoSL2ME6zU*wppx6i6*lV mSOQc~-B44%N`MAkM6iNG8f}=2)v46s^3V|Fs%Q1m)!={q*O%1* literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/buf.h.7DA89D0539A50AFB.idx b/.cache/clangd/index/buf.h.7DA89D0539A50AFB.idx new file mode 100644 index 0000000000000000000000000000000000000000..46c2b702a9a007c5d8fd298e976c44ad528ebdca GIT binary patch literal 870 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 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/entry.S.7790893A73F2EC77.idx b/.cache/clangd/index/entry.S.7790893A73F2EC77.idx new file mode 100644 index 0000000000000000000000000000000000000000..e8940671fac11570a3b66ea7e3f69ab66dd0c028 GIT binary patch literal 266 zcmWIYbaP{3WMFVk@vO*AElFfyU|+>5uhU-bW2EU)-PkV!EuNv_#lwmdKN+1IYgPhTE0^grSh(-E6J zGiFNvGwV607o12n3p82j;j!ZR1AnvI4T@JL74jBw25PIc%Jk=3Z<)O;*GlDeJj>fQ zyKijL{M##gms_;%`&6{?P2GwIi{_a+etz*i&40$K#oK$<`^&h#Nb%f$;Qwy{(Hpcoqm2NN?3 I7b_z>04ug;@Bjb+ literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/exec.c.C583EF6E813AE52A.idx b/.cache/clangd/index/exec.c.C583EF6E813AE52A.idx new file mode 100644 index 0000000000000000000000000000000000000000..43bbc2768d2c7e6fc326e0bf8896368f82612cf8 GIT binary patch literal 2618 zcmY*a2~ZPP7~Z!egbiy5Ie;XDg#ZGfC`SMh0vV#vAcvv>X+Z}?iyXBLv5f^1rq(Fh zdLf{Kg5pqHt@Y{@DORx~Do6pX=qUB9N}7syPra|-_V|)hg;pt z{MC}IZPhD%yF<^nMtJ>mEUCY@X5J=td0XVUy1sY4TiQ%pC!b60dN}%Q@h8LQcbt9p zK%Bkq$>L8Ua=-%l^tDZgL=D|HhXU;ztlq6E%sgKm^I?D7rRyFUdprAk_QpN@29(*q z-l^RaSa|@Gp4czkm2Er}do)Sdbki;Bt1V5FFITSnLj7vay9uR_m$38&&o4W=hTaKk zK79O$@p8r=4_$({ovAq)y6NJdbC!zZT>+9vB76m8Bq;!~&qW3Sd=$LlKUI04ZRGMT<*TaxiRlU%;R79bo{F zRInh}6NN4HOJ6DIa*#t>qtm1!y0(MxdTsc|AJSU^u@yL@K!0_nL|lw{q=bS>?5=sT3brny#->LtB+l<%Z~I zv-7?)e5{Luv|xjAwffeXP}>jp;~=e;p(EB#zpwSM3KQQXLNr7ZO-h8&pm6S6 z1A=Xh)=WoAx6^okmVNN23G^T8rUO@-gd-W zlZTVwXzBiN|KA*_)P3DWzj|XS#jvIsq8TnIL6RzGm(zvcyAd)nV%_x-RHB5Ggi%Ve zPof7>JGn4-#ldO=Y?_&G79yomE6A%j`jOEN78ghaqa;bnop7hKB4Jh`RUiUMQ=6Qp zZM>7U90rssr2Z&bl6v3ieKA4O|K zxDyIQL(jO>fiY4Fl{STii^FA%ERGe&WzYK znfNsTuK^AWZUo{+AVU~aKJA`g{#ONTr?;awAGy)xKWbNE$+fU(XP)!ebw2)(RC-wY z6oeF9L4dOIMJ?=k6gSEV*^*SWI9kdejY<=RP*$r_v~TU}S{P1`>*;F!YS!34*gQ}V z!zJJe^sGs0HDIj<^!(i0%w^IO&EG<6ilFFGSmr%=`Lo+Q-$CmNfL8#UBVz?DE1Ae_~Da@2GXbX^T0iF!52mE^A!r%tLZ2)|P z?LIsE&(X)uhhV}gPn9p~La(^1V$gW>M@Y*FIo)*5kzv_p$+8wm&*aRconV8v6b<(} zeu8uzu&)D-Xm%?qvweD2C7*zTNI@ipg7zgne6W6+;3RBE4mXGP4(~)|ZZJxrn3kSaX6^mEw|5>m1p@>Lg5U?^zbBX5F&I8I;taGc6_v`7OOh&M zm(jCw(*JN{XkB~{+#E`_lAbh4g>%Af2HXfZjetZI9lRaYd;D~NFAV5~d(lRTCqGdA zy?fDlc#lPMqir{uXEfbZI8(0LMy3hSOkz^g%C!oFhG!;UXesQw38N4~!VLwFShFlu zGpqVOEK9@F(3=MC4l(dIZ;0#+rUr5Yh`es$yNF(U)pKsOY6W}9u0g>9ix*HuclnOHvx z!yEVp`nvP$x-a@V&{ha3rj6-y#N3J literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/fcntl.h.204FC1983BB1DFC2.idx b/.cache/clangd/index/fcntl.h.204FC1983BB1DFC2.idx new file mode 100644 index 0000000000000000000000000000000000000000..49fdadc755f547ce0cea3c6542429973c5eced39 GIT binary patch literal 260 zcmWIYbaVT|z`)>~;#rZKT9U{DWD5gvaY<383y`(~;)*%R9;eTEZoPE<`uP**eXpKB zt$*6b@9O!pI-Tn^j4!h%-JNq}Nm8sbvvTs^H&+(zxgzs-%ac8mWcKo~G1z7bCly!b zCIO9MC`wH$E(X#o#EcpR1MZYFaxt=Su<(PVK%i#dg7rJQ_O1j9GjlKtKm-{W{9iM* zxW!4V0SYs5F!8~JgFeskkBj_z0VvGC!2nn7UTFA5W9Q^sKw(A>Mz}E0?wmxB*5ab% TVr~$FvB#fx(}$;%>lqjTuxm=C literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/file.c.E75BF18666EA6C16.idx b/.cache/clangd/index/file.c.E75BF18666EA6C16.idx new file mode 100644 index 0000000000000000000000000000000000000000..acd967a3df00c6671f2f88fd1bda2270b08ca250 GIT binary patch literal 3814 zcmY*b2~bl>8t%pbIXZbckc2=CBw${YD=Hp{qJT(*h@uV)B8Q@@94bk;1T8EbYIOy& z;IT{TDj+h>Fe;<6%B&^h!RY8HjFzj;EO=C@Gor4?c#M{8$C*w)Q%af*@BjY4 z|JNzz`1pPa0I|8|vcjeI93B8bf&VtUb;T11zz%l+%69IWZ^^$KF5R{JPOQYTsojzi zW8&R>oGDyC!uqG}t-KlP$-1v{18Fgi3vH0cuuE@X>1v{6nE|%rI z^W7b|%KARvR&O`=bgOFE%JoG*7dyVcQ|(juP(QjrJb2-k_c@2(cfPMYnJ!xx{pGrj zZ@sQ74jnwD`mOoZrC|--&wkQZv+X~0`sZmH4g~Ld)G@j^_qa0XtMB@Zy{}%*TEZlZ zde#0cw0TS6#Td=T%Qv>nY3l5rl@|Hwvb1LT%eb9!BWfnP*`~3_ZYJi=dK)xwTzp_O(0&9@&l?3I^kq6YFV480y|cgS-~rgSYFFczG;z3s@XQ+4Bf zACyL3nY8%p+?^+f0)@{VkEb5+Z9I5Ie15`%t=snG`3An2E$J&}CdH}H;u#CNw1EeX zXxeLZlD@O^K0UZ9W^MPcNBwI=YfYbb{qjj+@nF@=rpVr9gWcaeOt>_+V1LzqZTFAr zqTYV~r77)Sym)eXb>9zriqgMH4h-x+0c_=ki&Jslz4P^IW$kS}0uupXt0Aa{0)tMf z^8o_>Fc7H&(M$iHYgdCKpLO| z0#7%m_u#d@XGt;pLJ=5?&6B}ofk7kH;Ke;4h}MH=|9Rglv5t#GU_3VGfjqv!U+Ry& zf8Tqqt;#;MKfPKE0YF7X$Q`h9iCq5S@dt6hJk-sS27C7-5P`kDfj8fvm1^>|@ZvJL%=^QGEDo$om)ZU$1mKgi z3r%fJ@nVQr#*;xLBHIzK!7OHrco<@nWJ$waGO<=KtIDMcTML!7(3j-suj!sMwiaB_ zV<$$zD9K)kwd?H$iX2eyfG$j&q41CFl8Gd-Ncd4g5vxKfxl0^2KolTzX~F7*xHgC~ ztj<>#Kv57AG@K%%$jI?CiA*wAy4VO&1P4WnqGeQoSaGa^BD2WsvZc-SxSn$)As9=! zlD|?)R3a6K19X-j3GZHa`?@Oc*CBYe%1tFC0fijdm1hmv6pDvyp|BPzh(2Ubyo|F< z$ugmS9qJj?JHqh%MmVYwh7kkV9?y5yEg42#r>oweiX#30-#&H$UM-WC z>2f-?B=%xJ=FeLE7TA`RY-M?je^QO9aHRhbANb@01 zJ(|`l-y3!o^ib6d@MYPVt zm@oxJlVy`R2YrfQikQZpDoynwj1ZeA&GVvRR6|)c%@#ryMA3wC};JWdfOu zd@4u<4HJI!9YU;5rsFhDolZBBXtOi(&j)&j8rl$I6WkMAvS5zLHw6HtPSF?euCxBGt2*SK`Y^2Ty1VLER*C*-xfwVZx* z2=Wd=0U`8a&olGJFP@*mg`1>K($VNQL;hwcCDU?*Jr5!x$DhLlvgO&ngjem2t4{_k zBfrBZJsBlSsP`iAB8E)Dolcy|L0L?ejM~b?Wt^s7KD?Y$GZjpQjOyA9nPw;>jGW!r zr-gpv5!(u7tyD>7!O>ffYhx~B#^tEowM@s|Nxdh(z1EB4oz0ugse~rz(L~Sl%+pu9 zQE=N8PsHkldQO`P6a*qtV~8EYAH!){OVDA z$Ce7_e|F8;)s+@4b;*!ssHje*%2G~$Xn@KF+EiZDzHXD$DSpJUrVG+tRkJQ9uWfr? z?@xHx%D1{c`;WVuLT;vf`Clx7Tp?GHvxiTUQ5Q-O`Rd~X>b&5QVG=qXc3$kr@V>KN z`!8#h|8qxdkVgosxshWt$#It>S7SCp9>GD;@@Q{L zB-SfdMUh!X#wIIi-i_N;kw!!%_+WGkX7eZbD2&b>3=&Omoy6#H=xUQrCxDo__ zkl7=RXsLrVzvEQDLFR@L;f{Ft@-5&(SEgLPjd_QYn$hN3Kwdy@$(u KC;JITfd2#Ry!Ds> literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/file.h.2A63A83574D7D652.idx b/.cache/clangd/index/file.h.2A63A83574D7D652.idx new file mode 100644 index 0000000000000000000000000000000000000000..573e58938b228bda7c116883abae060df03b5eda GIT binary patch literal 2180 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 Vuy=KC=vJ?>O9S@_9=2ZG{{RsianS$( literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/fs.h.F83902F1C88C3791.idx b/.cache/clangd/index/fs.h.F83902F1C88C3791.idx new file mode 100644 index 0000000000000000000000000000000000000000..bd942a866909883d75f09c7c273fab17a9ccadac GIT binary patch literal 1726 zcmYLJdr(wW7(aV=_uj+qy=Px{jRA~@y9Le4HYBk`VuMIB3=k^<);OcCI9NK;F6C;k zDHx?qd{iPi6gipUXa*_*JuD|joe7oDnnncvhz#@9dnTr)zH{{3&dmMo%`^}7_WR#!qK(%UzA(Qt<-y(WZyBVoJX4`>YN$P1lQS^4F*s41 ze&(;eKizBjE;-b$f8BVgq1cr*Z(?-p;_Bv^M{gV&I~&zcExYG4Ur+x`rM0YO`;{*j z6kMqLWv6LHc|uPceYj=LMswkemyNw2b*y@9I-_Ap)t^IM2Pb|wAN$!D^e>V~WW(AO z5|Q>^gUk+=4kWCB&wJS9&PKoV}tk3YF>ce;~$ z8F9@Z)TubF0x&vs_pL#t@`8^ME66UzWfOpM!H4U5L&T87$X#%D8ckCLpnRn|_e6Fc zmlGgbS9FH}luuTk?s(vn<~fW=5bagGssNNTTe}~%`X-AQaX_>~aWDZWH=nstao_0X zGDd6)q4`R_RRGEdlI9N2E;>-dhz7~iX}Tr=<<{ZzP3_|?4U9NJo<(PA0#H63JhoC> z;@!fC3THEgsRB@bF4ljYtT%NqqC>Pt@mK|*{BdX@9U6PJlMxGCEszk<1fbma)M)AS zOR+A9hU7NIW)*<);@@h!6W=V{$A}SRx8k-7K>6)?PuG<=w|^=V@GebNQZ)g*p$6#b zq`x|&EVJtynYcmL6wM(3`(15V*Ri9&?;l3&kle1=nE*^q!u6{n8;$?F%3u+0!b8zb zKyxeI_7EX&D2K@S%@HTii8RrMG@1)&?kv38Lr2_Gvk&I_fHqN6d^dUxXl^vzot@H~ zv|!UNKhS1sjvtBE1Dg8|FNl@{n)?ltpw)opKEvH;F`&7>aQDvck>Tw1QZdke>bGJ! zJvGzOt?%tCHmEcp1t@m;_`iBEvg~9j?9QR!^*d`tXG@m^@2^#`5 zpE-P5d=H@ctYK~}31~iJNMkaf`E20@Q3jgN6w-a~ZZ*C3wn&o^;Bpix}is``X#cDtt+ z2dn(0Z$So69yq_yJn`w4*u}$ZQp|t;&MREFWbcx8SL5cg8Hu6|OebblpHjV@^6ag$ zh4eD+FNr}PqTbH;|62Wb(|WDMuM2-A=C_`iX)z(VAfVui-+_rUl(h}GcJ*}zU0b+y zp}3UNj2E>$+nrt$vZSOP}7FvCI`@J~oZCB_<$Mo5*2e10w{o%R)a_YTBJQjCVBJ9_gm)9KB z6kN<}CY>2_#f#@XND2hX*lKqCRH&H>6z1aRf(sX=<|Klo zi;I$r!Gh8t9vCpooY^>~H+b}20|2J4wn6{^ literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/kalloc.c.2F15DD93067E2B26.idx b/.cache/clangd/index/kalloc.c.2F15DD93067E2B26.idx new file mode 100644 index 0000000000000000000000000000000000000000..5679b2f48363095f52ade75126e1c402986c6664 GIT binary patch literal 2050 zcmY*Y2~bl<7+!Mnl9%uTIXDu?(*y+(VsIjcL_-BkNHhvm2kTMfP^(}`0-_=#Z9S-1 zQK&~fP_#f5tSCCxgL)7Ui=~Pph!w{wpy(i4hkEyscJtuPWV7G?`+xuSZLA?W`VA9+ zDanTHv=mz+4FKRl{H!+15-$n>#l%7Op1tv%OYbVs)|c-Exowx{?fPq8c+4-?H>4*i z!g{7Klg##v;<~z1Up;#m?DMv>d~WpAcH`>%e%t<7WGMM2@qO3rtO?ty>g;`-%9W3G zi7&>>wpzrddrz~D&DW@;@}Db{zJ9H`lU(0BaHCxzPVrzAmJF=$^YhEq|ZXE(g8>_TG+CEvF-oo4(_FH-ucIFUo6KCh2_A3pp zo`Drrm-ohol$T#p3!e36m}_di8*OUs^}=SPW9h!f*0tqjB~;US&fFy{xGJ-DU)!U0 zi|SDkw(=@Z_~CwjeRqw!?ZlWpYK|n1VdY}acjDZ{d+#nbePjofpzmDjs|$7m>&mo+ zDi;8Bsk#_>R2!cIf&suq6cNL*5E^oP3kMcZw_lqs;{t^e;5;tR-LXJ3PnvV3D8?fi z1!DM)%EAQTD+^#vQBp4!Mqd2uKRAk2{j zUkj!Lj|yj2aKR{oT*ws)9Sb!3Cx2_7Rgr!b1wn*&FbJkgCu5U|%xNxSBJ+?;-!DI3 z{pt+^j3dk#6Jt3R=xs?!wZ5a0-D9zabq&SEs2FoL2UoMzZq9&sI2w+TNJG&uNTg+J zhuqY&^={4{;s%C+MIs~3=t?3J+vL0nXGUc?W(7+@@o;)LLWVMmj6RT{>q2GjTH!xq zU5LynViwFC{=2XovxU_|FXDJ`rtmm)L3j4%-uv??D6XQYT**jgn%S8+oH>IvY}Q0v zo>&0mp|~1T^GO0NrX7Oxn4S+)Kyedhaw4c0Dl$wdC@w)IZX~%fM5%=2HRZE+biMAe z5lKrtB~WMp#g&mtBdiQcjo=+BF~Wr+VMAV)Lxa#I()&%*_W|Q_s3fCt+N)lO#(Q#mnn zUbq(wfZ`gaW{A8DY=Z~nMR6lyCJ1mMofpP_jlpabi5~(ni zkVIxrvoA!Rugud#(lUO*P>jw z<}G5Mup{qrl8@J-gO9^k*dLvLssG`@WC;lemLo@9w7sQG3)khpxUyb4YCn@v0z=QF zLsF3i7j9gVNK=&Gv?<^rleBxLNnv?p`Yd0rd2wy($*O|ZkKYz7(4M_WN2};oJR_+6GJl;_;Eo6fij>3A2Wh+6o0o| z5D_yYQN&2p1k|=40j*pTa{(7H1aT>|EH%^r&e-8x=Xp5HJMY=P?|aX8zLTVjkAG~7 z(AW%JVeZ_5SqwtRTKLN^$jfSzAXLU8R9LlbYD#ujsLlEOrOVtNuUqxqjI*!loE-6gfTN27N7HU4+* zimx_&Xsnl}JNPyJaq`M494~wQ$4%AP{n)m%@4r0x!R5vA4lRCMdR%IeYsULe*Er@L zah`T*&A!Cj->-et_jli|yf5S5%>Q!f^{+AvY1V(f>QI_~?`qNid}hrZfH5}HvQj*= zT{qNcRk>zexOrS3;xzNKmWXfH-k;Vo!DH&1({HCSjvG$v?;1ibNow`BhVcDwb3g2X zA$Q!0n4-|@#?V*RarM7zE6y%$&Axyd>n~^vjo}*O@)?C29~|ykEkAYN?pJGDCV2I} zO`}{MJ@MK)fBxm0vp3#*Bz<(!-FN-9Kl)wL=Z&+vc>V76J5t{z%Bv+kZLe?fIja1~ zzVrUq-<{?IPS}>)M}Ic{ZFyu{)V7}SZQYwJ zk_YzfEDhT_aq>3x2&baV)$25wZ?8MLtEBC{x&}C?ES?qOx6v*r?MKPyuXhA~KhNJW z?{f9*iNCccZj6Zx?#w7f)~wNHa@N)(|VxOKK?f8%Tnu_wcxWv#; zY!=p921dUB=-|xs1CJksO6Nwfi(D4C47|}Y#UC+Shv1jwte%}@T@JmGhY|u;S(3{vUR+$WZ!$23-i>m$0H2+MY*#N3Tl4Z5F8(W zA_%F_h?fxWul2VxH-g^HpH)Fm+CKMJIbalu5I+))l=+XgIL$amq>xHn<2+DY)Sn?2 zKl|l#jK&Hb_5<1vihutN&LO>;RJ?dv6Gmf%F7wbl&fE~X;fG5;b4K@nr$SMq5bw=; z%goIn{d44*uiMX`!N^S*y%a5#`;XU*cR&gY3$Hj2^x&Fje#hh|ofr)h=y7PArMV%a z*Cy2`bWBLSrb6z*9_c4kQ zCZC3;Da;L_pFI7sCao>@5k|fOy&lkdVEyAY@ph)odB%C5`hS*r?fqNxj|vSDrVnC+ z6y}DE&zn0h|FD{B7jtIKl89qIN)u%>s9e4n)Wu-kK>Wd%f_*7CQ)~o#qZpTgbs5-G zz8uu$U_H2Lz8cikVq6PWwO~v6yicHz(qg-Z zLBh{bk|>V+9PHBIG~T#5L|7uiE5eWL9P}!}gI6;QvLuzrxEE3g=7SZ%TB0{$ zLYoLzvJU2_E2e7)#l}zfoX%5}rO47!d$K&Uc!Ee;vUr}3sBU7|m_Z{j-vvQkFpPv_ z{IN&3dJCGO1-~aS2}W?-5@NjzoEzOrXEjEEDul>%D|N~$9xutthW@?$x3(xaO& zfSUmV=&%*QtpHn!Hv_vFtZ39LK~V`d6kh@E3fPiulO!rEW6Gd(nP@gzNgb)c~vL%s}Eg%r}C6BLoq1NfMTF=HyGKF9BtVc-Ix6s1P5TDv(!!mhO5F$oEi8 z=8?RZv@stl3*|^=cEK?#KMmHU2r~1*KBf}Q{K32dq6{G9OoF>W+XapUlgw|Scp=|o zem5|?>G9$Iy%fl>h7V%@v-4=)n=Iya_Bt2pEWN#6gpzHN9YwCQ$#fLE&bASpi0d%l z1olnfLa>i#N6hS&*#*J^iAki>MjRKIVh+uYJsT*CB>Z}=>!E?fk+{m zd*N~x(h-hQQ*}p6qNNnYNMb}NRuU^h6C5TuQ^)9Bbsi$*s|%n=@2VGZdSAVWOLj_j zr7leNPWGiJMUo<=C{>$kOHmq=CZj0RDbtm@KGQqXm!fPg+mfOjZH_HPxz@RM6ctJe zrGv$a;BI9xsHnS3Kvn`A#id|b3K}uCE(JS^4WKfBl^8o2z?EVnSQ^FSjbLpQk6!`o z3URp0KwSn}I=&o~<)EVB-VBn>Af>nhq!l2ixDuq5Vq67G704*R1Mm(|Q(O(oYVrKF zU|9YXJ5mdg-plJph>Y!$DX{HV&!WMG5xcbKYXvt_TIq{siJSVwl zs*oOV>wzJ}Jk0lkeJ{8XOdb(h&ir^FMHuEMxK9wJw-iMRMl)YQZ_VA{ZnY?-{U6rA~GMLn+%(ua{5F`uSP(@^iGIi`mIx$e}vO%T)sVMM$p8K`^c&1{l^qL=!M)Yo>L`5i~fFF^(_6Wr)#^t?Wh zq7*hoREeb8r8>~9rODGog2`58Yv|T;>~b6^%C*lGl}Lqbp`3cm09pgskYHf`5V#x? zXV)eWDv&^GWD9UDVo|h%yd5~=ag!*xE*fML_Ur<05_HUWgIzZ`P}~E!hdRmRG`5#M z&`csy-vBGxzaQlNz!6;2YEygK)&8Dvmdk)G150X1HAt$(r+F_hd&O1G07wStX(nzJ zQjqB_P4)GzGdmO-7S9wwyD+t!c<(*;rBD z(Ru28$XuA$d+J3f*)7?V><#moZke7mtc~E_2wpTaP2kxCJ_P5@&6#D|NPga&{A|;g zKvVPlGx$P8D1`im(BL}}p|JEoQfXytqmbLFHTImfR^<@p$U39{1Jd3B&;S4c literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/main.c.2DC262271CAFD048.idx b/.cache/clangd/index/main.c.2DC262271CAFD048.idx new file mode 100644 index 0000000000000000000000000000000000000000..4a05bc8cbbcbbe1d7fb5bfb59f02404b960e0bb4 GIT binary patch literal 1142 zcmWIYbaTsNVPJ4h@vO*AElC728H9njxTGl4nUR4(jG2L14jGH(9Ijfx+9BOGk7CJ!330+3WWkOxTtw{$RonTkZFj+ju$}W^65)GX2pc$>;qq zVrBSl9A*5lHO@BQTz>ZS&{*+pk=O0ttYwN}-k1IUw6Bs*1KWn&R*h8IwcW7`CtfVz zkU2l2`Sgu0z82fvGd$1zymwJjWaZ6d{W&L}OioX?-@3&@cg1Gj1cOH1pQ#F~A8-7i zB=qSQ!-;@^M~*xTOE-mB^DR;8KR02Ojr7~lTbY_WFS3f3JX-N9$iIBbl#fGqpL+oO3z<<(s1ZSLUfq(!UzJhG&IhXI4ze|7ZPk z4KG;v`+LRaXRq|V`mXHmQ|s-oH7aVKDBcg=ay?b}onRgRYq>COb&B*G%X4-@8*RAW(t^LYDW7+zlqsRb(HVdddMC{k5aRfF;Dxa-){ zPdu*!S|Gt9!2=V%Sotp0#CCr(P*|Ep8txpJG$R*Eu$}kL;dx@~(*abi&7=(vkLIww z3N;EDAYon>UbwqNjvl!Byid9pC@jVz2Dg%bSItVtgA4=60dA_I5D zn$}&H9NEL30)^#R<(hcfCw;PlsxcpZSITH8=tevN=wN|Fv!AW7#JiF rOeq9Y8o^A?P05i2az(|(nbCeM{A literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/memlayout.h.0B2C565D58B84A48.idx b/.cache/clangd/index/memlayout.h.0B2C565D58B84A48.idx new file mode 100644 index 0000000000000000000000000000000000000000..9f27e6d4471b38b719688db7ba13f27d5bb0ab17 GIT binary patch literal 562 zcmWIYbaT^UVqkDi@vO*AElFfyU|vkKfhvXLUN)YZzZP4rLLD zAOpj>5Rn_^V|_+i2^w~||?N$FJrg_SszL}9`{p-$}WaUW`c z!V(-3aMiEZt-Hs}b$uRC*q*~49wu{mobJc_UR?|nmgJBGMGhDUS*K^s&0<>)6qe(V zg9~rkB70Cv?AB?ZuqubD7)&+iq*ZH}wVJ;Gg=INp;lj@j_QthW+I|NLt8u8o4Jk^^ aNd)OEE=n%u1~C{foT_+tdEw7I1_l5Yc!i1p literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/param.h.37451DCC2B36E012.idx b/.cache/clangd/index/param.h.37451DCC2B36E012.idx new file mode 100644 index 0000000000000000000000000000000000000000..963f60d465ff92ff38a11e382ba4b4ce2253dccf GIT binary patch literal 444 zcmWIYbaUIn$iU#7;#rZKT9U}Zz`!63#Kk2=nJz%u3WzJ_Bzv4bT&+2rp*D$`!o^*H4ktIp7%FN2if8ShLwC9S<-=-srj>PQcVPmk(5RNIX z%uNCs!%&o(R;&%Qt2>I_bxO`@WkxPWRt{DkkQ4}<5X*L)^x?fOP?(W}5iXp$yfQew z;H?o*n2m#tAEK6lA%|mm;>SIjkw9S{4j#C$43BNs5?+z@~y%n_fE>M`6gP9j5+&-aq!kh&M?gNDx zI2ho<@t1j9>=^1E0)<&PSm1_yc3B_aE6MZ-D9p{l4HwpEpCa0H`rj*{FcSw8T=-Cl q@p~5`=`TQGE)FiZ=Ye6ClL)fExG1@p8^mBNT)JzUr&^3Z0|Nl4)oDQh literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/pipe.c.2473E067140E4F18.idx b/.cache/clangd/index/pipe.c.2473E067140E4F18.idx new file mode 100644 index 0000000000000000000000000000000000000000..fde189201f88162e206a4321ec432e1951c192cc GIT binary patch literal 2820 zcmYjS3s6&68a@dj;U*_HHxKe61d?#WLqI@5&7`o|sqG%pIrk(pIrD#W z{>S&f&aH7)R{kIc;K5dBUsqdilK=pqME_84&_BroAUhF&zJrHquWY_m0KYmmKQ*!5 zapO5vc~kn1&6iY3QxDP;)sLI6?_s=(jGOB`(K~Azbf1lkP3h0(zPqOMBP%-}{Ez)i zv-pr}^(m=(dU~+^>L+*qk++cS+tL5+@B?c)Uixw7U)L^=>aNUfinh&pdxkghgRgqa z&wt-qJ@D(IO1I+hl@Z$Zek45c%!R)W7hg#DZz%Nrwu|@Qx!-f~Ci7Wor*CQ-73F=p zv@WR)_rNAYt_;hZ_jRPpZ`IfKX-j^wEF(8kDDu_mWF|b z+%jf-uQpd-3XeQLc1b($Yxwc>PbZ&Mw1(Yph}h?bnm$UNNjr1+?4Gawes{FIz`5f1 z0Zp&bN`)k4XC&3t$5-rmY*&Ha;hyzGeNO?Hx?B4Rs z?N@j+`{;&8cBgC%yh!;QC*`ko7Mu?beel|opZgOnE52O5gl&oy~u<#KPA zoCfLWnikQL*nzL}Mh;wC_&C$z(tu{j0-szCIIC8<6mXnYja#)N`s}ynh`P5 z*nzEk&)w;G>!dY6gB9pnE|k-;17DxJ^X-79{n70ZEJx05z($!KVje=y6Zv3e8aSQa zBda>)dRYhx&@~i6iAf+5NC5S-y?dqm+0mnYZ_ywRIhQJ=>ezvuN18g0?dzDj4M8!o z_5**CX)Uu>i<#&C_R_+t`TO6{U=^}f2oTerZ3)AY3$i^>D}6mPE*w3ChGI zp$b7o9I6-AL*k&B-<(8Hgda)5G`$|-r%fYOxrnBfvdRg~94d!H{~S9R8B)*Z@gSSQ z&k$oJ>=CtNaTswsqBpM3xhjt4BbUnr%eY)2TP!H%5FS=a92-)Sxmjq2H~?fTm?pIXqOCMmQVQ3c z*v(sBj#BUny%OR#EC^FrX=n7pP8F2bB3q-*n1)Gz;ikWg%z8E=TNz&_#KQ?$hR+Cb z+7F*{^reSqyOC`p)hNRO@Qx;mW4lSJk}gcAaRA7cCzUg#Dh|paC#Y6Z%gyf0-wGEN zo_aNasJK;bJ&pp|PF1HKr%}u6&r`G&Z9z(ExjLCdQCrlR7&-L+n|vX=Z~!T}Qd}nD z$*=dPV^8*hbHSv^;h_Y`+WB^haPsgy6fx=McXKtwI%tFzpBy|w!4bFSk2f59Q8<=i zHJAltvzcrT;pzy*vG)kuLRL#@xj93=J4ThnmFi%@*5At|6sH zRbwh)uvNL$fTLJjcU@ioht2OJr9wd=MN+R6RB|(fmC>9mem!un%_W+eIm_pFkgWk4 z;%3*7Whlg+@Ye+`)#9gxRN5po$*>Y+OOs0D*2rOWWRkiEG6Mye!qKa$;~%DK{w+l9 z5UiFEr7A&H9I6x6#dW@g-x9Y0L1B=a1IP~Y2f2N?)!`fe!k#*Z5~?-S#`Ua6)Weye z?_p=tVhKXQme7_(!Mu3<{L91w02U(V5HXvGCL(4L(aMQDw$*61&qi|kshmtxMz+BVu9c{iGF`4-WB~sMdttIm literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/plic.c.2EA8519EDD3A2B20.idx b/.cache/clangd/index/plic.c.2EA8519EDD3A2B20.idx new file mode 100644 index 0000000000000000000000000000000000000000..33631e9dacec1217ee117da5ea0ff3db32540d2d GIT binary patch literal 1156 zcmWIYbaSg=VPJ4h@vO*AElC728H9njxTGj^1tSB)Hf9EfiaB$Ge6ytu1?JA*)b2F- z@S3dUEeRhKef8T~w|rgrB_$=ZEIcCKUU0biqOQUx4WrVKX(v-m@723x|0y_dj=y34?Bo8kzxIE;Zm+L1QSFcF_I(I{wb?T8fjQ=eAlHP=6`kH^rcp_r?o|_vJKtI z-+VQ6nMn|D*2YJcPT4xTEfux8vu?$F&%bV26ef2#V4a}*$=rge1x4@9?%I6#dQ3#$ zM8AI!GRJghRPFDm z!xBAh_v@S;go`V4lUjiB7XANlxkSSbX&wf31_nh%21PEp&5Qz@8KoFFnV6(iWEfm} zeFNQ3r&{wcXaN-nGYIp@ZDJJI#3%z&z@Q_`5Icig$Kdf&Hy#EJpaLxhEnc}Ti~?I2 zWf?e`8MT25?6~XL(@#9F<6+PQD&S_|=8)USD6o-H0%U?3P(e{@TJbty+R6CFF1t>I zmxGB%kxztA7U()K;8B!Rmo$L!U=C*F0=pI_%)E5*iT$zr^caDvc_bxZ!Z6nZRfC)k z6Nb4NC=7BiOt^b((l=&b$!w4Vc=-fj!aR!ny!>z;Z(j_<>nkC(%sh&syrM!d8+a6z zd6k7=uH#YE;nfj>Spy3JpmiYc!_0lPke#g|_hlm+&^i`AE|@Bybu9cyJV_QwE`%*I zEHX$u6+RUagq^x9x?C_j=kPe)kN3U080Z&%5q^1?oxtF+l5~afHf@nTs3msmG%(a; zcx0qt!p{!&#i6C}yQF5_6h@k``AV3+$U|^7g zGZ_^hiDW5tD(P~vDl5n<$uYnk#lWBdSH+N=o0205baSY`Xe1wP-7HXidW)lRfDY}JDP(e}#;SfZD;o}f; zQYJGr16&iC+M*cDi03b&HynNH@O9TK~4gltTU)H2lil>TN2R?oJ)7B%kRSz!aN+#}m zrjR_`FYI5a+0~P?Y9~)qkmL1Z^KpIh%vb?0zF>IvoRVqUNUFh5yyWQ9xPv{Hb;s*h zpT2Ulx?^xCwe)Py!n&2GJ~MnUlEu+=?-(gR*^wtI)1@40IhLfnchgq2PWhDStOz>S z+TQ!Tclh#fOK)aN-*Cy3>(8y5Pr45+j%k%GJV3>luexrjt)wq(+0pw-{H{MGq4WD> zouPM9<{sOhzPG=#f1K~HYA>C-P=c<;@m%!hTx@;|zcXyXzaK3BD+zARNedGhU&8_G&snyR@@ zVaoNaew-W9+`TSjM4a^C_@dJW!@n)E!gG?2i?t_ToamH4-*>x@J93S`Eh*dlVP&H= zu&>m>PhYe0wJldwOEn{P0X521*8*ym?%aAHCU)^aPXj!0YD++Ac*Ehn>ffzP#s7tQPm@!!U) z-}vaBg;`cUdDrdf+ZTDm75u-!w)me5@(Od7tI&-GX{QA5PVsf;gQ);8UVJa9!=O8N z{NDLEZLD%kwFd+<5FG`gJRAno2XEay*p&Z+KLkod2ZBHkhr#q}nRi0XtP%qR(-B=p zfHHzsq=-`d0ng11M2`gtLrKBK;>X_zz!VBFQg5luVQ_p>dp(tS`j;j?kfV4%=;!S) zm?pC|zu8`|YZic)P_&FI<2wwd!C=3lZs0;Q1Q95@02FW(3q%W~fX5;2wcR}17xxd; zTKOOn(LSUPPmeXNZLARwb9 zwKUFaJ9D&Tv+S?QXxT!L7J|k%aVuGHyJRp$j|e#_=i-W(Cg}ff2`B3NI;iy3Zsskt zKaPy!;ZEoJKWp0^Hno_7OcXClh))NZ82=bKi&ViXhDCaRy&NZqEp9YMuW|wT#%VGQ~1bswHr6=Ou@(jPZGd zmQ9q&sVv+wx=j09#z`PkNEUjqJ#Qd4xS%4k$cca{W6d&qSf0t4SB<^|)86t$WUyga z>=`^MbYl3pknv%P2_Ouo24EcP2D9!Y)}6?@3f3LZy5X!F!nzY!HAXzsdgYf#5%Ir(_NQ literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/proc.c.5346DCDE506E9F58.idx b/.cache/clangd/index/proc.c.5346DCDE506E9F58.idx new file mode 100644 index 0000000000000000000000000000000000000000..0caaa1f4723415243f04df8bd0d42d7036353b91 GIT binary patch literal 10580 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 C#u?TC literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/proc.h.27341B4843D3B8B6.idx b/.cache/clangd/index/proc.h.27341B4843D3B8B6.idx new file mode 100644 index 0000000000000000000000000000000000000000..8543678eaf4ed1ffe6f222b50e386b6177ac8c8d GIT binary patch literal 6066 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 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/sleeplock.h.56E9B1C95DBCB92F.idx b/.cache/clangd/index/sleeplock.h.56E9B1C95DBCB92F.idx new file mode 100644 index 0000000000000000000000000000000000000000..4ca73a27955ba4e3f2a7a21bda1b8c639af12ab6 GIT binary patch literal 486 zcmWIYbaT7M$iU#7;#rZKT9U}Zz`!63#Kk2=nK3{*9f&LDxSovWYETexdw6q#uf&%J zX@}nMAN}amw&l;OrE+{V1sVKIhtKR&DbTaEDByZt^mXR^DL1xi+P>;k?&Eo=<}mfq zqX(W!dk?wYR14shuKhjTu!LErPFbh8GB;^9(0s+7U10@p^#s`%*cccX8QB>Hzyt#) zP!0&rb}mwJJ|bek$H2U-M^^5#XsVM(w z5&vvbRdAZ+tp_*Wq`$9^J7jORE=|0@d+Ey(sm&>Sy?#Z%$ucX_V+;(txN_+xFSFSX zpD9~O|6<;@kp0i5eZRNdt+`#ZFM9pa+cs#3diU)hkJ#bmzPV5%Zpvl_Xw=^YJ8&LUlqa@GJo=| zn+xJH8`c^wIQ#vc8q?-I;?fH?_D%EJyEoL=cipc4&nrLq$?wz;J`vb`YH~;CS&@4` zANwlW1t(dRJKZnpDY>*Xx%^*b&W5KU-VTlSuZ>;$qVuFWYTuo6$g_Rv^Wn`O=G#(r zjIZVwl^0j$ChY>o*|P&{>Kep;=<+aVGBBueGjMY#6blqfFmSRmF&M}**wkz+;yBaU zz{4O5lon+WWmhN^C=_SlWMR|?N^eP&GCy^Iqnn382PmD)kj$=7CQt^HW@ZNIb~3fd z5{i1eiibf1DDA`G!>&*yPz2V^pe4r;5h5NQ>E^PBhd~!89l;R6p-?JN3bY%dd)ZNu zmFH!}KkzW<0j2dA^w7iniVlDJgR(b zd^|8=9#wfYc^!DzsJckID8gN<>d);j2=h5i4bVDJ;K8heIg*J-)s4xG6Q-979E31M z)4X`p*}`tj0b0(_#?OhcT$4?c6J{`vsxg}}+yEX`e@TBCnB``TLF;m7l`H@nz%9Tn zfiOUnUsN1nfF8e|ILrk+sy_Ta;xGeXG&7H?1giuOLW=>L0WVAo7dT>Jj$Zm=OL6(6 zmd&g@spSa66b<>feW16V2(b2`p~w-KGTE1*iYq5g#>X6JcCDQ#?C@mnxJh4m14qbn&JBs^w3CE{NiZ50QDS|}=FpYsS z3CvSPsX2)tc5zX1aXg5j1R@|n1;$`tP)9J;5KILGQxU;bhBFye1>9>_Cr7iniVm83@kutCUz!XFaeXE=EbAV7ItF}9|IFm znvIW55KO?N%^HK&<<2Tuz{bGFz`)GN&d3iY7&sXifWg2}l$uuD1*BnaVB`YZ4bug) z8z>C27$*GKpYKWCi@;b$9%d#cCN`KVm{WkNLGFO5hS5M_ko_P(fx!9Ghqfj5nH~fh j!p6zQ1JhiTnv)2UE-p$g<_0mCz2aT6%v@XcF)#oCp9Xv2 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/start.c.92F9EB51DC5F96B3.idx b/.cache/clangd/index/start.c.92F9EB51DC5F96B3.idx new file mode 100644 index 0000000000000000000000000000000000000000..effdda76d98e7d07a203804bec9124ef4bd23036 GIT binary patch literal 1684 zcmY*Y3s4hR6n)viF4=7Ogg}yI!#^4R6|mG!1%(=r0)f!fNXG#rd?m+av`x2ug zBg=3AUQdrM&dVs=XaNAQhi^flAxFyrU=*_=)Lhnh%1)np7ZKA=huY#9qOY;U7BY@$A&WJ z6aNg`^6m7mik6Y0$2~XsUH)T4k}=DXhn?UUBWrZ-DNduACa!60!vhcNE1vp~8J)N+ z-mm_q)H(dLiCZKTP8VL$Prp=&XGu@JWBErb|K*|m6SdF0AM1su3oWR z?v?6p|CGA?DvEL8{Jdw98Wh+8vLq=x70Gtl)uE~;$qaP6*icw=~9+LE3w)?{& zshc%~6_|oRg}5eP4IN)!Erzg^kg~y08!&Q7`4ki55aW(Q7DbFKXbHvx`ubwNd=wIW zIpmVw^!r~PYTPm52iY20BS*3?I_8E~KDh6XQ4ASGh9HM#?M?hb# zl~#ZRpf7i6n<*v$3t;7ti|2qM zzI{7+HyMfxNB&w6w8pxfX0&!yjNVWLO2Ku!jT+FaFWVCHtdF( zEmW{Ip?d|p_y79@TP#%5C=(OVl$YzYdKCKlU_KNISyA0z_A{^i4un;hib8B&Wy9B8 zpVApvs*+N&nJ6aKCRT=2){WM-ZMZWq1AXO~obAUKVISJ8Y>1zOup8#ajuS9s=r@{O z3k5 VYh%H+Bl$v0YXQ&RS;TP!{{Y-G?Y#g1 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/stat.h.AEE4CE7ADDE89C85.idx b/.cache/clangd/index/stat.h.AEE4CE7ADDE89C85.idx new file mode 100644 index 0000000000000000000000000000000000000000..4bace528f3f50dc52bf42a6b94075c1e87e22a7b GIT binary patch literal 608 zcmWIYbaRVfVqkDi@vO*AElFfyU|X9E;$?u4&eiLB z4B2d=*Em}9o8JGkVE=lHQ*O&+dBNh!+@xJV^Cu+>Hm~44t;@&2%Fe*V$;rtJCKxz? zazJqH?~01LqIg?A1`eP!I|n-tn1D&od?{%6OYeva9|I#$nw5=}6HLIQ=QW>m70tUd zg^z(5D9y&s#swx|(lZ6ccC=|c*vH4f0+i<9;NS%lFzGLSKbG_L3*TmAU}IolVqs_D z1``aN5T_NTrWOAMGGRVo*`C!7bQ-AKzcAWVID9pscBmfh>KE2%f?n~d_Kw)6`@WO-{ic)hDL7d{E U9=?Ud{BYp&Wx zY6hAuBI)y*v@dMrW2r6LC~*Gcy^B6euFP5RJmkcblb5&2&$5o-+MK&sVa9~0Pq!V` z_K9B%I`ZUeq+`&bBB>h!Tl%(F_%s?UyC`|+l=@=ZXN%K1d-W17Sh~J>YL~0I_@mXW zZ`^#{zFSv>y@)k-FW4ApUiWF@;mVlBIv;kO+^{ElUERbc^+z6`CLFr7@RWv(QSxJ@ ze=`^&l0%-`*ed)x{Nw!8rbCZ4mL$u_1{ z9RIwc_w|EV9tJs}G&2J;8<>De&scQQXi~m?Jr9EtP}+^bjU7zDq%V5CdEM_KbclyR z0Vtiski-TiVA8q8b2_8TdSCJ|NCTz$82H%01WdXpHLchKn37=rXXL`_Zze7j|MEy! za9Rk!yan?;P%p^qFr#78Kw*%VVZx97`JU9h2#jUrkzkf&mW6v>f=``K8}3>OITbk# zc&JO5DVwRo%;S-;QM1v4IT)rNXbULhV79;l4JZr>F_`fC=T#p{x5_MI=8+KK5a2~v z=fvg24>OWS!b!|Y8peZ#FVG}V;KEFTX$1;{0u?4)l$w(WViy-B7mI@!k{|*M7$r8{ u&R6|EyLJhqBtvp;N)AX$R9u{ior8@>fS-j~kc(T0m5-NGSW1LZi~#^;ctf%P literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/swtch.S.11DB57B07ECB88BC.idx b/.cache/clangd/index/swtch.S.11DB57B07ECB88BC.idx new file mode 100644 index 0000000000000000000000000000000000000000..7ccddfba12d8a5465e9d207db459e9b731368917 GIT binary patch literal 266 zcmWIYbaP{3WMFVk@vO*AElFfyU|_?6?T6cUZPGloNNM@s+Y2`} zI^SQj^Y*n_WebdJ4}E?a^H*S@=c4JgCyYNw+-aC5vNGI1e*Oic!?AN?I{&@5J;9(~ zus)};xH2~h=wybX)U;vgc{C;Gf literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/syscall.c.05D088F49A8C83CC.idx b/.cache/clangd/index/syscall.c.05D088F49A8C83CC.idx new file mode 100644 index 0000000000000000000000000000000000000000..81406680da55c052699be0c9cdd25e24b8f507a8 GIT binary patch literal 4572 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 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/syscall.h.66E962A052CADC6A.idx b/.cache/clangd/index/syscall.h.66E962A052CADC6A.idx new file mode 100644 index 0000000000000000000000000000000000000000..51d685c50c2af7799f859dc7a1b4327e573cb108 GIT binary patch literal 630 zcmWIYbaTsNVqkDi@vO*AElFfyU|vkKfhvXLUN)YZzZQQEFQ8V@3vs+rP`azU+_@XXIk!=HM0rNr8aBFZ-3Xf^r%_VF3;SL5Ls& z!`v^rr#>s$gM|4w_~5EHUt?*z=dctc%*??o08?E!aff);3`(^*<2PrKw%aR7PxSnd41ZXNB8`I!u%Zk zaNz~DiJ!BJzXbw?g*b%Z4xF>A^i1{SLqR}cRt{FU>V_ZBRCavclLZtO~P_|e#;)DTg^WU6c*$Vgd6f?so~RAt&2YZ zg}FGm_+eo(zbN^>w&kKvKw%CJ4!CN89Z&gQZJh8KC@jn&3^#k)LFtF3f7bs13Nvyr z!iCpu={u^r?89%MFee8m+>kaEubI_3CVzp#A{-)cVPIV6B!cWOE=n%u1~C|KO1W11 KxJZUEFaQA7MUpW9 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/sysfile.c.C337A604B3627C12.idx b/.cache/clangd/index/sysfile.c.C337A604B3627C12.idx new file mode 100644 index 0000000000000000000000000000000000000000..9a6b4401d7b160a638d036aba8f8df58502b6f21 GIT binary patch literal 6948 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 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/trap.c.E331BC8CB04ABF35.idx b/.cache/clangd/index/trap.c.E331BC8CB04ABF35.idx new file mode 100644 index 0000000000000000000000000000000000000000..431730b6595ab10381ff3a61e12a45aa48e560b2 GIT binary patch literal 3624 zcmZ`*d010d7QgqAJue}UuqA=8_z;yf$Rbh)L5WmwLH(u0RmyG z1B0Sa78%7)QR@OIqJ>&p{SXrHg1^_^e{?hcR+G`MiEr^j(yK8aGnn7Rke&*@$ZH~wC_fw9A^1*|}4O+ox_rBV^JG!j?Zoadp1#@A&y|TP7O161^ z-ONwl6gJuZxHTnk=;>b{rP!Ao7FhHt27A}M{^j5=fAl{6=Ei8|>usMbaju*BrvK*` zJ7$%INewX(+fNKH7`&_$EUX#cNcxxDw!L9^>9Od@Ugw|QB(7t526RSC_%+I>H?H~A zNKYj7Ut=3?kA2oKn6ZC-u-_`Hy;oHREBpJwhM7y_Znk)5Ep{onwx>0I>dk$(v@7mt zI)4l4-4krr`K8~KA-!g#=*Gd()+Os3YCpN?bo69?&dZ_vC#6FN?z!xmk$B?G;jYXc z>j5{WzSS_V3I-&`vSs}_<2w)dEg${Mj3-X1hx2-#RnK@~-yOZ{zQoT#mXgW5HIvEeTJPKG{@-J@Pp6%kay+DYL9a$PCJ<9Qo~LE5UeS!ItK$zY zTl!?gN&vi3&5aMmC;7JTUjf)KS#ZT_Fvg7pPDpYHf5CQNv=~H}9 ztUn}+4SZGlD4qmUk^TfQf%EPk7H91cYS|GTYe+B&YYUk|)XeXnTd$*P^Y69o5CCM5 z;xf5Bg#n5T(8lQ9M=1l6^JfMgmdJ`p;EN83ftaHxgQ7BM54Z#Yg52+O_3dR`HM^j1k7i8U6Rd{aLOTdW`I9IK3K% z<4|!&Sa3h;1d>t*s>4h`shq$Z6SeATNobEFdEPUz?7Zy{3I<6jZIyBin50x*Du0?PfT99ui&2wQ zC3LBT6ETgAF}NSKD@jE-L^#t%%As{Rbihiy4;_vnu2&A9-<$l{4MA*%L^I^zQi^8V zFgu>4w7nt{1%!%n(`t)yjVF60nm!H4%l|F;4$;q&3_r$I+4y1v+?X1 zahc5=N#%Ivm~b8cE}yz|;#4To)rd4Qto!-j`JTQ*jgg4m2U&ekj1wL-PZHE-w<`)& zZz^-DfKGK}aAX)w6+!DFD8-20nNVgNRI-wAIo*RCk-O4*| z4HASi!cEhH7Y!N;^94gva%;KFv;inDYcCnb{_w8f`1scPwI~rjVjl<0CaE}aoT)O# z;j^oTj&vfbp+`0J#`I1fT|)k$s#G*tN|91b8ws@zwV|nWyL2f|OZT}n@r=j>& zL8=+_p-MQV5-PFfS<+V*t0wtnlPCth+{!ElzLyoPq$boHY#F6rkxbE47LjF=F{mt2 zmRVRiM2<;DQn^r&3&pf%0VE0_2SXvLLP!*v(?yUdGN;=i(GEGdMuL)fFw(zxBdXCQ z$i4(gESUJ6`mTMmsIL#dpL1-ZytBP1Fj7Y|qJ z-$pKWgpY1Rf&s`IfR@-zHqjG$K3$tSNYp_-_EJlR-&qzj(15hNpiLKa#%3{iG@|dXG%O&g z%aC=M&eoEJEY(2#NF%Zksfzp*7iIge4FS30Y5Nd+4r7jKPslqqWlPUAwIWzPTptq~ zO$|3rfI)s)a7MLG^s*J{Rzqbq48mxAd?i6H^7(B@kj73kT|L*&$GasBw;w`mt%nwW z=zzg3_pf&iF%KhO!K`2&Mn+Q6jA#y~uupU-mWVY0;=Q}2am--&o@?F1?@yswpTwBN z#kwR_0vRQci{X)!0Wu8cbQNS&(R7@6O!{ZPwhQ6ZIqN21*9pAuhXXNW}{ok%wu(A|*OO%Ghp@6+e# z9!wlU#}+UanAxgPc!YbFOJKhlz#D zs`m7bv(biRDus0FL)oDsn$j>eLYxKUo~bpXl9|b7l#Z!0qteNA8?2|v>sz_##?jXZ zsK!ZSDo=>$?5?BL>2H{*!5NWeZKPtT%%}>;sDM12BIEZ8qtcx2hOBOSm8GssNigOu zEmfVi%=qGF{P+HG$1eadGS9CKPP-|OmiuDsnYZEoA$$(H*K~bvlo05)beKOq2{6`4S(W7tk|!+ zwJltCE^UQf(d`A&US?lz%vc~c-RLm;V+WNYhT_WHq#r( z(~6G)JqYtZBNxQqU|%Er4HO1>8Y;>F^Dj^sPj+Q(e(CHtA3lFi{d)7pvNH*_lJ{cwKQeAF&-$_4KUr0+E?%7%W{0bd z8MQT&pG}X9D^@kje^qyn-%YvjNqz5k&n92Y3?>dwS-qX^)=txha%D_o;NZ*TZMmZZ zH5UIP>m5ITfA{lir+T*^S@T+%`pwky(PN>b%KFx@bA8GOAvxv)o+WL)g~!G5Uv9UV zDkB1?Z@!+S_9l#^-d^*RGFZIIpkK6^0oLMzToYEvH!Uo{{(*u|gJ7(i>tn)Y;XZRF z0387}qwP^6e}-+?g+Mq4bVASx1*!%pZE!&-%2ne2b>l|o z6t{#1D=|bP)%eUVq=eJ0!v7xcbQ1zv9Bzf66=!IM(&jfA0+)eOcfq*h@jx#PLNO$i zA1a+)NQR{NHM`7}uf`CFz~KrADxi?jadk@w;MjysS2?`?Aq_$>K+D%kXBQG4d(soo zt`q-+Ko|~3f=Gd?9!l%y>aV~z02Y(kTJFZO?Iv8rGGem0S@b+tjFoGp3G;g+p5JQS zIjM$-X@HytC?eew02IyYLYjFt)LwSb>u)W_r%`Dl(whfw-NjlMxfXBhIeHqNFmB5^vAxNCHGazG#tfxIvVrAPpiWQ=BO$sd1Nb zy_)sRV)KGn9~AdNIjM&j2NXM4Kgs)_QM*Q0LLnv;gz|{^h|vNqk4PC`(q$2hRv*Nm zOe%Ap55)9Ast*cD?ryzzv~x&MgJ~ zK+IK$u0k0BMtziisi4W$f-`9N8VR9@G|Lq&noz`K3$mB8bQqQx7SLg&jAAxc1^HD_ zO0>${B;T?%CCP#7?4kCE$OTB4vv|-EW1>v+xkPW?0(*ykNcBT8xdY)6>*{(FEG*kI z+m~%fFV@RguL{blpo-K-OdV9z!2s5`LyjHNtlt1p1N0<5nHD@_u6IUCp1mcza7QJ7 zfz>oq<^^gxAmw1y#P2X)?>b|(7_2!iBfz!HeQII=u$(njtm!*%LgtBmxRXI`a=zNn tH(?-8mT#;BP@o?w!Wb_hG!BQ#m3X*e_;D3AnH}C)e literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/virtio.h.7AE2FDAEE3C87964.idx b/.cache/clangd/index/virtio.h.7AE2FDAEE3C87964.idx new file mode 100644 index 0000000000000000000000000000000000000000..324596fc6c1a9511113de34a04ba4c07f19921fa GIT binary patch literal 2640 zcmYL~c~BHr5XK)fvioKkhF#8u1#~%74iBOWs}L>~79*k{c!9WHkzq6hYQ@4 zt@@VM-QK3hf4@E46}4jaZ?C)ByFTi@WOKHEk_N`aFifXHzg8jULy$l(TygXea)!mVny3e!X6tmm?uGX8o2Rdf#56|fv6+WhZ@XG7E?p3_VJR4V0ms369Q2YlR}GM>BxPnzY&N7 z^gNwQx0eFGU1})dpB}A0B@iCcGq@QJQo!`=Z7(z1HeUE%Aqs|#R7N^VK`d?$#S5Zs zTXQn&&nk!;q{k`8X`~>g#b;q_mFAP2K|d;p2GY}&(_N$>rUgiwU%pzdePX?V-SifE}r$9#?PJ-%z>b+cr1AX*5lX7{?#5IQ!TgyPS1v6mfNWzycM#aJ7>| zzr`j`qYq#|>L>r@oKBtkjc%rh?Ww)I8npvh6b`ml)9J!&p1MB(u#W2FA|d^=buAse zfq*qsBNsUsklrulPVNxE!8BN2y-88$@Rf7v2Y|h)w;yg0^$1uLBQ_Rw2v`&$j%WF= z(axQz1rdM;(LsH&2+9($s7Wk>as(`D5%CRm<=8o8`f-56X}AX#xm0j|>zHxnDS+Ln zyAR@EL&nB>rdh-;)TJNdkjc99ql>F2u_`u%hS(wI*%%=P=Jfr;vq|1b@`Y|PTy5#s z@o5@V8b}Aq!?Ipg8+7Q3V>aMG8VC}2|FmA+xg^qRwg4VL2gn#b1h8lz*qGF3YePD> zUtb8=m-@}z|Oc+JU z@T`$BQrr*EMln$ots88SiKcih&=e+y;%)G3EE7xd-g!2WNu;P!FePR@MXws|@#g1k z0U;|Ho;5HAireGa8O#idp7VH*Qc-AmRAdWI&4f}M9G*2XCW-?MUdSX+v`C&!XVNKp z8qa1h85CuOYoG_BhoS_oZRmMDIQvi;U}x$q4_^O2C*D@3KimLVPxW#m@c@8Dr^U9% z3Y+pS*v4-G>`6Uk3HX;BeeK#5^abDm8X(tZ_Qd2pu=#QaUb&?g0!T~IrHx|KT0TxXg zF%|wQ)#L^&xdr)I|5bhmjG+2Ru*I4;J3%xI^H${4x&LiEE3XK z70tg{cLOj_c^M0(LzAcezWgR&SL!M^wqah?v$CcWcL2LlH(3;Tr;O_Tm*T(TAXY9( zi;BUCgm=Y{2A*}_q_M>dvj2Dv*pAxCcZHe&EPg}qj;wQY&0_U@>+F2VBG`$-lImOf I>=r`)1@N}Q@Bjb+ literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/virtio_disk.c.8DF9309BB95BE078.idx b/.cache/clangd/index/virtio_disk.c.8DF9309BB95BE078.idx new file mode 100644 index 0000000000000000000000000000000000000000..8bf0cf8906cf51e99ae96513dd7a13242d1a3ac8 GIT binary patch literal 7156 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 Q=}l@6gXlfbNA4&59|^k7RsaA1 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/vm.c.70D05D5C0213F437.idx b/.cache/clangd/index/vm.c.70D05D5C0213F437.idx new file mode 100644 index 0000000000000000000000000000000000000000..df084de72536b39a5006a6dd0309b64cfb44c3f6 GIT binary patch literal 7370 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 = RUNNABLE; release(&np->lock); + acquire(&np->lock); + np->mask = p->mask; + release(&np->lock); + return pid; } diff --git a/kernel/proc.h b/kernel/proc.h index d021857..e365870 100644 --- a/kernel/proc.h +++ b/kernel/proc.h @@ -104,4 +104,5 @@ struct proc { struct file *ofile[NOFILE]; // Open files struct inode *cwd; // Current directory char name[16]; // Process name (debugging) + int mask; // trace mask in syscall lab }; diff --git a/kernel/syscall.c b/kernel/syscall.c index ed65409..e20ca31 100644 --- a/kernel/syscall.c +++ b/kernel/syscall.c @@ -101,6 +101,7 @@ extern uint64 sys_unlink(void); extern uint64 sys_link(void); extern uint64 sys_mkdir(void); extern uint64 sys_close(void); +extern uint64 sys_trace(void); // An array mapping syscall numbers from syscall.h // to the function that handles the system call. @@ -126,8 +127,12 @@ static uint64 (*syscalls[])(void) = { [SYS_link] sys_link, [SYS_mkdir] sys_mkdir, [SYS_close] sys_close, +[SYS_trace] sys_trace, }; - +char *names[NELEM(syscalls)]={"fork", "exit", "wait", "pipe", "read", "kill", "exec", + "fstat", "chdir", "dup", "getpid", "sbrk", "sleep", + "uptime", "open", "write", "mknod", "unlink", "link", + "mkdir", "close", "trace",}; void syscall(void) { @@ -144,4 +149,12 @@ syscall(void) p->pid, p->name, num); p->trapframe->a0 = -1; } + if(p->mask){ + int i ; + for(i = 1;i < NELEM(syscalls); i++){ + if((1 << i) & p->mask){ + printf("%d: syscall %s -> %d\n",p->pid,names[i-1],p->trapframe->a0); + } + } + } } diff --git a/kernel/syscall.h b/kernel/syscall.h index bc5f356..cc112b9 100644 --- a/kernel/syscall.h +++ b/kernel/syscall.h @@ -20,3 +20,4 @@ #define SYS_link 19 #define SYS_mkdir 20 #define SYS_close 21 +#define SYS_trace 22 diff --git a/kernel/sysproc.c b/kernel/sysproc.c index 3b4d5bd..a918073 100644 --- a/kernel/sysproc.c +++ b/kernel/sysproc.c @@ -91,3 +91,14 @@ sys_uptime(void) release(&tickslock); return xticks; } + +uint64 +sys_trace(void) +{ + int getmask; + struct proc *mp = myproc(); + + argint(0,&getmask); + mp->mask = getmask; + return 0; +} diff --git a/user/user.h b/user/user.h index 4d398d5..0bf4333 100644 --- a/user/user.h +++ b/user/user.h @@ -22,6 +22,7 @@ int getpid(void); char* sbrk(int); int sleep(int); int uptime(void); +int trace(int); // ulib.c int stat(const char*, struct stat*); diff --git a/user/usys.pl b/user/usys.pl index 01e426e..9c97b05 100755 --- a/user/usys.pl +++ b/user/usys.pl @@ -36,3 +36,4 @@ sub entry { entry("sbrk"); entry("sleep"); entry("uptime"); +entry("trace"); From 31f667123b07262ebc5d74530de0fd4e6e0b4c12 Mon Sep 17 00:00:00 2001 From: novice <619671969@qq.com> Date: Wed, 31 Jul 2024 15:50:37 +0800 Subject: [PATCH 08/10] started lab2 sysinfo,but I'm hungry and got to eat something :) --- Makefile | 3 ++- kernel/syscall.h | 1 + user/user.h | 2 ++ user/usys.pl | 1 + 4 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 4ecb460..ebfd077 100644 --- a/Makefile +++ b/Makefile @@ -188,7 +188,8 @@ UPROGS=\ $U/_grind\ $U/_wc\ $U/_zombie\ - $U/_trace + $U/_trace\ + $U/_sysinfotest diff --git a/kernel/syscall.h b/kernel/syscall.h index cc112b9..0dfedc7 100644 --- a/kernel/syscall.h +++ b/kernel/syscall.h @@ -21,3 +21,4 @@ #define SYS_mkdir 20 #define SYS_close 21 #define SYS_trace 22 +#define SYS_sysinfo 23 diff --git a/user/user.h b/user/user.h index 0bf4333..1645956 100644 --- a/user/user.h +++ b/user/user.h @@ -1,4 +1,5 @@ struct stat; +struct sysinfo; // system calls int fork(void); @@ -23,6 +24,7 @@ char* sbrk(int); int sleep(int); int uptime(void); int trace(int); +int sysinfo(struct sysinfo *); // ulib.c int stat(const char*, struct stat*); diff --git a/user/usys.pl b/user/usys.pl index 9c97b05..bc109fd 100755 --- a/user/usys.pl +++ b/user/usys.pl @@ -37,3 +37,4 @@ sub entry { entry("sleep"); entry("uptime"); entry("trace"); +entry("sysinfo"); From 53af70708e22c604dff1b5006745b71a13bccb1a Mon Sep 17 00:00:00 2001 From: novice <619671969@qq.com> Date: Wed, 31 Jul 2024 20:50:31 +0800 Subject: [PATCH 09/10] stuck at lab2 sysinfotest I don't know why my kmemfree doesn't get the right number --- .../clangd/index/proc.c.5346DCDE506E9F58.idx | Bin 10580 -> 11656 bytes .../clangd/index/proc.h.27341B4843D3B8B6.idx | Bin 6066 -> 6302 bytes .../index/syscall.c.05D088F49A8C83CC.idx | Bin 4572 -> 4938 bytes .../index/syscall.h.66E962A052CADC6A.idx | Bin 630 -> 676 bytes .../index/sysproc.c.E5BC46BBC06178C3.idx | Bin 1774 -> 1924 bytes kernel/defs.h | 5 ++- kernel/kalloc.c | 12 +++++++ kernel/proc.c | 30 ++++++++++++++++++ kernel/proc.h | 27 +++++++++------- kernel/syscall.c | 21 ++++++------ kernel/sysproc.c | 15 +++++++++ 11 files changed, 89 insertions(+), 21 deletions(-) diff --git a/.cache/clangd/index/proc.c.5346DCDE506E9F58.idx b/.cache/clangd/index/proc.c.5346DCDE506E9F58.idx index 0caaa1f4723415243f04df8bd0d42d7036353b91..7d9b38f4bff3802be73d1fb8bd13fbcc0a629a64 100644 GIT binary patch literal 11656 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 C#u?TC diff --git a/.cache/clangd/index/proc.h.27341B4843D3B8B6.idx b/.cache/clangd/index/proc.h.27341B4843D3B8B6.idx index 8543678eaf4ed1ffe6f222b50e386b6177ac8c8d..731d7be28a58fa5ac34d5d6d8627f86fd0ac513c 100644 GIT binary patch delta 1891 zcmYL}2~-nD7=R}mvbkVAVu&D{aCng*fp`#OfS?eA2rM85g(_(DDK?;@;(-PM544Ip z57Me2RzQnj@dgD8qST67R6MFx)S^~A5flM!J8a*!`(D2PO}?G~|958I98(r}yF>=- z^?8EzLcf${OBd#00QBs18DvR+YA{@mT3slQoN~Z**39Ug?L=AQ z5%a3*)=wYEHC2kb)!KsYXM2Rw>#66o*Ek%93SoO&b+n=R(4*&RnlGK*3A?g-U-*3M zJ9T(Y@Qxu@HvF7hl3sA(#_FT`ZHM@jZKHC$Bk$SkN{l@S|PI zGC|&%3rq6mZ7BB|z2bm)el8KN+!N98cbL1R*`X7!FH0y0>PljTV}avLo{4tFPs4{Tw9{Lr^BO#@@pC*XcDkyo&O1wj-!H%_ z59nJ}m!>_S3O7H>2-#)5S610HUSR(I)Y81@yZOswi`YTsg9aEqW^oi1aa(>G%Zb?I z)D;u^V}lnazFV5z0$n581aqr$iQK$--E#R0C!cfP50`(wr0q_o@;e4zU{7-0FDscZ z6y2O@Ip%#THf?O#?e+C9d_Jljy^{||bqEt*zihD|5qfX-Tp%4Dp~v_CcBnYAqI@(y;Y8!OsN#6vf)Q1JJkS(XJ=kU#em?(J_5Q}p+IyXW zVRFyc!KRXfmo?7??n$z{T=e|l$oZgYe!G<;xBT*Jw&1yO%}xHPcdv^o7rt0N@*IAzENk? z-O;%f4k?T+%&EQKypno%QjlT&-1S;kXuL6hVd{vvH-}_Nv;4AHSuR-$-ktvX+O1W} z=72eythl;MruRSnUCJu+oDcy3i>;ECukIHC0!V`ZnS>|V(EvPjY|*1se6wCtaF{~? z4Lpg-{3$^CiTuPgn0Jnv_dKY-sOA&E-yVX&e zu`miQMnO%%95%@s1IyV`%tHmQvPtJ~07yAk-k%2Gqc%`0l_6)G_Hy4T2{0ZCY^1CS z&>e9!G}uTnHwrGWAu$&UZbHG8f+aRu=W(bTE}tu;!F1C#>)eKyYTQ5oZ-{Yxv0w@Y za7ZkGg7GMfp`e9BvUD(?BgNcRum=4%Oa*^OVJroEIZ_q{9q~Snrx}Bjm|g`_anhni zOA{yx6w_d;CFXs~+`QPlgaDyPhl#?(G#H)v*AH*X9xg*#ffhd*PZrW(v{kt%A@gYN zQUW-k*`6X#dm4=HJcPFyjn9@7z=r~`6Q98HfnHoGCZiz5B{6>rCZjNgg4?+yOAX7o zGL{Nn;cBs=6cq6KKEj4aeDbZhm&F9|QUNj!kK@x|%55-4cf70j zDj~pB)J>=;R7``>y)}y4a|8MvB)|Zqbt0XZ2BV#-*QGhumXzYa8*T11?ld8dzRg7! zBTyt|*G^v2|6?fuCZggo17hrHFw@yR>r!ujoqL1;b`*5sldQ4OpD)ECRB$#L$l+Qv z@S|WppTs6pu$nJLpL!n+##69|uf=o}R1370Q7E;EFiB`IslRFzq#Swwq>%v5g8}J) zJJ`}-bg}Q2$z=o8*9Z`R&J&x@7SdpJw#>}dw)2_@Fajly9vE#;gVBjI*2=n!bx3O{ zASEY?CW>h=KC_6wu{LVbZv+UT-~b_s`BKnJsAc&=vrvi+SHW#UlBI=*g))DXeg_Z@`F5EDHg7RBW0Twh7%tU!yzT@beKn#~%Y+E@Vo0ZfEr;{X5v delta 1697 zcmXw(eNatl9LJw~Zuk9mr0d3(b9$i=I&~wd8@<=>cv);igIf;sEmZX-FNQ8ZynR8~I&-2IUJiqVnd7d-pxI+_V8K&~} z)y)OKD_ON8ZDV$#0RTXTMpky_=0XgBd*zmM3NESqZ?4NdVH*~3(kebiUH%%cJ-R;c zS%vkD`mw$)xounSOwLakc9(ASOlP))TtCt%c^$*cI8dz}c%J0+adJBS$PW+uSN-xh z=**O=$E-WN^@4SWyXIL@?)8C&kPg?5l!(dX{-^%yqq^Q4R6hawjiLs{H;R8A-uMQzYRPWT=jImda`=q zm)eH(!p>qqW6*NmRYkxSa^Do?tJ-OeaW)Pz|fR1%LV&9 z{tJm|fqi>+dHa0A4f&c9->$6Rtfud^ZR^{9v7m8vq*=|qhni%vv$9chzTN(PZsj8K z+U?>`z*}q^v}3MqbeZ#&7YjyrM75sKesJebw|m{T>=6!Q!^WGW*}QDS$=S(!OeKRM zW)V%jE%jf(RcuNtX!RPHJgH>=CGw0Ay$R#*RXu~BjFBt>i)p9Il4{Dzrn#uqyuCDCJb2pWxsL&JT*4Mfdd>sNlU1o4G4<>00>)wtq}u& zx?6^VF44{Nj|s*p95_KY1Crwm;}Gp(o&kwj(eS7NfmzV78BLZn>^D$y9H9x1un+eaj*ty2bqJM0jtlp52mcCs{R)BhP1uRUe18kig;D% z(Ym@29Js+A9*HfY;5d)K7E*8)pTHC}wBwWL6oVM1GAu*FgMvCVt)^iopK$j_m4ju$ zat3VW!_=0_f_rhEqba0L8e=+~o||nE6-ocbc}I*71QI zy3=q$xP-yiJ4L@dkY3X2_npx@9S+t~fQXtMWx{}6&Ha$S{eJ49Ivg0H;!2rP&Vbda z6CV8i+?WO&D9{POgCa95kb;dOg0mRj5s{cH4aYd{KAEgbc!z_f6pWP;99NhlC9wbsR!B)HigJ;;$Qi&v=`w>k j5&+IEG4$Y`(;6iR;QP68aLc?U;_DSVckfpkrU39i%!e_V diff --git a/.cache/clangd/index/syscall.c.05D088F49A8C83CC.idx b/.cache/clangd/index/syscall.c.05D088F49A8C83CC.idx index 81406680da55c052699be0c9cdd25e24b8f507a8..f11551b43b4604e020def2ceffb5c72863e50e22 100644 GIT binary patch delta 2455 zcmY*ZX;>3k7OhK#KuDzmAuIw0i73zl3T;qS6gLnQ7d90HWRsCa0!i2s2w;m2457n= z0ZfCqfVMUW>L@Zet&B>Ge)eahD6XU8bgQ5ssL-H2l^H8K^`k21o_EiE_rCLTe|q;! zyFfo5pJk>Pwmi-+D2>f|x{_zWuEphV4_^nJFXh2Kv`?Bd*pvuis>Qxvo&S zZ)$X|rQh|g?vL+l?GJD7xzL_JIPu{5tGt8#D_-*L&{plSYcaFz>u-zQxdG1<1H!*fE-o>x1bsBzM5kb6|A}AX8LGF8bh;?6N z+*~^vBg?)}p`81nNYv;sup?t6{^Qul@Vjju%Lj*}Pv3sU?i3hKT&V1vJwIV;bYV+- z2DVrn>B z?mBIDB#C1-FZ`z4PX$k`JDr#Ir@Usg__x1I-!7`S+Y%-lWl%-l^>Or@os!za;j@Q`#NTR z;_arguNY49*WJ73KGT@D_!z!1E8O%;3nQ_!yt(OEb=8mc2deGz8{OEK1n;cGHf@K$ z+Z*XrBtO>h*e*xO-2K4O=ZyLLzOJ+u>5bd5-T1BEr@K>&Z)6&t`#Nu^(P+)iZ%#CF zA33V3*XIswUz4|>F`2h9@KH(CjCV>q)!dGwHchp+t^|x;zm(YevtGv|3HQ)x!LqKK zcf6z2W#7xx|L_?uQdSQtc|3b5FVy?2=besd*OD8x`l*WV9P z!#-sFM9lafX;!D6v<}4!IvJK{ZX-YxC9*v9m?h1-V)&iGzhZ2QZ>y`#`(ML*7TO(W@PB--p*#O~$NxZRXuI({D^(chO5~DPPOM7GRiYCop#c`_l&%<8H7Db>IT~4HUNrusvWfyA+H| z!2)A3nOLwh#u(gCX1vl}N?=~-BUQ-{O=SqcA1z|I2?HsY{5DA|8#Obhi0XF5)XW)i;Q%2j04M+>T7y0kJ(ehv zjMU{4qAW5CJ!J~5vdL^q-d4B5QdP_KdlMP{qir@8lu8Co*Fq%xvl)k!?jd?4&)#^L%w@19CZd#v>3!X`L#Je5pE(JVegYjTv$3T2dlX$k6KO?Q@&GBbJvo_{L2wK?R7 zjLOV}Ox+$=Sp9yj(#cIBI4LwL29pGX1dh)4q9lVPbet{3#iSVBq`sMCCK_kY!qXug zIS|tv=#`X9zPK5f)=Xpp=%$Z+i8**KnTv7=Aub^$XdmIZB8SY;IV5BQ)A!bvmkoN_ zL2)a9N4KjzhglkMrSZhMS-r7KxreDHO2NDo5u7-xTUH5@a-#4ZLw9+`(Eq^D8=3Y}l*sW6TH?&sYr> zYOwu`YrwJwrqP(b+SGso5u3}wlgVUc%@ykB1DOxVn=8cA$#fLY6GQ|4Q|hl z?m9R`wJ8G`+Rx=%NkF38ym8wz@nBNUwndFW?KC522uqg-LUl2qzc{(8asv261A z7_}@Jl65CuVVnBXfjYZ!T-z+M6HGpvUIpeVu>Oo|fLBBPUw(SLP06Ur`mS*!6mA^q zQ3~wRFMX;812q`ajca{uQ28a+fR_e*&~0N|<^JF@+qj$Z3F^43z_1F4&slrHVlPr~&d5 WMvF|64JVV$_xJsI&NS3w;`|@63_N21 delta 2194 zcmY+D2~bnl8prS9h9%*06V?#GP$Fs>K#607NKpi26)1sNK|m2K680nn0wG}(BVbtc z$Ww|46~U#_B1^#q1g){9j_n)Kf)q+s9$Eo;KwW_9yU-@iJ2Us>p5J%Q|NEcse(78N z>qTpNA1iNQIB|mb<~(2>zqE_X{$bc zfK|I9F5fcX-krX8uWJ&{CEf46S}?gV{CrBDI2`cw$q)AvE~YGcG_DCv48LM_THewUz`-H-G<^5BN8g$Vc&gktdRWca$j4uca3< zlA_7;k31bFEV8hfy4y+@Kbr0@Qu3vUcVDcl0cpd50gBN>65f7hM$pgS@|4!br^cLT zimh}`L=9ZE`A#O}Z!Zyj{oqW;^bh9JN~$8EJ2FNntFk!Kb8mBP&5c`!Tt}Vv*bNo@ z`OM2?ME56p-;AsCp7!HU9eu8x%_R4$SH-yRZmE-R4Pbkdyu&R@JSMPFw<1s7_L_&- z>xUmZ?wwI7nAgHoX)C5g{!d1qo%u=~;UkFdDIYMae@Syszcm`n8L%Srx7l`w*|0BM z>%V_|QM`T7zUgT(0hA(|7Yfx3MhHa(p%9M_3rw;@}is)PsPTn5O3$Uk|DOyP7~GHk+i8;WCr=e;g3 zzIQ`?k3_s-_crx-%OXCKjGpY2xs{Qzrk0#n)%AO8sn7rYrC+l;)$l@nQVQO}J+Oc6 ziJY!K{jVVkMrBO(suWM$^EQ?ttY(gmJ*u9*na;0@JLp{vMmBX-CrJi_<6~ZqMKv?p zE>6Dvq)6`Iq@3G|&T+)AxRJm3?wc=ax1>bnnYTLpWit5kzXdvxT&F2&a}OLqMAFo~ zM^OYZY{+OX(NUXYNFdSwOM?@O$I^*k=!R0kcIb~Xffr0fnMRwI!^DOtJcD`U*&x~Pibuu}hHTNC=HWc;=_vcy zv$>g5k1@oZC`7!T4e)>kdQ7kl))Mn(*iFnna9EGwT1r8XnyAkQHh(dr3owog!^N7y zO`WccEs4>TR)?%9>2fNJlZ|IXUwxKU4xVGF@j0|037qS+p%WTeAPXMQXDKr93=2&- zG+4jC$(Z>u5zYmc%T?(HDk55${0rlOjN+^?;X3+F-`?Asraxic=I3o&e`h% zLP`M?@H9ErIt@?L7FKf%P?mcb(kVMgN?@vlnUs}IVq9#lxh{AAkq43d^I3$B1W2?_ zeXQp1Rywd{D_VOfB>)xZ3*at{1sBN}EXEk91ed@D%yDHV$kZM=Tp@6&9I`q=C|T=T z6*W_DTI}`)*8+w*)Q*7RA6?lg-l<-(6XE z=Pel)81GnJ1PqHlG|f^|>8k+k!woBdeg&XG%*1xf*KK9DS2a#A5Q-uo(%Mwo2Ug{! sZ1{`7av;~@O|+Xe?N!E;#* delta 35 rcmZ3&`i+G($kWX&Zz5|h(__Ys-9?O(MVQ*SZc4dU`?yGkF)#oC(dP=m diff --git a/.cache/clangd/index/sysproc.c.E5BC46BBC06178C3.idx b/.cache/clangd/index/sysproc.c.E5BC46BBC06178C3.idx index 62b1a72b254a6c536e56aaf87c7368d1fe152368..afff6db12d7c2b2c93f5b3136ff5cd3cb337d746 100644 GIT binary patch delta 667 zcmaFI+rnQTrZFpYkmnVtb05z`7$y`RtT1)_MDjL)1l9!Y5#9uvZlv{w8AsIsP=IBa48<08C)Q0bxi zuN#&x>OFqr_V$Mxs_HYs&d&X|Zmx0F*9HGRPHvXbTi!d3P3|_+Yx&o^^=lTfKl0c# zF?(Y0tYaFsV%OGo{|e?@VD46W?y~>d{qJ&CYM=f1dzZt($ELldofeBlN+*6O%btl^%l&eFrjBNxXI#|D#|yqU#?k#+J977L(63R4OPT*83WQ5?o$ zt6ANA^q|xSE_#lWY7{&xcro5fk2!NzU=?&- zMl97tN3oYMGFT3QUg;eN)RFgOQ8%8g@w)6xmfW6#4yJI_N!Bwx7Hz$W zz55upi<@SD(Ohaz?Kz_tH|m?89AtagUu$XLOEDg~VI&4|Z4o6%2; z0CRb5V)y`)o&hTXCzHwnQVaZ(Tvo*6Rl_cl_@cN3X@v|jFa^QL;(boIt4hBfCWL5*aa?=9R|IV@&-u=#a8h|c8|*wlS2nV D*a+XL diff --git a/kernel/defs.h b/kernel/defs.h index a3c962b..76de365 100644 --- a/kernel/defs.h +++ b/kernel/defs.h @@ -8,7 +8,7 @@ struct spinlock; struct sleeplock; struct stat; struct superblock; - +struct sysinfo; // bio.c void binit(void); struct buf* bread(uint, uint); @@ -63,6 +63,7 @@ void ramdiskrw(struct buf*); void* kalloc(void); void kfree(void *); void kinit(void); +uint64 getfreemem(); // log.c void initlog(int, struct superblock*); @@ -106,6 +107,8 @@ void yield(void); int either_copyout(int user_dst, uint64 dst, void *src, uint64 len); int either_copyin(void *dst, int user_src, uint64 src, uint64 len); void procdump(void); +uint64 getnproc(); +int sysinfo(uint64 addr); // swtch.S void swtch(struct context*, struct context*); diff --git a/kernel/kalloc.c b/kernel/kalloc.c index 0699e7e..6d9565e 100644 --- a/kernel/kalloc.c +++ b/kernel/kalloc.c @@ -80,3 +80,15 @@ kalloc(void) memset((char*)r, 5, PGSIZE); // fill with junk return (void*)r; } + +uint64 +getfreemem(){ + uint64 freemem = 0; + struct run *r; + acquire(&kmem.lock); + for(r = kmem.freelist; r ;r = r->next){ + freemem++; + } + release(&kmem.lock); + return freemem; +} diff --git a/kernel/proc.c b/kernel/proc.c index 60f3cfd..02c1d93 100644 --- a/kernel/proc.c +++ b/kernel/proc.c @@ -146,6 +146,8 @@ allocproc(void) p->context.ra = (uint64)forkret; p->context.sp = p->kstack + PGSIZE; + p->mask = 0; + return p; } @@ -690,3 +692,31 @@ procdump(void) printf("\n"); } } + +uint64 +getnproc(){ + uint64 nproc = 0; + int i; + for(i = 0; i < NPROC; i++){ + acquire(&proc[i].lock); + if(proc[i].state != UNUSED){ + nproc++; + } + release(&proc[i].lock); + } + return nproc; +} + +int +sysinfo( uint64 addr){ + struct sysinfo sf; + struct proc *p = myproc(); + sf.nproc = getnproc(); + sf.freemem = getfreemem(); + int result; + result = copyout(p->pagetable, addr, (char*)&sf, sizeof(sf)); + if(result < 0){ + return -1; + } + return 0; +} diff --git a/kernel/proc.h b/kernel/proc.h index e365870..a864913 100644 --- a/kernel/proc.h +++ b/kernel/proc.h @@ -20,10 +20,10 @@ struct context { // Per-CPU state. struct cpu { - struct proc *proc; // The process running on this cpu, or null. - struct context context; // swtch() here to enter scheduler(). - int noff; // Depth of push_off() nesting. - int intena; // Were interrupts enabled before push_off()? + struct proc *proc; // The process running on this cpu, or null. + struct context context; // swtch() here to enter scheduler(). + int noff; // Depth of push_off() nesting. + int intena; // Were interrupts enabled before push_off()? }; extern struct cpu cpus[NCPU]; @@ -86,14 +86,14 @@ struct proc { struct spinlock lock; // p->lock must be held when using these: - enum procstate state; // Process state - void *chan; // If non-zero, sleeping on chan - int killed; // If non-zero, have been killed - int xstate; // Exit status to be returned to parent's wait - int pid; // Process ID + enum procstate state; // Process state + void *chan; // If non-zero, sleeping on chan + int killed; // If non-zero, have been killed + int xstate; // Exit status to be returned to parent's wait + int pid; // Process ID // wait_lock must be held when using this: - struct proc *parent; // Parent process + struct proc *parent; // Parent process // these are private to the process, so p->lock need not be held. uint64 kstack; // Virtual address of kernel stack @@ -104,5 +104,10 @@ struct proc { struct file *ofile[NOFILE]; // Open files struct inode *cwd; // Current directory char name[16]; // Process name (debugging) - int mask; // trace mask in syscall lab + int mask; // trace mask in syscall lab +}; + +struct sysinfo { + uint64 freemem; // the number of bytes free memory + uint64 nproc; // the number of processes whose state is not UNUSED }; diff --git a/kernel/syscall.c b/kernel/syscall.c index e20ca31..ef99a36 100644 --- a/kernel/syscall.c +++ b/kernel/syscall.c @@ -102,6 +102,7 @@ extern uint64 sys_link(void); extern uint64 sys_mkdir(void); extern uint64 sys_close(void); extern uint64 sys_trace(void); +extern uint64 sys_sysinfo(void); // An array mapping syscall numbers from syscall.h // to the function that handles the system call. @@ -128,11 +129,12 @@ static uint64 (*syscalls[])(void) = { [SYS_mkdir] sys_mkdir, [SYS_close] sys_close, [SYS_trace] sys_trace, +[SYS_sysinfo] sys_sysinfo, }; char *names[NELEM(syscalls)]={"fork", "exit", "wait", "pipe", "read", "kill", "exec", "fstat", "chdir", "dup", "getpid", "sbrk", "sleep", "uptime", "open", "write", "mknod", "unlink", "link", - "mkdir", "close", "trace",}; + "mkdir", "close", "trace", "sysinfo",}; void syscall(void) { @@ -144,17 +146,18 @@ syscall(void) // Use num to lookup the system call function for num, call it, // and store its return value in p->trapframe->a0 p->trapframe->a0 = syscalls[num](); + if(p->mask){ + int i ; + for(i = 1;i < NELEM(syscalls); i++){ + if((1 << i) & p->mask){ + printf("%d: syscall %s -> %d\n",p->pid,names[i-1],p->trapframe->a0); + } + } + } } else { printf("%d %s: unknown sys call %d\n", p->pid, p->name, num); p->trapframe->a0 = -1; } - if(p->mask){ - int i ; - for(i = 1;i < NELEM(syscalls); i++){ - if((1 << i) & p->mask){ - printf("%d: syscall %s -> %d\n",p->pid,names[i-1],p->trapframe->a0); - } - } - } + } diff --git a/kernel/sysproc.c b/kernel/sysproc.c index a918073..ff61878 100644 --- a/kernel/sysproc.c +++ b/kernel/sysproc.c @@ -99,6 +99,21 @@ sys_trace(void) struct proc *mp = myproc(); argint(0,&getmask); + if(getmask < 0) + return -1; mp->mask = getmask; return 0; } + +uint64 +sys_sysinfo(void){ + uint64 p; + argaddr(0,&p); + struct sysinfo sf; + sf.freemem = getfreemem(); + sf.nproc = getnproc(); + if(copyout(myproc()->pagetable,p, (char*)&sf, sizeof(sf)) < 0){ + return -1; + } + return 0; +} From f3c40f58a7d17733bac19525e58e480b88655faa Mon Sep 17 00:00:00 2001 From: novice <619671969@qq.com> Date: Sun, 25 Aug 2024 13:17:40 +0800 Subject: [PATCH 10/10] finished lab2 syscall, the reason I got stuck at sysinfo part is I plus free memory with one intead of PGSIZE,the free memory in each run list is a PGSIZE --- .../clangd/index/defs.h.72A9C4FFB86E6400.idx | Bin 12248 -> 12470 bytes .../index/kalloc.c.2F15DD93067E2B26.idx | Bin 2050 -> 2168 bytes .../clangd/index/proc.h.27341B4843D3B8B6.idx | Bin 6302 -> 6398 bytes .../index/syscall.c.05D088F49A8C83CC.idx | Bin 4938 -> 4848 bytes .../index/sysproc.c.E5BC46BBC06178C3.idx | Bin 1924 -> 2198 bytes kernel/kalloc.c | 2 +- 6 files changed, 1 insertion(+), 1 deletion(-) diff --git a/.cache/clangd/index/defs.h.72A9C4FFB86E6400.idx b/.cache/clangd/index/defs.h.72A9C4FFB86E6400.idx index 1ac9d4a5cf84b3a949e7bf8554596abc1e8c1ba3..fdb6dfc69bb43c742e02d3b6f1e81bb3d71cdc27 100644 GIT binary patch literal 12470 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 literal 12248 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 Xf9E7lo0j+@3VutU=?mV9la0 zK8N0%UVpSI;eB3S{rN<-(*l<*i{|GSdG6Ky{8cI~_*lKnlu4mJSsQXDoiB^9UGZS0 z{mQngfcxA0r)>j-PEEM1O!&eU#NQ9s9Dy7o!Otcnj}rJ^@xE%rU_C+$cPc^+OzQpeT zYrp*hsqBO6^4V|39bt1Q3i#cSz1BYNWa8Y_kDpiOoBuH}PU3lXrgrDDw4C%Mw(At* zzU*$BVeS9v(l@C*%kqlA@LP62V)XnbwK+~$Db?7)IC;v4WiP5*C2tuDM)~h^uogP@ zn&II}hgX>ae}eoNiYs%ILV;1|kmlf}>Uu+jmqCBBFOyuo zp)rG^AfKQRm;gpG82q?5>Etz$c%du$L z@F+$oN2tS8K0C0cu0iaFE+dbk43i8O%)c;cMlNuez??EUo+X-*WAbj65E-EL0^uSs zbv%mE0?}~ZWPaAkjI5Ivvuf4zCR+#{;v}LkIveJji2g%B4rf9g8u-IXrtic|_&!ZT| i8O8%Mi(zsNy9URGg-%a5&o}m&yoNoHRY!tViU9xsKAjT) delta 954 zcmew%&?HbFJ8YiZUgc7#OAi1uEvu4Y{9v$AIVB z=f9$LHx9?nd>m`-wewR?7HG*xz75GLO}U-1_mfp%fbH?iylSa) z_oMH{w(;3nCtmSu2ru0{Z1BX9$LKIqO{VgYY>Ts?#Zxwi*FT>x@_B%(DWA>4SM>lLb zn6`TE-;--?mzFqXjC`?}D7 z%RZ@-C04c_wvSMmh+kU+s?c3^k$LS)5!vrrv%0RJ?K34 ze2Y-YX6-pvyt2V;#e4!EW+?I{-urX#%ztj3`8kAXo^oJpJwOaRjn7$kjN5n~y<%avf8(s}4|+9)ljMg1vw}&ZrE&!c)n9+HF&F}+1=t0+zy!p7 z3=Bo7X~ln-5gy^1Y|q@o33E5|c1)bCuPi4kaRjnzOR!2Y007~NZ-@W@ diff --git a/.cache/clangd/index/proc.h.27341B4843D3B8B6.idx b/.cache/clangd/index/proc.h.27341B4843D3B8B6.idx index 731d7be28a58fa5ac34d5d6d8627f86fd0ac513c..ab1c63b75009f0b6c5624c79feda1836ce434408 100644 GIT binary patch literal 6398 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 TwzIUdmnjt%gWhvMgTem*M22GL literal 4938 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 T#ij;^W@4FC-`w2-S%LonlTWJ4 diff --git a/.cache/clangd/index/sysproc.c.E5BC46BBC06178C3.idx b/.cache/clangd/index/sysproc.c.E5BC46BBC06178C3.idx index afff6db12d7c2b2c93f5b3136ff5cd3cb337d746..e80f95c145b852fa0475c6b31f42f3bfd257abd7 100644 GIT binary patch delta 837 zcmZqSpC(uz3=A)s85k<&%$@9;f7^hk z?Q466Zf2kebJ2@i-i-{lPXgYEoDg~|a7|ppviJXAiQP9Yyu0*E;icl!?^oG%Sr;&@ zdMNk0Z{>~8cXcbe9<%bIhT6pRxx#jC|O%l?|OzD2mQT}TR)2kWhQUcBGA|IDpN=~~ovx#rnk`i?xdCeX}C z)N*O=noG%vcZ06{pUO~`9qKMupY^viy*)P5@BVdGo_ju-YqF2r^au>+Tt9t-lX?6# zsl<~aPva%RGXIOcy?x0lbn8wSWg^*5m_BG2%b&O*(l^E+@krE6%g)aKlfY3>%&#S5!y4Yn(JZrMc;vDfve{sAJaV~Axg0RwhdF1k#@;G4{CbO}{h$nI#dtqv2b^_!d@gfDdToPNN_=3FUlQzfaeFDnm jbLI=ccE(oF#aS$Gk2WsJy?Oo%TGDL?+cV<||`W|L?^^2|{8@-dzdtmCadra(HTlQX0npA33kj>wWbxu64<6m^#Mu&1Jp z$JpDq;jnstXjaXg_O6{Xdi9|G@soobE~kx_1|Hi2>mTd8FMOg0;z+WQYmrl$#wa}& z)~$>BQwg9qMs?29Pp!Z1Y^f{F@%y?!!Q(ZJb%{8m6m^mCb_ok~(`79Ymh7VZ3&SGq zd(plvt=CMqvi#?il+b}Lu1?S;9wv|{nVp?*aPr0=Zcy5{$>NFfM3vFdL}RWl%y>p| z`wPt%Q&<3Vd2M1Blc51D0VtEs0a6RPB0R%ei_4h|04I}50v-V=lW78R2>^0sW^*wF z005Ku0$h`916`Bg1A&ux1Rntelb8fJ2}BzD%#|rId<&EQ1e%ky1next){ - freemem++; + freemem+=PGSIZE; } release(&kmem.lock); return freemem;