프로세스와 스레드
*정의
프로세스 : 운영체제에서 시스템 자원(코어, 메모리)을 할당받아 프로그램 코드를 실행하는 작업의 단위.
컴퓨터가 작업중인 프로그램.(실행중인 프로그램)
스레드 : 프로세스가 할당받은 자원을 이용하여 작업을 수행하는 흐름의 단위. 여러개 있을 수 있음.
하나의 프로세스는 기본적으로 하나의 스레드를 가지고 실행.
*프로세스 실행의 구성도
*컨텍스트 스위치
컨텍스트 스위치는 스레드 기준과 프로세스 기준이 있다. (프로세스 컨텍스트 스위치/스레드 컨텍스트 스위치)
cpu의 코어는 한번에 하나의 작업(프로세스 or 스레드)만 수행 할 수있고, 여러개의 작업을 수행해야 할때 "동시성"에 의해 코어가 각 작업들을 번갈아가면서 조금씩 수행한다.
이 과정이 "컨텍스트 스위칭" 이라는 것이다.
즉, 코어가 한 프로세스(스레드)에서 다른 프로세스(스레드)로 전환할 때 발생하는 일련의 과정이다.
컨텍스트 스위칭을 좀더 구체적으로 말하자면, 동작 중인 프로세스가 대기를 하면서 해당 프로세스의 상태(Context)를 보관하고, 대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했던 다음 순서의 프로세스의 상태를 복구하는 작업을 말한다. 이러한 컨텍스트 스위칭이 일어날 때 다음번 프로세스는 스케줄러가 결정하게 된다. 즉, 컨텍스트 스위칭을 하는 주체는 스케줄러이다.
이 과정이 무겁기 때문에 오버헤드가 발생한다.
PCB(TCB)를 저장하고 복원하는데 비용이 발생. *PCB/TCB : 프로세스/스레드 상태정보
프로세스 컨텍스트 스위칭이 일어날 경우, 다른 프로세스의 실행으로 인해 CPU가 새로운 명령어와 데이터를 로드해야 하기 때문에 CPU 캐시 메모리를 초기화 하여야 한다. 이것이 프로세스 컨텍스트 스위칭에 부담이 되는 요소이다.
스레드 컨텍스트 스위칭일 경우, 프로세스 내 스레드 간에 스택과 레지스터 값 등 일부 컨텍스트 정보만 변경되므로 CPU 캐시 메모리는 초기화되지 않는다. 다만 스레드가 다른 CPU 코어에서 실행될 때는 해당 코어의 캐시 메모리에 스레드 컨텍스트 정보가 로드되어야 하므로 초기화될 수 있다.
[코어 갯수만큼만 작업이 있으면 "병렬성"만으로 각 코어가 하나의 작업만을 수행하여 "동시성"없이 즉, 컨텍스트 스위치 없이 동시에 진행 할 수 있음. ]
[참조 문헌]