comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Task Priorities on Ubuntu Linux
Date: Wed, 9 Dec 2009 16:10:40 +0100
Date: 2009-12-09T16:10:30+01:00	[thread overview]
Message-ID: <vie840mx6358$.1uwpgtoez404o.dlg@40tude.net> (raw)
In-Reply-To: f38162c7-8a5b-49c4-b6a8-010f0d64e290@9g2000yqa.googlegroups.com

On Wed, 9 Dec 2009 06:34:45 -0800 (PST), singo wrote:

> When I use different task priorities I get an - at least for me -
> unexpected behavior... I have defined 10 tasks with different
> priority. When I run my program, I expect only one task per processor
> (this means four on my quad-core machine) to run. However,
> unexpectedly all 10 tasks are run on my machine.
> 
> Is this because the tasks are mapped on the underlying OS (here
> Linux), which then instead schedules the tasks of different priority
> with some kind of time-slicing (round-robin) approach? I would
> appreciate some clarification in this matter.

No, there could be a different reason from that. You perform I/O, which
leads to task switching. Once I/O is initiated the OS completes it anyway
(if the kernel is non-preemptive for your tasks). This is what you
observed. I guess.

Try this instead:

pragma Task_Dispatching_Policy (FIFO_Within_Priorities);
pragma Queuing_Policy (Priority_Queuing);

with Ada.Text_IO;    use Ada.Text_IO;
with Ada.Real_Time;  use Ada.Real_Time;

procedure TaskPriorities is

   task type T (Id: Integer) is
      pragma Priority (Id);
   end;

   task body T is
      I : Integer;
   begin
      Put (Integer'Image (Id));
      for Index in Integer'Range loop
         I := Index;
      end loop;
   end T;
   Task10 : T (11);
   Task9  : T (12);
   Task8  : T (13);
   Task7  : T (14);
   Task6  : T (15);
   Task5  : T (16);
   Task4  : T (17);
   Task3  : T (18);
   Task2  : T (19);
   Task1  : T (20);
begin
   null;
end TaskPriorities;

It should print 20 19 (on two cores), then you would like to reset your
computer, if under Windows, because there non-preemptive priorities are the
real-time ones. They override pretty much everything, unless tasks end you
will have to reboot.

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de



  reply	other threads:[~2009-12-09 15:10 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-12-09 14:34 Task Priorities on Ubuntu Linux singo
2009-12-09 15:10 ` Dmitry A. Kazakov [this message]
2009-12-09 21:20 ` sjw
2009-12-10  8:27   ` singo
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox