[OS] 프로세스 동기화

옹심이·2024년 8월 31일
post-thumbnail

데이터의 접근

  • 컴퓨터는 외부에서 데이터를 읽어와서 연산 후 결과를 내보낸다. 그렇기 때문에 여러 군데에서 데이터를 읽는다면 문제가 발생할 수 있다
    • Storage-Box를 공유하는 E-Box가 여러개 있는 경우 Race Condition이 발생할 수 있다

Race Conditoin : 하나의 공유 자원을 여러 곳에서 접근하는 경우 발생하는 문제

  • Race Condition은 CPU가 두 개 이상일 때 발생할 수 있다
  • CPU가 하나일 때도 발생할 수 있다
    • 운영체제에 시스템 콜을 호출할 때 운영체제의 코드가 실행되는 경우 동일한 데이터에 접근하는 상황이 발생할 수 있다.
      • ex) 만약 A프로세스에 의해 운영체제가 B 자원을 읽어들였다, 그리고 C 프로세스에 의해 운영체제가 B자원을 수정한 경우 A는 이전 버전의 데이터로 작업을 수행하기 때문에 문제가 발생할 수 있다

운영체제의 Race Condition

점유권 문제

커널 모드에서 커널의 데이터에 접근하는 도중 CPU를 빼았기면 Race Condition이 발생할 수 있다

커널 모드에서 Co++를 수행하려는 와중에 점유권을 빼았겨서 Count의 변수가 변경된 상황이다

K는 다시 점유권을 받아도 레지스터에 저장된 이전의 데이터를 기반으로 연산을 수행하기 때문에 문제가 발생한다

그렇기 때문에 커널 모드에서 데이터를 사용하는 작업을 수행하면 점유권을 빼았지 않는 방식으로 이 문제를 해결할 수 있다

커널 모드로 수행 시 인터럽트 발생

커널 모드에서 작업 도중 인터럽트가 발생해 같은 자원에 대한 변경이 일어나면 같은 데이터에 대해 무결성을 보장할 수 없는 문제가 발생한다

다중 CPU 환경

각 CPU마다 다른 프로세스로 수행하는 환경에서 같은 자원을 사용할 때 문제가 발생할 수 있다

  • 해결 방법
    • 한번에 하나의 CPU만 커널 모드에 진입할 수 있게 한다
    • 커널 모드에서 사용중에 데이터에 대해 lock을 사용한다

0개의 댓글