경쟁 상태란 무엇인가요?

  • 공유 자원에 대해 여러 프로세스가 동시에 접근을 시도할 때, 타이밍이나 순서 등이 결과값에 영향을 줄 수 있는 상태를 말한다.

  • 즉, 공유 자원에 여러 프로세스가 동시에 접근할 때 자료에 일관성을 해치는 결과를 낼 수 있다.

꼬리 질문

  • 발생하는 경우에 대해서도 설명해 주세요.

  1. 커널 작업 수행 중 인터럽트 발생할 경우

    • 커널 모드에서 데이터를 로드하여 작업을 하던 도중 인터럽트가 발생하여 같은 데이터를 조작하는 경우에 발생할 수 있다.

    • 커널이 가진 전역변수는 모든 프로세스의 공유물이므로 경쟁 상태의 가능성이 있다.

    • 커널모드에서 작업을 수행하는 동안 인터럽트를 disable 시켜 인터럽트가 CPU 제어권을 가져가지 못하도록 하여 해결할 수 있다.

  2. 프로세스가 시스템 콜을 하여 커널 모드로 진입해서 작업을 수행하는 도중에 문맥 교환이 발생할 경우

    • 프로세스1이 커널모드에서 데이터를 조작하던 도중 시간이 초과되어 CPU 제어권이 프로세스2로 넘어가 같은 데이터를 조작하는 경우를 말한다.

    • 프로세스가 커널모드에서 작업을 하는 경우에는 시간이 초과되더라도 CPU 제어권이 다른 프로세스에게 넘어가지 않도록 한다.

  3. 멀티 프로세스에서 공유 메모리 내의 커넬 데이터에 접근할 경우

    • 멀티 프로세스 환경에서 2개의 CPU가 동시에 커널 내부의 공유 데이터에 접근하여 조작하는 경우에 발생할 수 있다.

    • 커널 내부에 있는 각 공유 데이터에 접근할 때마다 그 데이터에 대해 lock/unlock 함으로써 해결할 수 있다.

참고

Last updated