Hi,

Thanks for the elaborate reply and for the pointer. I've been reading
various parts of an old Linux kernel, Minix and Unix V 6.0. This is
along the lines of writing my own kernel. You said that conditional
compilation is used for various architecture specific features. As
you've suggested, this is evident from the kernel's coding if it is
supporting a wide range of processors [the preprocessing] But, the
more confusing point to me is how the kernel is able to consistently
do this across varying architectures. For example, if linux kernel
supports a processor that has no protection features or atleast not as
many as Intel processors have, how would the overall impact be
managed.

For Instance, say that the linux kernel is using the protection
features of the Intel processor to keep user-space programs from
affecting the kernel [which seems to me as the most natural way to do.
If otherwise, please mention]. If the kernel is able to run on some
other architecture that does not have these features, does it mean
that it offers no protection? Or does it mean that protection is
implemented in software for that processor.

Another Instance, say that the linux kernel supports multitasking
using the hardware features of the Intel processors[TSSes etc. Please
correct me if this is not the way, again.] How is this able to port
across some other architecture that does not have these features in
hardware? Is it implemented in software?

Apart from this, I would be helpful if more clarification can be
provided on the issue with supporting higher level datatypes and
different sized-processors. The exact issue is with how linux supports
higher types during RUNTIME. A best example to represent the issue, is
with ZFS. I heard somewhere that ZFS[from Sun] is supported on linux.
But, it is well known that ZFS is a 128-bit file system. If the
processor is able to only manipulate data in 32-bit, how are 128-bit
operations like addition, subtraction done? Are there any cascadable-
instructions that provide a carry/borrow/etc. so that each 128-bit
operations require four 32-bit operations? If so, isn't this very
inefficient?

You also said that the system calls provide a unified layer to other
parts of the kernel. Do you mean that each system call is differently
implemented for each kind of processor? For example, consider kmalloc
() function. Is kmalloc() implemented differently for each processor?

I'm just few steps away from diving into a linux book. I'm just trying
to avoid it as much as possible, through asking people due to time
restrictions. Additionally, the website you provided is nice. Good
article on Portable device drivers.

Bhaktavatsalam Nallanthighal

On Jan 4, 2:11 am, Sid <[email protected]> wrote:
> On Jan 4, 5:34 am, Bhaktavatsalam Nallanthighal
>
> <[email protected]> wrote:
> > Hello,
>
> >       Can anyone explain in a clear way, how linux deals with
> > portability across architectures. The main points I'm getting confused
> > are:
>
> >     - Does a single linux kernel support processors of varying size? I
> > mean, will the same linux kernel give me the ability to compile it for
> > various sized processors[8-bit, 16-bit, 32-bit, 64-bit]?
>
> Yes, linux kernel supports different processors. Although I am not
> sure if it supports an 8 bit one, as linux was first made for 80386
> microprocessor.
> If you configure and compile the kernel yourself, you'll see that
> there are options that allow you to compile it for different
> processors. These options are nothing but conditional compilation
> statements like #ifdef in the kernel code, so, according to the
> processor you select, the coressponding code for that very processor
> is compiled.
>
> > If so, how
> > does it deal with the datatypes consistently?
>
> There is definition for different datatypes and again conditional
> compilation is used for the same. If you go through the kernel code
> you'll see that there are various directories for different
> architectures. e.g. for x86 machines, you'll find the code in arch/
> x86/.
>
> > And how does it provide
> > a unified layer to applications that use processor specific
> > functionality?
>
> System Calls, and the library functions help you do that.
>
> >Also, how does it manupilate datatypes that the
> > processor does not inherently support. For example, if I am able to
> > compile for a 16-bit processor, how does it support the uint32
> > datatype used in other areas of the kernel [addition, subtraction,
> > byte ordering]?
>
> I guess gcc does that for you. Please let me know if I am wrong here.
>
>
>
> >     - Does the Linux kernel implement "Protected Mode" and other kinds
> > of features also in other architectures that do not support them?
> > If so, how? If not, how is it made possible that one feature is present
> > in one compilation and is not present in another? How does this effect
> > the other areas of the kernel that depend on this features
>
> No it doesn't on other processors. And once again conditional
> compilation is used for that.
>
>
>
> > Thanks in advance. If possible please send me your replies to
> > [email protected]. The digests I get fill my inbox!
>
> > Bhaktavatsalam Nallanthighal
>
> Also, if you've already not done it, configure and compile the kernel
> yourself, you'll know how things actually work. Also read the kernel
> sources. If you're interested to know about the Linux kernel a great
> place to start ishttp://kernelnewbies.org/.

-- 
You received this message because you are subscribed to the Linux Users Group.
To post a message, send email to [email protected]
To unsubscribe, send email to [email protected]
For more options, visit our group at 
http://groups.google.com/group/linuxusersgroup

Reply via email to