컴퓨터 사이언스

문맥교환

woohap 2024. 11. 2. 00:00

문맥교환이란

운영체제 커널은 문맥 전환을 통해 멀티테스킹을 구현한다.
커널은 각 프로세스마다 컨텍스트를 유지한다.
컨텍스트는 커널이 선점된 프로세스를 다시 시작하기 위해 필요로 하는 상태이다.
    - 범용 레지스터, 프로그램 카운터, 사용자 스택, 커널 스택, 상태 레지스터, 
      페이지 테이블, 프로세스 테이블, 파일 테이블 같은 객체들 값들로 구성

커널이 실행할 프로세스 선택 - 스케줄 했다.
커널이 스케줄 한 후 현재 프로세스를 선점하는 것 - 문맥 교환 

**
스케줄러는 준비큐에 있는 구조체에서 프로세스 ID, 프로세스 우선순위, 
프로세스 상태, PCB 포인터 정보를 가져온다.

PintOS에서 PCB는 thread 구조체

문맥교환이 발생하는 경우

1. 하드웨어 인터럽트가 발생하는 경우
    타이머 인터럽트가 발생한 경우

2. 시스템 콜 호출 중 I/O 대기 상태 발생하는 경우 
    커널이 시스템 콜을 실행하고 있을 때 문맥 전환이 발생할 수 있다.
    Ex) read() 시스템 콜을 호출할 때, I/O가 발생하여 CPU가 유후상태가 될 수 있음
    그러므로 현재 프로세스를 실행 -> 대기 -> 차단 시키고 실행 가능한 다음 프로세스로 전환하기 위해 문맥교환 실행

3. 프로세스가 자발적으로 CPU를 양보하는 경우 
    스레드가 락이 걸린 공유자원에 접근하는 경우( 양보 후, blocked)

4. 프로세스 우선순위 변경이 발생하는 경우
    스케줄링 리스트에 현재 실행 중인 프로세스보다 우선순위가 더 높은 프로세스가 삽입된 경우 

5. 프로세스 종료 또는 종료 대기인 경우

문맥교환 자세히

1. 타이머 인터럽트가 발생하여 사용자 모드에서 커널 모드로 진입한다.

2. 커널 모드로 진입한 직후 실행 정보들(PC, SP, 상태 레지스터 값 등)을 커널 스택에 저장한다.

3. 커널 모드에서 인터럽트 핸들러가 실행되어 현재 프로세스의 영구 정보들
   (파일 디스크립터 주소, 페이지 테이블 주소, 커널 스택 주소, 프로세스 ID) 등이 저장된다.

4. 스케줄러가 다음 실행할 프로세스를 선택

5. 다음 프로세스 PCB에서 영구 정보들을 가져와 CPU에 적재합니다.

6. 커널 스택 포인터 값을 다음 실행할 커널 스택 포인터 값으로 변경 

7. 커널 스택에 저장된 실행 정보들(PC, SP, 상태 레지스터 값 등)을 CPU에 복구한다.

8. 특수 명령어를 실행하여, 커널 모드에서 사용자 모드로 전환한다.

9. PC에서 가리키는 다음 명령어를 실행하여 처리한다.

실행에 필요한 정보들 VS 영구적인 정보들

실행 정보들 
  - 사용자 프로그램의 실행 상태를 나타냄
  - 프로세스가 사용자 모드에서 실행될 때 사용하는 레지스터듸 값
  - 주로 일반 목적 레지스터들을 포함
    Ex) 프로그램 카운터(PC), 스택 포인터(SP), 상태 레지스터, 데이터 레지스터 등   
  - 사용자 프로그램이 직접 접근하고 사용할 수 있는 레지스터
  - 인터럽트 발생 시 해당 프로세스의 커널 스택에 저장됨

영구 정보들 
  - 운영체제의 실행 상태와 시스템 제어 정보를 포함
  - 운영체제 커널이 커널 모드에서 실행될 때 사용하는 레지스터 값
  - 커널의 실행 상태를 나타내는 레지스터들을 포함
    Ex) 커널 모드 스택 포인터, 페이지 테이블 베이스 레지스터, 인터럽트 상태 레지스터 등 
  - 일반 사용자 프로그램은 접근할 수 없으며, 오직 커널만 접근 가능합니다.
  - 문맥 교환 시 PCB에 저장된다.

프로세스와 스레드의 문맥교환

프로세스 문맥교환

프로세스의 경우 프로세스 간 문맥교환이므로 해당 프로세스를 실행하기 위한 모든 정보를  교환해야 한다.
  - 메모리 관리 정보(페이지 테이블 등)
  - 파일 디스크립터
  - 프로세스 상태
  - 모든 CPU 레지스터 값
  - I/O 상태 정보

스레드 문맥교환

스레드의 경우 프로세스의 자원을 공유하므로 필요한 스레드 상태 정보만 교환하면 된다.
  - 프로그램 카운터
  - 레지스터 값
  - 스택 포인터
  - 스레드 특정 데이터

스레드는 동일 프로그램 내에서 여러 작업을 병렬로 처리할 때 효과적

문맥교환 속도 차이

프로세스 보다 스레드 문맥교환이 속도가 더 빠르다.
  - 프로세스 문맥 교환은 밀리초 단위의 시간 필요.
  - 스레드 문맥 교환은 마이크로초 단위의 시간 필요.

'컴퓨터 사이언스' 카테고리의 다른 글

TLB  (0) 2024.11.07
가상 메모리 - 요약  (0) 2024.11.05
인터럽트  (0) 2024.11.01
시스템 콜  (0) 2024.10.30
커널  (0) 2024.10.29