[MIT 6.S081 Fall 2020] Lab: Copy-on-Write Fork for xv6
xv6
https://pdos.csail.mit.edu/6.S081/2020/labs/cow.htmlRead in GithubXv6의 fork() system call은 parent process의 모든 user-space memory를 child로 copy한다. Parent의 memory가 클수록 시간이 오래 걸릴 것이고, 만약 copy한 memory가 child에서 실제로 사용되지 않는다면 매우 비효율적인 작업이 된다. Copy-on-write(COW) fork의 목표는 memory가 실제로 필요한 시점에 copy하여 시간과 공간을 절약하는 것이다.Implement copy-on write실제로 copy가 진행되기 전에는 page에 대한 reference count를 증가시켜서, 나중에 사용될 예정인 mem..
[MIT 6.S081 Fall 2020] Lab: xv6 lazy page allocation
xv6
https://pdos.csail.mit.edu/6.S081/2020/labs/lazy.htmlRead in GithubLazy allocation은 메모리 효율성을 위한 메모리 관리 기법이다. 메모리 할당 요청이 들어왔을 때는 할당할 메모리의 주소만 반환하고, 그 주소에 처음으로 접근할 떄 실제로 메모리를 할당한다. 실제로 할당되지 않은 메모리에 접근을 시도하면 trap이 발생하는데, trap handler에서 메모리를 할당해주는 식으로 처리한다. 이 lazy allocation을 구현하는 것이 실습의 목표이다.Eliminate allocation from sbrk()sys_sbrk() 시스템 콜에서는 growproc()을 호출하여 프로세스에 메모리를 할당한다. growproc()은 할당할 메모리의 크..
[MIT 6.S081 Fall 2020] Lab: traps
xv6
https://pdos.csail.mit.edu/6.S081/2020/labs/traps.htmlRead in GithubRISC-V assembly (easy)user/call.c가 컴파일되어 생성되는 user/call.asm을 보고 몇 가지의 질문에 답하는 실습이다.#include "kernel/param.h"#include "kernel/types.h"#include "kernel/stat.h"#include "user/user.h"int g(int x) { return x+3;}int f(int x) { return g(x);}void main(void) { printf("%d %d\n", f(8)+1, 13); exit(0);}Q. Which registers contain argumen..
[MIT 6.S081 Fall 2020] Lab: page tables
xv6
https://pdos.csail.mit.edu/6.S081/2020/labs/pgtbl.htmlRead in GithubPrint a page table (easy)Page table에 존재하는 모든 PTE와 그에 해당하는 physical address를 출력하는 vmprint() 함수를 구현하는 실습이다.Add vmprint() in exec()exec()이 리턴하기 직전에 vmprint()를 호출하여 첫 번째 프로세스(pid == 1)의 page table을 출력한다.int exec(char *path, char **argv) {... if (p->pid == 1) vmprint(p->pagetable); return argc; // this ends up in a0, the first..
[MIT 6.S081 Fall 2020] Lab: system calls
xv6
https://pdos.csail.mit.edu/6.S081/2020/labs/syscall.htmlRead in GithubSystem call tracing (moderate)리눅스의 strace와 같이 시스템 콜을 추적하는 프로그램을 구현하는 실습이다.Add trace to Makefile미리 구현되어 있는 user/trace.c가 컴파일될 수 있도록 Makefile에 추가한다....UPROGS=\... $U/_trace\...Add trace system calltrace.c에서 호출하는 trace 시스템 콜을 커널에 추가한다.syscall.h에 시스템 콜 번호를 정의한다.// System call numbers...#define SYS_trace 22syscall.c에 trace 시스템 콜..
h0meb0dy_
'xv6' 카테고리의 글 목록 (2 Page)