프로세스와 스레드를 많이 들어봤지만 비슷한 개념으로 대충 알고 넘어갔었다. 하지만 둘은 다른 개념이기 때문에 이번 기회에 한번 공부 및 정리해 보려고 한다.
먼저 프로세스(Process)이다. 프로세스는 간단하게 실행 중인 프로그램을 뜻한다. 일반적으로 함수의 매개변수, 복귀 주소와 로컬 변수와 같은 임시적인 자료를 가지는 프로세스 스택과 전역 변수들을 수록하는 데이터 섹션을 포함한다. 또한, 프로세스 실행 중에 동적으로 할당되는 메모리인 힙을 포함한다.
프로세스는 실행되면서 현재의 활동에 따라 상태가 변한다. 프로세스의 상태도는 다음과 같다.
- New : 프로세스가 생성 중인 상태
- Ready : 프로세스가 스케줄러에 할당되기를 대기하는 상태
- Running : 프로세스의 명령어들이 실행되고 있는 상태
- Waiting : 프로세스가 이벤트가 발생하기를 기다리는 상태
- Terminated : 프로세스가 종료된 상태
프로세스의 정보들은 프로세스 제어 블록(Process Control Block, PCB)에 의해 표현된다. 운영체제는 프로세스의 PCB를 통해 프로세스들을 구별 및 관리한다. PCB의 구조는 다음과 같다.
PCB에 저장되는 정보들은 다음과 같다.
- 프로세스 식별자(PID) : 프로세스들을 구별하기 위한 고유 식별 번호
- 프로세스 상태
- 프로그램 카운터 : 프로세스가 다음에 실행할 명령어의 주소
- 레지스터 : 컴퓨터의 구조에 따라 다양한 레지스터들과 상태 코드 정보
- CPU-스케줄링 정보 : 프로세스 우선순위, 스케줄 큐에 대한 포인터와 다른 스케줄 매개변수
- 메모리 관리 정보 : 메모리에 관련된 정보
- 회계 정보 : CPU 사용 시간, 경과된 시간, 시간제한, 계정 번호, 프로세스 번호
- 입출력 상태 정보 : 프로세스에게 할당된 입출력 장치들과 열린 파일의 목록
만약 어떤 프로세스가 CPU에서 실행 중인데 CPU를 다른 프로세스로 교환하려면 현재 실행 중인 프로세스 상태(PCB)를 보관하고 새로운 프로세스의 상태(PCB)를 복구하는 작업이 필요하다. 이 작업을 문맥 교환(Context Switch)라고 부른다.
이번에는 스레드(Thread)이다. 스레드는 CPU 이용의 기본 단위로써 프로세스의 실행 단위라고 할 수 있다. 스레드는 스레드 ID, 프로그램 카운터, 레지스터 집합, 스택으로 구성된다. 또한, 같은 프로세스에 속한 다른 스레드와 코드, 데이터 섹션, 열린 파일이나 신호와 같은 운영체제 자원들을 공유한다.
스레드는 동시에 하나의 작업을 수행하는 단일 스레드와 하나 이상의 작업을 수행하는 다중 스레드로 분류된다. 다중 스레드는 코드, 데이터, 파일들은 서로 공유하지만 각각 독립적인 작업을 수행해야 하기 때문에 각자의 레지스터와 스택을 가진다.
다중 스레드의 장점은 다음과 같다.
- 응답성(Responsiveness) : 하나의 작업을 병렬 처리로 수행해 주기 때문에 단일 스레드보다 응답이 빠르다.
- 자원 공유(Resource Sharing) : 공유 메모리와 메시지 전달 기법을 통해 스레드끼리 자원을 공유할 수 있다.
- 경제성(Economy) : 프로세스를 생성하는데 걸리는 시간이 스레드를 생성하는데 걸리는 시간보다 오래 걸린다.
- 규모 적응성(Scalability) : 다중 처리기 구조에서 처리되기 때문에 훨씬 효율적이다.
'Computer Science > 운영체제' 카테고리의 다른 글
Blocking / Non-Blocking & Synchronous / Asynchronous (0) | 2021.07.06 |
---|---|
프로세스 동기화(Process Synchronization)(2) (0) | 2021.07.05 |
프로세스 동기화(Process Synchronization)(1) (0) | 2021.07.05 |
CPU 스케줄링 (0) | 2021.07.05 |
프로세스 스케줄링(Process Scheduling) (0) | 2021.07.05 |
댓글