경쟁 상태란 무엇인가요?
공유 자원에 대해 여러 프로세스가 동시에 접근을 시도할 때, 타이밍이나 순서 등이 결과값에 영향을 줄 수 있는 상태를 말한다.
즉, 공유 자원에 여러 프로세스가 동시에 접근할 때 자료에 일관성을 해치는 결과를 낼 수 있다.
꼬리 질문
발생하는 경우에 대해서도 설명해 주세요.
커널 작업 수행 중 인터럽트 발생할 경우
커널 모드에서 데이터를 로드하여 작업을 하던 도중 인터럽트가 발생하여 같은 데이터를 조작하는 경우에 발생할 수 있다.
커널이 가진 전역변수는 모든 프로세스의 공유물이므로 경쟁 상태의 가능성이 있다.
커널모드에서 작업을 수행하는 동안 인터럽트를
disable시켜 인터럽트가 CPU 제어권을 가져가지 못하도록 하여 해결할 수 있다.프로세스가 시스템 콜을 하여 커널 모드로 진입해서 작업을 수행하는 도중에 문맥 교환이 발생할 경우
프로세스1이 커널모드에서 데이터를 조작하던 도중 시간이 초과되어 CPU 제어권이 프로세스2로 넘어가 같은 데이터를 조작하는 경우를 말한다.
프로세스가 커널모드에서 작업을 하는 경우에는 시간이 초과되더라도 CPU 제어권이 다른 프로세스에게 넘어가지 않도록 한다.
멀티 프로세스에서 공유 메모리 내의 커넬 데이터에 접근할 경우
멀티 프로세스 환경에서 2개의 CPU가 동시에 커널 내부의 공유 데이터에 접근하여 조작하는 경우에 발생할 수 있다.
커널 내부에 있는 각 공유 데이터에 접근할 때마다 그 데이터에 대해
lock/unlock함으로써 해결할 수 있다.
참고
Last updated