Exec

Ahn9807 (토론 | 기여)님의 2023년 2월 11일 (토) 02:59 판 (새 문서: 분류: POSIX 시스템 콜 == 개요 == 다른 프로그램을 실행시킨다. 이때 다른 프로그램은 현재 프로세스의 메모리를 덮어쓰게 된다. : execve(flinename, argv, envp) # filename: 실행시킬 프로그램을 서술한다. # argv: 실행시킬 프로그램의 파라미터를 가르키는 포인터를 서술한다. # envp: 프로그램이 어떤 환경에서 실행될지를 기술한다. Exec는 Permission error, no executable, OOM등의...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)


개요

다른 프로그램을 실행시킨다. 이때 다른 프로그램은 현재 프로세스의 메모리를 덮어쓰게 된다.

execve(flinename, argv, envp)
  1. filename: 실행시킬 프로그램을 서술한다.
  2. argv: 실행시킬 프로그램의 파라미터를 가르키는 포인터를 서술한다.
  3. envp: 프로그램이 어떤 환경에서 실행될지를 기술한다.

Exec는 Permission error, no executable, OOM등의 이유로 실패할 수 있다.

알고리즘

Exec system call.png

파일의 아이노드를 읽어서 실행가능한지를 확인하고, 파일의 헤더를 확인하여 수행가능한지 확인한후 최종적으로 수행가능한 파일인지 확인한다. 그리고 exec시스템 파라미터를 system space에 카피한다. 그리고 현재 프로세스의 스택과 같은 모든 리전을 커널에 되돌린다. 그후 새로 로딩할 프로그램의 스택, 데이터, 텍스트와 같은 메모리 리전을 새로이 할당하고 exec 파라미터를 system space에서 user stack region으로 카피한다. 그후 레지스터값을 초기화 시키고 프로그램을 수행할 준비를 마치면 된다.

Environment Variables

EV값은 부모 프로세스에서 자식 프로세스로 상속되게 된다. 일반적으로 환경 변수는 .login, .cshrc, .bashrc와 같은 파일에 저장된다. 환경변수는 기본적으로 상속되지만 exec의 파라미터로 새로운 환경 변수를 넘길 수도 있다.

각각의 환경 변수는

"Name=Value"

의 꼴을 가지고 있다. 각각의 문자열은 \0으로 종료되며, 마지막 환경변수는 NULL 포인터를 가르킨다.

getenv, putenv참고