Search
🌀

Scheduler

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가 되면 종료 메세지 출력

다. UML로 관계 표현하기

3. 구현

Reference