2012-03-12 2 views
0

데이터를 효율적으로 저장하는 방법을 찾는 데 도움이 필요합니다. 나는 아직 제출되지 않은, 준비, 실행, 차단 및 완료를 포함하는 우선 순위 대기열을 사용하여 스케줄링 알고리즘을 작성 중입니다. 모든 프로세스는 아직 제출되지 않은 상태에서 시작됩니다. 내 정보는 표준 입력에서옵니다.예약 알고리즘 저장

각 라인 아래 (각각) 설명 :

첫번째 라인 = CPU가 시스템 (1~4)에서, 프로세스의 개수 (1 내지 25), 및 양자의 크기 (1 이상). 두 번째/세 번째 = 프로세스 ID (1 ~ 999), 프로세스 우선 순위 (1 ~ 10), 제출 시간 (음수가 아님), 총 CPU 시간 (1 ~ 1000), 입/출력이 필요합니다 (1 ~ 100), 및 각 컴퓨팅 I/O 사이클 (1 ~ 1000)의 입/출력 시간.

Sample Input 
1 2 10 
1 1 0 10 5 10 
2 2 3 10 5 10 

두 번째 줄과 세 번째 줄은 분리 된 프로세스이며 최대 25 개의 프로세스가있을 수 있습니다. 처음에는 각 프로세스를 자체 배열에 저장하여 큐에서 대기열로 배열을 쉽게 옮길 수 있었지만 25 개의 다른 배열을 만든 다음 사용하지 않는 것은 매우 비효율적이었습니다. 더 간단한 방법으로 내 "프로세스"를 저장할 수 있습니다. 큐를 통해 상태 (상태)로 이동할 수 있습니까?

답변

1

위의 두 번째/세 번째 줄에 표시된 상태를 포함하는 Process 클래스를 만들 것입니다. 다음과 같음 :

class Process { 
    private int pid; 
    private int priority; 
    private int submissionTime; 
    private int totalCpuTime; 
} 

대기열에 클래스 인스턴스를 저장합니다. 대기중인 프로세스 대기열을 만들지 않아도됩니다. 그런 다음 필요에 따라 인스턴스를 다른 대기열로 이동하십시오.

1

간단한 방법은 다음에 수행되는 태스크 결정 4 개 태스크 (CPU 당 하나)를 반복 ..

  • 를 생성하는 것이다.
  • 해당 작업 수행
  • 반복하십시오.

고정 크기의 ExecutorService로이 작업을 수행 할 수 있습니다.

IO 바운드 프로세스가있는 경우 CPU 바운드 프로세스 대신 미리 사용할 최적 스레드 수를 결정하고 그 번호를 남겨 두십시오.

1

숙제이고 OO 클래스에있는 경우 모델링 프로세스를 정의한 유형의 인스턴스로 간주하는 것이 좋습니다.

질문의 다른 측면에 대해 얼마나 많은 프로세스가 있는지 모르기 때문에 크기 25의 배열을 미리 할당하는 것에 대해 이야기하고있었습니다.

Java의 컬렉션 유형을 살펴보십시오. 객체 검색에 빠른 색인을 제공하고 공간을 사전 할당하도록 강요하지 않는 ArrayLists와 같은 구조를 가지고 있습니다.