Producer - Consumer Problem 특정 프로세스는 데이터를 생산하고, 특정 프로세스는 생산된 데이터를 통해 처리하는 작업과 같이 생성자-소비자가 있는 프로그램에서 발생할 수 있는 문제이다. 만약 생산되지 않은 경우에 데이터를 사용하는 소비자가 데이터를 가져가게 된다면 원치 않는 데이터 (쓰레기 값)을 가져가게 될 가능성이 크다. 따라서 각각의 프로세스(쓰레드)로 부터 생성자 - 소비자가 존재한다면 생성, 소비 순으로 진행될 수 있도록 동기화가 필요하다. import java.util.concurrent.Semaphore; class Buffer { int[] buf; int size; int count; int in; int out; Semaphore mutex, full, empty; ..
CPU라는 하드웨어 자원을 여러 프로세스들이 효율적으로 사용하기 위해, 스케줄링 과정이 필요하다. 다음에 실행할 프로세스를 선택하는 알고리즘을 통해 스케줄링을 하게 된다. 상황에 따라 효율적인 CPU 스케줄링이 오히려 성능 감소를 야기 할 수 도 있다. Scheduling Critria CPU 스케줄링의 효율성을 판단하는 기준은 다음과 같다. CPU Utilizaiton Throughput Turnarround Time Wating Time Response Time Preemptive VS Non-Preemptive 다양한 CPU 스케줄링을 알기에 앞서 선점(Preemptive), 비선점(Non-Preemptive) 방식에 대한 이해가 필요하다. Preemptive 선점은 말그대로 특정 프로세스가 CPU..
프로세스 메모리에 할당되어 실행중에 있는 프로그램 (program in execution)을 말한다. 프로그램은 일반적으로 저장장치에 저장되어 아무일도 하지 않는 상태이다. 프로세스를 job, task 등으로 말하기도 한다. 프로세스 상태 New : 저장장치로 부터 프로그램을 메모리에 할당한 경우이다. Ready : New 상태에서 초기화 과정 후 실행할 준비가 완료되거나, Running 상태에서 인터럽트가 발생한 경우이다. Running : 스케줄러를 통해 다음에 실행될 프로세스로 선택된 경우 Running 상태로 바뀌어 작업을 수행한다. Wating : I/O와 이벤트를 처리하는 것은 지연시간이 크므로 이와 같은 경우 Waiting 상태 후 다시 Ready로 간다. Terminated : 프로세스를 ..