프로그램과 프로세스, 스레드

sojukang·2022년 8월 7일
0

프로그램

그게 뭐냐?

A program is a set of instructions that a computer uses to perform a specific function.
즉 컴퓨터에게 실행시킬 목적의 명령어들의 집합.

프로그램의 구성

왜 나누는가?

최대한 데이터를 공유하여 메모리 사용량을 줄이기 위해. Code는 같은 프로그램에서 같은 내용이기 때문에 따로 관리하여 공유한다. Stack과 Data를 나눈 이유는 스택 구조의 특성과 전역 변수의 활용성을 위해서이다.

코드(Code)

우리가 작성한 프로그램 함수들의 코드가 CPU에서 수행할 수 있는 기계어 명령(machine instruction) 형태로 변환되어 저장되는 부분

데이터(Data)

전역 변수(global variables), 정적 변수, 배열 등 프로그램이 사용하는 데이터를 저장하는 부분

  • 초기화 된 데이터는 data 영역에 저장
  • 초기화 되지 않은 데이터는 bss 영역에 저장

스택(Stack)

함수가 호출될 때 호출된 함수의 수행을 마치고 복귀할 주소 및 데이터를 임시로 저장하는 부분

프로그램의 실행

그게 뭐냐?

'프로그램이 실행(program execution)되고 있다'는 것은

  1. 디스크에 존재해던 실행 파일이 메모리에 적재된다.
  2. 프로그램이 CPU를 할당받고 명령(Instructions)을 수행하고 있는 상태이다.

프로세스랑 뭐가 다르냐?

실행 중인 프로그램을 프로세스라고 한다.

프로세스

그게 뭐냐?

실행 중인 프로그램이다. '실행 중'의 의미는 앞서 보았듯이

  1. 디스크에 존재해던 실행 파일이 메모리에 적재된다.
  2. 프로그램이 CPU를 할당받고 명령(Instructions)을 수행하고 있는 상태이다.

두 가지를 의미한다.

프로그램과 프로세스의 차이

프로세스는 실행 되며 동적으로 할당되는 메모리인 힙(Heap)을 할당받는다.

주소 공간과 가상 메모리(Virtual Memory)

프로세스는 실행중인 프로그램이므로 코드, 데이터, 스택으로 구성된 주소 공간을 갖는다. 프로그램마다 독자적으로 존재하는 주소 공간을 가상 메모리(Virtual Memory) 혹은 논리적 메모리(Logical Memory)라고 부른다. 운영체제 또한 자신의 주소 공간을 가진다.

가상 메모리와 물리 메모리의 차이는?

가상 메모리는 실제 물리적 주소와 독립적으로 각 프로그램마다 독자적인 주소 공간을 가진다.

스레드와의 차이는?

프로세스가 메모리에 적재 되어 실행중인 프로그램이라면 스레드는 다중 스레드 구조에서 프로세스의 작업 단위별로 나뉜 것이다. 스레드 ID, 프로그램 카운터(PC), 레지스터 집합, 스택으로 구성된다.

멀티 프로세스

하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 병렬적으로 작업을 수행하는 것

장점은?

메모리 침범 문제를 OS 차원에서 해결하여 안전하다.

단점은?

각각 독립된 메모리 영역을 갖고 있어서 작업량이 많을 수록 오버헤드가 발생한다. Context Switching으로 인해 성능이 저하된다.

Context Switching이란?

프로세스의 상태 정보를 저장하고 복원하는 일련의 과정이다. 프로세스는 독립된 메모리 영역을 할당받아 사용하므로 캐시 메모리 초기화와 같은 무거운 작업이 진행되었을 때 오버헤드가 발생할 문제가 존재한다.

스레드

그게 뭐냐?

스레드는 다중 스레드 구조에서 프로세스의 작업 단위별로 나뉜 것이다. 스레드 ID, 프로그램 카운터(PC), 레지스터 집합, 스택으로 구성된다.

특징은?

같은 프로세스에 속한 다른 스레드와 코드, 데이터, 열린 파일이나 신호와 같은 운영체제 자원들을 공유한다.

물리 스레드, 논리 스레드

물리 스레드(Hardwear Thread, Physical Thread)

물리적인 CPU의 스레드 개수. 실제 동시 실행 가능한 스레드의 개수이다.
8코어 16스레드 CPU의 16스레드가 이 물리 스레드를 의미한다.

논리 스레드(Logical Thread, Softwear Thread)

위에서 말한 프로세스를 작업 단위별로 나눈 것. 리눅스에서 최대 스레드를 확인하기 위해서는

cat /proc/sys/kernel/threads-max

위 명령어로 알아볼 수 있다(프로세스 + 스레드 개수).

78921

멀티 스레드

하나의 응용 프로그램에서 여러 스레드를 구성해 각 스레드가 하나의 작업을 처리하는 것

장점은?

  • 독립적인 프로세스에 비해 공유 메모리만큼의 시간, 자원 손실이 감소한다.
  • 전역 변수과 정적 변수에 대한 Data를 공유 가능하다.

단점은?

  • 안전성 문제: 공유 메모리를 갖기 때문에 하나의 스레드가 Data 공간을 망가뜨리면 모든 스레드가 작동 불능하게 될 수 있다.
    • Critical Section 기법등을 통해 대응한다.
  • 공유 데이터 동시 접근 문제를 해결하기 위한 동기화 과정이 필요하다.

병행성 vs 병렬성

  • 병행성은 둘 이상의 작업을 진행되게 하는 것으로 실제로 명령어가 동시에 실행될 필요는 없다.
  • 병렬성은 실제로 같은 시간 t에 동시에 여러 명령어가 실행됨을 의미한다. 병렬성이면 병행성으로 충분 조건이다. 병렬성 -> 병행성

참고

What is a Program? - webopedia
What is a Program? - techtarget
gyoogle.dev
운영체제와 정보기술의 원리
운영체제(공룡책)

profile
기계공학과 개발어린이

0개의 댓글