본문 바로가기

STUDY/컴퓨터 구조

[Context Switching] 프로세스와 쓰레드에서의 컨텍스트 스위칭

* 프로세스란? 

실행파일을 클릭했을 때, 메모리(RAM)할당이 이루어지고, 이 메모리공간으로 코드가 올라간다. 이 순간부터 이 프로그램은 '프로세스'라 불리게 된다. 


* 프로세스의 스케줄링? 

CPU는 하나인데, 동시에 여러 프로세스가 실행되어야한다. CPU는 여러개의 프로세스를 번갈아가면서 실행하는데  매우 고속이기 때문에 우리 눈에는 동시에 실행되는 것처럼 보인다. 이러한 멀티프로세스 운영체제에서 프로세스의 CPU 할당 순서 및 방법을 결정짓는 것을 '스케줄링'이라 한다. 


* 프로세스의 상태변화? 

프로세스는 Ready, Running, Blocked 상태를 지닌다. Running 상태인 프로세스는 더 우선순위가 높은 프로세스가 실행될 경우 Ready 상태가 되고, 우선순위가 높은 프로세스가 실행된다. Blocked상태에 있는 프로세스는 스케줄러의 관심 밖에 있어서 스케줄러에 의해 선택이 되지 않는 프로세스이다. 


* 컨텍스트 스위칭(Context Switching)

     : CPU내에 존재하는 레지스터들은 현재 실행중인 프로세스 관련 데이터들로 채워진다. 

실행중인 프로세스가 변경이 되면, CPU내 레지스터들의 값이 변경되어야 하는데, 변경되기 전에 이전 프로세스가 지니고 있던 데이터들을 어딘가에 저장해 주어어야 한다.( 이어서 실행하기 위해 ). 그리고 새로 실행되는 프로세스가 아니라면 이전에 실행될 때 레지스터들이 지니고 있던 데이터들을 불러와서 이어서 실행해야 한다. 이 과정이 컨텍스트 스위칭이다. 

실행되는 프로세스의 변경 과정에서 발생하는 컨텍스트 스위칭은 시스템에 많은 부담을 준다.

레지스터 개수가 많을수록, 프로세스별로 관리되어야할 데이터 종류가 많을수록 더 부담이 된다.

컨텍스트 스위칭에 소요되는 시간을 줄이려면 저장하고 복원하는 컨텍스트 정보의 개수를 줄여주면 된다. 


* 메모리 구조 관점에서 본 프로세스와 쓰레드

: 자식 프로세스가 생성되고 난 다음에는 부모프로세스가 가진 핸들테이블은 상속되지만 모든것(Code/data/heap/stack영역) 이 독립적으로 만들어진다. 이러한 메모리 구조를 지녔기에, 프로세스간에 데이터를 주고받기 위해서는 IPC(Inter Process Communication)가 필요하다.

하지만 쓰레드를 생성하는 경우 메모리 구조는 다르다. 

프로세스가 쓰레드A와 B를 생성한 경우 쓰레드를 생성할 때마다, 해당 쓰레드만을 위한 ThreadStack영역(실행 흐름의 추가를 위한 최소조건)만이 생성될 뿐, 나머지 영역(Code, Data, Heap)은 부모 프로세스 영역을 공유하고 있다. 쓰레드마다 스택을 독립적으로 할당해준다. 


* 컨텍스트 스위칭이 빨라진 쓰레드와 캐쉬 적중

: 쓰레드는 공유하는 영역이 많기 때문에 컨텍스트 스위칭이 빠르다.

 캐쉬는 CPU와 메인메모리 사이에 위치하며 CPU에서 한번 이상 읽어들인 메모리의 데이터를 저장하고 있다가, CPU가 다시 그 메모리에 저장된 데이터를 요구할 때, 메인메모리를 통하지 않고 데이터를 전달해 주는 용도이다. 

프로세스 컨텍스트 스위칭이 일어났을 경우, 공유하는 데이터가 없으므로 캐쉬가 지금껏 쌓아놓은 데이터들이 무너지고 새로 캐쉬정보를 쌓아야 한다. 이것이 프로세스 컨텍스트 스위칭에 부담이 되는 요소이다. 

반면, 쓰레드라면 저장된 캐쉬 데이터는 쓰레드가 바뀌어도 공유하는 데이터가 있으므로 의미있다. 그러므로 컨텍스트 스위칭이 빠른 것이다. 

'STUDY > 컴퓨터 구조' 카테고리의 다른 글

빅오(Big-O) 표기법  (0) 2018.03.12
컴퓨터 구조 1  (0) 2018.01.05