program이 memory에 적재되어 CPU를 할당받아 실행되는 것
실행파일 형태로 존재하는 program이 CPU에 의해 실행(연산)됨
→ 여기서 program이란 단순히 명령어 리스트를 포함하는 파일
memory는 CPU가 직접 접근할 수 있는 유일한 기억장치.따라서 CPU에서 program이 실행되려면 memory에 필요한 내용이 적재되어야한다.
영역 | 역할 |
---|---|
Code | 프로그램의 코드가 저장됨 |
Data | 전역변수, static (정적) 변수가 저장됨 |
Heap | 직접 memory 공간 할당(malloc)/해제(free) 시 사용 |
Stack | 지역변수, 매개변수, 리턴값을 임시 저장함 |
thread는 process 내에서 실행되는 동작(function)의 단위이다.
main thread를 포함해 process마다 최소 1개의 thread를 소유한다.
각 thread는 속해있는 상위 process의 stack 메모리(고유)를 제외한 나머지 memory 영역을 공유한다.
독립적인 기능 → 독립적으로 함수를 호출 ( 각 stack memory가 독립적인 이유 )
2개 이상의 process가 동시에 실행되는 것.
CPU core 1개는 한번에 하나의 process만 실행 가능하다.
“동시에”는 2가지 의미를 내포.
동시성(concurrency)
- CPU core가 1개일 때, 여러 process를 짧은 시간동안 번갈아 가면서 연산하는 시분할 시스템으로 실행되는 것
→ 이는 context switching을 활용
병렬성(parallelism)
- CPU core가 여러개일 때, 각각의 core가 각각의 process를 연산함으로써 process가 동시에 실행
process 를 생성하고 자원을 할당하는 시스템 콜 자체가 처리비용이다.
하나의 process가 동시에 여러개의 일을 수행할 수 있도록 하는 것.
실행된 program에서 필요한 여러 작업들을 병렬로 처리하기 위함.
thread들은 stack 메모리를 제외한 (code, data, heap)영역을 공유한다.
메모리 구분, 안정성이 필요 - Multi Process
context switching이 자주 일어나고 데이터 공유가 빈번 - Multi Thread
Multi Thread
는 Multi Process 보다 적은 메모리 공간을 차지하고 Context Switching이 빠른 장점이 있지만, 동기화 문제(Thread간의 자원공유는 전역 변수를 이용하기 때문)와 하나의 Thread 장애로 전체 Thread가 종료 될 위험을 갖고 있다.Multi Process
는 하나의 Process가 죽더라도 다른 Process에 영향을 주지 않아 안정성이 높지만, Multi Thread보다 많은 메모리공간과 CPU 시간을 차지하는 단점이 있다.- 두 방법은 동시에 여러 작업을 수행하는 점에서 동일하지만, 각각의 장단이 있으므로 적용하는 시스템에 따라 적합한 동작 방식을 선택하고 적용해야 한다.