일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 내일부터
- 핀토스 프로젝트
- botw
- 파란 장미
- PINTOS
- 글루민
- 마일섬
- 바빠지나?
- 셋업
- 핀토스 프로젝트 1
- 글리치
- 끝
- 아직도 실험 중
- alarm clock
- 노가다
- 핀토스 프로젝트 2
- 일지 시작한 지 얼마나 됐다고
- 핀토스 프로젝트 4
- multi-oom
- 가테
- 황금 장미
- 자 이제 시작이야
- 핀토스 프로젝트 3
- Project 1
- 제발흰박
- Today
- Total
목록분류 전체보기 (127)
거북이의 쉼터
오늘은 fork의 구현에 사용될 process_fork의 세부적인 동작을 코드 단위로 뜯어보면서 어디를 고쳐야 할지를 살펴보자. /* Clones the current process as `name`. Returns the new process's thread id, or * TID_ERROR if the thread cannot be created. */ tid_t process_fork (const char *name, struct intr_frame *if_ UNUSED) { /* Clone current thread to new thread.*/ return thread_create (name, PRI_DEFAULT, __do_fork, thread_current ()); } 우선 시작인 proc..
가이드를 쓰는데 좀 오래걸렸다. 읽어봐야 할 부분이 한 두 개가 아니라.... 드디어 오고야 말았다. 가장 귀찮았던 부분... syscall을 하나하나 구현하면 된다. syscall 요청이 들어올 경우, syscall.c에 있는 syscall_handler가 호출되면서 필요한 syscall을 실행시키는 것이 주요 과정이다. 어떤 syscall을 호출할지는 호출 시 rax 레지스터에 무슨 값이 들어있는지를 판단하여 호출하며, 해당 syscall을 호출할 때 필요한 인자 또한 비슷한 방식으로 레지스터에서 넘겨받는다. 이것이 x86이랑 비교했을 때 크게 달라지는 부분이다. x86의 경우 argument가 stack에 들어가 있는 상태였으며, esp에 대해서 상대 주소를 참조해서 가져오는 방식이었다. 그러나 x..
보호되어 있는 글입니다.
음... 이번 매뉴얼은 뭔가 짧다. To implement syscalls, you need to provide ways to read and write data in user virtual address space. You don't need this ability when getting the arguments. However, when you read the data from the pointer provided as the system call's argument, you should proxied through this functionallity. This can be a bit tricky: what if the user provides an invalid pointer, a pointer i..