728x90
데드락을 해결하기 위한 방법은 크게 3가지로 구분된다. 예방 , 회피 , 탐지와 회복 의 3가지 주제로 설명하며 탐지와 회복은 하나의 주제로 묶인다. 예방은 데드락의 4가지 발생조건을 하나라도 발생하지 않게 하는 방법을 말한다. 상호배제,점유대기,비선점,순환대기 중 한개라도 예방할 수 있다면 데드락을 해결할 수 있다. 상호배제의 예방 : 프로세스들이 동시에 공유자원을 사용할 수 있게 한다. 점유대기 예방 : 프로세스가 자원을 점유하고 있으면 다른 자원을 기다리지 않게 만든다. 비선점 예방 : 우선순위 별로 프로세스끼리 자원을 빼앗아 올 수 있게 만든다. 순환대기 예방 : 프로세스가 자원을 순환 형태로 대기하게 하지 않고 그냥 프로세스를 일렬로 세워서 한 방향으로만 자원을 요구할 수 있게 한다. 회피는 프..
데드락은 두개 이상의 프로세스가 동시에 실행될 때 운영체제 혹은 소프트웨어간 자원관리에 에러가 발생하여 프로세스가 멈춰버리는 현상을 말한다. (이때 간혹 운영체제 자체가 멈추기도 한다). 둘 이상의 프로세스 실행 시 시스템 자원 호출 요청 순서가 뒤엉켜 서로가 다른 프로세스에서 점유중인 자원을 기다리며 무한 대기상태에 빠지는것을 말한다. 이때 데드락이 발생하기 위해서 다음 4가지의 조건을 모두 충족해야 한다. (상점비순) 상호배제 : 한번에 하나의 프로세스만 프로세스 실행에 필요한 자원을 사용할 수 있다. 점유와 대기 : 자원을 가지고 있는 상태에서 다른 프로세스가 자원을 반납하기를 기다리고 있어야 한다. 비선점 : 다른 프로세스가 가지고 있는 자원을 강제로 빼앗아 올 수 없다. 순환대기 : 각 프로세스..
멀티프로세스란 여러개의 시피유가 한 개 이상의 여러개 프로세스를 동시에 실행하는것을 말한다. 각 프로세스가 독립된 주소공간을 가져야 하거나 독립된 메모리 공간을 가져야 할 때 사용한다. 멀티프로세스는 하나의 프로세스가 비 정상적으로 종료되어도 다른 프로세스에 심각한 영향을 주지 않는다. 멀티스레드는 하나의 프로세스 안에서 여러개의 스레드가 자원을 서로 공유하며 작업을 수행하는 것이다. 만약 멀티 프로세스 대신 멀티 스레드를 사용하는 상황이라면 그 이유는 멀티스레드의 경우 프로세스를 생성한 후 각각 자원을 할당할 필요가 없고 스레드끼리 자원을 공유하기 때문에 자원관리가 효율적이다. 각 스레드끼리는 스택영역을 제외한 메모리 영역을 공유하므로 통신 비용이 적어서 프로그램 응답시간이 빠르다. 다만 병목현상 , ..
PCB는 Process Control Block의 약자로 운영체제의 커널 스택에 위치한다. 운영체제가 프로세스에 관련한 정보를 운영체제의 커널에 저장해 놓은 영역을 의미하는 것이다. 각 프로세스마다 고유한 PCB를 가지고 프로세스가 종료되면 같이 제거된다. 일반적으로 PCB는 다음과 같은 구성으로 이루어져 있다. (위키백과) 프로세스 식별자(Process ID) 프로세스 상태(Process State): 생성(create), 준비(ready), 실행(running), 대기(waiting), 완료(terminated) 상태가 있다. - 유예준비상태suspended ready, 유예대기상태suspended wait 는 스택이 아닌 disk에 저장된다. 프로그램 계수기(Program Counter): 프로그램..
프로그램이 메모리에 올라가서 CPU에 의하여 처리되는 상태의 작업 단위를 프로세스 라고 한다. 프로세스는 각각 독립적인 주소 공간을 할당을 받는다. 이 때 프로세스 내부에서의 메모리 구조는 코드-데이터-스택-힙 으로 구성이 된다. 스레드는 프로세스 내에서 동작하는 실행의 단위를 말하는 것이다. 프로세스는 최소한 하나 이상의 스레드 (메인스레드) 를 가진다. 하나의 프로세스 내에서 동작되는 실행의 흐름을 의미하며 프로세스 내에서 스레드끼리 정보나 주소, 자원등을 공유할 수 있다. 스레드가 여러개일 경우 각각 스레드마다 독립적인 스택을 확보하고 코드-데이터-힙 공간은 공유한다. 이는 스택이 함수내 호출인자 등을 저장하는 공간이기에 실행 흐름에서 독립적인 함수 호출을 가능케 하기 위함이다.