linux

linux task mangement

0xSEUNGJU 2022. 10. 5. 20:03

Task란

  • task: 자원 소유권의 단위
  • thread: 수행의 단위
  • process: 동작중인 프로그램
  • program: 디스크에 저장되어 있는 실행가능한 형태의 파일

 

test.c 는 'start' 라는 문자열을 출력한 후 5초 간 잠들었다가 'end' 라는 문자열을 출력한다.

// test.c
#include <stdio.h>
#include <unistd.h>

int main(void)
{
    printf("start\n");
    sleep(5);
    printf("end\n");
    return 0;
}

gcc를 이용하여 test.c 소스를 컴파일하여 test라는 이름의 바이너리 프로그램을 생성한다.  test 는 Intel x86 계열의 CPU 에서 수행가능한 ELF(Executable Linking Format)의 실행 파일이다.

test를 백그라운드로 실행시키고 ps 명령을 통해 수행중인 프로세스를 살펴보면 test라는 프로세스가 있고 pid를 알 수 있다. 

파일 형태로 존재하는 프로그램이 실행되기 위해서는 리눅스 커널로부터 CPU 등의 자원을 할당받을 수 있는 동적인 객체가 되어야 하는데 이 동적인 객체가 프로세스다. 프로세스는 동작중인 프로그램이며 커널로부터 할당받은 자신만의 자원을 가지고 CPU가 기계어 명령들을 실행함에 따라 끊임없이 변화하는 동적인 존재다. 

 

커널이 시스템에 존재하는 여러 개의 프로세스 중 CPU 라는 자원을 어느 프로세스에 할당해 줄 것인가를 결정하는 작업을 스케줄링이라고 부른다.