컴퓨터 공학 & 통신

[개념 정리/운영체제] 공유 자원, 경쟁 상태, 임계 영역

왈왈디 2023. 7. 26. 17:46
728x90

공유 자원

공유 자원(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 지식의 정석 - 큰돌'

 
728x90