jun-wiki

View My GitHub Profile

Posts (Latest 10 updated) :
Read all
Contents:
  1. Pintos 프로젝트 2 요약
    1. 목표
    2. 만질 파일
    3. 파일시스템 제약(동시성 핵심)
    4. 가상 메모리/배치
    5. 사용자 포인터 처리(두 방식 중 택1)
    6. 운영 팁

요약 버전이다

Pintos 프로젝트 2 요약

목표

  • 사용자 프로그램 I/O·상호작용 구현: 시스템 콜로 커널과 대화하게 만들기
  • 주 작업 위치: userprog (하지만 커널 전반 영향 큼)
  • 규칙: #ifdef VM 내부 금지, #ifndef VM는 3에서 대체됨

만질 파일

  • process.c/.h: ELF 로드, 프로세스 시작
  • syscall.c/.h: 시스템 콜 핸들러/디스패치, 파라미터 검증, 파일 연산 래핑
  • exception.c/.h: 잘못된 접근 시 커널로 트랩(필요 시 페이지 폴트 처리 조정)
  • syscall-entry.S: 진입 어셈(이해만, 수정 X)
  • gdt.c/.h, tss.c/.h: 읽기만(수정 불필요)

파일시스템 제약(동시성 핵심)

  • 내부 락 없음 → 전역 락으로 단일 진입 보장.
  • 파일 크기 고정, 연속(extent) 할당, 서브디렉토리 없음, 이름 14자 제한
  • 크래시 복구 불가(저널링 없음) → 테스트 중 디스크 손상 가능

가상 메모리/배치

  • 사용자 공간: 0 ~ KERN_BASE(기본 0x8004000000) (프로세스별, PML4 전환)
  • 커널 공간: KERN_BASE ~ (전역, 물리와 1:1 매핑)
  • 전형 배치: code → data → bss → heap↑stack↓ (현재 사용자 스택 고정 크기)

사용자 포인터 처리(두 방식 중 택1)

  1. 검증 후 역참조: vaddr.h, thread/mmu.c 활용. 구현 단순, 오버헤드 있음
  2. 경계만 확인 + 페이지 폴트 복구: < KERN_BASE만 확인 후 접근, 폴트 시 정리. 빠름(하드웨어 MMU), 리소스 누수 주의
  • 헬퍼(get_user/put_user)는 폴트 복구 주소를 레지스터에 심어 접근 실패 시 -1/false로 되돌려 정상 정리를 가능케 함

운영 팁

  • filesys.dsk 마스터 이미지를 보관하고, 실험 전 복사본으로 실행
  • 파일 연산은 전역 파일시스템 락으로 감싸 동시성 문제 예방