Corgi Dog Bark

ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로세스란 in LINUX
    뜯고 또 뜯어보는 컴퓨터/컴퓨터 OS 2022. 1. 14. 11:08
    반응형

    0. 정의 

    - A process is a series or set of activities that interact to produce a result; it may occur once-only or be recurrent or periodic. [위키피디아] 

    - 프로세스란 간단히 말해, 현재 실행 중인 프로그램을 의미합니다.(통상 메모리에 적재되어, PCB(Process Control Block)라는 형태로 OS에 의해 관리되는 상태를 의미합니다. - 프로세스를 프로그램과 혼동하면 안 됩니다.) 프로그래밍적 관점에서 봤을때, 컴퓨터에는 여러 가지 프로세스가 실행되고 있으며, 실행, 수면, 실행 대기, 대기, 종료 등 여러 규칙에 의해 변하고 있습니다.

    https://www.geeksforgeeks.org/difference-between-wait-and-sleep-in-java/

    - 위의 그림을 보게 되면, process 는 다음과 같이 다양한 상태변화를 하게 되는데, 먼저 사용자 모드에서 실행이 되고, 시스템 호출 및 입출력 요청을 하게 되었을 때, 커널 모드로 전환되어 실행되는 등, 프로세스는 운영체제에 의해서 다양한 상태변화를 격게 됩니다. 

     

    - 그리고, 프로그램을 실행한 다음, 메모리에 올라간 프로세스의 구조는 다음과 같이 됩니다.

    프로세스의 구조화면

    1. 텍스트 영역(Code): 실행 코드를 저장하며, 텍스트 영역은 프로세스가 실행중 크기가 변하지 않는 고정 영역에 속합니다.
    2. 데이터 영역(Data): 프로그램에서 지정한 전역 변수를 저장합니다.
    3. 힙(Heap): 프로그램 실행중에 동적으로 메모리를 요청한 경우에 할당이 되는 공간으로, 메모리의 할당과 해제를 통해 가변적으로 변합니다.
    4. 스택(Stack): 프로그램에서 정의한 지역 변수를 저장하는 공간으로, 함수 호출에 따라, 쌓이는 LIFO 구조로 되어 있습니다.
    5. 빈 공간: 가변적인 메모리 할당을 위해 할당된 빈 메모리 공간입니다.

     

     

    1. 프로세스 식별 함수

    1-1. 프로세스 PID

    - 각각의 프로세스들은 실행이 된 후, 운영체제에 의해서 식별받은 고유 ID를 가지게 되는데, 이를 Process ID 즉, PID 라 부르게 되고, 관련 프로세스가 모여 프로세스 그룹(Process Group)을 만들게 됩니다. 또한 유닉스에서는 프로세스를 식별할 때 사용할 수 있는 PID, 프로세스 그룹 관련 함수는 아래와 같습니다.

    함수 원형 기능
    pid_t getpid(void); Process ID 검색
     pid_t getppid(void); 부모 Process ID 검색
    pid_t getpgrp(void); 
    pid_t getpgid(pid_t pid);
    프로세스 Group ID 검색
    int setpgid(pid_t pid, pid_t pgid); 프로세스 Group ID 변경

     

    - PID 는 0번부터 시작을 하게 되고, 보통 0번은 스케줄러(Sched), 1번은 init으로 프로세스를 실행시키면, 자동으로 할당이 되게 됩니다. 그리고 0번을 제외한 모든 프로세스는 자신을 호출한 부모 프로세스가 있는데, 이는 PPID라 하고, Parent Process ID의 약자입니다. 밑의 그림은 bash 에 ps -ef | more 명령어를 쳐본 것인데, runner의 PID는 1이고, 1의 상위 프로세스 PPID로는 0번 PID 가 존재하게 된다.

    1-2. PROCESS 식별 함수.

       - getpid() 함수는 현재 프로세스의 ID, getppid() 함수는 부모 프로세스의 ID 를 출력 가능하다.

    #include <unistd.h>
    #include <stdio.h>
    
    int main(void) {
    	printf("PID : %d\n", (int)getpid());
    	printf("PPID : %d\n", (int)getppid());
    }

     

     

    2. 프로세스 그룹

    - 프로세스 그룹 은 관련있는 프로세스를 묶은 것으로, 따로 PGID(process group id)를 부여받게 됩니다. 당연히 프로세스 그룹 내부에는 프로세스가 구성하는 멤버로 작동하게 되며, 그룹에도 리더가 있듯이, PGID 내부에 하나의 프로세스가 대표 PID를 부여받고, 이 리더 프로세스가 변하면, PGID 또한 변경되게 됩니다.

     

    - getpgrp( ) 함수는 이 함수를 호출한 프로세스가 속한 그룹의 PGID를 호출하고, getpgid( ) 함수는 pid 인자로 지정한 프로세스가 속한 그룹의 PGID 를 리턴하게 됩니다.

    // getpgrp() 함수 : 이 함수를 호출한 프로세스의 PGID 리턴, 즉 자기 자신의 PGID 리턴
    pid_t getpgrp(void);
    
    // getpgid(pid_t pid) 함수 : 특정 pid 를 가진 프로세스의 PGID 리턴.
    pid_t getpgid(pid_t pid);
    
    // setpgid(pid_t pid, pid_t pgid) 함수 : pid 가 가르키는 프로세스의 PID를 pgid로 지정한 값으로 지정하게 된다.
    int setpgid(pid_t pid, pid_t pgid)

     

     

    3. 세션 

    - 세션은 POSIX 표준에서 제안한 개념으로, 사용자가 로그인해 작업하고 있는 터미널 단위로 프로세스 그룹을 묶은 것입니다. PGID 는 프로세스끼리 를 묶은 것이라면, 세션은 더 큰 개념으로, 관련 있는 프로세스 그룹을 묶은 것입니다.

    // getsid(pid_t pid) 함수 : 현재 세션의 ID 가져오기.
    pid_t getsid(pid_t pid);
    
    // setsid() 함수 : 새로운 세션을 만들어 낼 수 있다.
    pid_t setsid(void);

     

     

     

    REFERENCE.

    0 . 리눅스 시스템 프로그래밍 [저. 이종원]

    1. https://en.wikipedia.org/wiki/Process

    2. https://www.redhat.com/sysadmin/linux-command-basics-7-commands-process-management

    반응형

    '뜯고 또 뜯어보는 컴퓨터 > 컴퓨터 OS' 카테고리의 다른 글

    NM CLI 명령어 사용법 정리  (0) 2022.01.11

    댓글

Designed by Tistory.