핀토스(pintos) projcet 2 User Program

서경원·2023년 6월 3일

핀토스(pintOs)

목록 보기
1/1

ELF(Executable and Linkable Format) :

  1. 컴퓨터 소프트웨어의 실행 파일 포맷 중 하나. ELF는 실행파일, 공유 라이브러리, 코어 덤프 파일 등을 저장하는 데 사용됩니다. 이러한 파일들은 ELF 포맷에 맞게 구성되어 있으며, 운영 체제는 ELF 파일을 이해하고 로드하여 실행가능한 형태로 만듭니다.
  2. ELF파일은 다양한 섹션으로 구성됩니다. 대표적인 섹션으로는 코드섹션(.text), 데이터 섹션(.data), 읽기 전용 데이터 섹션(.redata), BSS 섹션 등이 있습니다. 코드섹션에는 프로그램의 실행 코드가 저장되고, 데이터 섹션에는 초기화된 변수와 상수 데이터가 저장됩니다. 읽기 전용 데이터 섹션에는 읽기만 가능한 상수 데이터가 저자오디며, BSS섹션에는 초기화되지 않은 전역 변수와 정적 변수가 할당됩니다.
  3. ELF파일은 섹션 헤더 및 프로그램 헤더로 구성됩니다. 섹션 헤더는 각 섹션의 속성과 위치 정보를 제공하고, 프로그램 헤더는 ELF 파일이 로드될 때 운영 체제에 의해 어떻게 처리되어야 할는지를 정의합니다.

User Program 개요

Main goal
Origin : system call handler table is empty.
After modification :

  1. Fill system call handler
  2. Add system calls to provide service to users.

system call handler 실행

  • system call number로 system call handler로부터 system call을 부른다.
  1. Check validation of pointers in the parameter list.
    • 이 포인터는 user stack을 가리켜야 함.(kernel을 가리키면 안됨.)
    • 유효하지 않은 주소를 가리키면 page fault.
  2. user stack에 있는 arguments를 kernel로 복사.
  3. rax에 return 값 저장.

Address Validation

  1. kernel은 invalidity of pointers를 찾고 process를 종료해야 한다.
  2. 어떻게 찾냐?
    • Verify the validity of a user-provided pointer
    • use the function in 'userprog/pagedir.c and in 'threads/vaddr.h'

구현

  1. argument passing
  • 실행할 파일의 이름과 인자를 커맨드라인에서 받아서 strtok_r이라는 함수를 통해 띄어쓰기 기준으로 잘라서 token을 생성해 주고 그 token을 user_stack에 저장해준다.

    이 그림은 입력을 "bin/ls -l foo bar"로 줬을 때 user_stack에 저장되는 것을 그림으로 보여준다.

    1. 우선 각 token을 넣어주는데 입력기준 오른쪽 부터 넣어준다.(컨벤션 때문.) 
    2. 그 후 word-align을 맞춰준다. 여기서는 2바이트씩 맞춰준다. 
    3. 그 후 각 토큰에 대응되는 주소값을 넣어주고 마지막에 return address(fake address)로 0을 넣어준다.
  1. file descriptor table
    file descriptor(파일 식별자, 포인터형 변수)를 저장하는 테이블. file descriptor는 int형 변수로 0~63까지 주어진다.

    0: 표준 입력
    1: 표출 출력
    핀토스에서는 2부터 file을 넣어준다.

  2. system calls and handlers
    system handler를 통해 system call을 제어할 수 있다.
    파일과 관련된 system call
    - create, remove, open, filesize, read, write, seek, tell, close,
    그 이외에도 fork, wait, exit, halt등이 있다.

reference
핀토스 카이스트 자료
핀토스 한양대 자료

profile
멋진 사나이

0개의 댓글