forked from Marashov-Alexander/ORTOS
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Реализована возможность удобного тестирования
- Loading branch information
1 parent
53db02d
commit 5cf0229
Showing
15 changed files
with
247 additions
and
115 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
package EventGenerators; | ||
|
||
import java.util.function.Consumer; | ||
import java.util.stream.Stream; | ||
|
||
public class CustomGenerator extends EventGenerator { | ||
public CustomGenerator(Consumer<OsEvent> eventConsumer) { | ||
// Тест на обработку прерываний: | ||
// Ждём 1 секунду, пока выполнится начальная задача в ОС. | ||
// Затем объявляем задачу с приоритетом 5. Ждём 200 мс. | ||
// Объявляем задачу с высшим приоритетом и ожидаем, что она вытеснит предыдущую. | ||
super( | ||
Stream.of( | ||
1000L, | ||
200L | ||
).iterator(), | ||
Stream.of( | ||
OsEvent.declareTaskEvent(123, 5), | ||
OsEvent.declareTaskEvent(1234, 10) | ||
).iterator(), | ||
eventConsumer | ||
); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
package EventGenerators; | ||
|
||
import Resources.Resource; | ||
|
||
import java.util.Iterator; | ||
import java.util.function.Consumer; | ||
|
||
public class EventGenerator extends Thread { | ||
|
||
public static class OsEvent { | ||
public final EventType eventType; | ||
public final Integer taskId; | ||
public final Integer taskPriority; | ||
public final Integer resourceId; | ||
public final Integer globalResourceIndex; | ||
|
||
private OsEvent(EventType eventType, Integer taskId, Integer taskPriority, Integer resourceId, Integer globalResourceIndex) { | ||
this.eventType = eventType; | ||
this.taskId = taskId; | ||
this.taskPriority = taskPriority; | ||
this.resourceId = resourceId; | ||
this.globalResourceIndex = globalResourceIndex; | ||
} | ||
|
||
public static OsEvent declareTaskEvent(final int taskId, final int taskPriority) { | ||
return new OsEvent(EventType.declareTask, taskId, taskPriority, null, null); | ||
} | ||
|
||
public static OsEvent declareResourceEvent(final int resourceId) { | ||
return new OsEvent(EventType.declareResource, null, null, resourceId, null); | ||
} | ||
|
||
public static OsEvent getGlobalResource(final int globalResourceIndex) { | ||
return new OsEvent(EventType.getRecourse, null, null, null, globalResourceIndex); | ||
} | ||
} | ||
|
||
public enum EventType { | ||
// добавь задачу в очередь | ||
declareTask, | ||
// создай ресурс внутри текущей задачи | ||
declareResource, | ||
// выдай рандомный ресурс текущей задаче (не может быть выдана локальная переменная!) | ||
getRecourse, | ||
} | ||
|
||
final Consumer<OsEvent> eventConsumer; | ||
final Iterator<Long> sleepGenerator; | ||
final Iterator<OsEvent> typeGenerator; | ||
|
||
public EventGenerator( | ||
final Iterator<Long> sleepIterator, | ||
final Iterator<OsEvent> eventIterator, | ||
final Consumer<OsEvent> eventConsumer | ||
) { | ||
this.sleepGenerator = sleepIterator; | ||
this.typeGenerator = eventIterator; | ||
this.eventConsumer = eventConsumer; | ||
this.setName("OS"); | ||
} | ||
|
||
@Override | ||
public void run() { | ||
while (true) { | ||
if (isInterrupted()) { | ||
break; | ||
} | ||
try { | ||
if (!sleepGenerator.hasNext()) { | ||
return; | ||
} | ||
sleep(sleepGenerator.next()); | ||
} catch (final InterruptedException e) { | ||
break; | ||
} | ||
if (!typeGenerator.hasNext()) { | ||
return; | ||
} | ||
final OsEvent randomEvent = typeGenerator.next(); | ||
eventConsumer.accept(randomEvent); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
package EventGenerators; | ||
|
||
import OS.OrtOS; | ||
|
||
import java.util.Iterator; | ||
import java.util.Random; | ||
import java.util.function.Consumer; | ||
|
||
public class InfinityEventGenerator extends EventGenerator { | ||
|
||
private static final Random RANDOM = new Random(1L); | ||
|
||
public InfinityEventGenerator(final Consumer<OsEvent> eventConsumer) { | ||
super( | ||
new Iterator<>() { | ||
@Override | ||
public boolean hasNext() { | ||
return true; | ||
} | ||
|
||
@Override | ||
public Long next() { | ||
return RANDOM.nextInt(100) + 100L; | ||
} | ||
}, | ||
new Iterator<>() { | ||
@Override | ||
public boolean hasNext() { | ||
return true; | ||
} | ||
|
||
@Override | ||
public OsEvent next() { | ||
final EventType eventType = EventType.values()[RANDOM.nextInt(EventGenerator.EventType.values().length)]; | ||
switch (eventType) { | ||
case declareTask: | ||
return OsEvent.declareTaskEvent(RANDOM.nextInt(), RANDOM.nextInt(MAX_PRIORITY)); | ||
case declareResource: | ||
return OsEvent.declareResourceEvent(RANDOM.nextInt()); | ||
case getRecourse: | ||
return OsEvent.getGlobalResource(RANDOM.nextInt(OrtOS.GLOBAL_RESOURCES_COUNT)); | ||
default: | ||
throw new IllegalStateException("Неизвестный тип события: " + eventType); | ||
} | ||
} | ||
}, | ||
eventConsumer | ||
); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
11 changes: 7 additions & 4 deletions
11
src/main/java/Dispatcher.java → src/main/java/OS/Dispatcher.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.