///////
Search
1️⃣

연습문제 1 ~ 2

주제 - 교착상태(Dead Lock) 개요

면접 연계

1. 프로세스와 스레드 차이

프로세스는 메모리 상에서 실행중인 프로그램을 말하며, 스레드는 이 프로세스 안에서 실행되는 흐름 단위를 말한다.
프로세스마다 최소 하나의 스레드를 보유하고 있으며, 각각 별도의 주소공간을 독립적으로 할당받는다. (code, data, heap, stack)
스레드는 이중에 stack만 따로 할당받고 나머지 영역은 스레드끼리 서로 공유한다.
프로세스 : 자신만의 고유 공간과 자원을 할당받아 사용
스레드 : 다른 스레드와 공간과 자원을 공유하면서 사용

2. 멀티 프로세스로 처리 가능한 걸 굳이 멀티 스레드로 하는 이유는?

프로세스를 생성하여 자원을 할당하는 시스템 콜이 감소함으로써 자원의 효율적 관리가 가능함
프로세스 간의 통신(IPC)보다 스레드 간의 통신 비용이 적어 작업들 간 부담이 감소함
대신, 멀티 스레드를 사용할 때는 공유 자원으로 인한 문제 해결을 위해 '동기화'에 신경써야 한다.
→ 그래서 우리는, 멀티 스레드를 이용함으로써 공유자원이란게 생기고 이로 인해 생기는 문제를 해결하기 위해 동기화를 잘 하는 방법을 배워야 한다.
동기화 오류 중 하나인 교착상태에 대해 알아보고 이를 예방하기 위한 방법들을 알아본다.
면접 질문에는 교착상태를 설명하고, 이를 해결하기 위한 방법을 엮어서 물어보는 경우가 많더라.

문제

1. 2개 이상의 프로세스가 서로의 작업이 끝나기만 기다리며 작업을 더 이상 진행하지 못하는 상태를 무엇이라 하는가? → 교착상태 ( dead lock )

의미
다중 프로그래밍 시스템에서 2개 이상의 프로세스가 다른 프로세스의 작업이 끝나기만 기다리며 작업을 더 이상 진행하지 못하는 상태
프로세스가 자원을 얻지 못하는 상태
아사현상과의 차이점
아사현상은 정책상 잘못이나 오류로 인해 특정 프로세스의 작업이 이루어 지지 않는 것
이는 몇 번 이상 양보한다면 더 이상 양보하지 못하도록 하는 에이징으로 해결 가능하다
교착상태는 자연적으로 발생한다.
일괄처리시스템 사용 때보다 시스템 효율성을 증가시키고 제한된 자원의 사용률을 높이기 위해 사용하는 병행 처리 기술과 자원 공유 기술이 도입된 다중 프로그래밍 시스템이 교착상태 발생 확률이 높아졌다.
발생원인
: 프로세스가 사용하는 자원을 서로 기다리고 있을 때 발생한다.
1.
시스템 자원
다른 프로세스와 공유할 수 없는 시스템 자원을 사용할 때 발생
ex) 임계구역으로 보호되는 프린터, 스캐너, CD 레코더 등
2.
공유 변수
한 변수를 할당받은 상태에서 다른 변수를 기다리면 교착 상태 발생
3.
응용프로그램
대표적인 예로 RDBMS가 있다.
RDBMS의 경우 Transaction이 Database의 Resource를 서로 Lock을 발생시켜 완료하지 못하도록 차단하여 발생되는 교착상태를 의미한다.

2. 프로세스가 어떤 자원을 사용 중이고 어떤 자원을 기다리고 있는지를 나타내는 방향성이 있는 그래프를 무엇이라 하는가? → 자원 할당 그래프 ( resource allocation graph )

프로세스가 어떤 자원을 사용 중이고 어떤 자원을 기다리고 있는지를 방향성이 있는 그래프로 표현한 것
프로세스는 원으로, 자원은 사각형으로 표현한다.
프로세스가 자원을 할당받다.
프로세스가 자원을 기다리다.