프로세스와 스레드

 

프로세스는 실행 중인 프로그램으로 디스크로부터 메모리에 적재되어 CPU를 할당 받으며 프로그램을 실행한다. 운영체제로부터 주소 공간, 메모리 등을 할당 받으며 운영체제는 프로세스를 관리하기 위해 프로세스마다 PCB(Process Control Block)를 생성하는데 프로세스 전환시 필요한 정보들을 저장해둔다.

 

스레드프로세스의 실행 단위(CPU 수행 단위)하나의 프로세스 내에는 여러 개의 스레드를 생성할 수 있다.

스레드는 프로세스의 Code, Data 영역, OS 자원과 같은 공통 자원을 공유하면서 독립적으로는 Stack 영역과 PCB에 현재 코드의 어느 부분을 실행하고 있는지를 가르키는 PC(Program Counter), 레지스터 값들을 가지고 있는다.

프로세스의 공통 자원 공유를 통해 여러 개의 프로세스를 생성하지 않고 자원을 효율적으로 사용할 수 있으며 프로세스 컨텍스트 스위칭에 비해 오버 헤드가 줄어든다. (프로세스 간 컨텍스트 스위칭과 달리 캐시 메모리를 비울 필요가 없다.)

 

멀티 스레드프로세스 내의 공간을 공유하고 Heap 영역을 통해 스레드 간에 데이터도 주고 받을 수 있어 프로세스 간에 통신보다 훨씬 간단하다. 하지만 여러 스레드가 하나의 프로세스 공간을 공유하기 때문에 다른 스레드에서 사용중인 변수나 자료구조에 접근해서 문제를 일으킬 수가 있다. 그래서 동기화 작업을 통해 작업 처리 순서와 공유 자원에 대한 접근을 컨트롤해야 되는데 이 경우에도 과도한 제한으로 인해 병목 현상의 위험이 있다. 그리고 하나의 스레드에 문제가 발생할 경우 위험이 전파되는 등의 단점도 있기 때문에 멀티 프로세스 방식과 상황에 따라 적합한 방식을 사용해야 한다.

 

'CS' 카테고리의 다른 글

[운영체제] 가상 메모리  (0) 2023.04.05
[운영체제] 프로세스  (0) 2022.12.02
컴퓨터 구조와 운영체제  (0) 2022.12.01
컴퓨터 구조  (0) 2022.12.01

+ Recent posts