[Pintos] User Programs Part 2 전체적인 큰 그림 그리기

2025. 5. 21. 16:29·크래프톤 정글/Code 정글(C언어)

User Programs Part 2 전체적인 큰 그림 그리기

Part1에서는 기본적인 사용자 프로그램이 실행과, 간단한 시스템 콜(halt, exit, exec, wait), 그리고 최소한의 write 시스템 콜(fd가 1인 경우)을 구현해 보았습니다. 이어지는 Part2에서는 프로젝트의 나머지 빈 부분들을 채우게 되는데요. 곧 아직 미구현인 채로 남아있는 나머지 시스템 콜, 유저 포인터의 단일 주소 뿐만 아니라 메모리 범위, 문자열 검증 로직, 파일 시스템과의 연동, 그리고 부모-자식 프로세스 간의 동기화를 마무리짓게 됩니다.

 

 

문제 정의 및 전체 흐름 파악하기

현재 상태 분석 및 문제 정의

기본적인 틀은 갖춰진 상태지만, 여전히 다음과 같은 문제들이 남아 있습니다.

  • 많은 시스템 콜이 여전히 미구현 상태
    • 특히 파일 시스템 관련 시스템 콜(open, close, read, write(fd != 1), seek, tell 등)이 미구현
    • 동시성 및 파일 공유 문제는 전혀 고려되지 않고 있음
  • 사용자 프로그램이 전달하는 포인터에 대한 검증 로직이 없는 상태
    • 커널이 잘못된 주소를 참조하여 충돌하거나 보안상 위험이 존재할 수 있음 
    • 문자열의 시작 주소는 유저 영역이지만, 일부분이 유저 영역을 벗어나는 경우 처리 불가
  • 파일 시스템과의 실제적인 연동이 전혀 이루어지지 않는 상태
    • 현재로서는 파일을 열거나 내용을 읽고 쓰는 작업을 수행할 수 없음
  • 일부 로직을 제외하고 부모 프로세스와 자식 프로세스 간의 동기화가 미구현 상태
    • 프로세스 간의 경쟁 조건(race condition) 발생 가능성
    • 프로세스 종료 상태가 제대로 관리되지 않을 수 있음

 

학습 목적

  • 커널–유저 경계 보안 이해
    • 시스템 콜 인터페이스가 사용자 프로그램과 커널을 어떻게 안전하게 분리·보호하는지 학습하기
  • 메모리 안전성 체험
    • 포인터 유효성 검증 로직을 직접 구현해 잘못된 주소 접근이 시스템 안정성에 미치는 영향을 이해하기
  • 파일 시스템 추상화 파악
    • FDT, inode 등 내부 자료구조를 통해 파일 시스템 계층이 동작하는 원리를 익히기
  • 동시성과 동기화 설계
    • 파일 I/O·프로세스 제어 과정에서 발생하는 경쟁 상황을 분석하고 semaphore·lock 등 동기화 기법을 적용하기
  • 자원 생명주기 관리
    • 프로세스와 파일 객체의 생성→사용→정리 흐름을 설계·구현하여 자원 누수 및 일관성 오류를 방지하기

 

전체 실행 흐름 파악하기

Part2는 다음과 같은 큰 흐름으로 진행됩니다.

  1. 시스템 콜 처리 개선
    • 시스템 콜 핸들러에서 사용자 프로그램의 포인터 유효성을 철저히 검증
    • 파일 관련 시스템 콜(open, close, read, write, seek, tell 등)을 각각의 커널 내 함수로 구현
  2. 파일 시스템 연동
    • 파일 디스크립터 테이블(FDT)을 프로세스별로 관리하고, open, close 시스템 콜로 파일 객체의 생명 주기를 관리
    • read, write 시스템 콜에서 파일 시스템 API를 호출하여 파일로부터 데이터를 읽거나 쓰는 기능 제공
  3. 부모-자식 프로세스 동기화
    • 프로세스 복제 시스템 콜(fork)과 관련 함수인 __do_fork를 완전한 기능을 수행하도록 구현 
    • 이를 위해 경쟁 조건을 방지하기 위한 적절한 동기화 프리미티브(예: semaphore)를 사용

이를 통해 보다 완전하고 안정적인 사용자 프로그램 실행 환경을 제공하는 것을 목표로 합니다.

 

 

다음은 같은 조의 박은범 학우가 System Call에 대해 전체적으로 정리한 내용이니 참고해보시면 좋을 것 같습니다.

https://velog.io/@corinbeom/PintOS-Project-2-UserProgram-System-Call

추가로 같은 조 임준혁 학우가 Fork와 동기화에 대해 정리한 내용이 있어 공유해드립니다.

https://zeka0228.tistory.com/6

 

 

저작자표시 비영리 변경금지 (새창열림)

'크래프톤 정글 > Code 정글(C언어)' 카테고리의 다른 글

[Pintos] 트러블슈팅: CRLF로 인해 맞는 코드의 테스트가 실패하는 현상 해결하기  (0) 2025.05.23
[Pintos] User Programs Part2 구현하기 (동기화 처리된 fork 구현, 파일 시스템 관련 시스템 콜 마무리)  (0) 2025.05.23
[Pintos] User Programs Part1 구현하기 (프로세스 실행 및 인자 전달, 시스템 콜 및 사용자 포인터 검증, 프로세스 동기화 및 종료)  (0) 2025.05.20
[Pintos] Windows에서 make check가 안 될 때 해결 방법 (Error 127)  (0) 2025.05.19
[Pintos] 트러블슈팅: 기본 제공 함수에서 오류가 발생하는 문제 해결하기  (0) 2025.05.17
'크래프톤 정글/Code 정글(C언어)' 카테고리의 다른 글
  • [Pintos] 트러블슈팅: CRLF로 인해 맞는 코드의 테스트가 실패하는 현상 해결하기
  • [Pintos] User Programs Part2 구현하기 (동기화 처리된 fork 구현, 파일 시스템 관련 시스템 콜 마무리)
  • [Pintos] User Programs Part1 구현하기 (프로세스 실행 및 인자 전달, 시스템 콜 및 사용자 포인터 검증, 프로세스 동기화 및 종료)
  • [Pintos] Windows에서 make check가 안 될 때 해결 방법 (Error 127)
그냥사람_
그냥사람_
IT 관련 포스팅을 합니다. 크래프톤 정글 8기 정경호
  • 그냥사람_
    그냥코딩
    그냥사람_
  • 전체
    오늘
    어제
    • 글 전체보기 N
      • 크래프톤 정글 N
        • 로드 투 정글(입학시험)
        • CS기초(키워드, 개념정리)
        • 컴퓨터구조(CSAPP)
        • Code 정글(C언어)
        • Equipped in 정글(나만무) N
        • 마이 정글(WIL, 에세이) N
      • 자료구조&알고리즘
        • 자료구조
        • 알고리즘
      • 일상
  • 블로그 메뉴

    • 홈
  • 링크

    • Github
  • hELLO· Designed By정상우.v4.10.3
그냥사람_
[Pintos] User Programs Part 2 전체적인 큰 그림 그리기
상단으로

티스토리툴바