2024. 11. 4. 00:40ㆍ[Node.js_6기] 스탠다드반
1. 프로세스와 스레드의 기본 개념
운영체제에서 프로세스와 스레드는 중요한 역할을 담당한다. 프로세스는 실행 중인 프로그램을 의미하며, 독립된 메모리 공간을 가진다. 스레드는 프로세스 내에서 실행되는 단위로, 프로세스의 자원을 공유하면서 동시에 여러 작업을 수행할 수 있다.
프로세스는 각각 독립된 메모리 공간을 가지기 때문에, 프로세스 간의 자원 공유는 IPC(Inter-Process Communication)를 통해 이루어진다. 반면, 스레드는 같은 프로세스 내에서 Stack만 따로 할당 받고, Code/Data/Heap에 해당하는 메모리 영역을 공유하기 때문에 데이터 공유가 용이하다.
만약 프로세스를 여러개 실행하던 중, 하나의 프로세스가 오류로 인해 강제로 종료된다면 다른 프로세스들에 영향이 있을까? 공유하고 있는 파일이 손상된 것이 아니라면 아무런 영향을 주지 않는다. 각자 독립적인 메모리 공간을 사용하기 때문이다.
그러나 스레드는 프로세스와 달리 영향을 받는다. Code/Data/Heap 메모리 영역의 내용을 공유하는 만큼, 하나의 스레드가 오류로 인해 강제 종료된다면 같은 프로세스 내의 다른 스레드 모두 영향을 받아 강제로 종료된다.
- 프로그램: 파일이 저장 장치에 저장되어 있지만, 메모리에 올라가 있지는 않은 정적인 상태
- 프로세스: 프로그램 실행을 위해 운영체제로부터 자원을 할당받은 작업의 단위
- 스레드: 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위
- 운영체제의 최소 작업 단위: 프로세스
- CPU의 최소 작업 단위: 스레드
2. 운영체제의 스케줄링
CPU는 여러개의 프로세스를 동시에 실행할 수 없기 때문에, 운영체제는 멀티태스킹(Multi tasking)과 스케줄링 기법으로 여러개의 프로세스가 동시에 실행되는 것처럼 보이게 한다.
스케줄링 기법은 프로세스들 사이에 우선순위를 관리하는 작업이다. 메모리에 여러 개의 프로세스를 올려놓고, 스케줄링 알고리즘에 따라 CPU 사용 시간을 적절히 분배하여 실행할 수 있게 한다. 스케줄링 알고리즘은 선입선출 방식의 FIFO (First In First Out), 최단 작업 우선의 SJF (Shortest Job First), 다단계 큐 방식의 MLQ (Multi-Level Queue) 등이 있다.
스케줄링은 목적을 구체적으로 정리하자면 하기와 같다.
- 공평성: 프로세스에게 자원을 배분하는 과정이 공평해야 한다.
- 효율성 : 시스템 자원이 쉬는 시간이 없어야 한다.
- 안정성 : 중요 프로세스들은 우선권을 주어야 하며, 프로세스가 증가해도 안정적으로 돌아가야 한다.
- 확장성: 시스템 자원이 늘어나는 경우 이 혜택이 시스템에 반영되어야 한다.
- 반응 시간 보장: 프로세스의 요구가 있을 경우, 적절한 시간 안에 반응을 해줘야 한다.
- 무한 연기 방지: 특정 프로세스의 작업이 무한정 연기되지 않게 한다.
3. 컨텍스트 스위칭
여러개의 프로세스가 실행되고 있을 때, 기존에 실행되고 있던 프로세스를 중단하고 다른 프로세스를 실행하는 것을 컨텍스트 스위칭이라고 한다. ms의 짧은 시간 단위로 이루어지는 작업인 만큼, 여러개의 프로세스가 동시에 실행되고 있는 것처럼 보이게 할 수 있다. 다만 과도하게 사용될 경우 캐시 미스, 오버헤드 등 성능에 악영향을 미치기 때문에 주의해야 한다.
PCB(Process Context/Control Block)이라고 하는 메모리의 별도 공간에 프로세스의 상태값을 저장하고, 해당 값들을 찾는 방법으로 구현된다.
- 현재 실행 중인 프로세스의 정보를 PCB에 업데이트 후 메인 메모리에 저장한다.
- 다음에 실행할 프로세스의 정보를 메인 메모리에서 가져와 CPU 레지스터에 넣고 실행한다.
컨텍스트 스위칭이 발생하는 원인은 크게 3가지를 들 수 있다.
- Time Quato Expiry: 주어진 quantum(time slice)의 시간이 다 되어서
- Interrupt: 커널 함수를 통해서 프로그램 실행 도중에 멈춰버려서 (SIGKILL interrupt signal)
- Preemption: 더 우선순위가 높은 일을 해야 할 때 선점해버려서
참고자료:
https://f-lab.kr/insight/process-and-thread-differences
https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html
https://hyunie-y.tistory.com/31
https://engineerinsight.tistory.com/284
'[Node.js_6기] 스탠다드반' 카테고리의 다른 글
메모리와 주소공간이란? (1) | 2024.10.17 |
---|---|
CPU란? - 기본 개념부터 세부 장치까지 (0) | 2024.10.14 |
OSI 7계층 자세히 알아보기 - 애플리케이션(응용 프로그램) 계층 (0) | 2024.09.27 |
OSI 7계층 자세히 알아보기 - 전송 계층 (2) | 2024.09.23 |
OSI 7계층 자세히 알아보기 - 네트워크 계층 (1) | 2024.09.09 |