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

[WEEK9] 면역력이 떨어져도

by ddubbu 2024. 10. 15.

🤔회고

실습이 필요한 이유

분명 하루종일 개념 공부를 했는데, 휘발되고 있다. 그리고 핀토스 구현 명세를 보고 있는데, 이러한 세팅과 로직이 필요하구나를 새롭게 깨닫고 있다. 실습은 메타 인지를(무엇을 알고 모르는지) 쉽게 가질 수 있게 해주는 것 같다. 정글을 수료하고 나서도 적절히 실습 과제를 찾아보면 좋을 것 같다.

 

팀원과 함께 가기

어서 진도를 빼야한다는 생각에 폭주(?)하고 있다. 방대한 자료들을 읽고 이해가 안되는 부분들은 물음표로 남겨둔채 빠르게 지식을 주입하고 있다. 그 덕에 5시간짜리 OS 강의, OSTEP, Introdction, 한양대자료, KAIST 강의까지 봐야할 자료들을 사실 하루만에 다 섭렵했다. 그리고 오늘 점심 먹고부터 팀활동을 시작하고, 저녁에는 구현을 시작해볼 수 있었다. 그래서 나는 매우 뿌듯했는데, 팀원들은 버거웠다는 피드백에 고민이 들었다. 어떻게 함께 이해도를 높이며 진도를 뺄 수 있을까.

우선 두 목표는 trade-off라서, 우선 진도 속도를 줄이기로 마음 먹었다. 그리고 팀원들이 다시 설명해보며 이해도를 체크해보는 방법으로 정정했다. 그랬더니 교수님에서 선생님 모드로? 바뀌어서 좋다는 말을 들어서 웃겼다.

 

늪에 빠진 이 기분

기분이 좋지 않다. PintOS 자료를 따라가면서 나름 최신 가이드 내용 반영하면서 따라갔다고 생각했는데, 막힌 순간 멘붕이 왔다. 코드에 기분이 따라가면 안되는데, 감정 분리를 잘 하고 싶다. 몸 회복도 잘 안되고, 병이 차곡차곡 쌓여가는 것 같다. 분명 이틀동안 잘해왔는데 막혀버렸다고 바로 다운되버리다니. 정신 차리려고 코스모스도 보고 왔다. 예쁘더라. 잘하지 않아도 됨을 항상 상기하면 좋겠다. 그 과정에 있어서 배운게 분명 있고, 어제 잘 풀리지 않았음에

 

잔병이 하나둘씩

이번주에만 병원을 2번이나 다녀왔다. 턱관절염, 목에 난게 알러지인줄 알았으나 염증이어서 피부과까지해서 두번.

늘어나는 약봉투를 보며 확실히 컨디션이 다운되었음을 느끼고 있다. 날밤새는 공부를 3달 연속했으니 몸이 안상하는게 이상하지.. 특히나 최근에는 핀토스 주차에 들어오면서 그나마 하던 러닝도 그만두었고 운동 없는 삶을 지내고 있다. 악명 높은 핀토스 과목을 어떻게든 따라가보려고 노력했으나 학습의 업다운이 심해서 그만큼 마음고생도 있었다. 그래서 리프레시 시간도 가져주면서 (오후 4시에 출근하는 등) 텐션을 조절해주었더니 벌써 핀토스 마지막주차에 도달했다. 몰입도 좋지만, 나만무 프로젝트도 한달이라는 긴 기간동안 수행되니깐, 특정 요일은 리프레시를 꼭 가질 것이다. 운동은 요가가 제일 좋은데, 어느 타이밍에 넣으면 좋을까? 시간대 상관없이 매트를 편히 깔 수 있으려면? 아니면, 저녁에 한번 운동하고 올까? 나만의 스트레칭 시간을 갖는거지! 그렇다고 자고 오지 말고 🤭

 

 

📅필수 목표

[241008 화] 10 - 00 (20-22 영화 'us' 보고 잠깐 복귀
✅ Project2 마무리

14/ 국취제 상담

17/ 회식

🔼CS:APP 9장 Virtual Memory (집중 안돼서 pass)

🔼OSTEP 한글판 (16 - 18장)

 

[241009 수] 9:35 - 01:20 (16H, 아침에 피곤한데 일어나니깐 괜찮네, 다시 빡집중! 초반 스퍼트 조아써!)

✅ 아이패드 충전 안됨 이슈 - 재부팅으로 완료

반효경 OS 강의 2017ver : Meomry Management 1 / 2 / 3, Viertual Memory 1 / 2

OSTEP (19장~26장) + 질문 발췌 포함

⚠️⚠️목요일 (10/10) 팀 내 공유 시간 준비하기 ⚠️⚠️

빨간색 궁금한 것 채우기 (정리한 두 자료 빨간색 답변)

🔼 OSTEP 질문 발췌 답변 남겨두기

 

[시간 남으면]

- 구현 준비를 위한 Introduction 미리 살펴보기 - 개념하고 어떻게 연관성을 가질지

다운로드 완료

- KAIST 강의 살펴보기 (2개, 총 2시간)

1강 훑기완료

 

[241010 목] 10:20 ~  01 (14H 30min)

🔼 KAIST 강의 2번째 완강 (Growth Stack 전까지 살펴봄, 우선 Memory Management, Anonymous Page 까지 구현하고)

한양대 자료 (팀이랑 훑음)

PintOS Project3 가이드 다 읽기 (한글판으로 빠르게) + Appendix

팀 공유할 것 정리 (특히 전체 키워드 및 도식화, Project3과의 연관성)

15시/ 팀활동 

19시/ 구현 시작 (저녁 9시경 30분 산책)

 

[코드베이스 정리] ALL CLEAR

- formatter 적용

- page.c, page.h 분리하기

- VM 전처리기 제거

 

[241011 금] 10:20 - 23:40

팀활동

PR 4개 확인 및 머지 (요약: 개발 편의를 위한 세팅 > 그리고 작업 시작 가능

한양대 자료 315p setup_stack 함수 부터

- spt 연결 및 page fault 답보아도 막힘 (늪에 빠진 기분이라 스탑하고 퇴근)

 

[241012 토] 10:20 - 23:30 (13H)

코드 탐닉 (여러 자료 섭렵하기) > 피그마로 정리 중

-- memory management, lazy loading 전반적으로 정리 완료

-- 내일, QnA 보충 및 stack growth 추가 공부

권영진 교수님 가이드

19/ 팀공유

 

[241013 일] 16:15 - 03:30 (12H, 오랜만에 긴 리프레시타임, 쉰 만큼 더 집중!)

Project3 코드 탐닉 (Management Memoy ~ Anonymous Page)

 QnA 보충 

 linux에서는 실제로 어떻게 구축되어있을까? (CSAPP)

 

[241014 월] 13 - (9:30 기상 후 오전 치과)

 13시) 팀 활동 / 발표 준비

블로그 정리 (pintos 3-1, 3-2)

코드 (ch 1, 2 까지 copy) > 리팩토링은 나중에 (예로, do_claim 함수 이름 더 와닿기 바꾸기)

❌ stack growth, file backed (까지 가보자고!)

 

🔥추가 정리 필요

  • 16진수 빠르게 계산하는 방법
    • 0x100000 = (2^4)^5 = 2^20 = 1MB
    • 0 개수 4배 처리

 

📝메모

Project3 발제

더보기
  • pml4 sign extend : T 이상으로 가지 않도록
  • OS를 위한 page table ? suplementary page table
    • 이건 답이 없다. 설계는 무궁무진 
  • memory block 종류 
    • file backed : memory 형태가 disk에 그대로
    • anonymous : ?
  • Stack Growth : Page 추가로 생성
  • Swap : Disk <> Memory
    • Swap Out : Disk 에 저장
    • Swap In : 로드
  • (Extra) Fork 뜰 때 Read only 이면 Page Table만 복제해도 됨.
    • Write 필요 시 Page 까지 복제함 - 이 또한 Lazy
  • mmap : 실제 기능은 file 특정 위치를 - memory 일치시키는 작업 (fd 받음)
    • if fd=anonymous : memory를 할당
    • (어떻게 하면?) shared memory ?

 

Project 4 : 사실 했으면 좋겠다. 얻어갈게 많다.

  • File System을 구현한다? FAT ?

 

 

Project 3 WEEK1 Review

더보기

6조 디버깅은 비장하게
spt_find_page에서 page_round_down 해야하는 이유?
같은 페이지에 속하면, 같은 key 값을 참조해야하는데,
근데, 각 offset 포함 hashing 할 수 있는거 아닌가? page->va 는 page 시작주소구나

7조 Virtual Memory
각 자료구조가 어느 kva 영역에 맵핑되는지 확인

8조 palloc, malloc 톺아보기

9조 최소한의 노력으로 동작하는 프로그램 만들기
전체 플로우에서 우선 간단히 return 으로 진행할 수 있게 만들기
(my 생각, 긍정적) 콘솔까지 찍어서 함수 진행해도 좋을 듯
(코치님) 진도가 더 나간거까지 보여줬으면 좋을 듯

10조 Virtual Memory
핀토스 전체적인 흐름 도식화 (이번에 전체 흐름을 많이 파악하시려고 노력한게 보인다)
swap out 까지 구현하셨네 (VM_FILE : (Dirty Bit=1일경우)Disk, VM_ANON: Swap 영역..??)
Q. Dirty Bit=0 일 경우에는..? VM_FILE 어디까지 읽었는지 이런 값들은 저장되어야하지 않나? struct page에서 관리하려나..?

1조 과제 요약
exec, exit 둘다 불리는데 destory 함수 호출 시점을 분기함
(내 생각 destroy 살펴볼 때 이 이야기가 공감될 듯)

2조 Page Fault
깔끔

3조 struct page - operations, union 톺아보기
destroy는 없을 수도. 어떤 타입이?
C언어 상속 구현을 위해 union 타입 사용

4조 load 함수 project 2 vs 3
gdb로 load 함수가 3번 불리는거 확인
Q. bss 영역인지 어떻게 알았다고?? A. filesize, r/w flag 등을 이용해 유추했다.
- (내 생각) 내부적으로 bss, text 영역까지는 파악 못해도 read flag로 부분적으로 file-backed 가능하겠네

- (코치님) 옛날 va 가 없을 시절에 pa 설정도 어려웠다.

5조 요약
segmented vs paging
lazy loading

****

코치님 조언
va not valid (spt 에 존재하지 않는 범위) : SIGSEGV ? 암튼 segmented fault
file-backed 실제로 재밌음 허허
(상빈오빠 조언) unmmap 테케 지금 이상함 > (코치님 조언) unmmap 구현까지만 해봐도 좋을 듯