멀티프로세싱이 발전하게 되면서 공유자원 관리라는 큰 문제점이 발생한다.
예를 들어 전역변수 a가 있다고 가정하자.
프로세서 1은 a++;를 수행하고, 프로세서 2는 a--;를 수행한다고 생각해 보자.
RISC계열 프로세서에서 이 명령어는 어셈블리어 3줄로 표현 가능하다.
lw x9, 0(x22)
addi x9, x9, 1
sw x9, 0(x22)
이렇게 폰노이만 구조나 하버드구조에서는 연산을 진행할 때 메모리의 주소에 접근하여 레지스터에 복사한 후, 연산을 완료하고 다시 메모리에 업로드 하는 과정이 진행된다.
하지만 이 3개의 연산이 완료되기 전에 프로세서 2의 작업이 수행된다고 하면,
레지스터 x9에 더하기연산한 값이 잘 들어가지 않은 상태에서 빼기 연산을 진행하는 것이고 이는 큰 오류를 발생시킬 것이다.
따라서 상호배제(Mutual exclusion)을 달성하는 기법이 개발된 것이다.

Mutex
뮤텍스는 한 공유자원에 접근하려면 열쇠가 있어야 한다는 개념이다. 공유자원에 접근하려면 열쇠를 요청하여 받게 되고, 그 공유자원에 대한 연산이 끝난 후에 열쇠를 반납하게 되고, 그렇게 되면 다른 프로세스도 그 공유자원에 접근할 수 있다.
Semaphore
세마포어는 현재 공유자원에 접근할 수 있는 쓰레드에 제한을 두고, 접근하고 있는 프로세스의 수를 나타내는 값을 두어서 상호 배제를 달성하는 기법이다.
'SW > OS' 카테고리의 다른 글
| FreeRTOS Porting (0) | 2024.02.04 |
|---|---|
| RTOS 개론 (0) | 2024.01.28 |
| 멀티태스킹, 멀티스레딩, 멀티프로세싱 (0) | 2024.01.28 |