
2025.05.29
sys_write 에서 fd == 1(stdout)이면 곧바로 putbuf() 로 콘솔 출력하는 특수 처리가 있었음.fd_table[1] 이 비어 있어도 stdout 출력이 정상 동작했음.sys_write 가 항상 thread_current()->fd_table[fd] 를 통해 파일 구조체를 찾아서 쓰도록 바뀜.fd_table[1] 에 console_out 을 넣어 주지 않으면 NULL 참조 때문에 크래시가 발생.static void
process_init(void)
{
struct thread *cur = thread_current();
cur->fd_table = palloc_get_page(PAL_ZERO);
if (cur->fd_table == NULL)
PANIC("process_init: cannot alloc fd_table");
/* console_in/out 은 이미 thread_init() 시점에 초기화해 두었다고 가정 */
cur->fd_table[0] = &console_in;
cur->fd_table[1] = &console_out;
cur->next_fd = 2;
}

내 깃허브 - UserProgram까지 해냈다.
dup2는 어제 사실 구현이 되었는데, 갑자기 multi-oom 테스트가 실패하길래 너무 슬펐다..
oom test는
n == 메모리가 허용하는 만큼
1. fork n 번 -> exit n번 -> 표준 출력을 wirte
2. 다시 fork n번 -> exit n번 -> wirte => 메모리 누수를 체크
나는 메모리 누수가 아닌 wirte에서 문제가 있었던 것.
위에서 서술한 것처럼 dup2 구현 후에는 표준 입출력과 read,wirte를 건드렸다.
thread_create() 에서 뿐 아니라
그래서 최초 프로세스에서도 fd_table을 초기화를 추가해줬다..
원래 안 했었는데 잘 돌아갔던건 운이었나보다..
그래도 해결했으니 행복하다.
정진하겠습니다.