Page frame 관리자 구현할 것
현재 Page frame 을 할당하고 해제하기 위해 buddy allocator 만 구현된 상태이이다. 각 page frame 이 어떤 thread 를 위해 할당 되었는지, 또 reference 하고 있는 object 들은 몇 개나 있는지에 대한 관리가 필요하다.
Kernel thread & user process
커널에서 쓰레드를 생성하는 것은 pthread_create 함수로 제공하고, 유저 프로세스를 생성하는 것은 fork 로 제공하고, 실행 바이너리를 로딩하는 것은 exec 로 제공하자.
- Global calloc (size_t nmemb, size_t size)
- calloc 의 구현에 대한 정확한 요구사항 파악이 필요함 현재는 그냥 member 개수와 size 를 곱해서 실제 heap 할당 크기를 구하는 것으로 한다. malloc 을 그대로 사용한다.
- Group ctype
- locale 에 따라 각 함수의 동작이 달라질 수 있도록 하자.
- Global execl (const char *path, const char *arg,...)
- path 에 해당 하는 파일을 읽어서, 알맞은 binfmt 객체를 찾은 후, 실행 코드와 데이터들을 메모리에 로딩하고, 사용자 쓰레드용 스택 을 구성하고 thread->esp 를 갱신한 후 thread switching 이 발생 하도록 유도하여, user level thread 로 context switching 되도록 한다.
- Global execle (const char *path, const char *arg,...)
- path 에 해당 하는 파일을 읽어서, 알맞은 binfmt 객체를 찾은 후, 실행 코드와 데이터들을 메모리에 로딩하고, 사용자 쓰레드용 스택 을 구성하고 thread->esp 를 갱신한 후 thread switching 이 발생 하도록 유도하여, user level thread 로 context switching 되도록 한다.
- Global execlp (const char *path, const char *arg,...)
- path 에 해당 하는 파일을 읽어서, 알맞은 binfmt 객체를 찾은 후, 실행 코드와 데이터들을 메모리에 로딩하고, 사용자 쓰레드용 스택 을 구성하고 thread->esp 를 갱신한 후 thread switching 이 발생 하도록 유도하여, user level thread 로 context switching 되도록 한다.
- Global execv (const char *path, char *const argv[])
- path 에 해당 하는 파일을 읽어서, 알맞은 binfmt 객체를 찾은 후, 실행 코드와 데이터들을 메모리에 로딩하고, 사용자 쓰레드용 스택 을 구성하고 thread->esp 를 갱신한 후 thread switching 이 발생 하도록 유도하여, user level thread 로 context switching 되도록 한다.
- Global execvp (const char *path, char *const argv[])
- path 에 해당 하는 파일을 읽어서, 알맞은 binfmt 객체를 찾은 후, 실행 코드와 데이터들을 메모리에 로딩하고, 사용자 쓰레드용 스택 을 구성하고 thread->esp 를 갱신한 후 thread switching 이 발생 하도록 유도하여, user level thread 로 context switching 되도록 한다.
- Global execvpe (const char *file, const char *const argv[], char *const envp[])
- path 에 해당 하는 파일을 읽어서, 알맞은 binfmt 객체를 찾은 후, 실행 코드와 데이터들을 메모리에 로딩하고, 사용자 쓰레드용 스택 을 구성하고 thread->esp 를 갱신한 후 thread switching 이 발생 하도록 유도하여, user level thread 로 context switching 되도록 한다.
- Global pthread_cancel (pthread_t thread)
- pgd 와 rpgd 에 할당 된 Page table pointer 및 page frame 들도 모두 해제 해 주어야 한다.