DevBoi

[Java] 문맥 교환 본문

Language/[Java]

[Java] 문맥 교환

HiSmith 2022. 4. 8. 12:43
반응형

문맥교환 , Context Switching 이란

멀티 프로세스 환경에서 CPU가 어떤 하나의 프로세스를 실행할때 

운영체제의 스케줄링에 따라 인터럽트 요청이 발생해서 다음 프로세스가 실행 되어야 할 때

각 프로세스 들은 메모리를 공유하지 않기 떄문에 기존 프로세스의 상태를 저장하고

다음 프로세스의 상태를 교체하는 작업을 문맥교환이라고 한다.

 

OS에서 Context는 CPU가 프로세스를 실행하기 위한 프로세스 정보들을 말한다.

이 Context는 프로세스의 PCB에 저장된다.

문맥 교환이 발생하면, CPU는 해당 프로세스의 PCB 정보를 받아와서 이전 작업을 수행한다.

 

 

 

PCB에 저장되는 내용들

-process상태 : CPU를 할당해도되는지 여부를 결정하기 위해 필요함

-PC값 : 다음에수행할 명령어의위치를 가리킨다.

-CPU Register : CPU 연산을 위해 현 시점에 레지스터에 어떤 값을 저장하고 있는지를 나타냄

-CPU 스케줄링 정보

-메모리 관리 정보

-자원 사용정보

-입출력 상태 정보

 

문맥교환

맥 교환이란 하나의 사용자 프로세스로부터 다른 사용자 프로세스로 CPU의 제어권이 이양 되는 과정을 의미한다.

실행 상태에 있던 프로세스가 입출력을 요청해야하는 경우가 생겼다고 가정하자

 

실행 상태에있던 프로세스가 입출력 요청해야하는 경우가 생겼다고 가정 하면

입출력을 하기 위해서 프로세스는 I/O를 요청하는 시스템 콜을 발생시키고

프로세스는 device queue에 줄을 서게되고, 준비 상태로 상태가 변경된다.

준비 큐에 있던 다른 프로세스가 CPU를 할당받아 명령을 수행하게될 것이다.

 

이렇게 프로세스A에 있던 CPU 제어권이 프로세스 B에게로 넘어가는 과정을 문맥 교환이라고 한다.

타이머 인터럽트 시간을 너무 짧게하면 프로세스간 문맥 교환이 자주 일어나 오버헤드가 커지게 된다.

 

 

문맥교환 시에 CPU는 다른 프로세스에게 넘어 갈 때 운영체제는 다음을 수행한다.

CPU를 내어주는 프로세스의 문맥을 그 프로세스의 PCB에 저장

CPU를 새롭게 얻은 프로세스 문맥을 PCB로 부터 읽어 복원

 

 

최종 문맥 교환

 

 

문맥 교환은, 프로세스가 자신에게 할당된 타이머를 모두 사용했을때도 발생하고 인터럽트 시에도 발생한다.

무튼 해당 과 같은 방식으로,  문맥 교환은 발생하게 된다.

캐시, 메모리에 대한 데이터는 문맥 교환 시에 초기화 되며, 이 작업들은 쓰레드 문맥교환 보다 오버헤드가 크게 된다.

 

Context란, 프로세스의 경우 현재 프로세스가 중단 되었을때 중단된 시점부터 다시 프로세스를 실행하기 위한

정보를 Context라고 한다. 이 정보는  PCB 블록에 저장된다.

 

쓰레드 스위칭

동일한 프로세스 속에서 하나의 쓰레드를 중지하고 다른 쓰레드의 TCB정보를 바탕으로 쓰레드를 실행하는 것을

Thread Context Wswitching 이라고 한다

 

TCB란

-Thread Identifier : 쓰레드를 구분하는 유일한 식별자

-Stack pointer : 쓰레드 별로 고유한 Stack의 pointer

-Program counter : 현재 instruction의 주소

-쓰레드의 상태 (running,ready,waiting,start,done)

-쓰레드가 소속된 프로세서의 PCB주소

 

 

 

 

해당 과 같은 구조로 되어있기 때문에, Process Context Switching 보다 쓰레드 문맥교환이 빠르다.

일부 고유의 스택 ,레지스터, 쓰레드의 context 정보만 변경하면 된다.

 

process context swithching 의 경우, 프로세서는 쓰레드의 컨텍스트 와 프로세서의 컨텍스트를 전부 바꿔야 한다.

프로세스 들끼리는 공유되는 메모리가 없기 때문이다.

 

 

 

 

반응형

'Language > [Java]' 카테고리의 다른 글

[Effective Java] Rules  (0) 2022.04.21
[Java] 모니터  (0) 2022.04.08
[Java] 멀티 쓰레드란  (0) 2022.04.08
[Java] Restful API  (0) 2022.04.07
데드락이란?  (0) 2022.04.07