コード例 #1
0
        public void OnlyScheduleableUsingNONPreemption()
        {
            var taskSet = new List <Task>
            {
                new Task {
                    ExecutionTime = 20, Period = 70, Deadline = 55, StaticPriority = 3, Id = "A"
                },
                new Task {
                    ExecutionTime = 20, Period = 80, Deadline = 80, StaticPriority = 2, Id = "B"
                },
                new Task {
                    ExecutionTime = 35, Period = 200, Deadline = 100, StaticPriority = 1, Id = "C"
                },
            };


            //preemptive scheduling - reset dynamic priorities
            taskSet.ForEach(o => o.DynamicPriority = o.StaticPriority);
            var scheduleableUsingPreemption = ResponseTimeAnalysis.FeasibilityUsingResponseTimeAnalysis(taskSet);

            Assert.False(scheduleableUsingPreemption);

            //non-preemptive scheduling
            taskSet.ForEach(o => o.DynamicPriority = taskSet.Max(x => x.StaticPriority));

            var scheduleableUsingNonPreemption = ResponseTimeAnalysis.FeasibilityUsingResponseTimeAnalysis(taskSet);

            Assert.True(scheduleableUsingNonPreemption);


            var resultFile = Path.Join(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "nonpreempt.txt");

            TaskFileReader.CreateTaskFile(taskSet, resultFile);
        }
コード例 #2
0
        public void TaskFileReader1()
        {
            var fileName        = Path.Join(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Task1Import.txt");
            var resultReadInDto = TaskFileReader.ReadInTasksFromFile(fileName);
            var taskSet         = resultReadInDto.tasks;

            Assert.Equal(taskSet.Count, 3);
            Assert.Equal(taskSet[0].ExecutionTime, 20);
            Assert.Equal(taskSet[0].Period, 70);
            Assert.Equal(taskSet[0].Deadline, 50);
            Assert.Equal(taskSet[0].StaticPriority, 3);
            Assert.Equal(taskSet[0].DynamicPriority, 3);


            Assert.Equal(taskSet[1].ExecutionTime, 20);
            Assert.Equal(taskSet[1].Period, 80);
            Assert.Equal(taskSet[1].Deadline, 80);
            Assert.Equal(taskSet[1].StaticPriority, 2);
            Assert.Equal(taskSet[1].DynamicPriority, 3);

            Assert.Equal(taskSet[2].ExecutionTime, 35);
            Assert.Equal(taskSet[2].Period, 200);
            Assert.Equal(taskSet[2].Deadline, 100);
            Assert.Equal(taskSet[2].StaticPriority, 1);
            Assert.Equal(taskSet[2].DynamicPriority, 2);


            var isScheduable = ResponseTimeAnalysis.FeasibilityUsingResponseTimeAnalysis(taskSet);
            var exist        = ResponseTimeAnalysis.DoesFeasibleScheduleExist(taskSet);

            Assert.Equal(isScheduable, exist);
            Assert.True(isScheduable);
        }
コード例 #3
0
        public void PreemptionDeadline()
        {
            var fileName        = Path.Join(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Task2Import.txt");
            var resultReadInDto = TaskFileReader.ReadInTasksFromFile(fileName);
            var taskSet         = resultReadInDto.tasks;

            ResponseTimeAnalysis.ChangeDynamicPrioritiesToMeetDeadlines(taskSet);
            var isScheduleable = ResponseTimeAnalysis.FeasibilityUsingResponseTimeAnalysis(taskSet);
            var exist          = ResponseTimeAnalysis.DoesFeasibleScheduleExist(taskSet);

            Assert.Equal(isScheduleable, exist);
            Assert.True(isScheduleable);
        }