Context Switch
cpu가 현재 작업중인 프로세스에서 다른 프로세스로 넘어갈 때 지금까지의 프로세스 상태를 저장하고
새 프로세스의 저장된 상태를 다시 적재하는 작업을 Context Switching이라 한다.
1. Pointer : 프로세스의 준비상탠 대기상태의 큐를 구현할 때 Pointer를 사용함
2. 상태 : 현재 프로세스가 어떤상태인지 나타냄
3. 프로세스 구분자 : 프로세스 id
4. 프로세스 카운터 : 다음에 실행될 명령어의 위치를 가리키는 PC의 값을 저장함
5. 레지스터 정보 : 실행되는 중에 사용하던 중간값들 보관됨
6. 메모리 정보 : 프로세스의 메모리 위치정보 및, 경계 레지스터 값, 한계 레지스터 값 보관됨
- Task의 대부분 정보는 레지스터에 저장되고, PCB로 관리되고 있음
- PCB는 프로세스 번호, 포인터, 프로세스 상태, 레지스터, 프로그램 카운터 등으로 이루어져 있다.
- LinkedList라는 자료구조의 형태로 되어있어서, 새로운 작업이 할당되거나 없어질때 삽입삭제에 유리하다.
- Context Switching의 핵심은 프로그램 카운터와 stack pointer 에 있음
- Program Counter는 cpu 내부에 있는 레지스터 중의 하나로, 다음에 실행될 명령어의 주소를 가지고 있어 실행할 기계어
코드의 위치를 저장함.
- Stack Pointer는 스택의 마지막 위치를 가리키는 레지스터임.
- 현재 실행하고 있는 Task의 PCB정보를 읽어 레지스터에 적재하고, CPU가 이전에 진행했던 과정을 연속적으로 수행할 수 있게 됨.
Context Switch가 발생하는 타이밍
Cpu가 프로그램을 실행하고 있을 때, 실행중인 프로그램 밖에서 예외상황이 발생하여 처리가 필요한 경우,
CPU에게 알려, 예외상황을 처리할 수 있도록 하는 기능을 인터럽트 라고 한다
컨텍스트 스위칭은 아래와 같은 인터럽트 요청이 와야 발생한다.
1. 입 / 출력 요청
2. CPU 사용시간이 만료되었을때
3. 자식 프로세스를 만들 때
4. 인터럽트 처리를 기다릴 때
Context Switching 과정
Interrupt에 의해 요청이 발생한다.
1. 프로세스 p0실행중에 interrupt or system call 발생
2. 현재 프로세스(p0)의 상태를 PCB0에 저장
3. pcb1의 상태를 리로딩
4. p1실행
5. interrup or system call 발생
6. 프로세스1 p1의 상태를 pcb1에 저장
7. pcb0의 상태를 불러와서 process0실행
콘텍스트 스위칭 단점
컨텍스트 스위칭이 잦게 발생할 수록 오버헤드 비용이 발생하여 성능이 떨어진다.
여기서 오버헤드란 사용된 시간과 사용된 메모리의 양을 의미한다.
위 2-3, 6-7번 과정처럼 pcb의 상태를 저장하고 가져오는 프로세스에서 cpu가 아무런 일을 처리하지 못하므로, 이러한 문맥교환 과정이 많을수록 성능이 저하된다. 또한 프로세스 컨텍스트 스위칭은 프로세스끼리 공유하는 데이터가 없으므로 임시저장소인 캐시 메모리에 데이터를 많이 지우고, 쌓는 과정을 반복해야한다.
=> 이러한 오버헤드를 개선하기 위해 스레드 단위로 콘텍스트 스위칭을 하게 되면, 자신의 tcb에는 스택 및 간단한 정보만 저장하기 때문에 성능 개선을 할 수 있다.
TCB는 스레드별로 저장하는 자료구조로, PC와 Register Set값, 공유하는 PCB를 가리키는 포인터를 지닌다.
TCB는 스레드에 관한 데이터만 저장하면 되므로 PCB에 비해 더 적은 데이터를 가진다.
'CS > Operating Systems' 카테고리의 다른 글
데드락과 데드락을 해결하는 방안 (0) | 2023.09.10 |
---|---|
프로세스와 스레드의 차이 (0) | 2023.09.03 |
동시성과 병렬성 (0) | 2023.09.01 |
교착 상태 (0) | 2021.09.26 |
프로세스 주소공간 (0) | 2021.08.18 |