diff --git a/.gitignore b/.gitignore index ac95865..6be4be5 100644 --- a/.gitignore +++ b/.gitignore @@ -58,5 +58,5 @@ dkms.conf /.vagrant/**/* -**/bochsout.txt -**/bochsrc.txt +/**/bochsout.txt +/**/bochsrc.txt diff --git a/pintos-env/pintos/tests/threads/Make.tests b/pintos-env/pintos/tests/threads/Make.tests index ecb766a..94812f8 100755 --- a/pintos-env/pintos/tests/threads/Make.tests +++ b/pintos-env/pintos/tests/threads/Make.tests @@ -37,6 +37,7 @@ tests/threads_SRC += tests/threads/mlfqs-recent-1.c tests/threads_SRC += tests/threads/mlfqs-fair.c tests/threads_SRC += tests/threads/mlfqs-block.c tests/threads_SRC += tests/threads/hello.c +tests/threads_SRC += tests/threads/listpop.c MLFQS_OUTPUTS = \ tests/threads/mlfqs-load-1.output \ diff --git a/pintos-env/pintos/tests/threads/listpop.c b/pintos-env/pintos/tests/threads/listpop.c new file mode 100644 index 0000000..050636b --- /dev/null +++ b/pintos-env/pintos/tests/threads/listpop.c @@ -0,0 +1,56 @@ +#include "listpop.h" +#include +#include "../lib/kernel/list.h" +#include "../threads/malloc.h" + +static void populate(struct list* l, int* a, int n); +static bool compare_items(const struct list_elem * a, const struct list_elem * b, void * aux); +static void print_sorted(struct list* l); +static void free_populated(struct list* l); + +struct item { + struct list_elem elem; + int priority; +}; + +void populate(struct list* l, int* a, int n) { + int i; + for (i = 0; i < n; i++) { + struct item* it = malloc(sizeof(struct item)); + it->priority = a[i]; + list_push_back(l, &(it->elem)); + } +} + +bool compare_items(const struct list_elem * a, const struct list_elem * b, void * aux) { + struct item * ia = list_entry(a, struct item, elem); + struct item * ib = list_entry(b, struct item, elem); + return (ia->priority < ib->priority); +} + +void print_sorted(struct list* l) { + list_sort(l, compare_items, NULL); + struct list_elem* e; + for (e = list_begin(l); e != list_end(l); e = list_next(e)) { + struct item* i = list_entry(e, struct item, elem); + printf("%d\n", i->priority); + } +} + +void free_populated(struct list* l) { + struct list_elem* e; + for (e = list_begin(l); e != list_end(l);) { + struct item* i = list_entry(e, struct item, elem); + e = list_next(e); + free(i); + } +} + +void test_list(void) { + struct list l; + list_init(&l); + + populate(&l, ITEMARRAY, ITEMCOUNT); + print_sorted(&l); + free_populated(&l); +} diff --git a/pintos-env/pintos/tests/threads/listpop.h b/pintos-env/pintos/tests/threads/listpop.h new file mode 100644 index 0000000..f8bab49 --- /dev/null +++ b/pintos-env/pintos/tests/threads/listpop.h @@ -0,0 +1,4 @@ +#define ITEMCOUNT 10 +int ITEMARRAY[ITEMCOUNT] = {3,1,4,2,7,6,9,5,8,3}; + +extern void test_list(void); diff --git a/pintos-env/pintos/tests/threads/tests.c b/pintos-env/pintos/tests/threads/tests.c index 414fae6..aea35d2 100755 --- a/pintos-env/pintos/tests/threads/tests.c +++ b/pintos-env/pintos/tests/threads/tests.c @@ -3,13 +3,13 @@ #include #include -struct test +struct test { const char *name; test_func *function; }; -static const struct test tests[] = +static const struct test tests[] = { {"alarm-single", test_alarm_single}, {"alarm-multiple", test_alarm_multiple}, @@ -39,13 +39,14 @@ static const struct test tests[] = {"mlfqs-nice-10", test_mlfqs_nice_10}, {"mlfqs-block", test_mlfqs_block}, {"test_hello", test_hello}, + {"test_list", test_list}, }; static const char *test_name; /* Runs the test named NAME. */ void -run_test (const char *name) +run_test (const char *name) { const struct test *t; @@ -65,10 +66,10 @@ run_test (const char *name) prefixing the output by the name of the test and following it with a new-line character. */ void -msg (const char *format, ...) +msg (const char *format, ...) { va_list args; - + printf ("(%s) ", test_name); va_start (args, format); vprintf (format, args); @@ -81,10 +82,10 @@ msg (const char *format, ...) and following it with a new-line character, and then panics the kernel. */ void -fail (const char *format, ...) +fail (const char *format, ...) { va_list args; - + printf ("(%s) FAIL: ", test_name); va_start (args, format); vprintf (format, args); @@ -96,7 +97,7 @@ fail (const char *format, ...) /* Prints a message indicating the current test passed. */ void -pass (void) +pass (void) { printf ("(%s) PASS\n", test_name); } diff --git a/pintos-env/pintos/tests/threads/tests.h b/pintos-env/pintos/tests/threads/tests.h index 3343de1..c472ada 100755 --- a/pintos-env/pintos/tests/threads/tests.h +++ b/pintos-env/pintos/tests/threads/tests.h @@ -33,6 +33,7 @@ extern test_func test_mlfqs_nice_2; extern test_func test_mlfqs_nice_10; extern test_func test_mlfqs_block; extern test_func test_hello; +extern test_func test_list; void msg (const char *, ...); void fail (const char *, ...); diff --git a/pintos-env/pintos/threads/bochsout.txt b/pintos-env/pintos/threads/bochsout.txt deleted file mode 100755 index aa972b5..0000000 --- a/pintos-env/pintos/threads/bochsout.txt +++ /dev/null @@ -1,163 +0,0 @@ -00000000000i[ ] Bochs x86 Emulator 2.6 -00000000000i[ ] Built from SVN snapshot on September 2nd, 2012 -00000000000i[ ] Compiled on Feb 17 2015 at 16:28:11 -00000000000i[ ] System configuration -00000000000i[ ] processors: 1 (cores=1, HT threads=1) -00000000000i[ ] A20 line support: yes -00000000000i[ ] IPS is set to 1000000 -00000000000i[ ] CPU configuration -00000000000i[ ] level: 6 -00000000000i[ ] SMP support: no -00000000000i[ ] APIC support: xapic -00000000000i[ ] FPU support: yes -00000000000i[ ] MMX support: yes -00000000000i[ ] 3dnow! support: no -00000000000i[ ] SEP support: yes -00000000000i[ ] SSE support: sse2 -00000000000i[ ] XSAVE support: no -00000000000i[ ] AES support: no -00000000000i[ ] MOVBE support: no -00000000000i[ ] ADX support: no -00000000000i[ ] x86-64 support: no -00000000000i[ ] MWAIT support: yes -00000000000i[ ] Optimization configuration -00000000000i[ ] RepeatSpeedups support: no -00000000000i[ ] Fast function calls: no -00000000000i[ ] Handlers Chaining speedups: no -00000000000i[ ] Devices configuration -00000000000i[ ] NE2000 support: no -00000000000i[ ] PCI support: no, enabled=no -00000000000i[ ] SB16 support: no -00000000000i[ ] USB support: no -00000000000i[ ] VGA extension support: vbe -00000000000i[MEM0 ] allocated memory at 0x7eff051e8010. after alignment, vector=0x7eff051e9000 -00000000000i[MEM0 ] 4.00MB -00000000000i[MEM0 ] mem block size = 0x00100000, blocks=4 -00000000000i[MEM0 ] rom at 0xfffe0000/131072 ('/pintos-env/share/bochs/BIOS-bochs-latest') -00000000000i[ ] init_dev of 'cmos' plugin device by virtual method -00000000000i[CMOS ] Using specified time for initial clock -00000000000i[CMOS ] Setting initial clock to: Thu Jan 1 00:00:00 1970 (time0=0) -00000000000i[ ] init_dev of 'dma' plugin device by virtual method -00000000000i[DMA ] channel 4 used by cascade -00000000000i[ ] init_dev of 'pic' plugin device by virtual method -00000000000i[ ] init_dev of 'pit' plugin device by virtual method -00000000000i[ ] init_dev of 'floppy' plugin device by virtual method -00000000000i[DMA ] channel 2 used by Floppy Drive -00000000000i[ ] init_dev of 'vga' plugin device by virtual method -00000000000i[MEM0 ] Register memory access handlers: 0x00000000000a0000 - 0x00000000000bffff -00000000000i[VGA ] interval=200000 -00000000000i[MEM0 ] Register memory access handlers: 0x00000000e0000000 - 0x00000000e0ffffff -00000000000i[BXVGA] VBE Bochs Display Extension Enabled -00000000000i[MEM0 ] rom at 0xc0000/41472 ('/pintos-env/share/bochs/VGABIOS-lgpl-latest') -00000000000i[ ] init_dev of 'ioapic' plugin device by virtual method -00000000000i[IOAP ] initializing I/O APIC -00000000000i[MEM0 ] Register memory access handlers: 0x00000000fec00000 - 0x00000000fec00fff -00000000000i[ ] init_dev of 'keyboard' plugin device by virtual method -00000000000i[KBD ] will paste characters every 1000 keyboard ticks -00000000000i[ ] init_dev of 'harddrv' plugin device by virtual method -00000000000i[HD ] HD on ata0-0: '/tmp/lA8HTUhyge.dsk', 'flat' mode -00000000000i[IMG ] hd_size: 516096 -00000000000i[HD ] ata0-0: using specified geometry: CHS=1/16/63 -00000000000i[HD ] Using boot sequence disk, none, none -00000000000i[HD ] Floppy boot signature check is enabled -00000000000i[ ] init_dev of 'unmapped' plugin device by virtual method -00000000000i[ ] init_dev of 'biosdev' plugin device by virtual method -00000000000i[ ] init_dev of 'speaker' plugin device by virtual method -00000000000i[ ] init_dev of 'extfpuirq' plugin device by virtual method -00000000000i[ ] init_dev of 'parallel' plugin device by virtual method -00000000000i[PAR ] parallel port 1 at 0x0378 irq 7 -00000000000i[ ] init_dev of 'serial' plugin device by virtual method -00000000000i[SER ] com1 at 0x03f8 irq 4 -00000000000i[ ] register state of 'cmos' plugin device by virtual method -00000000000i[ ] register state of 'dma' plugin device by virtual method -00000000000i[ ] register state of 'pic' plugin device by virtual method -00000000000i[ ] register state of 'pit' plugin device by virtual method -00000000000i[ ] register state of 'floppy' plugin device by virtual method -00000000000i[ ] register state of 'vga' plugin device by virtual method -00000000000i[ ] register state of 'unmapped' plugin device by virtual method -00000000000i[ ] register state of 'biosdev' plugin device by virtual method -00000000000i[ ] register state of 'speaker' plugin device by virtual method -00000000000i[ ] register state of 'extfpuirq' plugin device by virtual method -00000000000i[ ] register state of 'parallel' plugin device by virtual method -00000000000i[ ] register state of 'serial' plugin device by virtual method -00000000000i[ ] register state of 'ioapic' plugin device by virtual method -00000000000i[ ] register state of 'keyboard' plugin device by virtual method -00000000000i[ ] register state of 'harddrv' plugin device by virtual method -00000000000i[SYS ] bx_pc_system_c::Reset(HARDWARE) called -00000000000i[CPU0 ] cpu hardware reset -00000000000i[APIC0] allocate APIC id=0 (MMIO enabled) to 0x00000000fee00000 -00000000000i[CPU0 ] CPUID[0x00000000]: 00000002 756e6547 6c65746e 49656e69 -00000000000i[CPU0 ] CPUID[0x00000001]: 00000633 00010800 00000008 1fcbfbff -00000000000i[CPU0 ] CPUID[0x00000002]: 00410601 00000000 00000000 00000000 -00000000000i[CPU0 ] CPUID[0x80000000]: 80000008 00000000 00000000 00000000 -00000000000i[CPU0 ] CPUID[0x80000001]: 00000000 00000000 00000000 00000000 -00000000000i[CPU0 ] CPUID[0x80000002]: 20202020 20202020 20202020 6e492020 -00000000000i[CPU0 ] CPUID[0x80000003]: 286c6574 50202952 69746e65 52286d75 -00000000000i[CPU0 ] CPUID[0x80000004]: 20342029 20555043 20202020 00202020 -00000000000i[CPU0 ] CPUID[0x80000005]: 01ff01ff 01ff01ff 40020140 40020140 -00000000000i[CPU0 ] CPUID[0x80000006]: 00000000 42004200 02008140 00000000 -00000000000i[CPU0 ] CPUID[0x80000007]: 00000000 00000000 00000000 00000000 -00000000000i[CPU0 ] CPUID[0x80000008]: 00002028 00000000 00000000 00000000 -00000000000i[ ] reset of 'cmos' plugin device by virtual method -00000000000i[ ] reset of 'dma' plugin device by virtual method -00000000000i[ ] reset of 'pic' plugin device by virtual method -00000000000i[ ] reset of 'pit' plugin device by virtual method -00000000000i[ ] reset of 'floppy' plugin device by virtual method -00000000000i[ ] reset of 'vga' plugin device by virtual method -00000000000i[ ] reset of 'ioapic' plugin device by virtual method -00000000000i[ ] reset of 'keyboard' plugin device by virtual method -00000000000i[ ] reset of 'harddrv' plugin device by virtual method -00000000000i[ ] reset of 'unmapped' plugin device by virtual method -00000000000i[ ] reset of 'biosdev' plugin device by virtual method -00000000000i[ ] reset of 'speaker' plugin device by virtual method -00000000000e[SPEAK] Failed to open /dev/console: Permission denied -00000000000e[SPEAK] Deactivating beep on console -00000000000i[ ] reset of 'extfpuirq' plugin device by virtual method -00000000000i[ ] reset of 'parallel' plugin device by virtual method -00000000000i[ ] reset of 'serial' plugin device by virtual method -00000000025i[MEM0 ] allocate_block: block=0x0 used 0x1 of 0x4 -00000004661i[BIOS ] $Revision: 11318 $ $Date: 2012-08-06 19:59:54 +0200 (Mo, 06. Aug 2012) $ -00000317820i[KBD ] reset-disable command received -00000319072i[BIOS ] Starting rombios32 -00000319506i[BIOS ] Shutdown flag 0 -00000320089i[BIOS ] ram_size=0x00400000 -00000320487i[BIOS ] ram_end=4MB -00000331328i[BIOS ] Found 1 cpu(s) -00000345510i[BIOS ] bios_table_addr: 0x000fa438 end=0x000fcc00 -00000363970i[BIOS ] bios_table_cur_addr: 0x000fa438 -00000491587i[VBIOS] VGABios $Id: vgabios.c,v 1.75 2011/10/15 14:07:21 vruppert Exp $ -00000491658i[BXVGA] VBE known Display Interface b0c0 -00000491690i[BXVGA] VBE known Display Interface b0c5 -00000494615i[VBIOS] VBE Bios $Id: vbe.c,v 1.64 2011/07/19 18:25:05 vruppert Exp $ -00000833946i[BIOS ] ata0-0: PCHS=1/16/63 translation=none LCHS=1/16/63 -00004712316i[BIOS ] IDE time out -00007773617i[BIOS ] Booting from 0000:7c00 -00008171407i[MEM0 ] allocate_block: block=0x1 used 0x2 of 0x4 -00008212308i[MEM0 ] allocate_block: block=0x2 used 0x3 of 0x4 -01030203991i[NGUI ] ips = 1030.204M -02144669032i[NGUI ] ips = 1114.465M -03262317300i[NGUI ] ips = 1117.648M -04381040700i[NGUI ] ips = 1118.723M -04982866726p[ ] >>PANIC<< SIGNAL 2 caught -04982866726i[CPU0 ] CPU is in protected mode (halted) -04982866726i[CPU0 ] CS.mode = 32 bit -04982866726i[CPU0 ] SS.mode = 32 bit -04982866726i[CPU0 ] EFER = 0x00000000 -04982866726i[CPU0 ] | EAX=00000000 EBX=c0020fd7 ECX=c0103000 EDX=00000018 -04982866726i[CPU0 ] | ESP=c0103fa8 EBP=00000000 ESI=00000000 EDI=00000000 -04982866726i[CPU0 ] | IOPL=0 id vip vif ac vm rf nt of df IF tf SF zf AF pf cf -04982866726i[CPU0 ] | SEG sltr(index|ti|rpl) base limit G D -04982866726i[CPU0 ] | CS:0008( 0001| 0| 0) 00000000 ffffffff 1 1 -04982866726i[CPU0 ] | DS:0010( 0002| 0| 0) 00000000 ffffffff 1 1 -04982866726i[CPU0 ] | SS:0010( 0002| 0| 0) 00000000 ffffffff 1 1 -04982866726i[CPU0 ] | ES:0010( 0002| 0| 0) 00000000 ffffffff 1 1 -04982866726i[CPU0 ] | FS:0010( 0002| 0| 0) 00000000 ffffffff 1 1 -04982866726i[CPU0 ] | GS:0010( 0002| 0| 0) 00000000 ffffffff 1 1 -04982866726i[CPU0 ] | EIP=c0020ffc (c0020ffc) -04982866726i[CPU0 ] | CR0=0xe0010015 CR2=0x00000000 -04982866726i[CPU0 ] | CR3=0x00101000 CR4=0x00000000 -04982866726i[CPU0 ] 0xc0020ffc>> lea esi, dword ptr ds:[esi] : 8D742600 -04982866726i[CMOS ] Last time is 4982 (Thu Jan 1 01:23:02 1970) -04982866726i[NGUI ] bx_nogui_gui_c::exit() not implemented yet. -04982866726i[ ] restoring default signal behavior -04982866726i[CTRL ] quit_sim called with exit code 1 diff --git a/pintos-env/pintos/threads/bochsrc.txt b/pintos-env/pintos/threads/bochsrc.txt deleted file mode 100755 index d5436f6..0000000 --- a/pintos-env/pintos/threads/bochsrc.txt +++ /dev/null @@ -1,12 +0,0 @@ -romimage: file=$BXSHARE/BIOS-bochs-latest -vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest -boot: disk -cpu: ips=1000000 -megs: 4 -log: bochsout.txt -panic: action=fatal -user_shortcut: keys=ctrlaltdel -clock: sync=none, time0=0 -ata0-master: type=disk, path=/tmp/lA8HTUhyge.dsk, mode=flat, cylinders=1, heads=16, spt=63, translation=none -com1: enabled=1, mode=file, dev=/dev/stdout -display_library: nogui