Linux 환경에서 파일 시스템, 프로세스 제어, 데몬 프로세스, ext2 파일 시스템 내부 구조를 직접 구현하며 정리한 학습 저장소입니다.
운영체제가 제공하는 추상화 위에서 단순히 API를 사용하는 것이 아니라, 디렉토리 탐색, 프로세스 생성, 시그널 처리, 설정/로그 관리, raw disk image parsing을 직접 구현하며 Linux 시스템 프로그래밍의 동작 방식을 확인했습니다.
| Lab | Project | What I implemented |
|---|---|---|
| lab01 | SSU Cleanup | 사용자 정의 shell, 디렉토리 tree 출력, 확장자 기반 파일 정리 |
| lab02 | SSU Cleanupd | 디렉토리 모니터링 daemon, 설정 파일, 로그, signal 기반 reload/terminate |
| lab03 | SSU-EXT2 | ext2 disk image parser, tree/print command, direct/indirect block traversal |
linux-system-programming/
├── lab01/
│ ├── README.md
│ ├── report.pdf
│ └── src/
├── lab02/
│ ├── README.md
│ ├── report.pdf
│ └── src/
├── lab03/
│ ├── README.md
│ ├── report.pdf
│ └── src/
└── README.md
각 lab은 C source code, Makefile, 구현 보고서, 세부 README를 포함합니다.
- OS: Linux (Ubuntu)
- Language: C
- Compiler: gcc
- Build: Makefile
- Category: Linux System Programming
Linux 환경에서 동작하는 사용자 정의 shell 프로그램을 구현했습니다.
주요 구현:
tree <DIR_PATH> [OPTION]arrange <DIR_PATH> [OPTION]helpexitscandir,stat,lstat기반 디렉토리 탐색fork,execvp,waitpid기반 프로세스 제어- 확장자 기준 파일 분류와 중복 파일 처리
- HOME 디렉토리 외부 접근 제한
지정한 디렉토리를 주기적으로 모니터링하고 자동으로 파일을 정리하는 daemon process를 구현했습니다.
주요 구현:
- double-fork 기반 daemon 생성
setsid를 통한 session 분리- 표준 입출력
/dev/null리다이렉션 SIGHUP기반 설정 reloadSIGTERM기반 daemon 종료ssu_cleanupd.config설정 관리ssu_cleanupd.log로그 관리- 모니터링 경로 중복/상하위 충돌 검증
ext2 파일 시스템 이미지 파일을 직접 파싱하는 interactive shell 프로그램을 구현했습니다.
주요 구현:
- ext2 superblock, group descriptor, inode, directory entry 구조체 직접 정의
- magic number, block size, inode size 계산
- inode와 data block을 따라가는 경로 탐색
tree <PATH> [OPTION]print <PATH> [OPTION]- direct block, single/double/triple indirect block 처리
lseek,read기반 raw disk image parsing- ext2 전용 라이브러리 미사용
이 저장소는 Linux 시스템 프로그래밍에서 자주 등장하는 파일, 프로세스, 시그널, 데몬, 파일 시스템 내부 구조를 단계적으로 구현한 기록입니다.
특히 다음 역량을 보여주는 데 초점을 둡니다.
- POSIX system call 기반 파일 처리
- 디렉토리 순회와 경로 검증
- process 생성/종료/대기 흐름 이해
- daemon process lifecycle 설계
- signal 기반 runtime control
- 설정 파일과 로그 파일 관리
- ext2 on-disk structure parsing
- direct/indirect block 기반 파일 데이터 접근
각 lab의 src 디렉토리에서 빌드합니다.
cd lab01/src
makecd lab02/src
makecd lab03/src
make빌드 결과물 제거:
make clean각 lab의 자세한 구현 내용은 개별 README와 report에서 확인할 수 있습니다.