RECENT POSTS

최근에 작성한 글

01 / 03

전체 글

전체 보기

[CS] 컨텍스트 스위칭과 DNS

1. Context Switching

1. Context Switching 이란?

하나의 프로세스가 CPU를 사용 중인 상태에서 다른 프로세스가 CPU를 사용하도록 하기 위해 이전 프로세스의 상태(Context)를 보관하고 새로운 프로세스를 적재하는 작업

 

한 프로세스의 문맥은 그 프로세스의 프로세스 제어 블록(PCB)에 기록되어 있다.

2. PCB란?

운영체제가 프로세스를 관리하기 위해 각 프로세스의 상태와 실행 정보를 저장하는 커널의 자료구조

프로세스가 CPU를 빼앗겼다가 나중에 다시 할당받아도 이전 실행 시점부터 작업을 계속할 수 있도록 필요한 정보를 저장한다.

 

 

PCB에 저장되는 내용

  1. Process State : 프로세스의 현재 상태(Running, Ready, Waiting 등)
  2. Program Counter(PC) : 다음에 실행할 명령어의 주소
  3. CPU Register : 프로세스 실행 중 사용하던 레지스터 값
  4. CPU Scheduling Information : 우선순위, 스케줄링 큐 등 CPU 스케줄링에 필요한 정보
  5. Memory Management Information : 프로세스가 사용하는 메모리를 관리하기 위한 정보
  6. Accounting Information : CPU 사용 시간 등의 자원 사용 정보
  7. I/O Status Information : 프로세스가 사용 중인 입출력 장치 및 파일 등의 정보

3. Context Switching 과정

Process A에서 Process B로 CPU 사용이 전환된다고 가정하면 아래와 같은 과정이 발생한다.

Context Switching이 발생하는 대표적인 경우는 다음과 같다.

  • 할당된 CPU 시간을 모두 사용한 경우
  • 실행 중인 프로세스가 I/O 작업을 요청한 경우
  • 더 높은 우선순위의 프로세스가 실행 가능한 상태가 된 경우
  • 인터럽트 등에 의해 스케줄링이 필요한 경우

Context Switching이 진행되는 동안에는 애플리케이션의 실제 작업을 수행하지 않기 때문에 Context Switching 자체가 오버헤드가 된다.

4. 프로세스 Context Switching과 스레드 Context Switching

일반적으로 프로세스 간 Context Switching이 같은 프로세스 내 스레드 간 Context Switching보다 비용이 크다.

 

프로세스
각 프로세스는 기본적으로 독립적인 가상 주소 공간을 가진다.

 

다른 프로세스로 전환할 때는 CPU의 실행 상태뿐만 아니라 현재 사용하고 있는 주소 공간과 관련된 메모리 관리 상태도 변경해야 한다.

 

이 과정에서 페이지 테이블과 관련된 상태가 변경되고 CPU의 TLB(Translation Lookaside Buffer) 활용에도 영향을 줄 수 있다.

 

TLB는 가상 주소를 물리 주소로 변환한 결과를 캐싱하는 장치인데 프로세스가 변경되면 기존 프로세스의 주소 변환 정보 중 일부를 그대로 사용할 수 없거나 새로운 프로세스의 주소 변환 정보를 사용해야 한다.

또한 CPU Cache의 데이터도 새 프로세스가 필요로 하는 데이터와 다를 가능성이 높아 캐시 적중률(Cache Hit Rate)이 떨어질 수 있다.

 

스레드
같은 프로세스에 속한 스레드들은 Code, Data, Heap, 열린 파일 등의 프로세스 자원, 가상 주소 공간을 공유한다.

 

반면 각각의 스레드는 자신의 실행을 위해 Stack, Program Counter, CPU Register 를 별도로 가진다.

 

따라서 같은 프로세스 내부의 스레드끼리 전환하는 경우 주소 공간 자체를 변경할 필요가 없기 때문에 일반적으로 프로세스 간 Context Switching보다 비용이 적다.

2. DNS

1. DNS(Domain Name System) 란?

사람이 이해하기 쉬운 도메인 이름을 컴퓨터가 통신에 사용할 수 있는 IP 주소로 변환해주는 시스템이다.

우리가 브라우저에 다음과 같은 주소를 입력했다고 가정하자.

https://eunkongee.tistory.com/

 

실제 네트워크 통신을 위해서는 서버의 IP 주소가 필요하다.

https://eunkongee.tistory.com/
            ↓ DNS
    182.172.255.180

 

즉 DNS는 흔히 인터넷의 전화번호부와 같은 역할을 한다고 표현한다.

2. DNS 조회 과정

사용자가 브라우저에 도메인을 입력하면 바로 DNS 서버에 요청하는 것이 아니라 먼저 이미 알고 있는 IP 주소가 있는지 캐시를 확인한다.

3. DNS 조회 이후에는?

DNS를 통해 서버의 IP 주소를 얻었다고 해서 HTTP 요청이 바로 서버 애플리케이션으로 전달되는 것은 아니다.
일반적인 흐름은 다음과 같다.

URL 입력 
   ↓ 
DNS 조회 
   ↓ 
서버 IP 주소 획득 
   ↓ 
TCP 연결 
   ↓ 
HTTPS라면 TLS Handshake 
   ↓ 
HTTP Request 전송 
   ↓ 
서버가 Request 수신 
   ↓ 
HTTP Response 반환