일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 백엔드
- transiant
- Roy Fielding
- 백엔드 면접지식
- 카카오톡API
- 그림자 문제
- 알고리즘
- 딩코딩코
- 2903
- 개발공부
- it세계의 괴물들
- 백준
- LAMBDA
- CPU의 구성요소
- 빈 라인
- 개발자
- mac 코드 블럭
- BOJ
- hELLO 스킨
- Java
- AWS
- 비전공자
- 파이썬
- 공부
- 코딩테스트
- 인터럽트핸들러
- 문자열
- CS지식
- HTTP
- 자바
- Today
- Total
아직은 NULL NULL 합니다
컨텍스트 스위칭(context switching)의 개념, 언제, 왜, 어떻게 를 알아보자. 본문
서론
비전공자인 내가 4년제를 나온 전공자들을 따라가기란 많이 벅차다는 것을 알고 있기에
어떻게든 부지런히 CS 공부를 해야 한다고 생각한다.
그리고 취직 한 후, 야간대학 또는 방통대를 통해 컴공 학사를 따고 싶기도 하다.
이러한 생각들이 모여 참여하게 된 CS 스터디에서 처음으로 공부한 내용이 바로 컨텍스트 스위칭이었다.
첫 CS 공부여서 그런지 모르는 단어가 한 문장을 읽어 내려갈 때마다 수두룩 나왔고 그러다 보니 시간이 오래 걸렸다.
나의 이 블로그가 처음 CS를 공부하는 비전공자분들께 더욱 도움이 되었으면 좋겠다.
해당 더 보기는 공부하면서 내가 몰랐던 개념 위주로 정리를 했기 때문에 보는 사람입장에서는 뒤죽박죽일지도 모르겠다.
개념 정리
- CPU 레지스터 (CPU 는 여러가지의 레지스터를 가진다.)
- 각종 명령어들을 수행하기 위해 필요한 여러 데이터를 저장하는 존재
- OS 커널(kernel) (처음부터 끝까지 컨텍스트 스위칭을 실행시켜주는 존재)
- 운영체제에서 핵심적인 기능을 담당하는 존재
- CPU, 드라이버 등 각종 리소스를 관리 / 감독하는 역할
- 컨텍스트(context)
- 프로세스 혹은 스레드의 상태 (CPU 의 상태, 메모리 의 상태를 의미)
- time slice(= quantum)
- 각 스레드(thread) 마다 동일하게 부여되는 CPU 시간을 의미.
- PCB(Process Context/Control Block)
- 메모리의 별도 공간 → 이 곳에 process 의 상태값들을 저장하고 해당 값들을 찾는 방법으로 컨텍스트 스위칭이 구현된다.
- PCB 에 저장되는 내용
- PID(Process ID)
- 레지스터 값
- 프로세스 상태(Scheduling info)
- 메모리 사이즈 linit(Memory info)
- 기타
컨텍스트 스위칭(context switching) 이란?
CPU 혹은 코어(core)에서 실행 중이던 프로세스(안의 스레드)가 다른 프로세스(안의 스레드)로 교체되는 것을 의미한다.
기본적으로 프로세스는 하나의 스레드를 가진다.
스레드는 CPU 혹은 코어(core)에서 실행되는 기본 단위이기 때문이다.
그래서 결국 프로세스에서 다른 프로세스로 교체된다는 것은 프로세스 안의 스레드가 다른 프로세스 안의 스레드로 교체된다는 것을 의미한다.
컨텍스트 스위칭은 왜 필요한가?
여러 프로세스, 즉 여러 스레드를 동시에 실행시키기 위해서 필요하다.
컨텍스트 스위칭은 언제 발생하는가?
1. 주어진 time slice(quantum)을 다 사용했을 때.
2. IO(입출력) 작업을 해야 할 때.
3. 다른 리소스를 기다려야 할 때.
등 등
컨텍스트 스위칭은 구체적으로 어떤 과정으로 일어나는가?
다른 프로세스끼리 스위칭(이를 process context switching이라고 말한다.) 인지,
같은 프로세스의 스레드들끼리 스위칭(이를 thread context switching이라고 말한다.) 인지에 따라 다르다.
thread context switching VS process context switching
- 동작과정의 공통점
- 커널모드(kernel mode)에서 실행
- 프로세스가 직접 컴퓨터 리소스에 접근하는 것이 아닌, 운영체제의 커널을 통해 접근하게 된다.
프로세스의 통제권이 커널로 넘어가 실행되는 상태를 커널모드 라고 한다.
- 프로세스가 직접 컴퓨터 리소스에 접근하는 것이 아닌, 운영체제의 커널을 통해 접근하게 된다.
- CPU의 레지스터(register) 상태를 교체
- 하나의 프로세스가 실행되고 있을 때, 다른 프로세스가 실행되게 되면 첫 번째 프로세스의 cpu 레지스터 상태들을 PCB(Process Context/Control Block)에 저장을 하게 된다.
- 레지스터 상태를 저장하는 이유는 다시 첫번째 프로세스를 실행시킬 때 어디까지 실행되고, 그때의 상태정보를 알고 있어야 다시 그 시점부터 이어서 실행할 수 있기 때문이다.
- 커널모드(kernel mode)에서 실행
- 동작과정의 차이점
- thread context switching 은 같은 프로세스 안의 스레드들이 교체되는 것이기 때문에 같은 프로세스는 같은 메모리 주소를 공유하고 있다. → 스위칭이 일어나도 메모리와 관련된 것을 처리하는 동작을 할 필요가 없다.
- process context switching 은 다른 프로세스 안의 스레드들이 교체되는 것이기 때문에 메모리 주소체계가 다르다.
→ 가상(virtual) 메모리 주소 관련 처리를 추가로 수행해야 한다.
▶ MMU(Memory Management Unit, 즉 메모리 관리 장치)을 새로운 프로세스의 주소체계를 바라볼 수 있게 수정, TLB(Translation Lookaside Buffer, 즉 변환 색인 버퍼 : 가상 메모리와 실제 메모리 주소의 매핑 정보를 들고 있는 캐시)를 비워줘야 한다.
여기서 MMU, TLB에 대한 내용은 다음에 다뤄볼 예정입니다.(지금 이 글의 주제는 컨텍스트 스위칭에 초점을 맞췄기 때문이에요 하핫 ^~^)
- 결론
- 메모리 주소 관련 처리를 하지 않고 CPU의 상태(레지스터) 정보만 바꾸기 때문에
프로세스 컨텍스트 스위칭(process context switching)보다 스레드 컨텍스트 스위칭(thread context switching)이 처리속도가 더 빠르다.
- 메모리 주소 관련 처리를 하지 않고 CPU의 상태(레지스터) 정보만 바꾸기 때문에
컨텍스트 스위칭이 미치는 간접적인 영향은?
캐시오염(cache pollution)이 생길 수 있다.
CPU 안에는 기본적으로 캐시가 있다.
메모리와 CPU 가 데이터를 주고받을 때, 자주 접근하는 데이터는 캐시에 올려놓고 사용한다.
서로 다른 데이터들이기 때문에 캐시가 오염된다.
왜냐하면, 컨텍스트 스위칭이 일어나면 이 캐시에는 이전에 일어났던 프로세스의 정보가 저장되어 있기 때문에
필요로 하는 정보는 없을 확률이 높기 때문이다.
→ 스레드 컨텍스트 스위칭은 같은 프로세스 안의 스레드들끼리 스위칭이 일어나기 때문에 같은 메모리 주소를 공유해서
CPU 안의 캐시 정보는 많이 다르지 않겠지만, 프로세스 컨텍스트 스위칭은 다른 프로세스 안의 스레드들끼리 스위칭이 일어나는 것이기 때문에 다른 메모리 주소체계여서 CPU 안의 캐시정보가 다를 확률이 높다.
마무리
아직은 CS 를 공부한 지 얼마 안 돼서, 헷갈리고 어려웠던 부분이 많았던 것 같다.
CS 스터디 활동을 꾸준히 하다 보면 CS 쪽은 통달해서 면접 올 패스했으면 좋겠다..!
오늘도 끝까지 제 글을 읽어주신 방문자님들께 감사드립니다!!
혹시 읽다가 "어, 이 부분은 잘못됐는데..?" 싶은 부분이 있었다면 알려주시면 감사하겠습니다 :)
신랄하게 비판해 주십시오!

'Computer Science > 운영체제' 카테고리의 다른 글
CPU 의 구성요소 (1) | 2023.10.12 |
---|---|
인터럽트와 트랩의 차이, 그리고 시스템 콜이란? (0) | 2023.09.20 |