#4 프로세스 구성요소의 이해

유상우·2022년 8월 24일
0

프로세스의 정의

  • 실행중인 프로그램
  • 프로그램 진행 상태를 완전하게 나타내는 자료 구조의 집합
    => 프로세스 디스크립터

스레드의 정의

  • 프로세스 내의 실행 흐름 (프로세스 당 최소 1개 이상의 스레드가 존재
  • 리눅스에서는 경량 프로세스라고도 부름
    => 스레드 단위로 스케줄링
  • 스레드는 주소 공간이나 열린 파일 등 여러 자원을 공유할 수 있음
    => 공유자원을 접근할 때 서로 동기화 해야함

하드 디스크에 저장된 여러 instructions set 으로 구성된 program은 실행하게 되면 RAM 공간에 올라온다. 프로세스 안에는 여러개의 thread가 생성이 되고 OS 스케쥴러는 thread 별로 스케쥴링을 하여 context switch(각각의 자원을 공유)를 하면서 CPU에 의해 프로그램이 실행이 된다.

PID

  • 커널은 각 프로세스에 고유한 ID를 부여
  • PID는 프로세스가 생성되는 순서대로 배정

PPID(Parent Process ID)

  • 리눅스에서는 새 프로그램을 시작하는 시스템 콜이 없음
  • 기존 프로세스를 복제 및 프로그램 교체하는 방식
    • 기존 프로세스는 새로운 프로세스를 생성하고 자신을 복제 함
    • 복제된 프로세스는 현재 실행중인 프로그램을 교체
  • PPID는 그 포로세스를 복제한 부모의 PID
# linux process의 tree 구조
pstree -p

Niceness

  • 프로세스 스케쥴링의 우선순위를 결정
  • 우선순위 높다 == CPU 사용 시간이 많다
  • Nice 값의 범위 : -20 ~ +19 ( 작을 수록 불친절 => 우선순위 높음)
  • 조정
    $ nice n 5 [command]
    $ sudo renice -5 -p [process id]
    $ sudo renice 5 -u [username or UID]
  • 수작업으로 우선순위를 조정하는 경우는 흔치 않음
    => CPU 성능,스케쥴러,I/O요청 등의 영향으로 조정에 따른 차이가 극적이지 않음
    => 대부분의 경우 기본값 사용

정리

프로세스

  • 실행중인 프로그램

스레드

  • 프로세스 내의 실행 흐름
  • 리눅스의 스레드는 경량화된 프로세스 개념

PID, PPID

  • 부모 프로세스를 복제 및 교체하는 방식으로 프로세스 생성

Niceness

  • 프로세스 스케줄링의 우선순위를 결정
    => 대부분 기본값을 사용
profile
Potentialist

0개의 댓글