View

프로세스, Process

실행 가능한 하나의 프로그램이 OS(Operation System)로부터 고유한 시스템 리소스 영역을 할당받아 실행 가능한 형태로 해당 영역에 적재(특히 메모리)되는 하나의 인스턴스이다. 일반적으로 프로그램을 하나 실행하면 그 프로그램이 OS가 할당한 시스템 리소스 영역에 적재되어 하나 이상의 프로세스가 실행된다. 즉 프로세스는 현재 실행 중인 프로그램의 하나의 형태이라고 할 수 있다. 여기서 OS로 부터 할당받는 다는 것은 OS의 스케쥴러에 의해 영향을 받는다는 의미이다. 예를들어 필요에 따라 OS 스케쥴러가 특정 프로세스의 리소스를 멈추게하는 등의 행위를 할 수 있다.

고유한 시스템 리소스 영역을 할당받기 때문에 다른 프로세스가 할당받은 영역에 접근할 수 없다. 이러한 이유로 프로세스 간 통신을 위해 IPC(Inter-Process Communication, 프로세스 간 통신) 기술이 필요하다. IPC 기술엔 소켓(http도 결국 소켓), 메세지큐, 파이프, 파일등이 있다.

PCB, Process Control Block

OS는 프로세스를 PCB라는 자료구조로 컨트롤하며 Process Descriptor라고 부르기도 한다. 프로세스 하나에 하나의 PCB가 만들어진다..

PCB는 크게 프로세스를 구분할 수 있는 정보, 현재 프로세스의 상태, 프로세스 제어를 위한 정보가 저장이 된다. 참고

Process Memory

PCB가 가지고 있는 정보 중 프로세스가 사용할 수 있는 메모리의 위치정보가 있고 이 메모리는 프로세스가 사용할 수 있는 메모리 공간이다. 이 공간은 아래와 같은 형태로 구성이 되어있다.

Process Memory Model

  • stack : 말 그대로 stack 형태의 자료구조를 가진 공간. 함수 호출 시 함수의 정보(매개변서, 지역변수 등)가 저장되는 영역.
  • heap : 동적으로 생성되는 메모리 영역. 동적이란 프로세스가 실행되면서 개발자가 정의한 로직에 따라 공간이 늘어나거나 줄어들 수 있음. c언어 계열에선 malloc, calloc 함수를 통해 생성되는 공간이 배정되는 영역
  • data(BSS, GVAR) : 정적 데이터가 저장되는 영역. static으로 생성하는 데이터가 저장됨.
  • code(text) : 프로그램 코드가 들어가는 영역. 읽기 전용

메모리 공간의 사이즈는 stack, heap 영역은 프로그램 런타임 단계에서 결정되고 data, code 영역은 컴파일 단계에서 결정된다. 프로세스가 사용할 수 있는 메모리 크기, 위 그림에 해당하는 박스의 크기는 프로세스가 실행되면서 정해지고 메모리의 마지막 영역을 시작점으로 용량이 증가하는 stack영역과 code, data 영역 이후로 시작되는 heap 영역이 unused memory을 사용하며 공간을 늘여나가는 방식이다. 이는 상황에 따라 stack, heap의 사이즈가 커져 더 이상 사용할 수 있는 unused memory가 없을 경우 '더 이상 사용할 영역이 없음'이라는 오류가 나게 되는데 이 오류가 바로 stack overflow, heap overflow 오류이다.

쓰레드, Thread

프로세스를 구성하는 구성요소로 하나의 프로그램 안에서 실행될 수 있는 명령어들의 집합 인스턴스이다.. semi process, light weight process 등의 명칭으로도 불리며 명칭을 보더라도 프로세스보다 경량화되었음을 알 수 있다.

쓰레드는 하나의 프로세스 내부에 생성되어 프로세스의 code, heap, stack 영역에 접근할 수 있다.(위 그림에서 왼쪽 static, heap, code 영역)

스레드는 생성되면서 별도의 stack, register 공간을 할당받게 되는데 이는 스레드 함수 내부에서 선언한 변수 등이 저장되는 장소로 사용되고 프로세스는 스레드를 생성하면서 그 정보를 call stakc에 저장한다. 보통 일반적인 프로그램의 경우 실행 시 main thread가 실행의 시작점이 되는 main 함수를 실행하고 실행 흐름 또는 외부 입력에 반응하여 프로그래머가 정의한 흐름에 따라 독립적으로 실행되는 사용자 정의 스레드로 구성된다. 둘 이상의 스레드를 사용할 경우 Multi thread, 멀티 스레드라고 한다.

Reference

Share Link
reply