OS

https://pdos.csail.mit.edu/6.S081/2020/labs/cow.html Xv6의 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를 증가시켜서, 나중에 사용될 예정인 memory가 fre..
https://pdos.csail.mit.edu/6.S081/2020/labs/lazy.html Lazy allocation은 메모리 효율성을 위한 메모리 관리 기법입니다. 메모리 할당 요청이 들어왔을 때는 할당할 메모리의 주소만 반환하고, 그 주소에 처음으로 접근할 떄 실제로 메모리를 할당합니다. 실제로 할당되지 않은 메모리에 접근을 시도하면 trap이 발생하는데, trap handler에서 메모리를 할당해주는 식으로 처리합니다. 이 lazy allocation을 구현하는 것이 실습의 목표입니다. Eliminate allocation from sbrk() sys_sbrk() 시스템 콜에서는 growproc()을 호출하여 프로세스에 메모리를 할당합니다. growproc()은 할당할 메모리의 크기만큼 프로..
https://pdos.csail.mit.edu/6.S081/2020/labs/traps.html RISC-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 arguments t..
https://pdos.csail.mit.edu/6.S081/2020/labs/pgtbl.html Print 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 argument to ..
https://pdos.csail.mit.edu/6.S081/2020/labs/syscall.html System call tracing (moderate) 리눅스의 strace와 같이 시스템 콜을 추적하는 프로그램을 구현하는 실습입니다. Add trace to Makefile 미리 구현되어 있는 user/trace.c가 컴파일될 수 있도록 Makefile에 추가합니다. ... UPROGS=\ ... $U/_trace\ ... Add trace system call trace.c에서 호출하는 trace 시스템 콜을 커널에 추가합니다. syscall.h에 시스템 콜 번호를 정의합니다. // System call numbers ... #define SYS_trace 22 syscall.c에 trace 시스템..
homeb0dy
'OS' 카테고리의 글 목록 (2 Page)