회고
오전 7시 30분에 일어나서 아침 운동을 갔다 오려고 했는데 너무 피곤해서 못 갔다. 오후부터는 비가 오는 바람에 오늘 운동은 물 건너 갔다.
오늘은 fork와 wait 시스템 콜을 구현했다. 결과적으로 시간이 부족해서 솔루션을 보고 한 것 뿐이지만.
fork를 구현하기 위해서는 해야 할 것들이 엄청 많았다. 부모 프로세스의 페이지 정보를 자식 프로세스에게 복사해주어야 하고, 자식 프로세스의 종료를 대기(waiting)하는 부모 프로세스 로직을 구현하기 위해 Project 1에서 구현했던 세마포어를 사용해야 헀다. 자식 프로세스의 load, exit, wait에 대해 세마포어를 잡고, 함수에 따라 세마포어를 잡고 풀어주어야 한다. 로직이 굉장히 복잡해 보이는데, 구현된 결과물을 보니 이게 맞다는 걸 알 수 있었다.
int
process_wait (tid_t child_tid) {
struct thread *child = get_child_process (child_tid);
if (child == NULL)
return -1;
sema_down (&child->wait_sema);
list_remove (&child->child_elem);
sema_up (&child->exit_sema);
return child->exit_status;
}
wait 시스템 콜도 세마포어를 활용했는데, 로직은 상당히 단순하다. 기존에 테스트케이스를 돌려보기 위해 wait을 단순 반복문을 아무 많이 돌도록 구현했었는데, 현재는 인자로 들어온 tid를 가진 스레드의 세마포어가 풀리기를 기다리도록 구현했다.
느낌 점
시간이 많았다면 솔루션을 보지 않고 스스로 구현하고 싶었는데, 초반에 늦장을 부린 탓에 진도가 느려서 솔루션을 보고 말았다. fork가 특히 어렵기도 했다.
오늘의 저녁
'크래프톤 정글 2기' 카테고리의 다른 글
[크래프톤 정글 2기] Day 72 (0) | 2023.06.14 |
---|---|
[크래프톤 정글 2기] Day 70 (0) | 2023.06.12 |
[크래프톤 정글 2기] Day 68 (0) | 2023.06.10 |
[크래프톤 정글 2기] Day 67 (0) | 2023.06.09 |
[크래프톤 정글 2기] Day 66 (0) | 2023.06.08 |