comp.lang.ada
 help / color / mirror / Atom feed
From: "Brian Catlin" <briancatlin@mindspring.com>
Subject: Ada OS Kernel features
Date: Tue, 4 Sep 2001 22:58:52 -0700
Date: 2001-09-05T05:58:55+00:00	[thread overview]
Message-ID: <9n4euv$t9m$1@slb6.atl.mindspring.net> (raw)

What sort of features would be desirable/required in the kernel?

Processor architectures:
  What sort of processor architectures should be supported?  32-bit obviously,
but what about 64-bit, or 16-bit?  Little-endian only, or big-endian too?
(personally, I view big-endian as a crime against nature, and would vote against
it - besides there are not many of them out there compared to little-endian
processors)  Deciding on these issues early is very important, as it will
greatly influence the rest of the design and implementation of the kernel.  All
the candidate processors need to be examined, and the features that are present
in all (and all subsequent architectures that will be supported) need to be
identified.  Processors that do not implement certain required features must be
able to emulate these features in software, or the processor cannot be
supported.

Scheduler:
  I think that the kernel should support three types of tasks: isochronous,
real-time, and general purpose.  An isochronous task is a periodic time-driven
task with performance requirements for bounded latency and jitter, and
guaranteed throughput.  A real-time task has performance requirements for low
latency and high throughput.  Both isochronous and real-time tasks have bounded
execution times, so that the system can bound latency and jitter for other such
tasks.  In contrast, a general purpose task is characterized by lengthy or
unbounded execution time, and may not have strict requirements for latency or
throughput; however, the system does guarantee some progress for such tasks.
Tasks should be grouped into processes.

Symmetric multi-processing:
  This is the same capability general-purpose operating systems such as NT, VMS,
etc. have.  Each processor is of the same type, and has the same view of memory.
It then becomes irrelevant which processor is running a particular task.

Synchronization primitives:
  How will tasks synchronize with each other?  Synchronization of tasks within
the same process can use existing Ada methods; but what about tasks in different
processes, or on different processors?  What about application written in
languages other than Ada?

Memory management:
  A demand-paged memory manager would seem to be required.  However, I would not
like to see paging made a requirement - as long as there is enough physical
memory, there should be no need.  This would allow the operating system to be
tailored to run on a very small diskless system.  It is the memory manager that
really differentiates one process from another, by providing a unique address
space that is unreachable by any other process.  The memory manager should
support sharing pages between processes to facilitate fast inter-process
communications.  Mapping a file on the disk directly into a range of addresses
in a process would also be a big benefit: all disk reads and writes would be
implemented as reads and writes to a process' address space.

File system cache:
  What sort of file system cache would be appropriate?  A logical block cache
uses much less memory than a virtual block cache, but the virtual block cache
has the ability to read ahead.  A logical block cache will cache the blocks on a
disk (or partition) _after_ an application has already read them in.  A logical
block cache knows nothing about files.  A virtual block cache will cache blocks
in a file, which allows read ahead (because the next blocks in a file will
always be known).

I/O subsystem:
  What form are drivers to take?  A packet-driven system would seems to provide
the best performance.  In a packet-driven I/O system, a context block (generally
referred to as an IRP (I/O Request Packet)) containing all the information to
process an I/O request is passed around between drivers.  What form should a
driver take?  Implementing a driver as one or more tasks in the kernel seems to
be the most natural.  The layering of device drivers (as implemented) in NT
would also seem to be a very valuable feature.

 -Brian






             reply	other threads:[~2001-09-05  5:58 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-09-05  5:58 Brian Catlin [this message]
2001-09-05 10:15 ` Ada OS Kernel features Jacob Sparre Andersen
2001-09-05 11:16 ` Larry Kilgallen
2001-09-05 17:06   ` Brian Catlin
2001-09-06 14:35     ` Marin David Condic
2001-09-07  9:31       ` Tarjei T. Jensen
2001-09-05 17:55   ` David Starner
2001-09-05 18:42     ` Darren New
2001-09-12  6:47   ` Mats Karlssohn
2001-09-05 14:04 ` Ted Dennison
2001-09-05 17:23   ` Brian Catlin
2001-09-05 20:17     ` Ted Dennison
2001-09-05 21:10       ` Brian Catlin
2001-09-06  6:45         ` Tarjei T. Jensen
2001-09-06  6:56           ` Brian Catlin
2001-09-06 14:05             ` Ted Dennison
2001-09-05 16:02 ` Alfred Hilscher
2001-09-05 16:19   ` Jacob Sparre Andersen
2001-09-05 17:58     ` Brian Catlin
2001-09-05 17:44   ` Brian Catlin
2001-09-05 17:58     ` Darren New
2001-09-05 18:51     ` Larry Kilgallen
2001-09-05 19:25     ` chris.danx
2001-09-05 20:07       ` Darren New
2001-09-05 20:14       ` Larry Kilgallen
2001-09-06 13:45         ` Alfred Hilscher
2001-09-06 18:06         ` chris.danx
2001-09-06 19:41           ` Larry Kilgallen
2001-09-06 22:32             ` chris.danx
2001-09-07 11:04               ` Larry Kilgallen
2001-09-07  8:04           ` Dmitry Kazakov
2001-09-07  8:18             ` Mattias Svensson
2001-09-07 12:40               ` Dmitry Kazakov
2001-09-12  7:12               ` Mats Karlssohn
2001-09-05 20:18       ` Brian Catlin
2001-09-06  6:48         ` Ole-Hjalmar Kristensen
2001-09-06  6:59           ` Brian Catlin
2001-09-10  7:32             ` Ole-Hjalmar Kristensen
2001-09-06 13:42     ` Alfred Hilscher
2001-09-07  8:13       ` Dmitry Kazakov
2001-09-08  3:55     ` Kenneth Almquist
replies disabled

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