DEVOPS/LINUX

[Linux] 프로세스란?(+init프로세스)

연듀 2021. 12. 4. 14:45

프로그램과 프로세스

 

프로그램이란 실행 파일이다.

실행 파일이 주기억장치에 올라가 실행을 하게 되면 프로세스로 만들어진다.

 

프로세스란 실행중인 상태의 프로그램을 말한다.

프로그램 자체가 프로그램은 아니다.

하나의 프로그램에서 여러 개의 프로세스를 생성할 수 있다. 

각 프로세스를 프로그램의 인스턴스라고 한다. 

 

 

프로세스를 다른 프로세스가 만든다.

프로세스마다 부모 자식간의 관계가 있는데

만든 프로세스를 부모 프로세스, 만들어진 프로세스를 자식 프로세스라고 부른다.

모든 프로세스는 부모 프로세스를 가진다.

 

ex)

쉘에서 프로세스를 만드는게 가장 흔한 프로세스를 만드는 방법이다. 

쉘이라는 프로세스가 vi라는 프로세스를 만든다.

 

 

프로세스

 

각 프로세스는 유일한 프로세스 번호 PID를 갖는다.

사용자는 파일 이름으로 파일을 식별하지만 커널은 파일을 inode 번호로 식별하듯이,

프로세스는 커널에서 프로세스 번호로 식별한다.

ps 명령어를 사용하여 실행중인 나의 프로세스들을 볼 수 있다.

 

 

UID (User ID) : 프로세스 소유주의 사용자 식별 번호
PID (Process ID) : 프로세스의 식별 번호
PPID (Parent Process ID) : 부모 프로세스의 식별 번호
 

 

프로세스들은 트리 모양을 갖는다.

모든 프로세스는 부모 프로세스를 갖는데, 예외로 가장 상위 프로세스(루트 프로세스)는 부모가 없다.

그것은 바로 init 프로세스다. init프로세스는 처음에 부팅할 때 부트로더가 주기억장치 상에 강제로 만들어준다.

다른 프로세스가 만들어지기 전에 만드는 것이다.

그 이후의 모든 프로세스들은 최초의 init 프로세스로부터 출발한다. 

대부분의 사용자 프로세스는 쉘 프로세스가 부모 프로세스가 된다. 

 
 
 

프로세스 구조

 

 

 

 

코드는 하나만 올려놓고 여러개의 프로세스가 공유 가능

데이터란 상수, 전역 변수, 정적 변수를 위한 메모리 영역

스택은 함수에서 선언한 지역 변수들

힙은 동적 할당을 받은 부분

U-영역은 프로세스를 실행하는데 필요한 정보들