개요다들 알고 있을 기본적인 OS 내용이지만, 오랜만에 생각해보니 헷갈리는 부분도 있어서 기억을 되살릴 겸 정리해보고자 한다. 프로그램과 프로세스, 스레드 프로그램은 정적인 실행 파일을 말한다. 이러한 프로그램이 CPU에 올라와서 실행되면 그것을 프로세스라고 한다. 프로그램은 Long-Term Scheduler에 의해서 CPU에 올라오고(Ready), 메모리를 할당받아 프로세스가 된다. 스레드는 프로세스가 할당받은 자원을 이용하는 작업의 단위를 의미한다. 멀티프로세스와 멀티스레드CPU는 한번에 하나의 프로세스만 실행할 수 있다. 따라서 CPU를 점유(Run)하고 대기(Wait)하는 과정, 즉 Context Switching을 통해서 여러개의 프로세스를 번갈아서 실행시켜 사용자에게는 동시에 실행중인 것처..
//init.c 일부 for(;;){ printf(1, "init: starting sh\n"); pid = fork(); if(pid = 0 && wpid != pid) printf(1, "zombie!\n"); } init.c는 xv6에서 가장 먼저 실행되는 user-level 프로그램이다. make-qemu를 통해서 xv6를 실행하면 init:starting sh라는 메세지와 함께 쉘이 실행된다. init.c에는 무한루프가 존재하고, ..
0. 쉘 명령어(커널명령어) 추가 Makefile의 UPROG와 EXTRA부분에 다음과 같이 추가해준다. 1) UPROG=\ ... _new\ 2) EXTRA=\ umalloc.c new.c\ 1. 파일 추가 README file in Xv6 is a generic file too. Searching for occurrences of README in the MakeFile and adding your required file will be sufficient. Suppose new.txt is the file you want to add. Parts of the MakeFile to be changed are: 1) fs.img: mkfs README new.txt $(UPROGS) ./mkfs fs...