You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
코드(Code) 영역
- 실행할 프로그램의 코드 및 매크로 상수가 기계어 형태로 저장되는 영역
- CPU는 Code영역에 저장된 명령어를 하나씩 처리함
데이터(Data) 영역
- 코드에서 선언한 전역 변수와 정적(static) 변수가 저장되는 영역
- 데이터 영역은 프로그램의 시작과 함께 할당되어 종료될 때 소멸
staticintROW = 10;
스택(Stack) 영역
- 함수 내에서 선언된 지역변수, 매개변수, 리턴값 등이 저장되는 영역
- 함수 호출시 기록하고 함수의 종료와 함께 제거됨
privatevoidtest() {
intv1 = 20;
if (v1 == 20) {
intv2 = 100;
Stringstr = "abc";
}
}
힙(Heap) 영역
- 관리가가능한 데이터 외의 다른 형태의 데이터를 관리하기 위한 공간
- 동적 메모리 할당 공간으로 사용이 끝나면 운영체제가 사용할 수 있도록 반납해야 함(GC)
- 동적 메모리 할당은 어느 시점에 어느 정도의 공간을 할당할 수 있을지 정확히 예측할 수 없고, 런타임에 확인 가능
int[] arr = newint[5];
List<Integer> list = newArrayList<>();
프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap)을 할당 받음
기본적으로 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있음
각 프로세스는 별도의 주소 공간에서 실행되며, 서로 다른 프로세스간의 변수나 자료구조에 접근할 수 없음
멀티 프로세스(Multi Process)
하나의 애플리케이션을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하는 과정
장점
여러 개의 프로세스 중 하나의 프로세스에 문제가 발생하더라도 다른 프로세스에 영향이 가지 않음
각 프로세스들이 독립적으로 동작하며 자원이 서로 다르게 할당됨
구현이 비교적 간단함
단점
메모리 사용량이 많음
*Context Switching과정에서 캐쉬 메모리 초기화 등 무거운 작업이 실행되고, 많은 시간이 소모되는 오버헤드 발생
*Context Switching: CPU는 한 번에 한 개의 일만 처리가 가능한데, 동시가 아닌 재빠르게 프로세스들을 번갈아가며 실행하고 관리함
실제 프로세스들은 동시에 작업을 하는 것 처럼 보이지만, 상상 이상으로 빠른 CPU로 인해 프로세스들을 번갈아가며 실행한다.
이를 *Context Switching 이라고 한다.
즉 Context Switching란? CPU에서 여러 프로세스들을 번갈아가며 작업을 처리하는 과정
1) 동작 중인 프로세스가 대기를 하면서 해당 프로세스의 상태(Context)를 보관하고
2) 대기중인 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업
스레드(Thread)
프로그램(프로세스) 내에서 실행되는 흐름의 단위
프로세스가 할당받은 자원을 이용하는 실행의 단위
프로그램은 둘 이상의 스레드를 동시에 실행할 수 있음(멀티스레드)
스레드는 프로세스 내에서 Stack만 따로 할당을 받고, Code, Data, Heap 영역은 공유함
스레드는 한 프로세스 내에서 동작되는 여러 실행 흐름으로, 프로세스 내의 주소공간이나 자원(Code, Data, Heap)을 공유
같은 프로세스에 있는 여러 스레드들은 같은 Heap 공간을 공유하는 반면 프로세스는 다른 프로세스의 메모리에 접근할 수 없음
멀티 스레드(Multi Thread)
하나의 애플리케이션을 여러 스레드로 구성하여 하나의 스레드가 하나의 작업을 처리하도록 하는 과정
윈도우나 리눅스 등의 많은 OS에서 멀티 스레딩을 기본으로 하고있음
장점
시스템 자원 소모(자원 효율성 증가)
프로세스와는 달리 메모리를 공유하므로 스레드간 데이터를 주고받는게 간단함
시스템콜이 줄어들어 자원을 효율적으로 관리할 수 있음
시스템 처리량 증가(처리 비용 감소)
스레드 사이의 작업량이 작아 Context Switching이 빠름
단점
구현 및 테스트, 디버깅이 어려움
자원을 공유하는 문제가 발생함(동기화 문제)
하나의 스레드에 문제가 발생하면 전체 프로세스가 영향을 받음
스레드의 Context Switching vs 프로세스의 Context Switching
스레드 Switching은 동일한 프로세스내 한 스레드에서 다른 스레드로 Context Switching)
프로세스의 Switching은 프로세스간 Switching
스레드의 Switching의 경우 가상 메모리 공간이 동일하게 남는 반면에 프로세스의 Switching의 경우 그렇지 않음
요약
스레드는 프로세스의 자원을 공유하여 사용하고 프로세스가 바뀌지 않는 이상 데이터가 남아있기 때문에 그대로 사용이 가능한 반면,
프로세스가 변경하게 되면 cache의 정보, 가상 메모리 등의 정보가 모두 지워지기 때문에 데이터 접근이 오래 걸림
📝 프로세스(Process)와 스레드(Thread)
프로세스(Process)
macOS 운영체제에서 실행되고 있는 프로세스 목록
멀티 프로세스(Multi Process)
장점
단점
스레드(Thread)
멀티 스레드(Multi Thread)
장점
단점
스레드의 Context Switching vs 프로세스의 Context Switching
요약
프로세스가 변경하게 되면 cache의 정보, 가상 메모리 등의 정보가 모두 지워지기 때문에 데이터 접근이 오래 걸림
References
The text was updated successfully, but these errors were encountered: