프로세스
프로세스란 메모리에 적재되어 실행되고 있는 프로그램의 인스터스다.
프로세스는 각각 독립적인 메모리 영역을 할당받는다.
즉 각각의 프로세스는 실행 메소드 영역인 Code 영역, 정적 변수 static이나 글로벌 변수를 담는 Data 영역, 동적 메모리를 위한 Heap 영역, 지역변수 매개변수 반환 값을 담는 Stack 영역이 메모리 공간을 확보한다.
또한 해당 프로세스에 대한 정보를 담고 있는 PCB 블록 또한 만들어진다.
PCB 블록은 해당 프로세스 상태 정보인 process state, 고유번호 PID, 그리고 다음 명령어를 가리키는 프로그램 카운터 등이 담겨져있다.
기본적으로 프로세스는 최소 1개의 메인스레드를 가진다.
각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다.
한 프로세스가 다른 프로세스의 자원에 접근하려면 IPC를 사용해야 한다.
하지만 IPC 는 자원을 많이 잡아먹는다는 단점이 있다.
스레드
스레드는 한 프로세스 내에서 실행되는 흐름의 단위이다.
스레드는 프로세스가 할당받은 자원을 공유하며, 독립적인 스택영역을 가진다.
즉 스레드끼리는 Code, Data, Heap 메모리 영역을 공유하며 사용한다.
때문에 멀티 스레드 동시접속과 같은 일이 발생하면, 데이터의 유효성이 위반되는 경우가 있다.
멀티 프로세스
말 그대로 하나의 응용프로그램을 여러 프로세스로 나누어 작업하는 형식을 의미한다.
멀티 프로세스의 장점은 하나의 프로세스가 장애가 일어나면, 해당 프로세스만 종료하면 된다는 장점이 있다.
하지만, Context Switching 과정에서 오버헤드가 발생한다.
프로세스는 각각 독립적인 메모리 영역을 관리하며 CPU 자원은 하나의 프로세스에 할당되기 때문에 다른 프로세스로 작업을 옮길 때, 모든 데이터를 저장하고, 리셋하며 불러와야 하기 때문에 이는 오버헤드로 이어질 수 있다.
멀티 스레드
멀티 스레드는 하나의 응용프로그램을 여러 스레드로 나누며, 하나의 스레드 당 하나의 작업을 하는 형식을 의미한다.
스레드는 공유된 메모리 영역이 있고 stack 영역만 별도로 할당받기 때문에 Context Switching 의 부담이 훨씬 줄어든다.
또한 스레드 간 데이터 처리가 빠르기 때문에, 전체적인 데이터 처리량이 증가한다는 장점이 존재한다.
하지만 공유된 메모리 영역을 관리하기 때문에, 데이터 동기화 처리를 별도로 해주어야 한다.
임계 영역에 동시에 접속해, 데이터를 처리한다면 데이터 일관성이 무너질 것이다.
때문에 임계영역을 정확히 파악하고 이를 동기화 처리해주어야 한다.
이러한 동기화 처리 때문에 병목현상이 발생할 수 있다.
작업순서 처리를 위한 과도한 락처리는 병목현상을 발생하고, 이는 전체 시스템 성능 저하로 이뤄진다.
때문에 적절한 임계영역 구분과 필수적인 동기화 처리만 진행한 후, 나머지 부분 비동기처리를 통해 스레드가 계속 대기상태에 빠지는 현상을 방지해야한다.
동기화 방법으로는 Mutex, Semaphore 등 다양한 방법이 존재한다.
'개인 공부' 카테고리의 다른 글
[운영체제] 데드락 (0) | 2023.11.07 |
---|