운영체제 & 컴퓨터구조

[OS] #8. 공유 자원 & 임계 구역 ( Critical Section )

코딩하는상후니 2022. 9. 12. 21:42

 


 

 
 

* 공유 자원

 
=> 쓰레드는 자신의 Stack 영역을 제외한 프로세스 영역을
프로세스 내의 쓰레드들끼리 공유한다.
( 메모리 공유. )
 
 
=> 공유 자원을 서로 앞다투어 접근하는 행위를
'경쟁 조건 ( Race Condition )' 이라고 한다.
 
 
 
 
 
 
 

* 원자성 ( Atomic )

 
 
 
=> 더 이상 쪼개지지 않는 연산.
 
=> 다음 장에 자세히 다룬다.
 
 
 
 
 
 
 
 
 

* 임계 구역 ( Critical Section )

 
 
 
 
=> 둘 이상의 쓰레드가 동시에 접근해서는 안되는 코드를 말함.
 
=> 둘 이상의 쓰레드가 값을 '수정' 할 수 있는 구역.
 
 
 
 
 
 
 
 

 

 

* 임계 구역 문제를 해결하기 위한 조건

 
 
 

1. 상호배제 ( Mutual Exclusion )

 
 
=> 한 프로세스가 임계 구역에 들어가면 다른 프로세스는 접근할 수 없다.
 
=> 임계 구역 안 프로세스의 권한을 보호해주어야함.
 
 
 
 

2. 진행 ( Progress )

 
=> 임계 구역의 안이 비어있을 때, 누군가는 들어갈 수 있어야함.
 
=> 들어가려는 프로세스가 여러 개라면 어느 것이 들어가야하는지 결정해주어야함.
 
 
 
 
 
 

3. 한정 대기 ( Bounded Waiting )

 
=> 상호 배제로 인해 기다리게 되는 프로세스가 무한정 대기하지 않아야 함.
 
=> 언젠가는 반드시 진입할 수 있어야함.

 

 

 

 

 

 

 

 


 

 

* 혼란스러운 용어

 
=> 내가 많이 헤맨 단어는 '자원 ( Resource )' 이다.
 
자원이란 굉장히 넓은 의미였다.
단지 우리가 알고 있는 공유되는 메모리 영역 ( Data, Heap ... ) 의 데이터에 국한되지 않고
컴퓨터가 이루어진 컴퓨터에 의해 접근할 수 있는 모든 영역을 의미한다고 생각한다.
 
H/W, OS 등 모두 자원이 될 수 있다. 모두 접근이 가능하기 때문에.
 
 
예를 들어,
CPU 도 컴퓨터 자원이다.
프로세스 안의 쓰레드가 CPU 를 선점하기 위해서 경쟁하고 있다.
( 물론, 운영체제에 의해 관리되고 있다. )
 
 
게임 서버를 예시로 들면,
서버가 감당할 수 있고 최대의 효율을 낼 수 있는 일정 범위의 자원을 지정하고
여러 클라이언트가 접속할 때, 쓰레드를 생성해
서버의 공유되는 자원들을 경쟁하게 되고 이러한 자원들을 적절하게 동기화하는 것이
프로그래머가 해야하는 역할일 것이다.
( 물론, 여러가지 네트워크 개념이 포함될 것이다. )
 
 
 
 
 

 

 

참고 자료