WEEK 10 PintOS TIL(5월19일 월요일)

Devkty·2025년 5월 19일

[목표]
정글에서 제공하는 키워드 공부 / 정리하기(중단)
코드 파일들 전체 번역하기

아침에 유저 커널모드 정리하기, 졸리면 번역 먼저 시작, 안졸리면 키워드 정리

09:50 ~ 12:00

이번주는 퀴즈가 없다. 그러므로 프로젝트에 좀 더 집중을 해야한다. 본래의 키워드를 공부하기 보다 빠르게 코드 작성을 해보고, 모르는 부분만 다시 확인을 해보겠다. 먼저 번역을 진행중이다.

12:00 ~ 13:30

식사 후 휴식을 가졌다. 너무 졸려서 30분 좀 넘게 잠을 잤다. 4시30분쯤 자서...

13:30 ~ 16:00

아까 다 못한 번역을 실시하고 있다. 겸사 겸사 코드의 이해도 진행중이다. process.c의 코드가 많아 해석하고 흐름을 파악하는데 시간이 좀 걸렸다. 이어서 syscall.c 를 주석을 해석하며 코드의 흐름을 파악했습니다.

나머지 파일중에 tss.c 와 gdt.c 는 중요도도 떨어지고 더 알아보고 싶으면 확인해보는 코드들로 이루어져 있다. 그러므로 아래를 참고해 어떤 느낌의 코드인지만 확인하고 따로 주석을 해석하지는 않겠습니다.

  • tss.c: 태스크-상태 세그먼트(TSS)는 x86 아키텍처의 태스크 스위칭에 사용되었으나 x86-64에서는 본래의 목적으로는 더이상 쓰이지 않는다고 합니다. 그러나 TSS는 링 스위칭 중에 스택 포인터를 찾는 데 여전히 사용됩니다.
  • gdt.c: GDT(Global Descriptor Table)는 사용 중인 세그먼트를 설명하는 테이블입니다.

→ 저희 조 같은 경우에는 파일마다 담당을 정해 주석을 해석하기로 했습니다. 이후 코어타임때 모두 합쳐 코드를 작성하는데 용이할 수 있도록 병합하도록 하겠습니다.

16:00 ~ 16:30

exception.c 관련된 주석을 해석하며 코드의 흐름을 파악했습니다. 운동을 갔다와야해서 팀원들에서 주요 파일인 process.c에 대한 코드 파일만 카톡을 통해 공유하고, 나중에 돌아와서 깃병합을 진행하도록 하겠습니다.

16:30 ~ 18:00

운동(하체)을 했습니다.
갔다와서 코어타임시 깃허브 병합과 동시에 새 주차에 대한 노션을 정리하는 시간을 가지겠다.
이번 부터 어려워서 gitbook 한국어 버전을 짜집기 해서 한 파일로 만들어야겠다.

18:00 ~ 19:15

식사를 하고 샤워를 하고 복귀했습니다.

19:15 ~ 19:30

코어타임전 풀리퀘스트까지 각자의 코드를 깃허브로 업로딩하기로 했다.
오늘 코어 타임 얘기할 것들은 다음과 같다.

  • 프로젝트2 시작전 코드 번역본 전체 병합
  • 새로운 주차 노션 정리 및 관리 계획
  • 키워드 정리 어떻게 할지? → 각자 필요한 부분만 보충
  • 정글에서 제공하는 진행표를 보고 어떻게 진행할지 구상
  • 각자 할 것들 브리핑

이렇게 진행할 것 같다. 아직 나는 10주차 키워드를 정리할지, 나눠서 할지 결정하지 못했다… git book에 있는 한글 해석은 진행할 것 같다. 진행하는데 편하도록… 노션으로 정리된 페이지는 있어서 짜집기만 할 것 같다.

코어타임 (19:30 ~ 22:30)

2시간에 걸쳐서 코드 병합을 완료했다.
해당 과정에서 문제가 많아서 오랜 시간이 걸렸다. 항상 병합할 때마다 예상치 못한 문제가 생기는 것 같다.
make clean을 안했다던가, 기호 하나를 틀렸다던가, 파일이 몇개가 안올려졌다던가… 파일 개수가 더 많아지니 더욱 헷갈리고 생각해야될 것이 많아지는 것 같다.

위의 계획들을 팀 노션에 업데이트 했다.
hex_dump() : 스택에서 어떻게 쌓여있는지 확인가능. 인수 전달이 올바르게 구현되었는지 확인가능.
우리조는 우선적으로 arug 진행 예정이다.

22:30 ~ 03:15

키워드 정리나 개념 정리는 시간도 부족하고, 구현에 집중하기 위해서 어렵거나 보충이 필요한 개념만 다시 공부하는 것으로 하겠습니다.

이제 본격적으로 Argument Passing 에 대해서 구현해보도록하겠습니다.
먼저 Git book을 참고합니다. Kaist의 pintos 강의를 학습합니다.

전개순서
process_exec → load → setup_stack() 순으로 전개된다.

ELF 헤더를 통해 파일을 읽는다. 헤더기준으로 data, bsi 등이 정렬되어 있으므로 헤더를 알면 파싱을 진행할 수 있다. 근데 해당 내용은 load() 함수에 이미 구현되어 있어서 우리가 구현안해도된다. (강의 끝까지 볼걸...)

int N 인스트럭션을 호출시: User Program → Operating system
iret 인스트럭션 호출시: Operating system → User Program

우리는 load를 통해 받은 인자들을 스택에 차례대로 쌓으면 될 것 같다.

string.c에 있는 strtok_r을 통해 args를 파싱하여 스택에 올릴 수 있을 것 같다. 그런데 잘 몰라서 내일 해야될 것 같다.

이렇게 계속해서 알아보려고 시도중이고, 코드를 작성중이다. 내일 계속 구현 시도해보겠다.

profile
모든걸 기록하며 성장하고 싶은 개발자입니다. 현재 크래프톤 정글 8기를 수료하고 구직활동 중입니다.

0개의 댓글