diff --git a/.gitignore b/.gitignore index 037ed11..9565562 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,7 @@ obj/ bin/ .gdb.in .qemu.out +cscope.* +ncscope.* +tags +*swp diff --git a/code/lab1/Makefile b/code/lab1/Makefile index 66d1e94..c051b3b 100644 --- a/code/lab1/Makefile +++ b/code/lab1/Makefile @@ -233,9 +233,9 @@ touch: print-%: @echo $($(shell echo $(patsubst print-%,%,$@) | $(TR) [a-z] [A-Z])) -.PHONY: clean dist-clean handin packall +.PHONY: clean dist-clean handin packall tags clean: - $(V)$(RM) $(GRADE_GDB_IN) $(GRADE_QEMU_OUT) + $(V)$(RM) $(GRADE_GDB_IN) $(GRADE_QEMU_OUT) cscope* tags -$(RM) -r $(OBJDIR) $(BINDIR) dist-clean: clean @@ -248,3 +248,9 @@ packall: clean @$(RM) -f $(HANDIN) @tar -czf $(HANDIN) `find . -type f -o -type d | grep -v '^\.*$$' | grep -vF '$(HANDIN)'` +tags: + @echo TAGS ALL + $(V)rm -f cscope.files cscope.in.out cscope.out cscope.po.out tags + $(V)find . -type f -name "*.[chS]" >cscope.files + $(V)cscope -bq + $(V)ctags -L cscope.files diff --git a/code/lab2/Makefile b/code/lab2/Makefile index aa9a1c3..793967b 100644 --- a/code/lab2/Makefile +++ b/code/lab2/Makefile @@ -260,9 +260,9 @@ touch: print-%: @echo $($(shell echo $(patsubst print-%,%,$@) | $(TR) [a-z] [A-Z])) -.PHONY: clean distclean handin +.PHONY: clean distclean handin tags clean: - $(V)$(RM) $(GRADE_GDB_IN) $(GRADE_QEMU_OUT) + $(V)$(RM) $(GRADE_GDB_IN) $(GRADE_QEMU_OUT) cscope* tags $(V)$(RM) -r $(OBJDIR) $(BINDIR) distclean: clean @@ -272,4 +272,10 @@ handin: distclean $(V)$(TAR) -cf - `find . -type f -o -type d | grep -v '^\.$$' | grep -v '/CVS/' \ | grep -v '/\.git/' | grep -v '/\.svn/' | grep -v "$(HANDIN)"` \ | $(ZIP) > $(HANDIN) - + +tags: + @echo TAGS ALL + $(V)rm -f cscope.files cscope.in.out cscope.out cscope.po.out tags + $(V)find . -type f -name "*.[chS]" >cscope.files + $(V)cscope -bq + $(V)ctags -L cscope.files diff --git a/code/lab3/Makefile b/code/lab3/Makefile index 89583cf..68dec5f 100644 --- a/code/lab3/Makefile +++ b/code/lab3/Makefile @@ -254,9 +254,9 @@ touch: print-%: @echo $($(shell echo $(patsubst print-%,%,$@) | $(TR) [a-z] [A-Z])) -.PHONY: clean dist-clean handin packall +.PHONY: clean dist-clean handin packall tags clean: - $(V)$(RM) $(GRADE_GDB_IN) $(GRADE_QEMU_OUT) + $(V)$(RM) $(GRADE_GDB_IN) $(GRADE_QEMU_OUT) cscope* tags -$(RM) -r $(OBJDIR) $(BINDIR) dist-clean: clean @@ -269,3 +269,9 @@ packall: clean @$(RM) -f $(HANDIN) @tar -czf $(HANDIN) `find . -type f -o -type d | grep -v '^\.*$$' | grep -vF '$(HANDIN)'` +tags: + @echo TAGS ALL + $(V)rm -f cscope.files cscope.in.out cscope.out cscope.po.out tags + $(V)find . -type f -name "*.[chS]" >cscope.files + $(V)cscope -bq + $(V)ctags -L cscope.files diff --git a/code/lab3/kern/mm/vmm.c b/code/lab3/kern/mm/vmm.c index d374aee..2973e5b 100644 --- a/code/lab3/kern/mm/vmm.c +++ b/code/lab3/kern/mm/vmm.c @@ -80,7 +80,7 @@ find_vma(struct mm_struct *mm, uintptr_t addr) { list_entry_t *list = &(mm->mmap_list), *le = list; while ((le = list_next(le)) != list) { vma = le2vma(le, list_link); - if (addr < vma->vm_end) { + if (vma->vm_start<=addr && addr < vma->vm_end) { found = 1; break; } @@ -181,7 +181,7 @@ check_vma_struct(void) { int step1 = 10, step2 = step1 * 10; int i; - for (i = step1; i >= 0; i --) { + for (i = step1; i >= 1; i --) { struct vma_struct *vma = vma_create(i * 5, i * 5 + 2, 0); assert(vma != NULL); insert_vma_struct(mm, vma); @@ -195,21 +195,35 @@ check_vma_struct(void) { list_entry_t *le = list_next(&(mm->mmap_list)); - for (i = 0; i <= step2; i ++) { + for (i = 1; i <= step2; i ++) { assert(le != &(mm->mmap_list)); struct vma_struct *mmap = le2vma(le, list_link); assert(mmap->vm_start == i * 5 && mmap->vm_end == i * 5 + 2); le = list_next(le); } - for (i = 0; i < 5 * step2 + 2; i ++) { - struct vma_struct *vma = find_vma(mm, i); - assert(vma != NULL); - int j = i / 5; - if (i >= 5 * j + 2) { - j ++; + for (i = 5; i <= 5 * step2; i +=5) { + struct vma_struct *vma1 = find_vma(mm, i); + assert(vma1 != NULL); + struct vma_struct *vma2 = find_vma(mm, i+1); + assert(vma2 != NULL); + struct vma_struct *vma3 = find_vma(mm, i+2); + assert(vma3 == NULL); + struct vma_struct *vma4 = find_vma(mm, i+3); + assert(vma4 == NULL); + struct vma_struct *vma5 = find_vma(mm, i+4); + assert(vma5 == NULL); + + assert(vma1->vm_start == i && vma1->vm_end == i + 2); + assert(vma2->vm_start == i && vma2->vm_end == i + 2); + } + + for (i =4; i>=0; i--) { + struct vma_struct *vma_below_5= find_vma(mm,i); + if (vma_below_5 != NULL ) { + cprintf("vma_below_5: i %x, start %x, end %x\n",i, vma_below_5->vm_start, vma_below_5->vm_end); } - assert(vma->vm_start == j * 5 && vma->vm_end == j * 5 + 2); + assert(vma_below_5 == NULL); } mm_destroy(mm); diff --git a/code/lab3/kern/mm/vmm.h b/code/lab3/kern/mm/vmm.h index c48634b..82d4bf9 100644 --- a/code/lab3/kern/mm/vmm.h +++ b/code/lab3/kern/mm/vmm.h @@ -9,11 +9,12 @@ //pre define struct mm_struct; -// the virtual continuous memory area(vma) +// the virtual continuous memory area(vma), [vm_start, vm_end), +// addr belong to a vma means vma.vm_start<= addr cscope.files + $(V)cscope -bq + $(V)ctags -L cscope.files diff --git a/code/lab4/kern/mm/vmm.c b/code/lab4/kern/mm/vmm.c index 335255b..7370361 100644 --- a/code/lab4/kern/mm/vmm.c +++ b/code/lab4/kern/mm/vmm.c @@ -81,7 +81,7 @@ find_vma(struct mm_struct *mm, uintptr_t addr) { list_entry_t *list = &(mm->mmap_list), *le = list; while ((le = list_next(le)) != list) { vma = le2vma(le, list_link); - if (addr < vma->vm_end) { + if (vma->vm_start<=addr && addr < vma->vm_end) { found = 1; break; } @@ -180,7 +180,7 @@ check_vma_struct(void) { int step1 = 10, step2 = step1 * 10; int i; - for (i = step1; i >= 0; i --) { + for (i = step1; i >= 1; i --) { struct vma_struct *vma = vma_create(i * 5, i * 5 + 2, 0); assert(vma != NULL); insert_vma_struct(mm, vma); @@ -194,21 +194,35 @@ check_vma_struct(void) { list_entry_t *le = list_next(&(mm->mmap_list)); - for (i = 0; i <= step2; i ++) { + for (i = 1; i <= step2; i ++) { assert(le != &(mm->mmap_list)); struct vma_struct *mmap = le2vma(le, list_link); assert(mmap->vm_start == i * 5 && mmap->vm_end == i * 5 + 2); le = list_next(le); } - for (i = 0; i < 5 * step2 + 2; i ++) { - struct vma_struct *vma = find_vma(mm, i); - assert(vma != NULL); - int j = i / 5; - if (i >= 5 * j + 2) { - j ++; + for (i = 5; i <= 5 * step2; i +=5) { + struct vma_struct *vma1 = find_vma(mm, i); + assert(vma1 != NULL); + struct vma_struct *vma2 = find_vma(mm, i+1); + assert(vma2 != NULL); + struct vma_struct *vma3 = find_vma(mm, i+2); + assert(vma3 == NULL); + struct vma_struct *vma4 = find_vma(mm, i+3); + assert(vma4 == NULL); + struct vma_struct *vma5 = find_vma(mm, i+4); + assert(vma5 == NULL); + + assert(vma1->vm_start == i && vma1->vm_end == i + 2); + assert(vma2->vm_start == i && vma2->vm_end == i + 2); + } + + for (i =4; i>=0; i--) { + struct vma_struct *vma_below_5= find_vma(mm,i); + if (vma_below_5 != NULL ) { + cprintf("vma_below_5: i %x, start %x, end %x\n",i, vma_below_5->vm_start, vma_below_5->vm_end); } - assert(vma->vm_start == j * 5 && vma->vm_end == j * 5 + 2); + assert(vma_below_5 == NULL); } mm_destroy(mm); diff --git a/code/lab4/kern/mm/vmm.h b/code/lab4/kern/mm/vmm.h index 6b93b6a..34973ff 100644 --- a/code/lab4/kern/mm/vmm.h +++ b/code/lab4/kern/mm/vmm.h @@ -9,11 +9,12 @@ //pre define struct mm_struct; -// the virtual continuous memory area(vma) +// the virtual continuous memory area(vma), [vm_start, vm_end), +// addr belong to a vma means vma.vm_start<= addr cscope.files + $(V)cscope -bq + $(V)ctags -L cscope.files diff --git a/code/lab5/kern/mm/vmm.c b/code/lab5/kern/mm/vmm.c index a5b1b0e..3727bbb 100644 --- a/code/lab5/kern/mm/vmm.c +++ b/code/lab5/kern/mm/vmm.c @@ -84,7 +84,7 @@ find_vma(struct mm_struct *mm, uintptr_t addr) { list_entry_t *list = &(mm->mmap_list), *le = list; while ((le = list_next(le)) != list) { vma = le2vma(le, list_link); - if (addr < vma->vm_end) { + if (vma->vm_start<=addr && addr < vma->vm_end) { found = 1; break; } @@ -270,7 +270,7 @@ check_vma_struct(void) { int step1 = 10, step2 = step1 * 10; int i; - for (i = step1; i >= 0; i --) { + for (i = step1; i >= 1; i --) { struct vma_struct *vma = vma_create(i * 5, i * 5 + 2, 0); assert(vma != NULL); insert_vma_struct(mm, vma); @@ -284,21 +284,35 @@ check_vma_struct(void) { list_entry_t *le = list_next(&(mm->mmap_list)); - for (i = 0; i <= step2; i ++) { + for (i = 1; i <= step2; i ++) { assert(le != &(mm->mmap_list)); struct vma_struct *mmap = le2vma(le, list_link); assert(mmap->vm_start == i * 5 && mmap->vm_end == i * 5 + 2); le = list_next(le); } - for (i = 0; i < 5 * step2 + 2; i ++) { - struct vma_struct *vma = find_vma(mm, i); - assert(vma != NULL); - int j = i / 5; - if (i >= 5 * j + 2) { - j ++; + for (i = 5; i <= 5 * step2; i +=5) { + struct vma_struct *vma1 = find_vma(mm, i); + assert(vma1 != NULL); + struct vma_struct *vma2 = find_vma(mm, i+1); + assert(vma2 != NULL); + struct vma_struct *vma3 = find_vma(mm, i+2); + assert(vma3 == NULL); + struct vma_struct *vma4 = find_vma(mm, i+3); + assert(vma4 == NULL); + struct vma_struct *vma5 = find_vma(mm, i+4); + assert(vma5 == NULL); + + assert(vma1->vm_start == i && vma1->vm_end == i + 2); + assert(vma2->vm_start == i && vma2->vm_end == i + 2); + } + + for (i =4; i>=0; i--) { + struct vma_struct *vma_below_5= find_vma(mm,i); + if (vma_below_5 != NULL ) { + cprintf("vma_below_5: i %x, start %x, end %x\n",i, vma_below_5->vm_start, vma_below_5->vm_end); } - assert(vma->vm_start == j * 5 && vma->vm_end == j * 5 + 2); + assert(vma_below_5 == NULL); } mm_destroy(mm); diff --git a/code/lab5/kern/mm/vmm.h b/code/lab5/kern/mm/vmm.h index 53f98d1..4269159 100644 --- a/code/lab5/kern/mm/vmm.h +++ b/code/lab5/kern/mm/vmm.h @@ -9,11 +9,12 @@ //pre define struct mm_struct; -// the virtual continuous memory area(vma) +// the virtual continuous memory area(vma), [vm_start, vm_end), +// addr belong to a vma means vma.vm_start<= addr cscope.files + $(V)cscope -bq + $(V)ctags -L cscope.files diff --git a/code/lab6/kern/mm/vmm.c b/code/lab6/kern/mm/vmm.c index a5b1b0e..3727bbb 100644 --- a/code/lab6/kern/mm/vmm.c +++ b/code/lab6/kern/mm/vmm.c @@ -84,7 +84,7 @@ find_vma(struct mm_struct *mm, uintptr_t addr) { list_entry_t *list = &(mm->mmap_list), *le = list; while ((le = list_next(le)) != list) { vma = le2vma(le, list_link); - if (addr < vma->vm_end) { + if (vma->vm_start<=addr && addr < vma->vm_end) { found = 1; break; } @@ -270,7 +270,7 @@ check_vma_struct(void) { int step1 = 10, step2 = step1 * 10; int i; - for (i = step1; i >= 0; i --) { + for (i = step1; i >= 1; i --) { struct vma_struct *vma = vma_create(i * 5, i * 5 + 2, 0); assert(vma != NULL); insert_vma_struct(mm, vma); @@ -284,21 +284,35 @@ check_vma_struct(void) { list_entry_t *le = list_next(&(mm->mmap_list)); - for (i = 0; i <= step2; i ++) { + for (i = 1; i <= step2; i ++) { assert(le != &(mm->mmap_list)); struct vma_struct *mmap = le2vma(le, list_link); assert(mmap->vm_start == i * 5 && mmap->vm_end == i * 5 + 2); le = list_next(le); } - for (i = 0; i < 5 * step2 + 2; i ++) { - struct vma_struct *vma = find_vma(mm, i); - assert(vma != NULL); - int j = i / 5; - if (i >= 5 * j + 2) { - j ++; + for (i = 5; i <= 5 * step2; i +=5) { + struct vma_struct *vma1 = find_vma(mm, i); + assert(vma1 != NULL); + struct vma_struct *vma2 = find_vma(mm, i+1); + assert(vma2 != NULL); + struct vma_struct *vma3 = find_vma(mm, i+2); + assert(vma3 == NULL); + struct vma_struct *vma4 = find_vma(mm, i+3); + assert(vma4 == NULL); + struct vma_struct *vma5 = find_vma(mm, i+4); + assert(vma5 == NULL); + + assert(vma1->vm_start == i && vma1->vm_end == i + 2); + assert(vma2->vm_start == i && vma2->vm_end == i + 2); + } + + for (i =4; i>=0; i--) { + struct vma_struct *vma_below_5= find_vma(mm,i); + if (vma_below_5 != NULL ) { + cprintf("vma_below_5: i %x, start %x, end %x\n",i, vma_below_5->vm_start, vma_below_5->vm_end); } - assert(vma->vm_start == j * 5 && vma->vm_end == j * 5 + 2); + assert(vma_below_5 == NULL); } mm_destroy(mm); diff --git a/code/lab6/kern/mm/vmm.h b/code/lab6/kern/mm/vmm.h index 53f98d1..4269159 100644 --- a/code/lab6/kern/mm/vmm.h +++ b/code/lab6/kern/mm/vmm.h @@ -9,11 +9,12 @@ //pre define struct mm_struct; -// the virtual continuous memory area(vma) +// the virtual continuous memory area(vma), [vm_start, vm_end), +// addr belong to a vma means vma.vm_start<= addr cscope.files + $(V)cscope -bq + $(V)ctags -L cscope.files diff --git a/code/lab7/kern/mm/vmm.c b/code/lab7/kern/mm/vmm.c index a5a96f4..6799d1c 100644 --- a/code/lab7/kern/mm/vmm.c +++ b/code/lab7/kern/mm/vmm.c @@ -84,7 +84,7 @@ find_vma(struct mm_struct *mm, uintptr_t addr) { list_entry_t *list = &(mm->mmap_list), *le = list; while ((le = list_next(le)) != list) { vma = le2vma(le, list_link); - if (addr < vma->vm_end) { + if (vma->vm_start<=addr && addr < vma->vm_end) { found = 1; break; } @@ -270,7 +270,7 @@ check_vma_struct(void) { int step1 = 10, step2 = step1 * 10; int i; - for (i = step1; i >= 0; i --) { + for (i = step1; i >= 1; i --) { struct vma_struct *vma = vma_create(i * 5, i * 5 + 2, 0); assert(vma != NULL); insert_vma_struct(mm, vma); @@ -284,21 +284,35 @@ check_vma_struct(void) { list_entry_t *le = list_next(&(mm->mmap_list)); - for (i = 0; i <= step2; i ++) { + for (i = 1; i <= step2; i ++) { assert(le != &(mm->mmap_list)); struct vma_struct *mmap = le2vma(le, list_link); assert(mmap->vm_start == i * 5 && mmap->vm_end == i * 5 + 2); le = list_next(le); } - for (i = 0; i < 5 * step2 + 2; i ++) { - struct vma_struct *vma = find_vma(mm, i); - assert(vma != NULL); - int j = i / 5; - if (i >= 5 * j + 2) { - j ++; + for (i = 5; i <= 5 * step2; i +=5) { + struct vma_struct *vma1 = find_vma(mm, i); + assert(vma1 != NULL); + struct vma_struct *vma2 = find_vma(mm, i+1); + assert(vma2 != NULL); + struct vma_struct *vma3 = find_vma(mm, i+2); + assert(vma3 == NULL); + struct vma_struct *vma4 = find_vma(mm, i+3); + assert(vma4 == NULL); + struct vma_struct *vma5 = find_vma(mm, i+4); + assert(vma5 == NULL); + + assert(vma1->vm_start == i && vma1->vm_end == i + 2); + assert(vma2->vm_start == i && vma2->vm_end == i + 2); + } + + for (i =4; i>=0; i--) { + struct vma_struct *vma_below_5= find_vma(mm,i); + if (vma_below_5 != NULL ) { + cprintf("vma_below_5: i %x, start %x, end %x\n",i, vma_below_5->vm_start, vma_below_5->vm_end); } - assert(vma->vm_start == j * 5 && vma->vm_end == j * 5 + 2); + assert(vma_below_5 == NULL); } mm_destroy(mm); diff --git a/code/lab7/kern/mm/vmm.h b/code/lab7/kern/mm/vmm.h index f58e489..9f4059f 100644 --- a/code/lab7/kern/mm/vmm.h +++ b/code/lab7/kern/mm/vmm.h @@ -11,11 +11,12 @@ //pre define struct mm_struct; -// the virtual continuous memory area(vma) +// the virtual continuous memory area(vma), [vm_start, vm_end), +// addr belong to a vma means vma.vm_start<= addr &1 | grep '^elf32-i386$$' >/dev/null 2>&1; \ @@ -353,9 +355,9 @@ touch: print-%: @echo $($(shell echo $(patsubst print-%,%,$@) | $(TR) [a-z] [A-Z])) -.PHONY: clean dist-clean handin packall +.PHONY: clean dist-clean handin packall tags clean: - $(V)$(RM) $(GRADE_GDB_IN) $(GRADE_QEMU_OUT) $(SFSBINS) + $(V)$(RM) $(GRADE_GDB_IN) $(GRADE_QEMU_OUT) $(SFSBINS) cscope* tags -$(RM) -r $(OBJDIR) $(BINDIR) dist-clean: clean @@ -368,3 +370,9 @@ packall: clean @$(RM) -f $(HANDIN) @tar -czf $(HANDIN) `find . -type f -o -type d | grep -v '^\.*$$' | grep -vF '$(HANDIN)'` +tags: + @echo TAGS ALL + $(V)rm -f cscope.files cscope.in.out cscope.out cscope.po.out tags + $(V)find . -type f -name "*.[chS]" >cscope.files + $(V)cscope -bq + $(V)ctags -L cscope.files diff --git a/code/lab8/kern/mm/vmm.c b/code/lab8/kern/mm/vmm.c index b67cc58..8cf880c 100644 --- a/code/lab8/kern/mm/vmm.c +++ b/code/lab8/kern/mm/vmm.c @@ -84,7 +84,7 @@ find_vma(struct mm_struct *mm, uintptr_t addr) { list_entry_t *list = &(mm->mmap_list), *le = list; while ((le = list_next(le)) != list) { vma = le2vma(le, list_link); - if (addr < vma->vm_end) { + if (vma->vm_start<=addr && addr < vma->vm_end) { found = 1; break; } @@ -270,7 +270,7 @@ check_vma_struct(void) { int step1 = 10, step2 = step1 * 10; int i; - for (i = step1; i >= 0; i --) { + for (i = step1; i >= 1; i --) { struct vma_struct *vma = vma_create(i * 5, i * 5 + 2, 0); assert(vma != NULL); insert_vma_struct(mm, vma); @@ -284,21 +284,35 @@ check_vma_struct(void) { list_entry_t *le = list_next(&(mm->mmap_list)); - for (i = 0; i <= step2; i ++) { + for (i = 1; i <= step2; i ++) { assert(le != &(mm->mmap_list)); struct vma_struct *mmap = le2vma(le, list_link); assert(mmap->vm_start == i * 5 && mmap->vm_end == i * 5 + 2); le = list_next(le); } - for (i = 0; i < 5 * step2 + 2; i ++) { - struct vma_struct *vma = find_vma(mm, i); - assert(vma != NULL); - int j = i / 5; - if (i >= 5 * j + 2) { - j ++; + for (i = 5; i <= 5 * step2; i +=5) { + struct vma_struct *vma1 = find_vma(mm, i); + assert(vma1 != NULL); + struct vma_struct *vma2 = find_vma(mm, i+1); + assert(vma2 != NULL); + struct vma_struct *vma3 = find_vma(mm, i+2); + assert(vma3 == NULL); + struct vma_struct *vma4 = find_vma(mm, i+3); + assert(vma4 == NULL); + struct vma_struct *vma5 = find_vma(mm, i+4); + assert(vma5 == NULL); + + assert(vma1->vm_start == i && vma1->vm_end == i + 2); + assert(vma2->vm_start == i && vma2->vm_end == i + 2); + } + + for (i =4; i>=0; i--) { + struct vma_struct *vma_below_5= find_vma(mm,i); + if (vma_below_5 != NULL ) { + cprintf("vma_below_5: i %x, start %x, end %x\n",i, vma_below_5->vm_start, vma_below_5->vm_end); } - assert(vma->vm_start == j * 5 && vma->vm_end == j * 5 + 2); + assert(vma_below_5 == NULL); } mm_destroy(mm); diff --git a/code/lab8/kern/mm/vmm.h b/code/lab8/kern/mm/vmm.h index 61b6f88..be613a8 100644 --- a/code/lab8/kern/mm/vmm.h +++ b/code/lab8/kern/mm/vmm.h @@ -11,11 +11,12 @@ //pre define struct mm_struct; -// the virtual continuous memory area(vma) +// the virtual continuous memory area(vma), [vm_start, vm_end), +// addr belong to a vma means vma.vm_start<= addr