본문 바로가기
OS

스레드의 공유자원 관리(동기화)

by 권세희 2021. 5. 9.

운영체제로부터 시스템 자원을 할 장 받는 작업의 단위를 프로세스라고 한다.

 

시스템 자원의 예로는 무엇이 있을까 ❓

1. CPU 시간

2. 운영되기 위해 필요한 주소 공간

3. Code, Data, Stack, Heap의 구조로 되어 있는 독립된 메모리 영역

 

프로세스는 각각 독립된 메모리 영역을 가지고 있는데 프로세스 내에 실행되는 여러 흐름의 단위인 스레드와 메모리 영역을 공유한다.

 

하나의 프로세스 안에 여러 스레드가 존재(기본적으로 하나의 스레드를 가지고 있음)할 수 있으며 같은 프로세스 내에 있는 스레드들은 각각의 Stack 영역을 가지고 있고 Code, Data, Heap 영역은 공유한다. 

스택 안에는 지역변수, 리턴 주소, 값 파라미터, 리턴 값이 들어가며 이것은 각각의 스레드가 가지고 있다.

힙 안에는 동적으로 할당되는 배열이나 객체가 들어가며 이를 공유하기에 한 스레드가 프로세스 자원을 변경하면(동적이라는 뜻이므로 즉 Heap Area 부분) 다른 이웃 스레드도 변경 사실을 즉시 알 수 있는 것이다. 그 변경사실을 받아와서 스택에서 활동을 하여 반영할 것이다.

 

멀티프로세스 멀티스레드
하나의 응용 프로그램을 여러개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것 하나의 응용프로그램을 여러개의 스레드로 구성하고 각 스레드로 하여금 하나의 작업을 처리하도록 하는 것
여러 개의 자식 프로세스 중 하나에 문제가 발생하면 다른 프로세스로 전파되지 않는다. 통신 부담 적음, 시스템 처리량 증가, 시스템 자원 소모 감소
Context Switching 발생(CPU 레지스터 교체 뿐만 아니라 RAM과 CPU 사이의 캐쉬 메모리에 대한 데이터까지 초기화), 프로세스간 어렵고 복잡한 통신기법 자원 공유의 문제 발생 (동기화 문제 발생), 하나의 스레드에서 문제가 발생하면 전체 프로세스가 영향을 받는다.

 

동기화 문제를 어떻게 해결할까 ❓

병행 제어를 통해 데이터의 불일치를 막아야 한다.

 

💡 임계 영역

하나의 프로세스가 수정 가능한 공유자원을 액세스하고 있을 때, 다른 프로세스는 그 공유 데이터에 접근할 수 없도록 보장

 

💡 임계 구역 상호 배제 기법

 

1. 뮤텍스

일종의 locking 매커니즘으로 lock을 가지고 있을 때만 공유 데이터 접근 가능

키를 가진 사람만이 접근 가능하고 일이 끝나면 키 반납

 

2. 세마포어

동시에 리소스에 접근할 수 있는 허용 가능한 counter의 개수를 의미

count 수가 1개면 binary semaphore라고 하며 이는 뮤텍스와 개념적으로 같다.

여러개이면 counting semaphore라고 불린다.

 

3. 모니터

뮤텍스와 condition valuable를 갖고 있는 매커니즘

순차적으로만 사용할 수 있는 공유자원이나 그룹에 할당하며 데이터와 프로시저를 포함하는 병행성 고급 구조체

모니터 내부 변수는 모니터 내부에서만 접근할 수 있고 이는 정보의 은폐 기법

모든 자바 객체는 Monitor를 갖고 있다.

 

뮤텍스와 세마포어의 차이점은 ❓

뮤텍스는 공유자원에 대한 접근권한 즉 lock이라는 키를 한개만 가질 수 있고 세마포어는 여러개 가능

'OS' 카테고리의 다른 글

교착상태 필요조건과 해결방법  (0) 2021.06.03
CPU 스케줄링  (0) 2021.05.24
프로세스 스케줄링이 뭘까❓  (0) 2021.01.04
스레드에 대해 알아보자  (0) 2021.01.03
인터럽트를 알아보자  (0) 2020.12.31