[Week8] 0319

안나경·2024년 3월 19일

크프정 일상

목록 보기
69/109

어제의 이야기

어제 공부한 것

exec이랑 close를 하기로 했었는데
exec은 process_exec만 넣어줬고

fork에서 부모 프로세스의 컨텍스트 계승 받는거 했고
close가 문제라 생각했는데
thread_exit()에 있는 close만 주석처리해줬더니 되고

check address로 주로 들어오는
파일 포인터나 그런거 처리해줬더니 7개 통과됐고

그 외 다른 테스트 케이스를 확인해보니
fork 관련 쓰는 모든 테스트 케이스가
child 자체가 run이 되지 않는게 이슈였음.

나는 원래 시스템 콜에서 thread_name과 동일하면
따로 빼주는 조건문을 했는데 안 먹히는구나 싶어서
굳이 sema를 부모의 sema 말고 자식의 sema를 썼지만
크게 상관없고 (어차피 sema를 낮추거나 높히는 주체는 동일하므로)

file_duplicate 부분... 대충 기져오고

fork에서 정확히 어느 부분이 빠지나 봤더니
duplicate pet에서 is_kernel_vaddr(va) 부분에서 커널이면 바로 true로 리턴하는데,
들어오는 모든 부분이 커널이라서 무한히....함.
그부분을 false로 하면 바로 끝나버림.

지피티는 is_kernel_vaddr이 문제가 아니냐고했지만
그럴리는 없을거같고

원래 부모 프로세스가 가지고 있던 유저 컨텍스트를 계승해야하는데
그걸 못하고 있는 상황...인거같지만
딱히 다른 곳에서 그 부분을 수정한것도 없고
(낮에 했던 parent_if를 계승 받는 정도?)
(그거 하려고 인자 추가했더니 인식 계속 못하고 conflict type 떠서 뭐야 말도안돼 네가 말하는 컴파일 에러는 애초에 필요한 헤더파일이라고......(에러 말인 즉슨 다른 곳에 선언한 곳과 충돌한다는 얘기였음.))
(근데 include로 intr_frame을 가진 헤더 파일을 추가해줬더니 해결.)
(그 뒤로 그걸 process fork로 넘겨서 그 if를 복사해서 넘겨받는 애의 스레드 구조체에 컨텍스트 복사해서 꺼내다 씀.)
(근데 그런것치곤 그거 복사한다음에 딱히? 쓰는 곳 없지않나 싶어. intr_frame의 if에 복사하는데 그 if... 그냥 rax에 0을 반환하는 용으로밖에 안 쓴단 말임.)
(잘못짚었나보다....생각해보니 rax에 0을 반환하는 용 자체는 맞는거같긴하거든 걔가 커널에 왔든 말든)
(근데 지금 문제는 parent, 즉 aux로 넘어온 인자가 커널 영역으로 인식된다는 문제인데.)
(현 쓰레드가 커널 영역에 있는걸로 인식되고 있으니... 그걸 process fork 에 들어온 스레드의 이름이나 pml4의 커널 주소 좀 찍어봐야겠다.)
(근데 pml4 자체가 커널에 있는건 아닌가? 아니겠지? 어디서 이게 init 되고 계승 되는지도 좀 봐야겠다.)

bad 케이스를 하나도 통과 못하길래 봤더니
null 역참조라든가 일어나서는 안되는..
그런 일이 buffer에 들어가는데, 이거 돌리면 다 페이지 폴트 뜸.

관건은 페이지 폴트가 뜨기 전에 감지해서
미리 종료 시켜야한다는 건데, 어떻게 감지하는지가 관건이고.

deny_writable을 하려고했는데
넣는 시점이 틀린 건지 load 에서 file이 open되는 시점,
file이 close 되는 시점에 했는데 이게 아닌가?
흠... 깃북은 그러라고 했는데..

아무튼 I님도 같은 파트에서 막혔대서
같이 파이팅하자고함...
(fork 그거..)

26fail이었는데 27fail됨
26fail 시점에 뭐가 fail이 아니었는지알수없음

(뻘하게 !(값)은 c에선 null이 아님을 확인하는게 아니라
0인지 아닌지 확인하는거다..)
(별개로 나는 thread 구조체에 fdt 정적 배열을 넣으면서도 회의적이었는데 그래서....오히려 리스트 안에? 구조체 따로 만들어서? elem으로 넣어야하나? 유저 스레드에서 안 넘어오는거 아님? 싶어서 리스트로 바꾸고 elem 만들고 추가하고 물론 이것도 가능한 방법이겠지만 어느정도했을때 테스트 케이스 잘되던거 전부 뻑나서 마음이 꺾일까봐 롤백함.)

소감

아침에 일찍 깼는데
수명 닳는다 지금...

심장박동이... 진정이 아니된다...

오늘의 계획

변경 사항 및 일정

오후 2시 퀴즈
이번주 목요일에 회식이래..

내일이 마감이라 오늘까진 fork 꼭 해결해서
최후의 최후까지 전부 디버깅하자...

오전

fork 좀... 아까 위에 나온거 확인해보고
키워드 좀 찾아보기

퀴즈 보고
fork를 해결하기

저녁

fork가 기적적으로 해결되면
wait, exec, rox, bad 케이스 보기.

오늘의 다짐

천지신명님 절 안 도와주시고 뭘하세요

profile
개발자 희망...

0개의 댓글