꾸준하게 기록하기
article thumbnail
Published 2022. 2. 23. 17:54
컨텍스트 스위칭 CS/운영체제

 

컨텍스트 스위칭 동작 원리

스케쥴러가 프로세스 A에서 B로 바꿀 때 PCB라는 별도의 저장 메모리 공간을 만들어서

프로세스 A PC(Program Counter), SP(Stack Pointer) 값을 저장, A ready or block 상태로 변경되고 B 실행

 

PCB ( Process Control(Context) Block )

1. Porcess ID

2. Register (PC, SP )

3. Scheduling Info (Process State) : 지금 프로세스 상태가 ready, block, running 인지
4. Memory Info(
메모리 사이즈 limit) 

 

→ PCB 프로세스가 실행중인 상태를 캡쳐/ 구조화해서 저장

( PCB 프로세스의 상태를 저장하는 데이터 구조로 운영체제에 단에서 관리)

 

→ 읽어온 다음 실행할 프로세스의 기존 PC와 SP 값을 CPU의 해당 레지스터에 업데이트한다.

 

프로세스와 컨텍스트 스위칭

 

Context Switching (문맥 교환)

 CPU 실행할 프로세스를 교체하는 기술

 

1. 실행 중지할 프로세스 정보 해당 프로세스의 PCB 업데이트해서 메인 메모리에 저장

2. 다음 실행할 프로세스 정보를 메인 메모리에 있는 해당 PCB정보(PC와 SP) CPU 레지스터에 넣고 실행

PCB 정보에 해당 CPU 레지스터 정보를 저장한다.

cf) 디스패치 (dispatch) : ready 상태의 프로세스를 running 상태로 바꾸는

( PCB정보(PC와 SP) CPU 레지스터에 넣고 실행하는 과정을 디스패치라 한다. )

 

컨텍스트 스위칭 시간이 오래걸리면 실제로는 굉장히 짧은 시간(ms) 단위로, 프로세스 스위칭이 일어남

C언어가 아니라, 어셈블리어 컨텍스트 스위칭 코드를 작성하면 컨텍스트 스위칭 시간을 짧게 있음

 

cf. 컴파일러

 

- 초기 컴퓨터 프로그램은 어셈블리어로 작성

  • 서로 다른 CPU 아키텍처가 등장할 때마다 매번 똑같은 프로그램작성 (이식성 낮다)
  • 어셈블리어로는 프로그램 작성 속도가 매우 떨어짐

 

- 컴파일러 등장

  • CPU 아키텍처에 따라서는 컴파일러 프로그램만 만들면됨, 기존 코드로 재작성 필요 없음 (이식성 높다)
  • 그러나, 어셈블리어로 작성한 코드보다는 속도가 떨어질 있음.

→ 리눅스이 경우 컨텍스트 스위칭 코드는 CPU 마다 별도로 존재

 

 


정리

- 프로세스 구조 : Stack, HEAP, DATA(BSS, DATA), TEXT(CODE)

- PCB : 프로세스 상태 정보 - PC, SP, 메모리, 스케쥴링 정보 등

  → PC, SP 래지스터 정보로 컨테스트 스위칭가능

- 컨텍스트 스위칭 : 프로세스 상태 정보를 PCB로부터 CPU에 로드하고 실행 

 

 

 

제로베이스 컴퓨터 공학 전공자 따라잡기 강의 시청 후 정리한 내용입니다.

 

 

 

728x90

'CS > 운영체제' 카테고리의 다른 글

IPC 기법  (0) 2022.02.24
프로세스 간 커뮤니케이션  (0) 2022.02.24
프로세스 구조  (0) 2022.02.23
인터럽트 내부 동작  (0) 2022.02.23
인터럽트  (0) 2022.02.23
profile

꾸준하게 기록하기

@:_:

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!