10-11주 _ 6팀-12.jpg

<aside> 🥕

pintos --fs-disk=10 -p tests/userprog/args-single:args-single -- -q -f run 'args-single onearg’ 명령어를 입력하는 상황이라 생각하겠습니다.

</aside>

1️⃣ 우선 유저 프로그램을 메모리에 적재

명령어 실행

  1. 핀토스 커널이 부팅됩니다.
  2. args-single 유저 프로그램 파일이 디스크에서 메모리로(ELF 로딩) 올라옵니다.

2️⃣ 유저 프로그램에서 시스템콜 호출

프로그램 실행

  1. 메모리에 올라온 args-single 프로그램이 main() 함수부터 실행을 시작합니다.

시스템 콜 호출

  1. 프로그램이 write() 같은 시스템 콜 호출 함수를 만나면, 실제로는 lib/user/syscall.c에 있는 래퍼 함수(syscall3)가 호출됩니다.

3️⃣ syscall() 함수 실행

커널 진입 준비

  1. 래퍼 함수가 시스템 콜 번호와 인자들을 레지스터에 설정하고, syscall 어셈블리 명령어를 실행합니다.

커널 모드 진입

  1. syscall 명령어는 CPU의 특권 모드를 커널로 전환하고, syscall_handler로 제어를 넘깁니다.