# CHAPTEr 3 운영체제 - 컨텍스트 스위칭

금성·2023년 1월 2일
0

CS 전공지식 노트

목록 보기
5/19

Section 3.2 - 컨텍스트 스위칭 ( Context Switching )

스레드는 CPU/코어에서 실행되는 기본 단위이기 때문에 프로세스는 기본적으로 하나의 스레드를 가지고 있음

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

CPU/코어 에서 실행 중이던 프로세스/스레드가 다른 프로세스/스레드로 교체되는 것

CONTEXT

프로세스/스레드의 상태 ( CPU 혹은 메모리의 상태를 의미 )

컨텍스트 스위칭은 왜 필요한가?

여러 프로세스/스레드를 동시에 실행시키기 위해

언제 발생하는가?

인터럽트 요청이 와야 발생 ( 아래는 인터럽트 요청들 )

  1. 입/출력을 요청할 때
  2. CPU 사용시간이 만료되었을 때
  3. 자식 프로세스를 만들 때
  4. 인터럽트 처리를 기다릴 때

    이런 요청들이 어떤 동작 속에서 들어오는지 이해하기 위해서는 프로세스의 상태변화를 알아야 함 -> ( 좀더 공부해야함 )

누구에 의해 실행 되는가 ( 총괄 집행 )

OS 커널 -> 각종 리소스를 관리/감독하는 역할


2. 컨텍스트 스위칭의 동작

  • 다른 프로세스끼리 스위칭인지 ( Process Context Switching )
  • 같은 프로세스의 스레드들끼리 스위칭인지에 따라 다름
    ( Thread Context Switching )

공통점

  1. 커널 모드에서 실행
  2. cpu 레지스터 상태를 교체

cpu에는 여러가지 레지스터가 존재 ( 레지스터의 자세한 부분은 따로 공부해보기 )

레지스터는 각종 명령어를 수행하기 위해 필요한 여러 데이터를 저장하는 역할

  • 레지스터에 대해 조금 더 알아 보자
    • 프로세스들( P1, P2 )이 실행되고 있다고 가정 ->
    • P1이 실행되는 동안 이 레지스터에 있는 여러 값들이 바뀌면서 실행될 것 ->
    • 여기서 P2가 실행될 경우 CPU에 실행되고 있던 P1의 레지스터 상태들을 레지스터 어딘가에 저장하고 P2를 실행
      => 상태정보를 저장해두어야 후에 P1이나 P2가 다시 실행될때 이어서 실행할 수 있기 때문에 위와같은 과정을 거쳐야 함

차이점

다른 프로세스 끼리 스위칭 즉, ( Process context switching )가 일어날 경우 가상 메모리 주소 관련 처리를 추가로 수행해야함 ( MMU, TLB 관련 메모리 )

MMU ( Memory Management Unit )

  • MMU는 CPU의 주소를 감쪽같이 속이는 거짓말쟁이 역할
    => CPU가 Memory를 Access할 때 마다 주소를 속임
  • Program마다 똑같은 주소를 사용해도 되게 만들어 주는 것

위 그림 처럼 physical address를 virtual address로 바꿔버릴 수 있음

개념적으로 보면 CPU가 virtual adress를 발생시키면, MMU가 physical Memory의 주소로 바꿔줘서 실제 physical Memory를 엑세스한다고 보면됨.

MMU는 이런역할을 하는 구나 정도만 알아두고 더 알고싶다면 따로 더 공부해보자.. [참고]

page table

CPU에게서 받은 Virtual Address를 Physical Memory로 Mapping하기 위해서는 그 둘을 연결해주는 Table이 있어야함 그리고 이 테이블을 Page Table이라고 부름

  • 논리주소의 페이지를 물리주소의 프레임으로 매핑시켜주는 정보를 담고 있는 테이블
  • MMU의 Register중 하나인 TTB ( Translation Table Base Address )에 저장되어 있음

( paging : 논리주소의 메모리를 고정된 크기의 페이지(Page)로 나누어 관리하는 기법 )

TLB ( Translation Lokk-aside Buffer )

page table은 메인 메모리에 존재하는데 그렇게 될 경우 CPU는 메인 메모리에 최소 2번은 접근을 해야 원하는 데이터를 얻을 수 있게 된다

  1. page table에 한번 접근
  2. page table을 기반으로 실제 메모리로 접근

모든 가상메모리 참조는 두번의 물리 메모리 참조를 수반하게 되고 따라서 두 배의 메모리 접근 시간을 갖게 됨 이러한 메모리의 접근을 줄이고자 나온 것이 TLB

  • 일종의 page table의 cahe로 가상 메모리 주소를 물리적인 주소로 변환하는 속도를 높이기 위해 사용되는 캐시
  • 최근에 일어난 가상 메모리 주소와 물리 주소의 변환 테이블 저장

3. 컨텍스트 스위칭의 구체적인 동작 과정

같은 프로세스간 스위칭 ( Thread Context Switching )

  1. 같은 프로세스 이므로 T1과 T2가 한 프로세스 ( P )안에서 실행
  2. 인터럽트 요청으로 CS 발생
  3. 커널모드 진입
  4. T1의 CPU상태를 저장하고 T2의 CPU상태를 로딩 시킴
  5. 커널모드 종료 ------------------------- 1cycle 끝-------------------------------
  6. 다시 인터럽트 요청으로 CS 발생
  7. 커널모드 진입
  8. T1의 CPU상태를 로딩하고 T2의 CPU상태를 저장 시킴
  9. 커널모드 종료 ----------------------- 위과정 반복 -----------------------------

다른 프로세스간 스위칭 ( Process Context Switching )

위의 쓰레드 컨텍스트 스위칭와 과정이 비슷하나 커널모드 종료 직전 메모리에 대한 처리가 이루어짐

  1. 다른 프로세스 이므로 T1과 T2가 각 프로세스 ( P1, P2 )안에서 실행
  2. 인터럽트 요청으로 CS 발생
  3. 커널모드 진입
  4. P1안의 T1의 CPU상태를 저장하고 T2안의 T2의 CPU상태를 로딩 시킴
  5. MMU P2메모리 주소 영역을 바라보도록 하고 TLB를 비움
  6. 커널모드 종료 ------------------------- 1cycle 끝-------------------------------
  7. 다시 인터럽트 요청으로 CS 발생
  8. 커널모드 진입
  9. P1안의 T1의 CPU상태를 로딩하고 T2안의 T2의 CPU상태를 저장 시킴
  10. MMU P1메모리 주소 영역을 바라보도록 하고 TLB를 비움
  11. 커널모드 종료 ----------------------- 위과정 반복 -----------------------------

결론

Thread Context Switching이 Process Context Switching 보다 빠르다

Thread Context Switching은 같은 메모리를 공간을 공유하기 때문에 CPU의 상태 정보만 바꿔주면 되지만 Process Context Switching은 메모리부분에서도 처리해야할게 있기 때문


컨텍스트 스위칭이 미치는 간접적 영향

  • 캐시 오염
    CPU안에는 기본적으로 캐시가 있는데 자주 쓸것 같은 데이터들은 굳이 메모리까지 거쳐가지 않고 CPU안에 있는 캐시로부터 데이터를 읽어올 수 있음 (캐시 정책)

    하지만 컨텍스트 스위칭이 일어날경우 위와 같은 경우에서의 활용이 불가능 해진다.
    => 스위칭 직후 캐시에는 결국 내가 찾는 데이터가 없을 확률이 큼

컨텍스트 스위칭이 자주일어나는것은 좋은것이 아님 ( CPU점유율 )

profile
내일부터 공부 해야지

0개의 댓글