[운영체제] 프로세스와 스레드/ 멀티프로세스와 멀티스레드

seeun·2022년 1월 19일
0
post-thumbnail

한 어플리케이션에 대한 작업을 동시에 하기 위해서는 멀티 프로세스, 멀티 스레드가 있다
여기서 다중작업의 개념을 이해할 때 주의할 점은 하나의 CPU에 하나의 프로그램만 실행될 수 있다는 점!
한 순간에 여러가지 일이 아니라, 짧은 전환으로 여러가지 일을 동시에 처리하는 것처럼 보이게 하는 것이다.
동시에 실행이 되는 것처럼 보이기 위해서 실행 단위는 시분할로 cpu를 점유하며 context switching을 한다.
*시분할시스템 : CPU의 작업시간을 여러 프로그램들이 조금씩 나누어 쓰는 시스템

📌프로세스의 개념

프로세스란? 실행 중인 프로그램을 뜻한다.
프로그램이란, 파일이 저장 장치에 저장되어 있지만 메모리에는 올라가 있지 않은 정적인 상태를 말한다.(아직 실행되지 않은 파일 그 자체) 프로그램을 실행하는 순간 해당 파일은 컴퓨터 메모리에 올라가서 실행되고 이 상태의 프로그램을 프로세스라고 한다.

즉, 프로그램은 실행되지 않은 코드 덩어리 파일, 그 프로그램을 실행한 것이 프로세스


📌스레드의 개념

한 프로세스 내에서 동작되는 여러 실행의 흐름으로 프로세스 하나에 자원을 공유하면서 일련의 과정을 여러 개를 실행시킬 수 있는 것을 말한다. (하나의 프로세스는 하나 이상의 스레드를 가진다.)


📌프로세스와 스레드의 작동 방식


프로세스들이 운영체제로부터 별도의 메모리 영역을 할당받은 모습
(이미지 출처: Heee's Development Blog)

프로세스가 메모리에 올라갈 때 운영체제로부터 시스템 자원을 할당받는다. 이 때 운영체제는 프로세스마다 각각 독립된 메모리 영역을 Code/Data/Stack/Heap의 형식으로 할당해 준다. 각각 독립된 메모리 영역을 할당해 주기 때문에 프로세스는 다른 프로세스의 변수나 자료에 접근할 수 없다.(IPC를 사용하여 통신할 수 있긴함)


스레드들이 프로세스의 Code/Data/Heap 메모리 영역을 공유하는 모습
(이미지 출처: Heee's Development Blog)

이와 다르게 스레드는 메모리를 서로 공유할 수 있다.
프로세스가 할당받은 메모리 영역 내에서 Stack 형식으로 할당된 메모리 영역은 따로 할당받고, 나머지 형식으로 할당된 메모리 영역을 공유한다. 따라서 각각의 스레드는 별도의 스택을 가지고 있지만 힙 메모리는 서로 읽고 쓸 수 있게 된다.

💡 다른 자원들은 공유하지만 굳이 스택만 분리해서 사용하는 이유는?

LIFO(Last In First Out) / 후입 선출이라는 스택의 특성과도 연관이 있습니다.
왜냐하면? 코드와 데이터 힙 영역을 공유하는 것에는 큰 문제가 없지만,
스택 영역은 스택이 쌓이면 위에서부터 프로세스가 섞인 채로 순서대로 나오게 되므로
더 복잡해지기 때문에 원활한 실행 흐름을 위해 스택은 따로 독립적으로 존재하게 됩니다.


📌멀티프로세스와 멀티스레드

멀티태스킹이란? 하나의 운영체제 안에서 여러 프로세스가 실행되는 것

1. 멀티프로세스

하나의 컴퓨터에 여러 CPU를 장착하여 하나 이상의 프로세스들을 동시에 처리하는 것(병렬)

멀티프로세스의 장점
안전성이 높다. (독립된 구조기 때문에)

멀티프로세스의 단점
각각 독립된 메모리 영역을 갖고 있어, 작업량 많을수록 오버헤드가 발생한다.(Context Switching으로 인한 성능 저하)

2. 멀티스레드

하나의 프로세스가 여러 작업을 여러 스레드를 사용하여 동시에 처리하는 것

멀티스레드의 장점
1. Context-Switching할 때 공유하고 있는 메모리만큼의 메모리 자원을 아낄 수 있다.
2. 스레드는 프로세스 내의 Stack 영역을 제외한 모든 메모리를 공유하기 때문에 통신의 부담이 적어서 응답 시간이 빠르다.

멀티스레드의 단점
1. 스레드 하나가 프로세스 내 자원을 망쳐버린다면 모든 프로세스가 종료될 수 있다.
2. 자원을 공유하기 때문에 필연적으로 동기화 문제가 발생할 수밖에 없다.

References

profile
🤹‍♂️개발 기록 노트

0개의 댓글