개발/CS

컨텍스트 스위칭시 일어나는일

728x90

P1 -> P2로 컨텍스트 스위칭이 일어나는 상황

P1이 실행중이고 P2가 준비상태임.

일부 중단이 발생하면 컨텍스트를 저장한 후 프로세스 P1을 실행 중에서 준비 상태로 전환하고 P2를 준비에서 실행중 상태로 전환해야함

 

언제 발생?

 

1. 인터럽트 : CPU는 디스크에서 데이터를 읽을 것을 요청하고, 인터럽트가 있는 경우 컨텍스트 스위칭은 인터럽트를 처리하는데 더  적은 시간이 필요

2. 멀티태스킹 : 다른 프로세스가 실행될 수 있도록 프로세스가 CPU에서 전환될 수 있도록 하는 멀티태스킹의 특성

3. 커널 / 사용자 스위치 : 

 

PCB : 운영제체에서 모든 데이터와 관련된 정보를 프로세스에 저장하는데 사용되는 데이터 구조, 프로세스가 생성되면 프로세스의 업데이트 정보, 프로세스의 정보 전환, PCB의 프로세스 종료 등이 있음.

 

 

1.  실행 상태에 있는 프로세스는 PCB1에 저장됨 레지스터 형태로 저장함.

2. PCB1을 프로세스 P1로 업데이트하고, 프로세스를 큐로 이동

3. 그 후 다른 프로세스가 실행 중 상태가 되거나 , 실행될 준비 상태에서 새 프로세스를 선택하거나 프로세스가 작업을 실행하는데 높은 우선 순위를 가질 수 있음.

이제

 

스레드 스위칭 : 동일한 프로세스에서 한 스레드에서 다른 스레드로 컨텍스트를 전환하는 유형, 스레드 전환은 프로그램 카운터, 레지스터 및 스택 포인터 같은 ID와 리소스만 전환하기 때문에 효율적이고 저렴함.

CPU가 현재 스레드 상태를 저장하고 다른 스레드로 전환한다.

대기중인 스레드가 너무 많으면 컨텍스트 전환에 너무 많은 시간을 소비하는

또한 자바에서 스레드는 OS의 스레드와 1대1 매핑이라 OS에서 관리해야할 스레드가 늘어난다.

CPU가 한 스레드 실행에서 다른 스레드 실행으로 전환할 때 CPU는 현재 스레드의 로컬 데이터, 프로그램 포인터 등을 로드해야함.

운영체제의 커널에 의해 수행됨.

 

 

프로세스 스위칭 : 운영체제의 스케쥴러가 현재 프로그램의 상태를 저장하고, 다른 프로세스로 전환한다.

OS에 의해 스케쥴링 되는 Process Control Block이다.

Thread의 경우 프로세스의 Task Control Block이라는 내부 구조를 통해 관리된다.

Task의 PCB 정보는 프로세스 스택, 레디 큐 라는 자료구조로 관리되고, Context Swiching시 PCBfmf qk

운영체제의 커널에 의해 수행됨. 

 

프로세스 컨텍스트 스위칭이 더 비싼 이유

프로세스 스위칭은 

1. 새  주소 공간을 사용하기 위한 페이지 디렉토리 전환 

2. 커널 스택과 하드웨어 컨텍스트 스위칭

MMU TLB를 건드려야 한다.

 

하지만 스레드 스위칭은 건드릴 필요가 없다. 몇몇의 레지스터들만 교환하면 된다.

 

 

리눅스의 경우 스레드와 프로세스의 가장 큰 차이점은 주소 공간ㅇ ㅔ있다.

 

 

CPU 캐시 무효화 : 컨텍스트 스위칭은 캐시된 메모리 주소가 즉시 해제된다.

 

서로 다른 가상 주소 공간안에 컨텍스트를 전환하려면 가상-물리적 주소 매핑을 교체해야함.

 

 

장점 : 둘 이상의 프로세스가 동시에 실행되고 있는 것처럼 보임.

단점 : 오버헤드가 발생함. 한 프로세스의 컨텍스트를 저장하고, 실행중 상태가 될 대 다른 프로세스의 컨텍스트를 가져오는데 시간이 필요함.

 

컨텍스트 스위칭을 수행하는 CPU는 캐시를 초기화 하고 Memory Mapping을 초기화 하는 작업을 거치는 등 아무 작업도 못하한다.

 

캐시는 데이터도 곧 사용할 가능성이 높은 데이터 지역성을 가지고 있다.

데이터 지역성을 확용하여 메인 메모리에 있는 데이터를 캐시에 불러와두고 프로세스가 필요한 데이터를 캐시에서 먼저 찾도록 하여 성능 향상

 

 

하나의 CPU 코어는 하나의 스레드만 실행 가능함.

 

하드웨어를 통한 IO요청이나, OS레벨에서 타이머 기반 스케쥴링에 의해 발생함.

 

 

캐시메모리는 CPU코어와 메모리 사이의 속도차에 의한 병목현상을 완화하기 위한 목적

 

 

 

'개발 > CS' 카테고리의 다른 글

Blocking, Non-Blocing, 동기, 비동기  (0) 2021.05.17
리눅스 select, poll, epoll  (0) 2021.05.16
C10K부터 Event-Driven까지  (1) 2021.05.13
부동소수점이란  (0) 2021.05.08
상속과 조합  (0) 2021.05.08