[Week9] 0317

안나경·2024년 3월 17일

크프정 일상

목록 보기
67/109

어제의 이야기

어제 공부한 것

알고리즘 또 안 했음

근데 오늘 가족과 대화하면서
앞으로 내가 하기로 한 직무를? 좀 알아봐야겠다 싶어서
그러려면 코테가 필수인거같아 내일부터 열심히 하기로.

아무튼...
seek, tell, close 추가,
시스템 콜에서 인자를 넘겨주는 부분 추가,

msg 자체가 한번밖에 출력이 안되길래
대체 왜지? 하고
첫줄 지우면 이제
다음 줄은 출력이 됨
근데 그 다음줄은 출력이 안됨

msg 자체가 한번밖에 출력이 안되는거임

근데 write 코드는 아주 단순하게 짜도
돌아가긴 해야하거든...
(특히 console에 쓰는 거면..)
다른 사람 봐도 다른게 딱히 없고...
buff 안 비워줘도 되던데 난 그런가? 싶어서
fflush 쓰려했는데 그건 또 page fault 뜨더라?

암만봐도 write 부분이 아닌
내 코드에만 있는 부분에서 문제가 있는거같은데
뭔지 모르겠어서...
일단 내버려두고 process_wait 자체를 먼저 구현하려했음.

여기서 자식 child_tid를 받아와서
그 자식 프로세스인지 확인하고
맞으면 sema_down 시켜놓고 기다리는 구조인데

tid와 Pid 둘다 있어서
PintOS는 Process 에 대한 구조체가 딱히 없거든
관련있는거 다 thread에서 관리함.

뭐가 다른지 다른 사람은 따로 구조체 만들었는지 찾아봤는데
그냥 같이 int 형이라서 그런지 pid로 받아도
tid와 일치하는지 확인하는 식이길래

그러면 고려해야할게
(1) 자식 프로세스는 생성될 때 부모 프로세스와 동일한 tid 받아야함
(2) 부모 프로세스의 리스트에 자식 프로세스를 elem으로 넣고 잘 찾아와야함.

첫번째는 조건문이 흠.....싶어도
(약간 흠 싶은게 initial thread가 당연히 항상 부모일테니
그 뒤에 생기는게 자식 스레드라서 tid를 그대로 계승해버리면
그 자식 스레드도 손주 스레드를 만들면
initial = 자식 = 손주 = tid 가 전부 일치해서
리스트에서 순회해서 진짜 있는지 찾는 거라면 모를까
tid 자체 일치만으로는 나의 직계 자식인지, 즉
손주일 가능성은 없는지 찾는게 모호해지거든...
내가 child의 tid를 꺼내서 내가 받은 tid와 일치하는구나! 라고해도
정말 진짜 내 child라서 일치하는 tid라고 할수가없어짐.
손주여도 내 자식과 tid가 일치하겠지.....
차라리 tid를 그냥 다 따로 받고
그 tid가 내 child list에 있는지 보는게
더 현실성있음.)

(어라 말해놓고 보니 그냥 다 따로 배분받고 리스트에서 찾으면 되긴하겠네)
(그리고 나는 사실 tid를 계승 시키고 리스트에서 찾게 한거라 지금 내 process wait가 돌아가긴 하지만 맞게 돌아가고 있다고는 확언할수없군...)

아무튼 내가 printf로
자식 리스트에 있는게 맨처음에 뽑을땐 아예 두번째 것이 이름이 이상하길래 요상하당...이랬는데
이제보니 list_entry로 찾을때 child_elem으로 찾아야하는데 그냥 elem으로 넣었더라고 (좀 걸렸음...)

근데 그렇게 고치고도 여전히 두번째? 내 목표 스레드 tid같은게 잘 안 뽑혔나? 나았나? 기억이 안나는데
printf는 잘 안나와도 process_wait 자체는
page_fault 안나고 잘 돌아가긴함...
process exit 시점에 sema_up 넣은건 참고하긴함.

그리고 저녁에 쉬는데 문득
생각해보니 내 syscall main 하단에
thread_exit()를 안 지웠단 말임?
그럼 한번 실행하자마자 꺼져서 msg가 출력이 안되는게
말이 되긴해....

그래서 올라와 지우니까 되더라
^^.. 점심이었는지 저녁이었는지 기억이 안난다.
이제 arg test는 싹 통과함.

이후 open인가 하는데
file_open으로 열고 받아와서 그거 fd에 넣어주고
성공 여부 반환하는거였나 그런데

분명 init_thread 시점에
new_fd가...이게 뭐냐면 다음 fd인데
그때 2로 초기화해주면 나중에 거기서부터 찾아야하는데
이상하게 syscall로 넘어오면 new_fd의 값이 0이 되어있는거임
좀 말이 안되는게 thread는 create할때 거길 꼭 지나친단 말이지?
thread init 시점에도, syscall 시점에서 thread name자체는 동일하게 출력 되는데 넘어오면 0이 된다니...

다른 사람 코드 참고해도 딱 거기서만 2로 init해주고
추가로 손대는 부분은 없길래
흠. 내가 지금 해결할 수 있는 이슈는 아닌가. 싶어서
냅두고(그냥 test 통과용으로 2 미만이면 new_fd를 2로 간주하는 야매꼼수를 하긴 했음)

이름이 null인 케이스...니뭐니 좀많아서
일단 냅두고 wait를 구현하려고 봤는데
process_wait 를 그대로 넣으면 될거라 생각했는데
(메커니즘이 똑같거든)
페이지 폴트가 뜨더라...
그래서 아예 안에 새로 만들어줘도 페이지 폴트 뜸
이제보니 비어져있어도 페이지 폴트 뜸

테스트 코드 봄
fork를 한 뒤 wait함.
.....
oK fork 먼저 하겠어

그래서 fork에서
부모의 intr_frame을 계승해야하는데
계승 받는 부분을 구현 안했으니 해주세용 이라고해서
process_fork에서 thread_current()를 마지막 aux 인자로 넘기는 부분이 있거든(이게 부모겠지)
thread_create에서 적재하는 부분을 보니
aux를 f.R.rsi에 넣길래

do_fork에서 현 스레드의 intr_frame에서
이전 현 스레드, 즉 부모스레드의 정보가 담겼을
f.R.rsi에서 받아서 thread 형태로 꺼내
그 스레드의 intr_frame 가져오는 걸로 마무리함.

저녁에 좀 더 할수있었을텐데
흠... 딴짓했음

뭔가 어제 한게 없다 싶었는데
생각보다 한게 좀 있네

소감

코드를 많이 고친건 아니어도
여러가지 하긴 했네

흠...
그러면 오늘 밤은 exec이랑 fork 하고
월화수를....

오늘의 계획

변경 사항 및 일정

없음
카페 가려다 오는 길에 드링킹 요구르트 삶
나의 행복한 사치

오전, 낮

잤음... 웹툰 봄
배우로 살겠습니다 라고
불효자속성 중견 단역 배우가
어머니 돌아가시고나서 충격! 살자!
어린 시절로 회귀!
이제부터 효도하고살게요!!

하고 연기만 하는 웹툰임
연기를 항상 끝내주게 잘하기때문에
뭐 사건사고는 크게없고
내로라하는 대가들이 헐...이런 인재처음이야...하고
여배우는 모두 그에게 반하고 어쩌고 인데

그건됐고 연기하는 만화는 늘 좋아하고
연기하는 작품들에 대한
주인공의..캐릭터 연기..에 대한 해석..
그런걸 좋아해서 재밌게 봤음(연출이 좋음)

옛날옛날 유리가면이 있었습니다....

요즘은 막장드라마식 웹툰을 나름 좋아하는데
막장 찍는 것도 쉽지않다
초반에 웹툰 제목으로 노린 어처구니없는 개답답고구마 하지만 미래에 풀릴 사이다 뭐 그런걸 쓰는데 이거는
1) 개답답 고구마를 초장부터 빨리 풀지않으면 사람들이 이거 언제풀리냐고 댓글에 맨날 그런말만닮
2)근데 이제 그렇다고 빨리 초장에 풀어버리면 뒷얘기가 안궁금함

이라는 단점이 있음

저녁

가족이 무슨 일을 하게되냐고 물었는데
백엔드..프론트엔드..둘다 좋은데
취업...은 QA가 잘되나? 싶고
개발 직군의 유구한 수요가

테스트 코드를 모두가 리뷰할수없으니
(시간 뺏기니깐)
자동화 시스템을 써서 최대한 어느정도는
걔가 커버해주기를.. 바라며 뭘 개발하는거같거든
(테스트 코드를 개발한다든가)

그걸 할까....싶으니까
확실히 그런거라면 코테 공부도 진짜 일하는데 필요가 있을거같고
이런 자동화 작업에 대해 아는게 전혀 없으니 좀 알아보는것도 괜찮을거같음

공부하기싫을떄 해보자...
(그리고 알고리즘 안 푼지 n일째이긴함)

...
아무튼
오늘은 fork, exec 골자 뼈대 짜보고
(예외 처리를 다는 못해도
주요 기능은 할수 있을 정도)

좀 늦게 퇴근해도 괜찮음
오늘 낮에 너무 쉬어서 일찍가도 잠못잠..

오늘의 다짐

월요일까지 주요 골자 다 짜면
월요일 저녁부터는 예외처리 다 넣어주고

화요일까지는...
수요일 낮까지는 all pass는 뜨도록
뭐 이건 all pass 하기 위해
남의 코드 참고하는것 자체가 일인거같구만

그래서 수요일 저녁에는 발표 준비랑
정리는 할수있었음 좋겠군

이번 팀 길어서 무섭다! 고했는데
끝나는것도 순식간이네...

다음팀이랑
다다음팀 정도가 나만무 전에 마지막 랜덤팀인가...

파이팅!

profile
개발자 희망...

0개의 댓글