본문 바로가기
💻 프로젝트/정글 사관학교

[WEEK7] CS 꿈틀꿈틀 #핀토스_1주차

by ddubbu 2024. 10. 1.

🤔회고

절제와 실패의 반복

이번주 KAIST 본캠에서 대학 축제가 열리고 있다고한다. 잠시 정도야 다녀올 수 있지 않을까 했는데, 쏟아지는 읽을 자료와 구현 복잡도에 결국 가기를 포기했다. 그리고 가더라도 편한 마음으로 축제를 즐길 수 없을 것 같았다. 뿐더러 간안클(간식 안먹기 클럽)을 통해 수시로 생각나는 간식을 한번이라도 더 꾹 참아볼 수 있었다. 절제와 실패를 반복하며 스스로와의 약속을 하루라도 지켜보려 노력하고 있다. 견제(?)해주는 동료들 덕분에 나은 삶을 살고 있는 것 같아 좋다. 그리고 Alarm clock 과제를 1차적으로 구현해서 오늘부터 러닝을 재개하려 한다. 핀토스 과제에서 살짝 숨통이 트여서 일상 패턴으로 돌아가서 건강도 챙겨보고 싶어졌다.

 

CS 지식이 꿈틀꿈틀 🌱

OS Review 강의에서 머리를 쥐어짜며 답을 하는 나를 보았다. CPU, 메모리 가상화 개념은 정글 입소 전에는 몰랐고 이곳에서 조금씩 채워지고 있었나보다. 아직은 어렴풋한 개념이지만, 교재 학습 및 실습을 통해 체화를 할 수 있으면 좋겠다. 특히나 이번에는 발표 과제까지 있어서 부족함 없이 개념을 채우기가 목표가 되었다. 해서 Polling과 Interrupt 방식에 대한 차이를 더 확실히 알고자 가이드에 없는 [CH8. 예외적인 제어 흐름]을 읽어보려한다.

 

디깅이냐 과제 완료냐

이번주차는 러닝도 안나가고 새벽 2-3시에 퇴근했다. 과제 마무리 날에는 새벽 5시에 들어가서 오후 OS 강의에서 졸기도 했다. 그래서 티타임, 회식 스킵하고 푹 잤다. 그리고 선배님의 조언으로 디깅이 필요하다고 전해들었다. 분명 이번주차는 노는 시간 줄여가면서 공부했는데, (물론 아침 11시에 출근해서 순공 시간은 14시간으로 동일해서 피곤함만 늘은건가?) 과제 끝내기에 급급했던 것 같기도 하다. 질 높은 한시간 한시간을 보내고 싶은데, 그리고 꼬리 질문에 답변하고 싶은데 코치님 앞에서는 꿀 먹은 벙어리가 되곤 하는 순간들이 아쉬움으로만 남지 않았으면, 자극제가 되었으면.

 

📅필수 목표

[240924 화] 09-17 (옆방에서 푹 자고 일어남)

✅ 시험 및 리뷰

✅ 국취제 1차 상담

❌ 코틀린 마무리 (정리로 대체)

✅ 저녁 고기 구이 (먹고 휴식)

 

[240925 수] 10 - 02 (14H)

✅ 핀토스 과제 개요 파악

✅ week07 계획 논의

 

[240926 목] 9:30 - 02:30 (15H)

✅ OSTEP 스케줄링 관련 챕터까지 읽고 과제 스펙 예상하기

✅ Project1-1 테스트 분석 및 작업

>> KAIST pintos 개요 강의 보고 힌트 얻음

>> GPT 도움으로 디버깅을 끝내버려서 아쉬웠고 감은 잡아서 좋았음

 

[240927 금] 10:30 - 02:30 (14H, 축제는 꿈나라에서, 열심히 하기로 했으니깐 마음 다 잡자)

출근하고, make check 결과 확인하기 (20/27 fails 기대값과 동일)

✅퀴즈 정리 (흔히 나오는 면접 질문이라고 하셨으나 답 못한게 많음)

20/ 러닝

CSAPP: CH8

 

[팀활동]

  오전~오후

  • Alarm clock 코드 이해
  • 이슈 상황 분석
    • find_thread_to_wake_up : 완탐해야하는이유
    • sleeping_thread_wakeup로 thread_unblock를 대체할 수 없는 이유
    • idle 상태로 빠진 이유
    • ready list는 누가 늘려주며, 왜 쓰레드 개수는 한정적인가

  저녁

  • Alarm clock 이해도 공유 (자료든 코드든 뭐든, 미리 발표 자료 만든다 생각하려함)

새벽

  • 🔼 priority scheduler 강의 보고 구현 스펙 정하기 (새벽에 울렁거리고 심장 뜀이 느껴져서 동료와 함께 퇴근)

 

 

[240927 금] 11 - 12 (12H, 회복을 위해 일찍 퇴근)

 priority scheduler 강의 보기 [youtube]

🔼 세마포어 공부하기 (설명 불가, 우선 테케 분석해보기로) [링크] + OSTEP

- 구현 스펙 정하기

 

 

[240928 토] 12 - 03:40 (회복 요가 후 출근)

✅ 테케 분석하면서 priority scheduler, semaphore 구현 바로 시작하기

> 남은거 : donate_nest, donate_lower, donate_chain, priority_sema, priority_condvar

 

[240929 일] 11:30 - 02 (늦춰진 코어 타임)

🔼 priority scheduling: donate_nest, donate_lower, donate_chain, priority_sema, priority_condvar

✅ WIL 포스팅 (정리 못한채로 아무거나 올려버림..)

 

[240930 월] 11:30 - 05 (발표 준비로 늦게까지)

priority scheduling (donate_nest 이후로 정답 블로그 해석)

✅ 발표 준비

 

🔥추가 정리 필요

 

📝메모

 

Project1 리뷰

  • CPU 한개에서 여러개 프로그램을 돌리기 위한 스케줄링 방법을 배웠다. 이를 Thread라는 abstraction으로 구현했
  • 임계 영역에 대해 Lock 을 설정하는데, 이 또한 누가 바꿔버리면 안돼서 인터럽트를 비활성화함 (semaphore 도 마찬가지)
  • 세마포어 수학적 의미는? 단순히 변수, sema_up / sema_down 또한 +/- 연산일 뿐
    • sema_down 더 낮출 수 없기에 => 이 변수에 대한 변동을 위해 blocked 되어서 기다리고 있음
    • 코어가 두개 이상이면? semaphore를 사용 못함. HW 도움을 받기도 함
    • 비슷한 개념은 어디에나. 예로 분산 서버
  • conditional variable 구조 재밌다구..
  • deadlock
    • 우선순위 뿐만 아니라 서로 lock을 가리키고 있을 때 donations cycle 주의
  • scheduler nice ??
    • man nice
  • PintOS는 왜 소수점 연산을 못하는가
    • context switching 할때 interrupt frame이 왔다갔다함. 이 안에 float pointer register(xmm) 를 사용하지 않아서  저장을 못함
  • stack은 thread struct 안에 있고, 그래서 magic 넘버를 둠