본 저장소는 2024년도 2학기 OS 강의를 통해 Linux 및 xv6 운영체제를 기반으로
운영체제 핵심 개념을 이론과 구현을 통해 학습한 과제 결과물을 정리한 것이다.
리눅스 커널과 프로세스 관리부터 xv6 커널 확장, 스케줄러 개선, 메모리 관리,
그리고 소프트웨어 MMU 구현까지 과제 0번부터 3-2번까지 단계적으로 수행하였다.
📍 과제 0번
- 리눅스 커널과 배포판의 개념 및 역할 이해
- Ubuntu LTS 버전과 정규 버전의 차이점 학습
- 운영체제에서 커널이 담당하는 핵심 기능 정리
- 커널 vs 배포판 구조
- 장기 지원(LTS)의 의미와 활용 목적
📍 과제 1번
/proc파일 시스템을 활용한 CPU, 메모리, 프로세스 정보 분석- 논리 프로세서(processor)와 물리 코어(cores)의 차이 이해
- 시스템 부팅 이후 프로세스 수 및 문맥 교환(context switch) 횟수 확인
/proc기반 시스템 모니터링- 운영체제의 자원 관리 방식 이해
📍 과제 2번
top명령어를 이용한 실시간 프로세스 상태 분석- CPU 사용률, 메모리 사용률 및 프로세스 상태(RUNNING 등) 확인
- CPU 집중형 프로세스 실행 실험
- 프로세스 상태 전이
- CPU / 메모리 자원 소비 특성
📍 과제 3-1번
fork()를 통한 프로세스 생성 구조 이해- 부모–자식–조상 프로세스 트리 추적
- 파일 디스크립터(0, 1, 2)의 역할 분석
- 표준 입출력 리디렉션(
>,<,2>) 동작 원리 이해 - 파이프(
|)를 이용한 프로세스 간 통신 구조 분석
- 프로세스와 파일 디스크립터의 관계
- 쉘의 I/O 리디렉션 구현 원리
📍 과제 3-1번
- 가상 메모리(VSZ)와 실제 메모리(RSS)의 차이 분석
- 지연 할당(Lazy Allocation) 개념 실험
- 메모리 접근 여부에 따른 물리 메모리 사용 변화 관찰
- 가상 주소 공간 vs 물리 메모리
- 페이지 단위 메모리 관리
📍 과제 3-1번
- 랜덤 파일 접근과 동일 파일 반복 접근 비교
- 캐시(Cache)가 디스크 성능에 미치는 영향 분석
iostat명령어를 이용한 디스크 사용률 측정
- 디스크 캐싱 메커니즘
- I/O 패턴에 따른 성능 차이
📍 과제 3-1번 / 3-2번
📍 과제 3-1번
- xv6 커널에
lseek()시스템 호출 추가 - 파일 오프셋 이동 방식(
SEEK_SET / SEEK_CUR / SEEK_END) 구현 - 사용자 프로그램과 커널 인터페이스 확장
📍 과제 3-2번
- 기존 xv6 스케줄러 분석
- 다단계 피드백 큐(MLFQ) 스케줄러 설계 및 구현
- Aging 기법을 통한 기아 상태 방지
- CPU / I/O bound 프로세스 공정성 개선
📍 과제 3-2번
- 지연 할당 기반 메모리 확장
- 페이지 폴트 발생 시 물리 메모리 동적 할당
- 메모리 해제 지연 및 상태 출력
📍 과제 3-2번
- 페이지 테이블 기반 가상 → 물리 주소 변환 시뮬레이션
- 페이지 테이블 초기화 (
alloc_page_table) - 주소 변환 로직 구현 (
mmu_address_translation) - Valid / Access 비트 기반 접근 제어
- MMU의 핵심 동작 원리
- 하드웨어 MMU의 소프트웨어적 모델링
- 운영체제 커널의 내부 구조와 동작 방식 이해
- 프로세스, 스케줄링, 메모리 관리의 유기적 관계 파악
- xv6 커널 수정 및 확장을 통한 실전 OS 개발 경험
- 이론 → 구현 → 실험 → 분석의 전 과정을 수행