1. 요구사항
요구사항
동작예시
2. 설계
가. 도메인 및 메세지 뽑아내기
•
도메인: 모든 프로세스가 종료될때까지 매초마다 프로세스의 상태, 누적된 실행시간, 최대실행시간을 출력한다
•
메세지 1: 각각의 프로세스는 매초마다 자신의 상태, 누적된 실행시간, 최대실행시간을 업데이트한다
•
메세지 2: 스케줄링이 시작되면 프로세스는 대기 큐에 추가한다
•
메세지 3: 프로세스의 상태가 실행에서 대기로 변경된다면 대기 큐에 들어간다
•
메세지 3-1: 대기 큐에서 1초에 하나의 process를 반환한다
•
메세지 4: 프로세스가 종료되면 대기 큐에 들어가지 않는다
•
메세지 5: 매초마다 모든 프로세스의 상태, 실행시간 및 최대실행 시간을 출력한다
•
메세지 6: 프로세스 4개 중 3개만 선택한다.
•
메세지 7: 각 프로세스의 최대 동작 시간은 겹치지 않는다
•
메세지 8: 프로세스의 상태는 ready, running, waiting, terminated 4 가지 중 하나이다
→ ready는 시작 전
→ running은 실행 중
→ waiting은 대기 큐에서 기다리는 상태
→ terminated는 종료
•
메세지 9: 모든 프로세스가 종료되면 종료 메세지 출력
나. 객체 설계
•
메세지 1
→ 메세지 수신 객체: Process
→ 객체 책임: 3개 상태(status, accumulatedTime, maxRunningTime) 업데이트 및 전달(get메소드로)
•
메세지 2
→ 메세지 수신 객체: Scheduler
→ 객체 책임: 모든 프로세스를 Queue에 삽입, addAll
•
메세지 3
→ 메세지 수신 객체: WaitingQueue
→ 객체 책임: 대기큐에 삽입, add
•
메세지 3-1
→ 메세지 수신 객체: WaitingQueue
→ 객체 책임: 대기큐에서 반환 및 제거, pol
•
메세지 4
→ 메세지 수신 객체: Process
→ 객체 책임: 상태값 업데이트(running → terminated)
•
메세지 5
→ 메세지 수신 객체: PrintProcessors
→ 객체 책임: 매초마다 모든 프로세서의 상태를 출력
•
메세지 6
→ 메세지 수신 객체: Scheduler
→ 객체 책임: 프로세서 4개 중 3개만 선택함
•
메세지 7
→ 메세지 수신 객체: Processor
→ 객체 책임: 최대 실행 시간을 임의로 부여하되, 겹치치 않게
•
메세지 8
→ 메세지 수신 객체: Process
→ 객체 책임: 매초마다 객체의 상태를 업데이트
•
메세지 9
→ 메세지 수신 객체: PrintProcessors
→ 객체 책임: 모든 프로세스의 상태가 terminated가 되면 종료 메세지 출력