공유 자원
공유 자원(shared resource)란 시스템 안에서
각 프로세스, 스레드가 함께 접근할 수 있는
모니터, 프린터, 메모리, 파일, 데이터 등의 자원이나 변수를 의미한다.
경쟁 상태
경쟁 상태(race condition)는 공유 자원을 둘 이상의 프로세스 또는 스레드가
동시에 읽거나 쓰는 상황을 말하며
동시에 접근을 시도할 때의 타이밍이
예상되는 결과 값에 영향을 줄 수 있는 상태를 의미한다.
임계 영역
임계 영역(critical section)은 둘 이상의 프로세스 또는 스레드가
공유자원에 접근할 때 순서 등의 이유로 결과가 달라지는 코드 영역을 말한다.
이 영역은 한 번에 둘 이상의 프로세스나 스레드가 들어갈 수 없게 설계된다.
아래는 a.js와 b.js가 하나의 JSON 파일에 동시에 접근하여
예상과 다른 결과를 보이는 예시 코드이다.
//a.js/b.js
const fs = require('fs')
const path = require('path')
const pt = path.join(__dirname, "a.json")
let ret = JSON.parse(fs.readFileSync(pt))
ret.num -= 1000;
setTimeout(()=>{
fs.writeFileSync(pt, JSON.stringify(ret))
}, 3000)
//a.json
{"num": 1000}
a.js 와 b.js를 동시에 실행하면
a.json의 num이 최종적으로 -1000이 되지 않고,
0이 된다.
a와 b가 json을 읽은 시점이 동일하여
두 프로세스 모두 1000에서 1000을 마이너스 한 것이다.
일반적인 경우 a.json과 같은 임계 영역에는
한 번에 하나의 프로세스만 접근하도록 lock을 걸어야 한다.
do {
lock();
{임계 영역}
unlock();
}
경쟁 상태 관리의 중요성
경쟁 상태를 잘 해결하지 못하면 데이터 정합성, 데이터 무결성이 깨질 수 있다.
데이터 정합성
데이터 정합성(data consistency)는 예상되는 데이터의 값과 다른 것을 말한다.
위의 예시와 같이 둘 중 하나의 프로세스가 JSON을 읽을 때의 값이 0이어야 하는데
1000이었던 것 같은 경우이다.
데이터 무결성
데이터 무결성(data integrity)는 데이터가 어떠한 규칙을 위반해서는 안됨을 의미한다.
예를 들어 은행 잔고는 0원 미만이 될 수 없고, 0원인 경우 출금할 수 없는 상황을 말한다.
또한, 데이터 무결성은 데이터가 전송, 저장되고 처리되는 모든 과정에서
변경되거나 손상되지 않고
완전성, 정확성, 일관성을 유지함을 보장하는 것을 말하기도 한다.
참고: inflearn 강의 'CS 지식의 정석 - 큰돌'
'컴퓨터 공학 & 통신' 카테고리의 다른 글
[개념 정리/운영체제] 교착 상태(deadlock) (0) | 2023.07.26 |
---|---|
[개념 정리/운영체제] 경쟁 상태 해결 방법 - 뮤텍스, 세마포어, 모니터 (0) | 2023.07.26 |
[개념 정리/운영체제] IPC (Inter-Process Communication) (0) | 2023.07.26 |
[개념 정리/운영체제] 멀티 프로세싱 & 멀티 스레딩 (0) | 2023.07.26 |
[개념 정리/운영체제] 프로세스 상태 (0) | 2023.07.26 |