스탠다드반 자료조사

프로세스와 스레드 / 컨텍스트 스위칭

nbcssw 2024. 11. 5. 00:51

1. 프로세스와 스레드란?

- 메모리 영역(힙, 스택, 코드, 데이터)이 무엇이고, 둘이 어떤 차이를 갖는지 설명해주세요

2. 컨텍스트 스위칭이란?

- 프로세스/스레드 간의 컨택스트 스위칭 개념과 그 과정에서 어떤 작업이 일어나는지 설명해주세요

3. 레이스 컨디션이란?

- 세마포어, 뮤택스에 대해 설명해주세요 - 데드락이 무엇이고 어떻게 해결할 수 있는지 설명해주세요

프로세스 (Process)

 프로세스란, 운영체제에서 실행 중인 프로그램의 인스턴스를 말합니다. 프로세스는 메모리 공간(코드, 데이터, 스택, 힙 등)과 시스템 자원을 독립적으로 소유하며, 다른 프로세스와 분리된 상태로 실행됩니다. 그렇기 때문에 각 프로세스는 서로의 메모리에 접근할 수 없어 안정성이 보장됩니다.

 

 

메모리 영역

프로세스가 메모리에 로드되면 여러 메모리 영역으로 나뉘어지는데, 코드, 데이터, 스택, 힙 영역으로 나누어집니다.

 

코드 영역

말 그대로 우리가 짜는 코드들이 저장되는 메모리 공간입니다. 기계어 형태(0, 1)로 저장되고, 프로그램이 실행될 때 CPU가 이 곳의 코드를 실행하게 됩니다. 읽기 전용으로 보호되고 있기 때문에, 프로그램의 코드가 의도치 않게 수정되는 것을 막아줍니다. 메모리를 효율적으로 사용하기 위해, 라이브러리 함수처럼 코드의 재사용이 가능한 경우에는 여러 프로세스가 코드 영역을 공유할 수 있습니다.

 

데이터 영역

프로그램의 전역 변수와 정적 변수와 같은 고정된 데이터를 저장하는 공간입니다. 프로그램이 실행될 때 할당되고, 종료될 때 해제됩니다. 데이터 영역 내부에서도 초기화된 데이터와 초기화되지 않은 데이터 영역으로 나뉩니다. 또한, 프로그램 전체에서 접근할 수 있기 때문에 모든 함수나 스레드에서 사용이 가능합니다. 데이터가 고정된 크기로 할당되서 프로그램이 실행되는 동안에 동적으로 변경되지 않습니다.

 

스택 영역

함수가 호출될 때 지역 변수와 매개 변수, 반환 주소 등을 저장하는 공간입니다. 함수가 호출될 때마다 새로운 스택 프레임이 생성되며, 함수가 종료되면 해당 스택 프레임은 제거됩니다.

 

스택은 선입후출(LIFO, Last In First Out) 방식으로 관리되기 때문에, 가장 최근에 저장된 데이터가 가장 먼저 제거됩니다.

스택의 크기는 한정되어 있어서, 과도한 재귀 호출이나, 많은 데이터를 스택에 할당하게 되면 스택 오버플로우라는 현상이 발생할 수 있습니다.

 

힙 영역

동적으로 메모리를 할당하는 공간입니다. 프로그램이 실행중일 때, 필요에 따라 메모리를 요청하거나 해제할 수 있는 영역입니다. 객체와 배열같이 프로그램의 실행 중 동적으로 생성되는 데이터들이 할당됩니다. 메모리의 할당과 해제는 사용자가 직접 관리해야 하고, 제대로 관리되지 않는다면 메모리 누수가 발생할 수 있습니다.

 

 

스레드(Thread)

 스레드는 ㅋ 프로세스 내에서 독립적으로 작업을 수행할 수 있는 실행 단위입니다. 프로세스의 메모리 공간과 시스템 자원을 공유하면서 병렬 처리를 가능해게 해줘서, 프로그램의 응답성을 높이고 성능을 향상시켜줍니다. 하나의 프로세스는 최소한 하나의 스레드를 가지고, 이를 통해 명령어가 실행됩니다.

 

 스레드는 프로세스의 코드, 데이터, 힙 영역을 공유하고, 독립적인 스택 영역을 가집니다. 스레드의 스택 영역에는 함수 호출 시 사용되는 지경 변수와 함수의 호출 순서가 저장됩니다. 또한 프로그램 카운터를 통해 스레드가 실행 중인 명령어의 위치를 가리키고, 현재 작업 중인 변수와 주소 등을 저장하는 CPU 레지스터를 스레드마다 독립적으로 가집니다.

 

프로세스와 스레드의 차이점

구분 프로세스 스레드
메모리 구조 각 프로세스는 독립적인 메모리 공간을 가짐 스레드는 같은 프로세스 내에서 공간을 공유함
독립성 프로세스 간의 독립성이 보장됨 같은 프로세스 내의 스레드끼리 영향을 줄 수 있음
오버헤드 프로세스 간 문맥 전환 시 오버헤드가 큼 스레드 간 전환 시 오버헤드가 적음
통신 방식 프로세스 간 통신은 복잡하고 비용이 많이 듬 같은 프로세스 내에서 메모리를 공유해 빠르고 효율적임

 

 

컨텍스트 스위칭 (Context switching)

컨텍스트 스위칭은 CPU가 현재 실행 중인 프로세스나 스레드의 상태를 저장하고, 다른 프로세스나 스레드를 실행하기 위해 그 상태를 복원하는 과정입니다. 멀티태스킹 운영체제에서는 CPU가 여러 프로세스를 동시에 실행하는 것처럼 보이게 하기 위해 시분할 방식으로 작업을 처리합니다. CPU는 한 순간에 하나의 프로세스만 실행할 수 있기 때문에, 일정 시간이 지나면 현재 실행 중인 프로세스를 중단하고 다른 프로세스를 실행해야 합니다. 이때, CPU가 이전 프로세스로 돌아왔을 때 다시 이어서 작업을 할 수 있도록 현재 프로세스의 상태를 저장하고 복원하는 과정이 필요한데, 이게 바로 컨텍스트 스위칭입니다.

더보기

시분할 방식

여러 프로그램이나 프로세스가 짧은 시간 간격으로 CPU를 번갈아 사용하여 각 작업이 동시에 실행되는 것처럼 느껴지게 하는 방식. 운영체제가 각 프로세스에 짧은 타임 슬라이스(시간 할당)을 주고 빠르게 교체하는 방식으로 진행됩니다.

컨텍스트 스위칭의 과정

  1. 현재 상태 저장: CPU가 현재 실행 중인 프로세스의 레지서트, 프로그램 카운터, 스택 포인터 등의 중요한 정보를 PCB(Process Control Block)에 저장합니다.
  2. 새로운 프로세스 선택: 운영체제의 스케쥴러는 준비 상태에 있는 다른 프로세스 중 하나를 선택하여 실행할 준비를 합니다.
  3. 새 프로세스의 상태 로드: 선택된 프로세스의 PCB에 저장된 정보를 읽어와 CPU 레지스터와 프로그램 카운터를 복원하여, 해당 프로세스가 이전에 중단되었던 지점부터 다시 실행을 시작할 수 있도록 합니다.
  4. 새로운 프로세스 실행: 새로운 프로세스가 CPU를 할당받고 실행됩니다.

 

'스탠다드반 자료조사' 카테고리의 다른 글

CPU  (1) 2024.10.07
[OSI 7계층] 전송 계층  (2) 2024.09.18
데이터 링크 계층  (0) 2024.09.05
물리 계층  (0) 2024.09.02
OSI 7계층  (0) 2024.08.28