문맥 교환(Context Switch)이란?
문맥 교환은 하나의 프로세스가 CPU를 사용 중인 상태에서 다른 프로세스가 CPU를 사용하도록 하기 위해, 이전의 프로세스의 상태(문맥context : PC, 레지스터등의 모든 내용 통튼 것)을 보관하고 새로운 프로세스의 상태를 적재하는 작업을 말합니다. 여러 프로세스가 끊임없이 빠르게 번갈아가며 실행되는 원리
이때 한 프로세스의 문맥은 그 프로세스의 프로세스 제어 블록(PCB)에 기록되어 있습니다.
PCB(Process Control Block)란?
운영체제가 시스템 내의 프로세스들을 관리하기 위해 프로세스마다 유지하는 정보들을 담는 커널 내 자료구조로 커널 영역에 존재합니다. 따라서 메모리내의 커널영역에 있는 PCB를 보고 운영체제는 프로세스를 관리합니다.
사용자 영역에는 응용프로그램이 적재되어 있다.
- 코드 영역(텍스트영역) : 실행할 수 있는 코드, 기계어로 이루어진 명령어 저장, 쓰기금지 read-only
- 데이터 영역 : 프로그램이 실행되는 동안 유지할 데이터 저장 ex)전역변수
- 힙 영역 : 프로그래머가 직접 할당할 수 있는 저장공간, 가비지 컬렉션(자동으로 메모리 반환), 가비지 누수(반환안해서남는것)
- 스택 영역 : 일시적 저장공간 ex)매개변수, 지역변수
코드영역과 데이터영역은 정적공간으로 크기가 정해져 있다.
힙영역과 스택영역의 크기는 가변적
PCB에 저장되는 내용들
- Process 상태 : CPU를 할당해도 되는지 여부를 결정
- PC값 : 다음에 수행할 명령어의 위치를 가르킴
- CPU Register : CPU 연산을 위해 현 시점에 레지스터에 어떤 값을 저장하고 있는지 나타냄
- CPU 스케줄링 정보
- 메모리 관리 정보
- 자원 사용 정보
- 입출력 상태 정보
이러한 Context정보를 사용해 CPU를 선점하고 있던 프로세스는 프로세스 문맥을 PCB에 저장하게 되고, 새롭게 CPU를 할당받을 프로세스는 PCB로부터 예전에 저장했던 자신의 문맥을 실제 하드웨어로 복원하는 과정을 거칩니다.
문맥 교환의 시점
멀티 태스킹
- 다수의 프로세스가 하나의 CPU자원을 나누어 사용하는 것
- 실행 가능한 프로세스들이 운영체제의 스케줄러에 의해 조금씩 번갈아 수행됨
- CPU를 할당받을 때 문맥 교환이 일어남
- 매우 빠른 속도로 처리되기 때문에 동시에 처리되는 것처럼 느낌
인터럽트 처리
- 인터럽트란 컴퓨터 시스템에서 예외 상황이 발생했을 때 CPU에게 알려 처리할 수 있도록 하는 것
- 인터럽트가 발생할 때 문맥 교환이 일어남
- I/O request : 입출력 요청
- time slice expried : CPU 사용시간 만료
- fork a child : 자식 프로세스 생성
- wait for an interrupt : 인터럽트 처리 대기
사용자 및 커널 모드 전환
- 운영 체제에서 사용자 모드와 커널 모드 사이의 전환이 필요할 때 필수는 아니지만 운영체제에 따라 문맥 교환이 발생
문맥 교환이 일어나는 과정
Operating System Concepts
- 요청 발생 : 인터럽트 또는 트랩에 의한 요청이 발생 (트랩은 소프트웨어 인터럽트)
- PCB에 저장 : 운영체제는 현재 실행중인 프로세스(P0)의 정보를 PCB에 저장
- CPU 할당 : 운영체제는 다음 프로세스(P1)의 정보를 PCB에서 가져와 CPU를 할당
'운영체제' 카테고리의 다른 글
[OS] 프로세스 스케줄링 (0) | 2024.08.29 |
---|---|
[OS] 시스템 콜(System Call) (0) | 2024.08.24 |
[OS] 프로세스 상태 전이 (0) | 2024.08.24 |
[OS] 프로세스 (0) | 2024.08.24 |