With regard to:
"Another miscellaneous food for thought is pointer usage. If you are writing
code against the architecture, or against memory, that requires the
representation of a memory address: we need to stop using 'uint' just
because we are assuming we are working on 32-bit x86. " void* " exists for a
reason..."
What about IntPtr?


On 04/02/2008, Bruce Markham <[EMAIL PROTECTED]> wrote:
>
> This is a popular discussion, that I know all of us probably want to put
> our two-cents in for. So I thought I'd bring it up here, before any of us
> wander off into tangents that we'll have to back out of later. (At least if
> we are going to wander into a tangent, we need to do it as a group.)
>
> Honestly, the biggest decision we have to make right now, is not the
> design itself - but how anally-retentive we want to be about it. We don't
> have the resources to sit down, and learn the ins and outs, of every
> architecture, to do cross-comparisons. So in the end, we need to agree more
> on our process than our approach - because we will probably end up
> completely refactoring a few times. (And there are design decisions that
> in-and-of themselves, can make this easier - like interface versioning.)
>
>
>    - As I understand it, some things work the same everywhere - like
>    PCI. And some things don't - like writing to I/O ports. So we need an
>    abstraction that can handle at least most kinds of allocatable/reservable
>    hardware resources. The abstraction needs to address which devices have
>    which resources, which devices *need* which resources, how to resolve them
>    both, and how to gracefully handle a failed attempt at such.
>    - Another issue, is device discovery and driver inter-dependencies.
>    A possible approach is having drivers designate, either through an
>    interface, or more likely through driver-type metadata (attributes), what
>    kinds of devices they can handle.
>    - On-board system devices, if exposed, need to be exposed abstractly
>    - including the PIT, the interrupt table, and any other motherboard/CPU
>    capability that is detectable programmatically.
>    - And last but foremost, we need to make everything "safe". That
>    means drivers will not be using pointers, nor I/O ports, directly. My best
>    suggestion is to wrap anything with an inherent write or read paradigm, as 
> a
>    stream. An I/O port stream wraps ADC I/O port functionality. A memory 
> buffer
>    stream (akin or maybe identical to, or replacing, a MemoryStream) wraps a
>    pointer and any ADC/Assembler functions available for fast memory writing.
>    This is where our power, yet safety, comes from. An example benefit
>    is, when we start talking about distributed usage of hardware - we could
>    literally run a driver on one machine against the raw hardware of another -
>    by marshalling the stream operations. (Would it not be good for debugging?)
>     Other "safe"ty issues involve using things like delegates,
>    exceptions, etc., to fully leverage the runtime's power.
>
> Some other miscellaneous food for thought:
>
>    -  ADC is not hardware. ADC should be dumbed down as much as
>    possible - and the namespaces should be completely seperate.
>    SharpOS.Kernel.ADC & SharpOS.Kernel.Hardware , or something along
>    those lines.
>
>    Examples of ADC:
>
>     - Copying chunks of memory using Assembler instructions
>       - Reading CPUID and returning bitmasks (represented by masked
>       enum values) of its features (or a nicer abstraction of boolean 
> properties)
>       - Reading and writing to I/O ports
>       - Assigning/changing interrupt handlers
>       - Determining the cursor location on the text-mode screen
>       - Writing color codes and ASCII characters to the text-mode
>       screen
>       - Retrieving multiboot information
>       - Context switching
>       - Halting the processor
>
>       Examples of "Hardware" or kernel functions that are otherwise
>       *not* ADC:
>       - Interrupt handling (because they are being handled by
>       objects designed to do so)
>       - Providing and tracking output to the screen
>       - Writing to the serial port
>       - Task scheduling
>       - Enumerating PCI devices
>
>       A good example of "not ADC" is memory allocation. This is more
>       of a runtime issue. Sure, it has to figure out how much RAM is 
> available -
>       which is architecture-dependent. But the actual allocation, and 
> tracking of
>       allocations, is as generic as it gets.
>       - Basically, its only ADC if it is a static function. And ADC
>    should *only* be static functions, for performance reasons. My assumption
>    is, if for some reason, you need local context information to handle an
>    incoming function call, then you are doing something that *in general* is
>    not architecture-specific. And since static method calls are quicker than
>    VTable lookups, we need to keep our abstractions in check. Constant
>    vigilance!
>    - Another miscellaneous food for thought is pointer usage. If you
>    are writing code against the architecture, or against memory, that requires
>    the representation of a memory address: we need to stop using 'uint' just
>    because we are assuming we are working on 32-bit x86. " void* " exists for 
> a
>    reason...
>    - Just because we want to use IPC for drivers doesn't mean we
>    *should* anytime soon. Any good marshalling IPC scheme should be pretty
>    seamless anyway, and it is more important for us to get hardware stuff of
>    the ground.
>    - And no matter what, for debugging purposes, we need to retain
>    static-buffer-based string operations and screen/serial I/O - so that if
>    something gets horribly screwed up, we can figure out what's going on.
>
> These are my ramblings. Amend, comment on, and dispute them as you like.
> The more talk, the better the results!
>
> -------------------------------------------------------------------------
> This SF.net email is sponsored by: Microsoft
> Defy all challenges. Microsoft(R) Visual Studio 2008.
> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
> _______________________________________________
> SharpOS-Developers mailing list
> SharpOS-Developers@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/sharpos-developers
>
>


-- 
/"\
\ /     ASCII RIBBON CAMPAIGN
X        AGAINST HTML MAIL
/ \
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
SharpOS-Developers mailing list
SharpOS-Developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sharpos-developers

Reply via email to