프로세스와 스레드
프로세스
- 실행되고 있는 프로그램의 개체. CPU 시간이나 메모리 등 시스템 자원이 할당되는 독립적인 개체 . 다른 프로세스와 상관 없이 독립적으로 자원을 할당 받음.프로세스 간의 통신을 위해선 파이프, 파일, 소켓 등을 사용하여 통신하여야 함
쓰레드
- 프로세스 안에 존재하여, 프로세스 내의 자원을 공유하는 개체
- 흔히 경량 프로세스라고 부름
- 각 쓰레드는 별도의 레지스터와 스택을 갖고, 힙 영역은 공유함
교착상태
두 개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있기 때문에 결과적으로 아무것도 완료되지 못하는 상태(두개 이상의 프로세스가 무한대)
- 교착상태 조건
- 상호배제(Mutual exclusion) : 공유자원은 하나의 프로세스가 독점하고 사용중에 다른 프로세스가 접근하지 못한다.
- 점유대기(Hold and wait) : 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다린다.
- 비선점(No preemption) : 프로세스가 어떤 자원의 사용을 끝낼 때까지 그 자원을 뺏을 수 없다.
- 순환대기(Circular wait) : 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있다.
- 해결책
- 예방
- 상호배제 부정 : 한 번에 여러개의 프로세스가 공유자원 사용가능
- 점유대기 부정 : 자원이 점유되지 않은 상태에서만 자원 요구를 하게 함
- 비선점 부정 : 다른 프로세스가 자원 요구시 가지고 있던 자원 반납 후 기다리게 함
- 순환대기 부정 : 각 자원 유형에 일련의 번호 지점
- 회피
- 은행원 알고리즘 : 프로세스가 자원 요구할 때마다 안정상태인지 확인을 함, 안정상태가 아닌 경우 다른 프로세스가 자원을 반납하여 안정상태가 될 때까지 대기한다.
- 회복
- 교착상태인 프로세스 종료 후 해당 자원을 회수해서 자원을 회복하는 기법
- 발견
- 교착상태가 발생했는지 검사 및 점검 후 프로세스와 자원을 발견하는 기법
- 예방
스케쥴링
여러 프로세스를 번갈아 사용하는 경우 어떤 시점에 어떤 프로세스를 사용할지 정하는 것
- 비선점 스케쥴링 : 한 프로세스가 자원을 선택했을 때 다른 프로세스가 해당 자원을 빼앗을 수 없는 것
- FIFO : 먼저 들어간 녀석을 먼저 처리함
- 우선순위 : 큐 내부에서 우선순위가 가장 높은 녀석부터 처리함(같은 경우 FIFO)
- Round Robin : FIFO로 이루어지지만 주어진 시간안에 처리해야함 시간을 오버할 경우 제일 뒤로 이동
- SJF : 가장 처리시간이 짧은 녀석부터 먼저 처리
- 선점 스케쥴링 : 현재 실행중인 프로세스가 인터럽트가 걸리고 다음 상태로 넘어갈 수 있는 것
Aging 기법
기아상태 예방으로 시간이 지나면 우선순위를 올리는 방법
기아상태
프로세스의 우선순위가 낮아서 자원을 결코 할당 받지 못하는 상태
참조의 지역성
주어진 시간동안 CPU의 메모리 참조가 제한된 영역에서만 이루어
한번 참조된 메모리영역은 다시 참조될 가능성이 큼