ㅇ Context Switch
ㅇ 세마포어 vs 뮤텍스
※ 컨텍스트 스위치란? - 멀티프로세스 환경에서 CPU가 어떤 하나의 프로세스를 실행하고 있는 상태에서 인터럽트의 요청에 의해 다음 우선 순위의 프로세스가 실행되어야 할 때 기존의 프로세스의 상태 또는 레지스터 값(Context)을 저장하고 CPU가 다음 프로세스를 수행하도록 새로운 프로세스의 상태 또는 레지스터 값(Context)를 교체하는 작업을 Context Switch(Context Switching)라고 한다.
출처: https://jeong-pro.tistory.com/93 [기본기를 쌓는 정아마추어 코딩블로그]
- CPU가 해당 프로세스를 실행하기 위한 해당 프로세스의 정보들이며 프로세스의 PCB(Process Control Block)에 저장된다.
- 그래서 컨텍스트 스위칭 때 PCB의 정보를 읽어(적재) CPU가 전에 프로세스가 일을 하던 거에 이어서 수행이 가능한 것이다.
- ※ Context Switching 때 해당 CPU는 아무런 일을 하지 못한다. 따라서 컨텍스트 스위칭이 잦아지면 오히려 오버헤드가 발생해 효율(성능)이 떨어진다.
- 오버헤드(overhead)는 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간 및 메모리 등
- '간접적인'이라는 표현이 들어가는 이유는 목적 달성에 본질적인 것은 아니지만 필요한 자원이기 때문이다. 즉 반드시..는 아닌 것이다.
-
Ex) A라는 처리를 실행한다면 3초 걸리는데, 안전성을 고려하여 B라는 처리를 추가한 결과 처리시간이 10초 걸렸다면 => 오버헤드는 7초
-
추가로 B를 개선해 B라는 처리를 한 결과, 처리시간이 5초가 되었다면 =>이 경우 오버헤드가 5초 단축)
-
참고 블로그(★) : https://gs.saro.me/dev?page=10&tn=160
- 동시성 프로그램잉에서의 가장 큰 숙제인 "공유 자원 관리"
ㅇ 뮤텍스 : 반면에 뮤텍스는 오직 1개만의 프로세스(또는 쓰레드)만 접근할 수 있습니다.
ㅇ 세마포어 : 세마포어는 공유 자원에 세마포어의 변수만큼의 프로세스(또는 쓰레드)가 접근할 수 있습니다.
- 차이점
- 현재 수행중인 프로세스가 아닌 다른 프로세스가 세마포어를 해제할 수 있습니다.
- 하지만 뮤텍스는 락(lock)을 획득한 프로세스가 반드시 그 락을 해제해야 합니다.
- 참고
ㅇ https://junghyun100.github.io/Semaphore&Mutex/
ㅇ https://worthpreading.tistory.com/90
https://mamu2830.blogspot.com/2021/01/whatIsSystemCall.html