Skip to content

Instantly share code, notes, and snippets.

@rkh
Created February 4, 2009 18:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rkh/58256 to your computer and use it in GitHub Desktop.
Save rkh/58256 to your computer and use it in GitHub Desktop.
primitive scheduler algorithms
#include "algorithms.h"
#include "dispatcher.h"
HANDLE Algorithm_EarliestDeadlineFirst(PLIST_ENTRY TaskList, ULONG Clock) {
PLIST_ENTRY ListEntry, Candidate;
HANDLE CandidateThreadHandle, ListEntryThreadHandle;
PDISPATCHER_TASK ListEntryTask;
PEDF_TASKINFO ListEntryTaskInfo, CandidateTaskInfo;
// just to be sure
Candidate = NULL;
CandidateThreadHandle = NULL;
for(ListEntry = TaskList->Flink; ListEntry != TaskList; ListEntry = ListEntry->Flink)
{
ListEntryTask = (PDISPATCHER_TASK) CONTAINING_RECORD(ListEntry, DISPATCHER_TASK, Link);
ListEntryTaskInfo = ListEntryTask->TaskInfo;
ListEntryThreadHandle = ListEntryTask->ThreadHandle;
if( (ListEntryTaskInfo->NextDeadLine > Clock) && (ListEntryTaskInfo->StartTime <= Clock) &&
(!Candidate || CandidateTaskInfo->NextDeadLine >= ListEntryTaskInfo->NextDeadLine) )
{
Candidate = ListEntry;
CandidateTaskInfo = ListEntryTaskInfo;
CandidateThreadHandle = ListEntryThreadHandle;
}
}
return CandidateThreadHandle;
}
#include "algorithms.h"
#include "dispatcher.h"
HANDLE Algorithm_RoundRobin(PLIST_ENTRY TaskList, ULONG Clock) {
PLIST_ENTRY ListEntry;
HANDLE CandidateThreadHandle;
PDISPATCHER_TASK ListEntryTask;
PEDF_TASKINFO ListEntryTaskInfo;
// just to be sure
CandidateThreadHandle = NULL;
for(ListEntry = TaskList->Flink; ListEntry != TaskList; ListEntry = ListEntry->Flink)
{
ListEntryTask = (PDISPATCHER_TASK) CONTAINING_RECORD(ListEntry, DISPATCHER_TASK, Link);
ListEntryTaskInfo = ListEntryTask->TaskInfo;
if((ListEntryTaskInfo->NextDeadLine > Clock) && (ListEntryTaskInfo->StartTime <= Clock)) {
CandidateThreadHandle = ListEntryTask->ThreadHandle;
RemoveEntryList(ListEntry);
InsertTailList(TaskList, ListEntry);
break;
}
}
return CandidateThreadHandle;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment