race condition
두 개 이상의 프로세스가 공통 자원을 병행적으로(concurrently) 읽거나 쓰는 동작을 할 때, 공용 데이터에 대한 접근이 어떤 순서에 따라 이루어졌는지에 따라 그 실행 결과가 같지 않고 달라지는 상황
race condition이 발생하는 경우
- 커널 작업을 수행하는 중에 인터럽트 발생
- 문제점 : 커널모드에서 데이터를 로드하여 작업을 수행하다가 인터럽트가 발생하여 같은 데이터를 조작하는 경우
- 해결법 : 커널이 작업을 수행중이면 인터럽트가 발생하더라도 먼저 하던 작업을 먼저 다 끝낸 뒤 인터럽트 처리 루틴을 실행하면 해결할 수 있다.
- 프로세스가 'System Call'을 하여 커널 모드로 진입하여 작업을 수행하는 도중 문맥 교환이 발생할 때
- 문제점 : 프로세스1이 커널모드에서 데이터를 조작하는 도중, 시간이 초과되어 CPU 제어권이 프로세스2로 넘어가 같은 데이터를 조작하는 경우 ( 프로세스2가 작업에 반영되지 않음 )
- 해결법 : 프로세스가 커널모드에서 작업을 하는 경우 시간이 초과되어도 CPU 제어권이 다른 프로세스에게 넘어가지 않도록 함
- 멀티 프로세서 환경에서 공유 메모리 내의 커널 데이터에 접근할 때
- 문제점 : 멀티 프로세서 환경에서 2개의 CPU가 동시에 커널 내부의 공유 데이터에 접근하여 조작하는 경우
- 해결법 : 커널 내부에 있는 각 공유 데이터에 접근할 때마다, 그 데이터에 대한 lock/unlock을 하는 방법
Critical Section
여러 프로세스가 데이터를 공유하며 수행될 때, 각 프로세스에서 공유 데이터를 접근하는 프로그램 코드 부분
프로세스 동기화를 위해선 하나의 프로세스가 임계영역에 있을 때 다른 모든 프로세스는 임계영역에 들어갈 수 없어야한다. 그리고 이를 해결하기 위한 프로그램적 해결법의 조건이 세 가지 존재한다.
mutual exclusion(상호 배제)
- 프로세스가 임계영역을 수행중이면 다른 모든 프로세스들은 그들의 임계영역에 들어가면 안된다.
progress(진행)
- 아무도 임계영역에 있지 않은 상태에서 들어가고자 하는 프로세스가 있으면 들어가게 해줘야한다.
bounded waiting(유한 대기)
- 프로세스가 임계영역에 들어가려고 요청한 후부터 그 요청이 허용될 때까지 다른 프로세스들이 임계영역에 들어가는 횟수에는 한계가 있어야 한다.
'Computer Science > Operating System' 카테고리의 다른 글
데드락 (0) | 2024.04.16 |
---|---|
세마포어, 뮤텍스 (0) | 2024.04.16 |
CPU 스케쥴링 (1) | 2024.04.16 |
프로세스와 스레드 (0) | 2024.04.16 |
커널과 쉘 (0) | 2024.04.16 |