Computer Science/OS

[OS] 프로세스(Process)와 스레드(Thread)

꽁치_로그 2022. 8. 13. 21:49
프로세스(Process)

프로세스운영체제에 의해 연속적으로 실행되고 있는 프로그램을 의미합니다.

프로그램 실행 시 운영체제가 메모리 위에 프로세스를 생성하게 되며 운영체제에 의해 CPU, 메모리 자원을 할당받게 됩니다.

프로세스는 독립된 메모리 영역으로 Code, Heap, Data, Stack을 할당받습니다.

Code : 개발자가 작성한 코드
Data : 전역변수, 정적변수, 배열, 구조체 등 프로그램이 실행되면서 생기는 정적인 데이터
Stack : 
함수 호출과 관련된 정보(실행정보, 지역변수, 파라미터 등)이 저장됩니다. 일반적으로 컴파일 타임에 Stack의 크기가 결정됩니다.
Heap : 런타임에 동적으로 메모리를 처리해야 하는 상황에서 사용되는 공간입니다.
ex) Array를 사용하거나 외부 파일을 읽을때
※  Stack Overflow

Stack의 경우 컴파일 타임에 크기가 결정되기 때문에 런타임에 과도한 함수 호출에 의해 Stack에 많은 데이터가 저장되게 되면 Stack의 메모리가 초과가 되고 이로 인해 Stack Overflow가 발생되게 됩니다. 

즉, 함수에 너무 큰 지역변수를 선언하거나 재귀적으로 무한정 함수를 호출하게 될 때 발생합니다.


스레드(Thread)

스레드(Thread)특정한 시점에 프로그램의 작업을 수행하는 역할을 합니다. 일반적으로 프로세스 안에서 실제 코드를 실행하는 단위라고 보면 됩니다.

스레드는 CPU 이용의 기본 단위입니다. 1개의 스레드 작업은 1개의 CPU 코어에 할당되게 됩니다.

스레드가 실행되기 위해서는 자원(함수 실행 정보, 지역 변수 등)을 저장할 메모리가 필요하며, 이는 프로세스가 할당받은 메모리를 사용합니다.

스레드는 프로세스 내에 존재하기에 프로세스의 자원을 공유하게 됩니다. 각각의 스레드는 별도의 Stack을 가지고 있으며 나머지 자원(Code, Data, Heap)을 공유합니다. 

만약 여러 스레드가 실행된다면 프로세스의 자원을 공유하기에 빠르게 자원을 가져다 쓸 수 있습니다. 반면 프로세스가 다른 프로세스의 자원을 사용하기 위해서는 IPC(Inter-Process Comunication)라는 방식을 사용해야 합니다.

우리가 개발한 프로그램을 실행하면 일반적으로 1개의 프로세스와 1개의 Main Thread를 가지게 됩니다.

그러나 프로그램이 해야 할 Task들이 많아지면 자연스럽게 여러 개의 스레드를 동시에 실핼할 수 있으며, 혹은 여러 개의 프로세스를 동시에 운영할 수도 있습니다. (Multi Threading, Multi Processing)

 

 

 

반응형