공유 자원
프로세스 간 통신이 이루어지는 상황에서, 프로세스 A가 공유 메모리 공간에 데이터를 쓰고, 프로세스 B가 해당 메모리 공간을 읽는 상황이 있다고 가정해보자. 두 프로세스가 공유 메모리 공간이라는 공유 자원을 통해 통신하는 것이다.
동일한 프로세스 내 스레드 A와 B가 같은 파일을 수정하는 경우도 두 스레드는 파일 자원을 공유하고 있는 것이다. 이렇게 프로세스 혹은 스레드가 공유하는 자원을 공유 자원 (Shared Resource)이라고 한다.
💡공유 자원 (Shared Resource)
- 두 개 이상의 프로세스 혹은 스레드가 공유하는 자원으로, 동시 접근 가능하다.
- ex. 메모리, 파일, 전역 변수, 입출력 장치 등
다수의 프로세스 혹은 스레드가 동시에 공유 자원에 접근할 경우 문제가 발생할 수 있는데, 이 코드를 임계 구역 (Critical Section)이라고 한다.
💡임계 구역 (Critical Section)
- 여러 프로세스나 스레드가 공유 자원에 동시에 접근하는 경우, 문제가 발생할 수 있는 코드
✅ 상황 설명
- 중앙에 공유 변수 sdata가 있다. sdata의 현재 값은 0이다.
- 두 개의 프로세스 P_i와 P_j가 각자 sdata를 1 증가시키는 코드(sdata = sdata + 1)를 실행하려 한다.
✅ 문제 발생 가능성
- Process-P_i가 sdata 값을 읽는다. (현재 0)
- Process-P_j도 거의 동시에 sdata 값을 읽는다. (여전히 0)
→ 두 프로세스 모두 자신이 읽은 0에 +1 연산을 수행한다.
- Process-P_i가 계산한 1을 sdata에 저장
- Process-P_j도 계산한 1을 sdata에 저장
✅ 결과
- 두 프로세스 모두 sdata를 +1 했다고 생각하지만,
- 실제 최종 결과는 1만 증가한다.
→ 만약 두 프로세스가 순차적으로 실행되었다면, sdata는 2가 되었을 것이다.
✅ 핵심 포인트
- sdata = sdata + 1은 단순한 한 줄 코드처럼 보이지만, 실제로는
- 읽기 (Read)
- 계산 (Add 1)
- 쓰기 (Write)
- 이러한 코드 실행 부분을 임계 구역(Critical Section) 이라고 한다.
💡레이스 컨디션 (Race Condition)
💡동기화 (Synchronization)
동기화 기법
💡뮤텍스 락 (Mutex Lock)
💡세마포 (Semaphore)
💡조건 변수와 모니터
💡스레드 안전 (Thread Safety)
출처
https://www.hanbit.co.kr/store/books/look.php?p_code=B3079890360
이것이 취업을 위한 컴퓨터 과학이다 with CS 기술 면접
기술 면접과 실무에 필요한 CS 지식, 한 권으로 끝내자!
www.hanbit.co.kr
이미지 출처
1. 임계 구역
[OS] Lecture 6. Process Synchronization and Mutual Exclusion (1/7) - Introduction / 운영체제 강의
'CS 기술 면접 준비 > 이것이 취업을 위한 컴퓨터 과학이다 with CS 기술 면접' 카테고리의 다른 글
[운영체제] 3-2. (3) 프로세스 간 통신 (업데이트 중..) (1) | 2025.07.09 |
---|---|
[운영체제] 3-2. (2) 멀티프로세스와 멀티스레드 (업데이트 중..) (0) | 2025.07.08 |
[운영체제] 3-2. (1) 프로세스와 스레드 (업데이트 중..) (1) | 2025.07.07 |
[운영체제] 3-1. 운영체제의 큰 그림 (업데이트 중..) (0) | 2025.07.06 |
[자료구조] 4-6. 그래프 (업데이트 중..) (0) | 2025.07.04 |