# 프로세스
- 운영체제로부터 자원을 할당받은 작업의 단위
- 현재 실행 중인 프로그램의 인스턴스를 프로세스라고 보면 된다.
- 완전히 독립적이며 *자원을 다른 프로세스와 공유하지 않는다.
(공유하기 위해서는 *IPC 라는 방법을 사용해야 한다.)
- 독립적이기 때문에 다른 프로세스의 Code영역의 함수를 호출할 수 없다.
*자원
- CPU, 주소, Code, Data, Stack, Heap의 구조로 되어 있는 독립적인 메모리 영역
*IPC
- 프로세스 간 통신을 말한다. 프로세스들 사이에 서로 데이터를 주고 받는 행위
# 스레드
- 프로세스 내에서 실행되는 여러 흐름의 단위
- 프로세스가 할당 받은 자원을 이용하여 실행하는 단위
- 프로세스는 안정성 문제 때문에 다른 프로세스의 메모리에 접근할 수 없는데
이러한 프로세스의 한계를 해결하기 위해 만들어진 개념이다.
- 스레드간에 메모리를 공유하며 작동이 가능하다.
(스레드끼리 프로세스의 자원을 공유하면서 프로세스 실행 흐름의 일부가 되는 것)
- 기본적으로 하나의 프로세스에 하나의 스레드가 같이 생성된다.
# 멀티 태스킹
- 컴퓨터에서의 멀티 태스킹이란, 하나의 운영체제에서 동시에 여러개의 프로그램을 실행하여 사용하는 것을 말한다.
(유튜브를 보면서 블로그를 보는 것처럼)
- 사람 눈에는 동시에 처리되고 있는 것 같지만 사실은 아주 빠른 속도로 조금씩 번걸아가면서 작업을 처리하고 있다.
- 멀티 프로그래밍, 시분할, 실시간 시스템 방식으로 스케줄링 된다.
1. 멀티 프로그래밍
- 최대한 CPU를 많이 활용하도록 하는 시스템
- 단일 프로세서 상에서 여러 개의 프로그램이 동시에 실행되는 것
- OS의 통제하에 여러 프로그램이 일부씩 수행하는 것을 아주 빨리하여 동시에 일어나는 것처럼 보인다.
2. 시분할
- 다수의 프로그램이 거의 동시에 수행될 수 있도록 시간을 분할하는 것.
- 사용자의 자원을 위해 컴퓨터 응답 시간을 최소하하는 시스템
3. 실시간
- 데이터가 발생한 시점에서 필요한 계산처리를 즉석에서 처리하여 그 결과를 발생지로 되돌려 보내는 방식
# 멀티 프로세싱
- 여러 CPU에서 하나의 응용프로그램을 병렬로 실행하여 실행속도를 극대화시키는 것.
- 여러 개의 프로세스 중 하나에 문제가 발생 시 해당 프로세스만 종료되고 다른 프로세스는 영향을 받지 않는 장점이 있다.
- *Context Swiching에서 오버헤드가 발생한다.
(캐쉬 메모리 초기화 등 무거운 작업이 진행되어 많은 시간을 소모한다)
(프로세스는 독립적인 메모리 영역을 할당 받고 있어서 캐시에 있는 모든 데이터를 모두 리셋하고 다시 불러와야 한다)
*ContextSwitching
- CPU를 점유하고 있던 프로세스가 할당된 시간을 모두 사용한 후 새로운 프로세스로 교체되는 것.
# 멀티 스레드
- 하나의 프로세스에서 여러개의 스레드를 갖고 하나의 작업을 병렬 처리 하는 것.
- 멀티 프로세싱과 달리 Stack영역만 독립적이고 나머지 영역은 서로 공유하며 쓰기/읽기가 가능하다.
- 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있다.
(멀티 프로세싱의 경우 IPC라는 방법을 이용해야 서로 통신을 할 수 있는데 정보를 주고 받을 때 시스템 콜을 호출한다)
- Stack 영역을 제외하고 모든 메모리를 공유하기 때문에 Context Swiching이 빠르다.
'프로그래밍 > 기본기ㆍ자료구조' 카테고리의 다른 글
C# Random - System.Random (0) | 2021.02.16 |
---|---|
메모리 풀과 오브젝트 풀 (0) | 2021.02.11 |
C# string 비교 == 과 Equals() (1) | 2021.02.05 |
OOP 객체지향 5가지 원칙 (1) | 2021.02.04 |
OOP 객체지향 4가지 특징 (0) | 2021.02.03 |