본문 바로가기
CS/OS

교착상태

by KDGdev 2023. 3. 8.

교착상태


교착상태란 두 개 이상의 프로세스들이 서로가 가진 자원을 기다리며 중단된 상태를 의미합니다.

 

여러 프로세스들이 함께 접근할 수 있으면서 사용하는 자원들을 공유자원이라고 합니다.

 

자원들을 공유해서 사용하는 것은 물론 효율적이지만 공유하기 때문에 발생하는 문제점도 있습니다.

 

예를 들어 사용자 A와 B가 있다고 할 때 A는 100만원이 있는 계좌에 50만원을 입금하고 B는 50만원을 출금하는 상황이 동시에 일어났다고 가정하겠습니다.

 

A의 행동은 현재값+50의 결과를 낳고 B는 현재값-50의 결과를 낳습니다. 정상적인 과정은 A로인해 현재값이 150이되어 B의 과정을 거치고 다시 100이되는 것입니다. 혹은 그 반대도 성립하겠죠?

 

하지만 이 과정이 동시에 일어났기 때문에 현재값은 바뀌지않고 100이됩니다. 그렇기 때문에 결괏값은 50 혹은 150이 나올 수도 있습니다.

 

이렇게 

 

 

 

 

멀티프로세싱

우리가 알고 있는 일반적인 개념은 하나의 프로그램이 실행되면 하나의 프로세스가 된다는 것입니다.

 

멀티프로세싱이란 하나의 응용프로그램을 여러 개의 프로세스로 구성하여 마찬가지로 여러 개의 프로세서가 하나의 작업을 처리하는 것입니다.

 

프로세서란 CPU를 의미하며 현재 우리가 사용하는 PC는 대부분 멀티코어로 여러 개의 프로세스를 가지고 있습니다.

 

 

멀티프로세싱에서 중요한 점은 하나의 프로그램이 여러개의 프로세스로 나누어진다는 것입니다.

 

나누어졌기 때문에 하나 이상의 일을 병렬로 처리할 수 있으며 프로세스 중 일부에 문제가 발생해도 다른 프로세스에 영향이 없어 신뢰성이 높은 강점이 있습니다.

 

 

하지만 각 프로세스들은 독립적으로 동작해 자원이 서로 다르게 할당된다는 문제가 있습니다.

 

이는 IPC란 프로세스끼리 데이터를 주고받고 공유 데이터를 관리하는 메커니즘을 통해 데이터를 공유해서 해결합니다.

 

그렇지만 메모리가 완전히 공유되는 스레드 보다는 속도가 떨어집니다.

 

 

아래는 멀티프로세스의 예시입니다. 웹 브라우저는 멀티프로세스의 구조를 가집니다.

 

멀티스레딩

먼저 스레드부터 설명하겠습니다.

 

스레드란 프로세스의 실행 가능한 가장 작은 단위입니다.

 

코드, 데이터, 힙 영역을 각각 생성하는 프로세스와는 달리 스레드는 코드, 데이터, 힙 영역은 스레드끼리 서로 공유하고 스택 영역은 각각 생성합니다.

 

 

멀티스레딩이란 프로세스 내 작업을 여러 개의 스레드, 멀티스레드로 처리하는 기법입니다.

 

스레드끼리 서로 자원을 공유하기 때문에 효율성이 높지만 한 스레드에 문제가 생기면 다른 스레드에도 영향을 끼쳐 프로세스에 영향을 줄 수 있습니다.

 

 

※ 잘못된 정보, 혹은 다른 의견이 있다면 댓글로 말해주세요. 감사합니다.

'CS > OS' 카테고리의 다른 글

멀티프로세싱, 멀티스레딩  (0) 2023.03.07
컨텍스트 스위칭  (0) 2023.03.03
프로세스의 메모리 구조  (0) 2023.02.25
프로세스와 컴파일 과정  (0) 2023.02.25
메모리 할당  (0) 2023.02.13