Raspberry Pi_Kor_20.2.2 Shell의 명령 실행 방식


Published Book on Amazon


All of IOT

Starting with the Latest Raspberry Pi from Beginner to Advanced – Volume 1

All of IOT

Starting with the Latest Raspberry Pi from Beginner to Advanced – Volume 2


출판된 한글판 도서


최신 라즈베리파이(Raspberry Pi)로 시작하는 사

물인터넷(IOT)의 모든 것 – 초보에서 고급까지 (상)

최신 라즈베리파이(Raspberry Pi)로 시작하는 사

물인터넷(IOT)의 모든 것 – 초보에서 고급까지 (하)


Original Book Contents


20.2.2  Shell의 명령 실행 방식

 

20.2.2.1    kernel system call 종류

 

   "fork" 시스템 call 

 

call은 한 프로세스가 다른 프로세스를 실행시키기 위해 사용하는 시스템 호출 방식의 하나로 명령 실행이 필요할 때 child process가 생성되어 별도로 실행되는 형식이다.

 

이렇게 child process가 생성되면 새로운 Process ID가 부여되고, 새로운 프로세스를 위해 메모리가 할당된다. 새로운 process 생성을 위해서 "fork"를 호출한 parent 프로세스의 기본 정보는 새로운 process 영역으로 모두 복사된다. 새로운 process가 생성되면 원래의 parent 프로세스는 그대로 실행되고, "fork"를 이용해서 생성된 child 프로세스도 병렬적으로 실행된다.

 

call에서는 parent의 환경변수, 사용자 정보, 작업 directory 등이 모두 child로 복사되지만, child에서 변경한 것은 parent로 전달되지 않는다.

 

 

   "exec" 시스템 call

 

call은 한 프로세스가 다른 프로세스를 실행시키기 위해 사용하는 시스템 호출 방식의 하나로 명령 실행이 필요할 때 새로운 process를 생성하지 않고 parent process를 그대로 사용하되, parent process child process로 대체되는 방식이다.  

 

기존 process를 그대로 사용하므로 기존의 Process ID를 그대로 사용하고, "fork"처럼 새로운 메모리 공간을 할당하지 않고 기존 process의 메모리를 그대로 사용하는데, "exec"을 호출한 parent 프로세스의 메모리에 새로운 child 프로세스의 코드를 overwrite하는 방식으로 실행되기 때문에, "exec"을 호출한 parent 프로세스가 아닌 "exec"에 의해 호출된 child 프로세스만 메모리에 남게 된다.

 


 

   "wait" 시스템 call

 

call parent process에서 새로운 child process가 생성되어 실행될 때 parent process child process가 종료될 때까지 아무 작업도 하지 않고 대기하도록 한다.

 

 

   "exit" 시스템 call

 

call call을 실행한 process를 종료시킨다. 모든 process "exit" call을 사용하여 실행을 종료할 수 있다. child process에서 "exit"를 사용하면 parent process에게 종료 신호(exit signal)을 알리고, exit status를 전달한다.  

 

 

20.2.2.2    명령의 종류에 따른 Shell의 처리방법

 

Shell에서 실행하는 명령에는 내장명령과 외장명령이 있다.

 

내장 명령(internal command) Shell 자체에 내장되어 있는 명령으로, 명령 실행에 필요한 실행파일이 따로 있는 것이 아니라 Shell이 자체적으로 해석하여 실행해 주는 명령을 말한다.  "cd", "echo"와 같은 명령은 내장명령의 하나이다.

 

반면 외부명령(external command)은 환경변수에 설정된 파일검색 경로를 이용해서 명령 실행에 필요한 실행파일을 찾아서 해당 실행파일을 실행하는 방식으로 처리되는 명령을 말한다. 즉 외부명령에 대응되는 실행파일이 있는 명령을 말하며, 통상 "/bin" directory 밑에 해당 명령에 대한 실행파일이 보관된다.

 

 Shell에서는 내장명령과 외장명령을 처리할 때 서로 다른 process 처리방법을 사용하는데, 내장명령은 Shell 자신의 process에서 명령을 처리하도록 되어 있으며, 반면 외장명령은 fork call을 사용하여 새로운 child process를 생성하여 처리하도록 되어 있다.

 


 

20.2.2.3    Bash의 작동 과정

 

init script Start-Stop-daemon을 사용하여 새로운 process를 생성할 수 있는 script를 의미한다. init script "fork" call 기능을 이용하여 현재 실행중인 프로세스에서 다른 프로세스를 생성하여 필요한 처리를 할 수 있도록 해준다.

 

다음은 Bash에서 init script의 기본적인 작동 방식을 보여주는 그림이다.

 


 

 


 

Leave a Reply