* 공유 자원
=> 쓰레드는 자신의 Stack 영역을 제외한 프로세스 영역을
프로세스 내의 쓰레드들끼리 공유한다.
( 메모리 공유. )
=> 공유 자원을 서로 앞다투어 접근하는 행위를
'경쟁 조건 ( Race Condition )' 이라고 한다.
* 원자성 ( Atomic )
=> 더 이상 쪼개지지 않는 연산.
=> 다음 장에 자세히 다룬다.
* 임계 구역 ( Critical Section )
=> 둘 이상의 쓰레드가 동시에 접근해서는 안되는 코드를 말함.
=> 둘 이상의 쓰레드가 값을 '수정' 할 수 있는 구역.
* 임계 구역 문제를 해결하기 위한 조건
1. 상호배제 ( Mutual Exclusion )
=> 한 프로세스가 임계 구역에 들어가면 다른 프로세스는 접근할 수 없다.
=> 임계 구역 안 프로세스의 권한을 보호해주어야함.
2. 진행 ( Progress )
=> 임계 구역의 안이 비어있을 때, 누군가는 들어갈 수 있어야함.
=> 들어가려는 프로세스가 여러 개라면 어느 것이 들어가야하는지 결정해주어야함.
3. 한정 대기 ( Bounded Waiting )
=> 상호 배제로 인해 기다리게 되는 프로세스가 무한정 대기하지 않아야 함.
=> 언젠가는 반드시 진입할 수 있어야함.
* 혼란스러운 용어
=> 내가 많이 헤맨 단어는 '자원 ( Resource )' 이다.
자원이란 굉장히 넓은 의미였다.
단지 우리가 알고 있는 공유되는 메모리 영역 ( Data, Heap ... ) 의 데이터에 국한되지 않고
컴퓨터가 이루어진 컴퓨터에 의해 접근할 수 있는 모든 영역을 의미한다고 생각한다.
H/W, OS 등 모두 자원이 될 수 있다. 모두 접근이 가능하기 때문에.
예를 들어,
CPU 도 컴퓨터 자원이다.
프로세스 안의 쓰레드가 CPU 를 선점하기 위해서 경쟁하고 있다.
( 물론, 운영체제에 의해 관리되고 있다. )
게임 서버를 예시로 들면,
서버가 감당할 수 있고 최대의 효율을 낼 수 있는 일정 범위의 자원을 지정하고
여러 클라이언트가 접속할 때, 쓰레드를 생성해
서버의 공유되는 자원들을 경쟁하게 되고 이러한 자원들을 적절하게 동기화하는 것이
프로그래머가 해야하는 역할일 것이다.
( 물론, 여러가지 네트워크 개념이 포함될 것이다. )
참고 자료
'운영체제 & 컴퓨터구조' 카테고리의 다른 글
[OS] #10. mutex lock & 스핀락 ( Spinlock ) & CAS ( Compare-And-Swap ) (0) | 2022.09.14 |
---|---|
[OS] #9. 원자성 ( atomic ) & 가시성 ( visibility ) & 코드 재배치 (0) | 2022.09.13 |
[OS] #7. 프로세스간 통신 ( IPC, Inter-Process Communication ) (0) | 2022.09.07 |
[OS] #6. CPU ( 자원 ) 스케줄링 (0) | 2022.09.05 |
[OS] #5. 프로세스 ( Process ) 와 쓰레드 ( Thread ) (0) | 2022.09.04 |