2026-01-08
메인라인 리눅스 워치독 서브시스템과 Samsung SoC용 s3c2410_wdt 드라이버를 레지스터 레벨부터 PMU 연동까지 분석한다.
2024-11-30
IoT 공유기의 전력 소비를 커버리지 피드백으로 쓰는 퍼저를 설계한 졸업 프로젝트 — LSTM으로 Request는 잡았지만, 전력을 커버리지로 정량화하는 벽에 부딪힌 이야기.
2024-10-06
채팅 서버를 만들고, block_on과 spawn_blocking을 직접 구현하며 웨이커와 Pin의 정체를 파헤친다. 그리고 비동기를 언제 써야 하는가.
2024-10-05
동기에서 비동기로 넘어가는 이유, 퓨처와 async/await의 실체, block_on과 태스크 생성, Send 바운드가 왜 따라붙는지, 그리고 채팅 클라이언트 만들기.
2024-09-22
macro_rules!의 패턴 매칭과 반복, 프래그먼트 타입, 위생(hygiene), 그리고 json! 매크로를 직접 만들어보기.
2024-09-21
Fork-Join과 채널과 공유 가변 상태라는 세 가지 접근, Send와 Sync가 하는 일, 그리고 만델브로트 집합을 네 가지 방식으로 병렬화한 과제.
2024-08-18
빌리는 클로저와 훔치는 클로저, Fn/FnMut/FnOnce가 갈리는 기준, 클로저의 성능, 그리고 콜백을 저장하는 두 가지 방법.
2024-07-21
크레이트와 모듈로 코드를 나누는 법, 파일 배치 규칙, pub의 여러 단계, 그리고 GUI 라이브러리를 모듈로 쪼개는 과제.
2024-07-20
패닉과 Result라는 두 갈래. ? 연산자의 실제 동작, 여러 오류 타입을 합치는 법, 그리고 커스텀 오류 타입을 정의하는 법.
2024-07-14
거의 모든 것이 값을 만드는 표현식 언어. 블록과 세미콜론의 규칙, if/match가 값이 되는 것의 의미, 그리고 Rust에 loop가 따로 있는 이유.
2024-07-13
값을 빌려 쓰는 법, C++ 레퍼런스와의 차이, 수명이 레퍼런스 안전성을 검사하는 방식, 그리고 공유와 변경이 왜 배타적인지.
2024-07-07
소유권 트리, 이동이 일어나는 자리들, 제어 흐름과 인덱스가 걸린 값의 이동, 그리고 Rc/Arc로 공유 소유권을 만드는 법.
2024-07-07
고정 크기 수치 타입과 오버플로를 다루는 네 가지 방법, 배열·벡터·슬라이스의 차이, 그리고 String과 &str의 관계.
2024-07-06
소유권·빌림·수명부터 트레잇, Option/Result, Copy와 Clone까지. Rust가 GC 없이 메모리 안전을 보장하는 방식을 한 회차에 훑는다.
2024-07-06
2024년 여름 HSPACE에서 들은 Rust + 리눅스 커널 특강 정리의 시작. 교재, 일정, 그리고 개발 환경 세팅까지.
2024-01-20
학부연구생 시절 위탁과제로 진행한 연구 — angr로 C·C#·Delphi·Go 프로그램을 기호실행으로 분석하며 부딪힌 문제들을 정리한다.
2023-11-27
SQLite 파일을 헥스 에디터로 직접 파싱해 B-tree에서 떨어져 나간 고아 페이지를 찾고, 페이지 체인을 따라가며 삭제된 레코드와 오버플로우된 JPEG까지 복구한 포렌식 문제 풀이.
2023-11-26
PPTX 안에 숨겨진 실행 파일에서 PDB 경로, 디버그 디렉터리의 TimeDateStamp, .text 섹션 엔트로피를 뽑아내 플래그를 조립한 포렌식 문제 풀이.
2023-06-16
Project 3. inode에 double/triple indirect를 붙여 파일 크기를 키우고, symbolic link를 만들고, 트랜잭션마다 커밋하던 것을 버퍼가 찰 때 커밋하도록 바꾼다.
2023-05-29
Project 2. proc 구조체에 tgid를 붙여 스레드를 만들고, 스택을 재활용하는 freelist를 붙이고, fork·exec·sbrk·kill·exit을 스레드 환경에서 다시 정의한다.
2023-05-18
실습에서 다룬 메모리 관리 주제 세 가지. best/first/worst fit, FIFO와 LRU와 LFU, 그리고 Copy-on-Write.
2023-05-14
Project 1. 기존 Round Robin 스케줄러를 읽는 데서 시작해서 L0/L1/L2 3단 MLFQ와 priority boosting, schedulerLock을 인터럽트로 부르는 것까지.
2023-05-02
int n부터 IDT와 tvinit, CPL과 DPL, alltraps까지 xv6가 유저 모드에서 커널 모드로 넘어가는 경로를 따라가고, 마지막에 부팅 과정을 정리한다.
2023-04-25
race condition에서 시작해 critical section의 세 조건, 피터슨 알고리즘, TAS와 Swap, 세마포어와 block/wakeup, 그리고 커널 안에서 벌어지는 세 가지 경우까지.
2023-04-23
FCFS의 convoy effect부터 SJF와 SRTF, exponential averaging, Round Robin의 upper bound, 그리고 MLQ와 MLFQ까지.
2023-04-20
프로세스의 주소 공간과 다섯 가지 상태, PCB와 큐와 스케줄러, context switch, 그리고 fork/exec와 스레드까지.
2023-04-18
멀티프로그래밍과 멀티태스킹의 차이, dual mode와 시스템 콜, 그리고 OS가 프로세스·메모리·저장장치·I/O를 위해 실제로 하는 일.
2023-04-16
레지스터와 fetch-execute 사이클에서 시작해서, 인터럽트가 왜 필요한지와 캐시·DMA가 무엇을 대신 해주는지까지.
2023-04-14
3학년 1학기 운영체제 수업 정리의 시작. 이론과 실습과 xv6 프로젝트라는 세 축, 그리고 이 시리즈를 어떻게 나눠 쓸지.