Week 14. 정글을 지나, 나는 무엇이 달라졌는가
·
카테고리 없음
과거의 나Week 1 에세이를 쓰던 나는 두려움이 많은 사람이었다. AI를 어떻게 써야 할지도 모른 채 AI에 기댔고, 혼자 공부하다 CS의 벽에 막혔으며, 결국 '이 길이 내 길이 맞는가'라는 질문 앞에서 자존감을 잃어가고 있었다.그때는 몰랐다. 그 질문이 사실은 포기의 신호가 아니라, 진지하게 이 길을 걷기 시작했다는 신호였다는 것을.14주가 지난 지금솔직히 말하면, 14주가 지난 지금도 여전히 힘들다. 출발선이 다른 사람들과 같은 공간에서 같은 시간을 달리는 일은, 1주차와 마찬가지로 지금도 버거울 때가 있다. 남들은 앞서가는 것 같고 나만 뒤처지는 것 같아 자존감이 흔들리기도 했다. 사실 이 힘듦은 나만의 것이 아니다. 정글을 거쳐간 모든 사람들이 똑같이 겪어온 과정이다. 그렇다면 나도 할 수 있..
Week 11. 정글 끝까지(PintOS) - Virtual Memory
·
Krafton-Jungle/WIL
이번 주 목표이번 주의 핵심은 "운영체제가 메모리 부족을 어떻게 감추는지 직접 만들어보기"이다.지난 주가 사용자 프로그램이 커널 위에서 실행되고 시스템 콜로 자원을 요청하는 흐름이었다면, 이번 주는 그 프로그램이 사용하는 메모리를 운영체제가 어떻게 관리하는지 따라간다. 사용자 입장에서는 넓은 가상 주소 공간을 자유롭게 쓰는 것처럼 보이지만, 커널은 뒤에서 페이지를 가져오고 내보내며 그 착시를 만들어낸다.구체적으로는 Supplemental Page Table(SPT), Frame Table, Lazy Loading, Page Fault Handling, Anonymous Page, Stack Growth, Memory Mapped Files, Swap In/Out을 구현한다.이번 주는 그 중 lazy_lo..
Week 10. 정글 끝까지(PintOS) - User Programs
·
Krafton-Jungle/WIL
이번 주 목표이번 주의 핵심은 "사용자 프로그램과 커널 사이의 경계를 직접 만들어보기"이다.지난 주가 커널 내부에서 스레드가 어떻게 생성되고, 잠들고, 스케줄링되는지를 다뤘다면, 이번 주는 그 위에서 실제 사용자 프로그램이 어떻게 실행되는지를 따라간다. 이제는 커널 안쪽의 흐름만 보는 것이 아니라, 사용자 프로그램이 커널에게 어떻게 요청을 보내고, 커널은 그 요청을 어떻게 안전하게 처리하는지를 이해해야 한다.구체적으로는 세 가지 큰 줄기를 따라간다.첫째, 사용자 프로그램을 실행하기 위한 ELF 로딩 흐름을 이해한다. 실행 파일을 단순히 여는 것이 아니라, ELF 헤더를 읽고, 세그먼트를 검증하고, 사용자 가상 주소 공간에 올리는 과정을 따라간다.둘째, Argument Passing을 구현한다. 예를 들어..
Week 9. 정글 끝까지(PintOS) - Threads
·
Krafton-Jungle/WIL
이번 주 목표이번 주의 핵심은 "운영체제의 심장부, 스레드를 직접 만들어보기"이다.구체적으로는 세 가지 큰 줄기를 따라가야 한다.첫째, 커널 수준의 스레드를 직접 생성하고 스케줄링하는 흐름을 이해한다. 운영체제가 어떤 스레드를 언제 실행할지 결정하는 그 원리를 코드로 구현한다.둘째, 여러 스레드가 동시에 돌아갈 때 발생하는 race condition 문제를 직접 겪어보고, 이를 해결하는 동기화 도구들(semaphore, lock, condition variable)을 체득한다. "왜 이게 필요한지"를 느끼는 것이 목표이다.셋째, 팀과 함께 하나의 코드베이스를 만들어 가는 협업 흐름을 익힌다. 개인 branch에서 작업하고 PR을 통해 master에 합치는 Git 협업 방식도 이번 주부터 본격적으로 시작된..
Week 8. 탐험 준비
·
Krafton-Jungle/WIL
이번 주 목표CSAPP 11장을 통해 네트워크 프로그래밍의 기초를 학습하고, 이를 바탕으로 echo_client와 echo_server, 그리고 웹 서버(tiny.c)를 직접 구현하는 것을 이번주 최소 핵심 목표이다.추가로 가능하다면 CSAPP에 있는 숙제와 프록시 서버(proxy.c)까지 구현하는 것을 목표로 잡을 것이다.수요코딩회는 미니 DBMS + API 서버를 연결하는 프로젝트를 진행할 것이다. 어디까지 어떻게 시도했는가? 📖 CSAPP 11장 학습 (11.4장까지)소켓 프로그래밍 개념부터 시작해서 클라이언트-서버 모델, IP 주소와 포트 등까지 순서대로 진행하였다.즉, 서버가 어떻게 요청을 받고 응답을 보내는지 전체 그림이 잡혔다. 처음에는 'socket()', 'bind()', 'liste..
Week 7. 탐험 준비
·
Krafton-Jungle/WIL
malloc을 직접 만들고, League of Legends API로 밤을 새운 한 주이번 주 목표이번 주는 크게 세 가지를 목표로 할 것이다.CSAPP 9.9장(동적 메모리 할당) 전체 학습직접 malloc을 구현B+ 트리를 활용한 팀 프로젝트 기획 어디까지 어떻게 시도했는가? 📖 CSAPP 9.9장9.9.1부터 9.9.12까지 학습했다. 동적 메모리 할당기의 설계 원칙부터 implicit free list, 경계 태그, 가용 블록 탐색 전략까지 순서대로 읽어나갔다. 이번 malloc 구현과 맞물려서 이론이 실제 코드로 어떻게 연결되는지 직접 확인할 수 있었던 점이 컸다. 🔧 malloc 구현 - implicit + next-fit처음에는 implicit free list + first-fit 조..
Week 7. malloc 구현 - macro - 힙 순회 매크로
·
카테고리 없음
매크로 구현#define HDRP(bp) ((char *)(bp) - WSIZE)#define FTRP(bp) ((char *)(bp) + GET_SIZE(HDRP(bp)) - DSIZE)#define NEXT_BLKP(bp) ((char *)(bp) + GET_SIZE(HDRP(bp)))#define PREV_BLKP(bp) ((char *)(bp) - GET_SIZE((char *)(bp) - DSIZE)) 테스트 케이스 설정bp = 0x1010 (현재 블록 페이로드 시작)size = 24B (현재 블록 전체 크기: 헤더 4B + 페이로드 16B + 풋터 4B)prev_size = 16B (이전 블록 전체 크기) 전체 메모리 배치주소 ..
Week 7. malloc 구현 - macro - GET_SIZE + GET_ALLOC
·
Krafton-Jungle/개인 공부 기록용 - C
매크로 구현#define GET_SIZE(p) (GET(p) & ~0x7)#define GET_ALLOC(p) (GET(p) & 0x1) 역할GET_SIZE와 GET_ALLOC은 헤더/풋터에 저장된 4바이트 값에서 크기와 할당 여부를 각각 꺼내는 매크로이다.크기 추출GET_SIZE : 하위 3비트를 제거해 크기만 남김할당 여부 추출GET_ALLOC : 최하위 1비트만 남겨 alloc 확인 헤더/풋터 구조 - PACK으로 만든 값두 매크로를 이해하기 위해서는 헤더/풋터 값이 어떻게 저장되는지 알아야 한다.#define PACK(size, alloc) ((size) | (alloc))size와 alloc을 OR연산으로 합쳐서 4바이트 하나에 저장한다.size = 24 = 0b...0001 1000al..