critical section 2

[ Embedded ] 15. 세마포어(Semaphore)

Semaphore 프로세스 간 메시지를 전송하거나, 공유메모리를 통해 특정 데이터를 공유하게 되는 경우 문제가 발생할 수 있다. 즉, 공유된 자원에 여러 개의 프로세스가 동시에 접근하면서 문제가 발생하는 것으로써 공유된 자원 속 하나의 데이터는 한 번에 하나의 프로세스만 접근할 수 있도록 제한해 두어야 하는데 이를 위하여 고안된 것이 바로 Semaphore(세마포어)이다. Critical Section이란? OS에서 Critical Section은 아주 중요한 부분이다. 다중 프로그래밍 운영체제에서 여러 프로세스가 데이터를 공유하면서 수행될 때 각 프로세스에서 공유 데이터를 액세스하는 프로그램 코드 부분을 가리키는 말이다. 공유 데이터를 여러 프로세스가 동시에 액세스하면 시간적인 차이 때문에 잘못된 결과..

[ Linux Kernel ] 15. Kernel Preemption

19. Kernel Preemption 19.1 Mutual Exclusion — 상호 배제 컴퓨터 시스템을 얘기할 때 가장 중요한 파트 중 하나가 상호 배제 문제이다. 시스템이 정상적으로 작동하기 위해서는 이 상호 배제 개념은 반드시 필요하다. 설명을 진행하기 전, 먼저 X++이라는 연산이 정확하게 어떻게 이루어져 있는지부터 이해하고 가자. 우리가 보통 프로그래밍 언어를 사용할 때 X++과 같은 단항연산자를 사용하면, 하나의 명령만으로 덧셈이 정상적으로 이루어지는 것 같지만 실제로 동작하는 기계 입장에서 이 단항연산 과정은 3단계로 나누어진다. 그 과정은 아래와 같다. X를 저장소로부터 읽어서 CPU 레지스터로 읽어들인다. CPU 안에서 ALU 연산을 진행한다. CPU 로부터 나온 결과를 다시 저장소에..