키워드 정리
- 실행 단위 : cpu core에서 실행하는 하나의 단위로 프로세스와 스레드를 포괄하는 개념
- (부연 설명이 없는) 프로세스 : 하나의 스레드만 가지고 있는 단일 스레드 프로세스
- 동시성 : 한 순간에 여러가지 일이 아니라, 짧은 전환으로 여러가지 일을 동시에 처리하는 것처럼 보이는 것
1. Process vs Thread
프로그램과 프로세스
- 프로그램 : 코드 파일 (ex. 피자의 레시피)
- 프로세스 : 코드 파일을 실행하는 과정 (ex. 피자) / 프로그램을 메모리 상에서 실행중인 작업
- 프로세스는 각각 별도의 주소공간 할당 (독립적이다.)
프로그램이 프로세스가 되면서 일어나는 일
- 프로세스가 필요로 하는 것들이 메모리 영역에 올라간다.
- Code : 실행 명령을 포함하는 코드들
- Data : Static 변수 혹은 Global 변수
- Heap : 동적 메모리 영역
- Stack : 지역변수, 매개변수, 반환 값 등등 일시적인 데이터
- 해당 프로세스에 대한 정보를 담고 있는 PCB 블럭이 프로세스 생성시 함께 만들어진다.
- Pointer : 프로세스상태 중에 준비상태나 대기상태의 큐를 구현하기 위해 필요
- Process State : 현재 프로세스 상태
- PID : 고유번호
- Program Counter : 다음 명령어를 가리킨다

Process Management
- 프로세스가 여러개일 때, CPU가 CPU 스케쥴링을 통해 관리하는 것을 말한다.
- 이때 CPU는 각 프로세스들이 누군지 알아야 관리가 가능하다.
- 프로세스들의 특징을 갖고있는 것이 바로 Process Metadata이다.
- 이 메타데이터는 프로세스가 생성되면 PCB 이라는 곳에 저장된다.
PCB가 필요한 이유
- CPU에서는 프로세스의 상태에 따라 교체작업이 이루어진다. (interrupt가 발생해서 할당받은 프로세스가 waiting 상태가 되고 다른 프로세스를 running으로 바꿔 올릴 때)
- 이때, 앞으로 다시 수행할 대기중인 프로세스에 관한 저장 값을 PCB에 저장해둔다.
- PCB는 Linked List 방식으로 관리한다.
- 이렇게 수행 중인 프로세스를 변경할 때, CPU의 레지스터 정보가 변경되는 것을 Context Switching이라고 한다.
Context Switching
- 프로세스의 상태 정보를 저장하고 복원하는 일련의 과정
- 보통 interrupt가 발생하거나, 실행중인 CPU 사용 허가시간을 모두 소모, 입출력을 위해 대기해야 하는 경우에 발생한다.
- 즉, 동작 중인 프로세스가 대기하면서 해당 프로세스의 상태를 PCB에 보관하고, 대기하고 있던 다음 순번의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 과정을 말한다.
- 프로세스는 각 독립된 메모리 영역을 할당받아 사용되므로, 캐시 메모리 초기화같은 무거운 작업이 진행되었을 때 오버헤드가 발생할 문제가 존재한다.

프로세스와 쓰레드
- 프로세스 : 프로그램을 메모리 상에서 실행중인 작업
- 스레드 : 프로세스 안에서 실행되는 여러 흐름 단위

- 기본적으로 프로세스마다 최소 1개의 스레드 보유
- 스레드는 Stack만 따로 할당 받고 나머지 영역은 서로 공유한다
- 프로세스는 자신만의 고유 공간과 자원을 할당받아 사용하는데 반해, 스레드는 다른 스레드와 공간, 자원을 공유하면서 사용하는 차이가 존재한다.
2. 멀티 프로세스
- 하나의 프로그램을 여러개의 프로세스로 구성하여 각 프로세스가 병렬적으로 작업을 수행하는 것
- ex) 여러 사용자가 로그인을 요청하는 경우
- 장점 : 안전성 (메모리 침범 문제를 OS 차원에서 해결)
- 단점 : 각각 독립된 메모리 영역 갖고 있어, 작업량 많을 수록 오버헤드 발생. Context Switching으로 인한 성능 저하

멀티 프로세스 특징
- 각 프로세스는 독립적이다.
- IPC를 사용한 통신
- 자원 소모적이며 개별 메모리를 차지한다
- Context Switching 비용이 크다
- 동기화 작업이 필요하지 않다.
3. 멀티 스레드
- 하나의 프로그램에서 여러 스레드를 구성해 각 스레드가 하나의 작업을 처리하는 것
- 스레드들이 공유 메모리를 통해 다수의 작업을 동시에 처리하도록 해줌
- ex) 인텔리제이 내에서 코드를 수정함과 동시에 추천 코드를 보여주는 일
- 장점 : 독립적인 프로세스에 비해 공유 메모리만큼의 시간, 자원손실이 감소. 전역 변수와 정적 변수에 대한 자료 공유 가능
- 단점 : 안전성 문제. 하나의 스레드가 데이터 공간을 망가뜨리면, 모든 스레드가 작동 불능 상태 (공유 메모리를 갖기 때문)

멀티 스레드 특징
- 스레드끼리 긴밀하게 연결되어 있다
- 공유된 자원으로 통신 비용 절감 및 메모리가 효율적으로 관리
- Context Switching 비용이 적다
- 공유 자원 관리를 해야한다.
4. 멀티 코어
- 병렬처리 : 물리적으로 여러 코어를 사용해서 다수의 실행 단위를 한 순간에 처리할 수 있게 해준다.
동시성 vs 병렬처리
동시성 : 하나의 코어에서 하나 이상의 프로세스(혹은 스레드)가 번갈아가면서 진행되지만 동시에 진행되는 것처럼 보이는 것

병렬처리 : 둘 이상의 코어에서 동시에 하나 이상의 프로세스(혹은 스레드)가 한꺼번에 진행되는 것

출저
https://www.youtube.com/watch?v=1grtWKqTn50
'그 외' 카테고리의 다른 글
Rest API VS. GraphQL (0) | 2024.03.27 |
---|---|
AJAX (Asynchronous Javascript And XML) (0) | 2023.01.31 |