프로세스 스레드 정리

오준석·2023년 10월 28일
1

TIL (Today I Learned)

목록 보기
100/105

프로세스는 운영체제에서 실행 중인 프로그램의 인스턴스를 의미한다.
프로세스는 운영체제로부터 자원을 할당 받아야 하고, 프로세스간 통신을 위해 별도의 메커니즘을 사용해야 한다.
다중 프로세스 환경에서는 각 프로세스가 독립적으로 실행되므로 안정성이 높아지지만 프로세스 간의 통신 비용이 높아질 수 있다.

쓰레드는 프로세스 내에서 실행되는 작은 실행 단위를 말한다.
하나의 프로세스 내에서 여러 개의 쓰레드를 생성해서 병렬로 작업을 수행 할 수 있다.
프로세스 내의 메모리를 공유하므로 데이터 및 자원 공유가 더 용이하다.
쓰레드 간의 전환 비용은 프로세스 간의 전환 비용보다 적기 때문에 빠른 작업을 위해 사용된다. 다중 쓰레드 환경에선 하나의 쓰레드가 문제를 발생시키면 다른 쓰레드도 영향을 받을 수 있어 안정성이 낮아질 수 있다.

PCB(Process Control Block)는 운영체제에서 프로세스에 대한 메타데이터를 저장한 ‘데이터’를 말한다. 프로세스 제어 블록이라고도 한다.
프로세스가 생성되면 운영체제는 해당 PCB를 생성한다.
프로그램이 실행되면 프로세스가 생성되고 프로세스 주소 값들에 스택, 힙 등의 구조를 기반으로 메모리가 할당된다. 그리고 이 프로세스의 메타데이터들이 PCB에 저장되어 관리된다. 이는 프로세스의 중요한 정보를 포함하고 있기 때문에 일반 사용자가 접근하지 못하도록 커널 스택의 가장 앞부분에서 관리된다.

컨텍스트 스위칭(context switching)은 앞서 설명한 PCB를 교환하는 과정을 말합니다. 한 프로세스에 할당된 시간이 끝나거나 인터럽트에 의해 발생한다. 컴퓨터는 많은 프로그램을 동시에 실행하는 것처럼 보이지만 어떠한 시점에서 실행되고 있는 프로세스는 단 한 개이며, 많은 프로세스가 동시에 구동되는 것처럼 보이는 것은 다른 프로세스와의 컨텍스트 스위칭이 아주 빠른 속도로 실행되기 때문이다. 컨텍스트 스위칭이 자주 발생하면 오버헤드가 발생할 수 있어 성능이 떨어진다.

프로세스의 메모리 영역으로 크게 코드 영역, 데이터 영역, 힙 영역, 스택 영역으로 나누어 저장 됩니다.

코드 영역은 텍스트 영역이라고 부르고 이곳에는 말 그대로 실행할 수 있는 코드, 즉 기계어로 이루어진 명령어가 저장돼요. 코드 영역에는 데이터가 아닌 CPU가 실행할 명령어가 담겨 있기 때문에 쓰기가 금지되어 있다. 다시 말해 코드 영역은 읽기 전용(read-only) 공간이다.

데이터 영역은 잠깐 썼다가 없앨 데이터가 아닌 프로그램이 실행되는 동안 유지할 데이터가 저장되는 공간이다. 이런 데이터로는 전역 변수가 대표적이다.

코드 영역과 데이터 영역은 그 크기가 변하지 않는다. 프로그램을 구성하는 명렁어들이 갑자기 바뀔 일이 없으니 코드 영역의 크기가 변할 리 없다. 그래서 코드 영역과 데이터 영역은 ‘크기가 고정된 영역’이라는 점에서 정적 할당 영역이라고 부른다.

반면 힙 영역과 스택 영역은 프로그램 실행 과정에서 그 크기가 변할 수 있는 영역이기에 두 영역을 동적 할당 영역이라고 부른다.

힙 영역은 프로그램을 만드는 사용자, 즉 프로그래머가 직접 할당할 수 있는 저장 공간이다. 프로그래밍 과정에서 힙 영역에 메모리 공간을 할당했다면 언제가는 해당 공간을 반환해야 한다. 메모리 공간을 반환하지 않는다면 할당한 공간은 메모리 내에 계속 남아 메모리 낭비를 초래한다. 이런 문제를 메모리 누수라고 한다. 많은 개발자가 자주 마주치는 문제 중 하나이다.

스택 영역은 데이터를 일시적으로 저장하는 공간이다. 데이터 영역에 담기는 값과는 달리 잠깐 쓰다가 없어질 값들이 저장되는 공간이다. 이런 데이터로는 함수의 실행이 끝나면 사라지는 매개 변수, 지역 변수가 대표적이다.

일시적으로 저장할 데이터는 스택 영역에 푸쉬 되고, 필요하지 않은 데이터는 POP됨으로써 스택 영역에서 사라진다.

이렇기에 힙 영역과 스택 영역은 실시간으로 그 크기가 변할 수 있어 동적 할당 영역이라고 부른다.

일반적으로 힙 영역은 메모리의 낮은 주소에서 높은 주소로 할당되고, 스택 영역은 높은 주소에서 낮은 주소로 할당 된다. 그래야만 데이터가 쌓여도 새롭게 할당되는 주소가 겹칠 일이 없어진다.

도서 출처 : 혼자 공부하는 컴퓨터 구조+운영체제 / 강민철 / 한빛미디어

profile
개발자를 목표로 열심히 하려고 합니다.

0개의 댓글