Search
Duplicate

프로세스와 스레드, Context Switching

간단소개
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
운영체제
CS
태그
Scrap
8 more properties

프로세스와 스레드, Context Switching

프로세스의 개념
프로세스와 스레드
프로세스 Context Switching(문맥교환)

1. 프로세스의 개념

프로세스 : 실행 중인 프로그램(program in execute)

프로세스의 context(문맥)

프로세스의 context는 크게 세가지로 분류할 수 있다.
하드웨어 context : CPU의 수행상태를 나타내는 것으로 PC(Program Counter)와 각종 레지스터에 저장하고 있는 값들을 의미한다. 프로세스의 주소공간 : 코드(code), 데이터(data), 스택(stack)으로 구성된 프로세스만의 독자적인 주소공간을 의미한다. 커널 상의 context : 프로세스 관리를 위한 자료구조인 PCB(Process Control Block)와 Kernel stack(커널 내의 주소)를 의미한다.
참고) 주소공간 (Big Endian 기준)
참고) PCB(Process Control Block) 프로세스 제어 블록

프로세스의 상태

시스템에는 Batch Job 시스템(일괄 작업 시스템)과 시분할 시스템이 있다.
Batch Job 시스템 : 사용자가 수정이나 삽입 같은 데이터의 변경을 할 수 없는, 즉 모든 작업을 한 번에 처리하는 시스템이다. 시분할 시스템(Time Sharing System): CPU 시간을 쪼개서 여러가지 프로세스들에게 CPU를 사용할 수 있도록 한다. 그래서 CPU 효율이 Batch Job 시스템에 비해서 높은 편이다.
이 글에서는 시분할 시스템을 기준으로 프로세스 상태를 분류하고자 한다.
1.
시작(new) 상태
프로세스가 생성 중인 일시적 상태
프로세스가 시작되어 PCB와 같은 그 프로세스를 위한 각종 자료구조는 생성되었지만 아직 메모리 획득을 승인받지 못한 상태
2.
준비(ready) 상태
프로세스가 CPU만 보유하면 당장 명령을 실행할 수 있지만 CPU를 할당받지 못한 상태
Ready Queue에 들어와 있어 프로세스의 CPU를 얻을 때까지 자신의 차례를 순서대로 기다린다. 차례는 CPU Scheduler가 관리한다.
3.
실행(running)
프로세스가 CPU를 보유하고, 기계어 명령을 실행하고 있는 상태
일반적인 컴퓨터 시스템 내에서 CPU는 하나뿐이므로 컴퓨터 내에서 여러 프로세스가 동시에 수행된다고 해도 실제로 실행 상태에 있는 프로세스는 매 시점 하나 뿐이다.
Ready Queue에 있던 프로세스가 자신의 차례를 부여받아 실제로 수행된다. CPU Scheduler가 dispatch()를 수행하면 준비상태에서 실행상태로 바뀐다.
4.
대기(waiting)
CPU를 할당받더라도 당장 명령을 실행할 수 없는 프로세스의 상태
예를 들어, 프로세스가 실행 상태에서 입출력 이벤트가 발생했을 때, CPU는 입출력 관리자에게 작업을 맡기고 프로세스를 대기상태로 만든다. 이후에 입출력 관리자가 해당 입출력 작업을 완료했다면 인터럽트가 발생해 대기 상태의 프로세스들 중에서 해당 프로세스를 찾고, 해당 프로세스는 다시 Ready Queue에 들어간다.
5.
완료(terminated)
프로세스가 종료 중인 일시적 상태
프로세스가 종료되었으나 운영체제가 PCB와 같은 그 프로세스와 관련된 자료구조를 완전히 정리하지 못한 상태
exit()를 실행하여 처리한다.

2. 프로세스와 스레드

프로세스 VS 스레드

프로세스 : 실행 중인 프로그램(program in execute) 스레드 : 프로세스 안에서 실행되는 여러 흐름 단위
기본적으로 프로세스마다 최소 1개의 스레드를 소유하고 있다. (메인 스레드 포함)
하나의 프로세스가 생성될 때, 기본적으로 하나의 스레드를 같이 생성한다.
프로세스
1.
각각 별도의 주소공간을 독립적으로 할당한다.
2.
프로세스 자신만의 고유 공간과 자원을 할당받아 사용
스레드
1.
Stack 영역만 따로 할당 받고 나머지 영역은 서로 공유한다.
2.
스레드는 다른 스레드와 공간, 자원을 공유하면서 사용

멀티 프로세스 VS 멀티 스레드

Multi-process
각 프로세스는 독립적
IPC를 사용한 통신
자원 소모적, 개별 메모리 차지
Context Switching 비용이 큼
동기화 작업이 필요하지 않음
참고) IPC(Inter-Process Communication)
Multi-thread
Thread끼리 긴밀하게 연결되어 있음
공유된 자원으로 통신 비용 절감
공유된 자원으로 메모리가 효율적임
Context Switching 비용이 적음
공유 자원 관리를 해야 함

3. 프로세스 Context Switching(문맥교환)

Context Switching : 한 프로세스에서 다른 프로세스로 CPU의 제어권을 넘겨주는 과정을 의미한다.
프로세스 상태 정보를 저장하고 복원하는 일련의 과정이다. 즉, 동작 중인 프로세스가 대기하면서 해당 프로세스의 상태를 저장하고, 대기하고 있던 다음 순번의 프로세스가 동작하면서 이전에 보관했던 프로세스 상태를 복구하는 과정을 말한다.

System Call, 인터럽트와 Context Switching

여기서 주의해야 할 점은 System Call이나 인터럽트가 발생한다고 반드시 context switching이 일어나는 것은 아니라는 점이다.
예시 1) Context Switching이 아니다.
사용자 프로세스 A → System Call 또는 interrupt → 커널모드 → user모드 복귀 → 사용자 프로세스 A
예시 2) Context Switching이 맞다.
사용자 프로세스 A → I/O(입출력) 요청 System Call 또는 time interrupt → 커널모드 → 사용자 프로세스 B
예시 1)의 경우에도 CPU 수행 정보 등 context의 일부를 PCB에 저장해야 하지만 context switching을 하는 예시 2)의 경우 그 부담이 크다.
참고) time interrupt
프로세스에서 context switching이 일어났을 경우, PCB 구조상 공유하는 데이터가 없으므로 캐시(Cache)가 지금껏 쌓아놓은 데이터들이 무너지고, 새로운 캐시 정보를 불러 와야 하기에 시스템에 부담이 간다. 반면 스레드 context switching은 스레드가 바뀌어도 공유하는 데이터가 있기에 프로세스 context switching에 비해 빠르다.
참고자료