#726 From: "Lynn H. Maxson" <lmaxson@...>
Date: Mon Aug 18, 2003 7:02 pm
Subject: Re: Re: Building an OS/2 Replacement lynnmaxson
Offline Offline
Send Email Send Email
Invite to Yahoo! 360° Invite to Yahoo! 360°
Ben Ravago writes:
"With regards to a microkernel implementation, I'd like to
again point out the L4KA project (
www.l4ka.org). There's
recently been a number of new developments here (e.g., a
Linux device driver environment) and the mailing lists seem to
indicate that people are working on interesting projects."
I took a look at both the L4KA and REACTOS projects. Earlier
I had a go at the MACH, the uK used as the basis for IBM's OS/2
for the PowerPC. I guess the questions that dwell in the back
of my mind lies in the meaning of "base APIs" for use in higher
level ones: in what ways do they differ and what is the
significance of the differences? In short why are they not
identical?
I'm not an object-oriented fan. As a result reading that
something is written almost entirely in C++ amounts to a
turnoff. I might as well admit I'm not a C fan either, having
some nearly 40 years experience with PL/I never needing to
resort to anything else regardless of the application...except
for OS/2 device drivers.<g>
The point is that you are engaged in documenting
specifications of a project prior to implementing it. Your only
problem is having some agreement with respect to the
sufficiency of the documentation at which point you can begin
the implementation. There are some who want to start it
"now" while there are others for whom "tomorrow" never
comes.
In all this you have to have a starting point "here", a base
layer API to get to a known ending point "there", the OS/2 API
layer. You know one, the OS/2 API layer. It is well
documented. You have to decide, i.e. know, eventually the
other, which you have to document. Then you have to
document how you get from "here" to "there": you have to
provide a "map". You have a mapping operation to document.
Only one of the suggested uKs has actually been used in the
production of OS/2, the MACH uK. I would suggest it as a
starting point without at the same time downgrading any of
the others. You need to be sure that the base is "base".
If you look at "here" as the input and "there" as the output,
you have an IPO model, a high-level data flow. That model
decomposes into a set of interconnected paths of lower-level
IPOs. Within that decomposition is at least one set that has
the minimal number of IPOs. From that set, which possibly has
only one member, you make your choice of architecture.
Now I happen to love dataflows (analysis) and structure
charts (design) because they have a well-tested heuristic for
translating from one to the other for some 30+ years now.
There's only two forms to consider as opposed to the
somewhat indefinite, but definitely much higher, number in
UML.
Besides it's less confusing because it provides a "true" data
mapping from "here" to "there" through all the
interconnecting paths. Such a mapping tells you when you
have a "complete" solution, one without any surprises once
underway. It offers "all" participants the same picture.
It begins with data and it ends with data. The processes are
simply conduits to connect the data. That's why we call it
data processing.<g> That says you begin with the aggregate
data of the OS/2 APIs, map them to the APIs, and continue
downward until you can account for all their sources. At that
point you will have a complete picture of your kernel...and of
the organization of your documentation.
It occurs to me that at one time I created such a list of OS/2
API data by compiling a PL/I procedure consisting of all the
API entry definitions. The compiler produced an attribute and
cross-reference listing in alphabetical order of the API names
and data names as well as which APIs contained a reference
to the data name. It never occurred to me to do it in C or
C++, but I assume you can.
That's probably where I would start in the documentation:
with the end product and work backward from there to the
base level while minimizing the number of paths and
connections along the way. That will tell you when you are
done with where to "cut" it, to decompose it into separate
units to support parallel development.
That lets you plug and play the various uK API sets to find
one that meets your needs.