프로그램
- 컴퓨터의 CPU에게 시킬 명령들을 프로그래밍 언어로 적어놓은 파일
- 명령어들의 조합
- 프로그램은 정적인 개념으로 저장매체(HDD, SDD)에 저장된 실행 파일을 의미한다.
프로세스
- CPU(프로세서)에 의해 실행되고 있는 프로그램이다.
- 프로세스는 최소 1개의 스레드가 존재한다.
- OS는 Virtual Memory(제한된 공간)(1차 메모리 RAM + 2차 메모리 HDD)를 프로세스에 할당한다.
- JVM이 실행되어 컴파일러에 의해 변환된 바이트코드가 메모리 상에 올라갔을 때 "프로세스가 실행 중이다"라고 한다.
- 프로그램이 메모리 상에 올라와 컴퓨터의 자원(메모리, CPU)을 할당받아 실행중인 것을 의미한다.
멀티 태스킹
- 하나의 CPU에서 여러 응용 프로그램이 동시에 실행되는 것처럼 보이도록 하는 시스템이다.(시분할)
컨텍스트 스위칭
- 프로세스들을 ms 단위까지 잘게 쪼개서 여러 프로세스를 번갈아가며 실행 시키는 과정을 컨텍스트 스위칭이라고 한다.
- 컨텍스트 스위칭을 하고 프로세스가 다시 실행이 될 때 어디서부터 다시 실행하는지(PC, SP 정보), 프로세스의 상태(생성, 준비, 실행, 대기, 종료) 등을 알아야 한다. 그래서 이 정보들을 PCB라는 메모리 공간에 저장을 해두고 컨텍스트 스위칭을 할 때마다 여기서 읽어오게 된다.
멀티 태스킹의 한계
- 하나의 프로세스가 동시에 여러 작업을 수행하지 못한다.
- 프로세스의 컨텍스트 스위칭은 무거운 작업이다.
- 프로세스끼리 데이터 통신이 까다롭다. (프로세스는 독립적인 메모리 공간을 가지기 때문)
- 듀얼 코어 CPU가 등장했지만 잘 활용하지 못한다.
* 이러한 단점을 보완하기 위해 나온 것이 스레드라는 개념이다.
스레드
- 적은 범위에서 얘기하면 스레드는 프로스세 내에서 실행되는 작업 흐름의 단위를 말한다. 더 확장되어 CPU에서 실행되는 단위이다.
- 프로세스는 두개 이상의 스레드를 가질 수 있기 때문에 병렬적으로 작업을 처리할 수 있다.
- 같은 프로세스에 있는 스레드들끼리 컨텍스트 스위칭이 가볍다.
- 메모리 영역(Code, data, Heap)을 공유하기 때문에 메모리가 효율적이고, 같은 프로세스에 있는 스레들끼리 컨텍스트 스위칭 비용이 적으며 통신 비용도 절감된다.
스레드의 단점
- 스레드 중 한 스레드만 문제가 있어도, 전체 프로세스가 영향을 받는다.
- 멀티 프로세스 환경에서는 하나의 프로세스가 죽어도 다른 프로세스에 대부분의 경우 영향을 미치지 않는다. (크롬 브라우저)
하지만 멀티 스레드의 경우 하나의 스레드가 죽으면 전체 프로세스가 죽는 경우가 많다. (익스플로러 브라우저)
- 멀티 프로세스 환경에서는 하나의 프로세스가 죽어도 다른 프로세스에 대부분의 경우 영향을 미치지 않는다. (크롬 브라우저)
- 동기화 이슈로 비정상적으로 동작 가능
- 스레드의 가장 큰 단점이다. 데이터를 공유하기 때문에 두 개 이상의 스레드가 하나의 데이터에 접근하려고 할 때 우리가 기대한 동작과는 다르게 동작하는 상황이다.
멀티 스레드
- 하나의 프로세스가 동시에 여러 개의 스레드를 수행할 수 있도록 해주는 것이다.
- 프로세스는 데이터, 힙, 스택 영역을 공유하지 않지만 스레드는 스택 영역을 제외한 데이터, 힙 영역을 공유하기 때문에 메모리 부분에서도 훨씬 효율적이다.
멀티 프로세싱
- 두 개 이상의 프로세서(CPU)가 하나 이상의 작업(Task)을 동시에 처리하는 것이다.(병렬처리)
- 각 프로세스 간 메모리 구분이 필요하거나 독립된 주소 공간을 가져야 할 경우 사용한다.
- 프로세스 중 하나에 문제가 생겨도 다른 프로세스에 영향을 주지 않아, 작업 속도가 느려질 수는 있지만 정지되는 문제는 발생하지 않는다.
멀티 코어
이 글은 아래 영상을 보고 정리하는 글 입니다.
'Development > OS' 카테고리의 다른 글
스레드의 종류 (0) | 2023.02.12 |
---|