CPU는 다양한 작업을 번갈아가며 수행합니다. (멀티태스킹)
병렬 작업에서 생길 수 있는 문제를 해결하기 위한 '상호배제 기법'과 '임계구역'에 대해서 알아보겠습니다.
[ Contents ]
1. 상호배제 (Mutual Exclusion)
두 개 이상의 프로세스가 공유 자원에 동시에 접근하면 못하도록 방지
병렬 작업 시, 가장 큰 문제는 '데이터 동기화'입니다.
동일한 데이터를 동시에 읽기/쓰기 작업을 하면 데이터 무결성이 침해될 수 밖에 없습니다. 수정되기 전 데이터를 열람하거나, 같이 수정해서 덮어씌워지기도 합니다.
(예를 들어, git이나 svn과 같은 형상관리 시스템에서 충돌[conflict]나면 머리 아프죠...)
그래서 운영체제에서는 공유자원을 상호 베타적으로 이용하도록 조치하며, 이는 DB에서 하는 동시성 제어와 비슷합니다.
2023.04.25 - [Data Engineering] - [DB] 데이터베이스 동시성 제어(병행 제어)와 문제점
2. 임계영역 (Critical Section)
공유 자원을 독점적으로 사용하는 영역
공유 자원을 여러 프로세스가 동시에 접근할 경우 문제가 발생하므로, 임계영역을 지정해서 사용합니다. 해당 임계영역 동안에는 독점적으로 공유 자원을 사용할 수 있습니다. 다만 너무 오랫동안 독점할 경우, 병렬 효율성이 떨어지므로 적절히 사용해야 합니다.
2023.04.25 - [Data Engineering] - [DB] 데이터베이스 병행(동시성) 제어 기법: 로킹, 기본적 2PL
DB의 로킹 기법과 같이, 해당 데이터에 락(Lock)을 걸었다가 푸는 방식을 사용합니다.
wait(x_data);
/* x_data 처리 */
signal(x_data);
운영체제에서는 뮤텍스(Mutex), 세마포어(Semaphore) 등을 통해 임계영역을 설정하며, 이는 다음 글에서 자세히 알아보겠습니다.
'CS > OS' 카테고리의 다른 글
[OS] 교착상태 회복기법: 프로세스 종료/회복, 자원 선점 (ft. 희생자 선택의 원칙) (0) | 2023.08.02 |
---|---|
[OS] 교착상태 회피방법: 은행원 알고리즘(Banker's Algorithm) (0) | 2023.08.02 |
[OS] 교착상태(Dead Lock)의 정의와 발생조건 4가지: 상호배제, 점유와 대기, 비선점, 환형대기 (0) | 2023.07.31 |
[OS] 병행성 제어: 뮤텍스(Mutex)와 세마포어(Semaphore) (0) | 2023.07.24 |
[OS] CPU 스케줄링 기법: FCFS, SJF, SRT, 라운드 로빈, Multi Level (Feedback) Queue (1) | 2023.07.21 |
댓글