OSDev.org

The Place to Start for Operating System Developers
It is currently Fri Mar 29, 2024 7:50 am

All times are UTC - 6 hours




Post new topic Reply to topic  [ 10 posts ] 
Author Message
 Post subject: Category Tree
PostPosted: Sun Feb 11, 2007 1:56 pm 
Offline
Member
Member
User avatar

Joined: Wed Oct 18, 2006 3:45 am
Posts: 9301
Location: On the balcony, where I can actually keep 1½m distance
I posted some doubts about the category tree on the talkbackpage here with the intention of deciding a layout for the biggest cluster of categories (which IMO was pretty chaotic) before the wiki would grow too big to handle.

However, I noticed that somebody recently created lots of additional categories for the various architectures, several containing (semi-useful) information, which grew the tree considerably. Also, most of this information has appeared in the category namespace rather than the default namespace where one would expect it.

Hence, i'm pushing the subject into wider attention here, in the hope of getting some replies

_________________
"Certainly avoid yourself. He is a newbie and might not realize it. You'll hate his code deeply a few years down the road." - Sortie
[ My OS ] [ VDisk/SFS ]


Top
 Profile  
 
 Post subject:
PostPosted: Mon Feb 12, 2007 10:19 pm 
Offline
Member
Member
User avatar

Joined: Sun Nov 26, 2006 4:06 pm
Posts: 58
Location: Victoria, BC, Canada
I agree 100% with your thoughts on the matter. Stuff is out of out of place (I must be partially responsible for this) and it can be difficult to navigate. Finding an article must be trivial; we are using the categories for navigation.


Top
 Profile  
 
 Post subject: Things are out of place ...
PostPosted: Mon Feb 12, 2007 10:39 pm 
Offline
Member
Member
User avatar

Joined: Wed Feb 07, 2007 1:45 pm
Posts: 1401
Location: Eugene, OR, US
I very much like your suggestions on that talk thread, Combuster. Yes, the basic category tree needs to be intelligently designed (I'd say "in advance" but it's already a bit too late for that?) -- and then pretty much locked ....

Fortunately, it doesn't take much effort to reedit an entire smallish wiki?


Top
 Profile  
 
 Post subject: My detailed suggestion
PostPosted: Tue Feb 13, 2007 1:03 am 
Offline
Member
Member
User avatar

Joined: Wed Feb 07, 2007 1:45 pm
Posts: 1401
Location: Eugene, OR, US
OK, after thinking it over a bit, I'm going to suggest some modifications to your suggestion, Combuster.

First off, we need a main topic heading called "Definitions" on the main page. It should contain short (not article sized) definitions ... especially of any alphabet soup abbreviations, and quickie descriptions of what a blahblah is. These would link to actual articles on instantiations of the definition. These definitions would be under alphabetized subcategories under "Definitions"?

Beyond that, my next question would be "what precisely does 'Hardware' mean, anyway?"
I assume that we are going to admit, right off, that the only real "architecture" that we are all deving on is basically PC generic hardware? So we should toss any topic for any non-PC hardware into an Other catergory? Then the subcategories of Hardware would mean "driver and hardware spec info for this module on a generic PC system"?

And does the whole concept of "Hardware" mean that there should be a "Software" category also?

So my vision of the proper subcategories of Hardware would be something like:

Motherboard Buses and types
-- ISA
-- PCI
-- AGP
-- "IO Port" Bus
Memory and Memory Transfers
-- RAM
-- ROM BIOS
-- Memory Mapped Hardware
-- A20 line
-- CMOS
-- ISA DMA
CPU types ... each of these with many subcategories, including Instruction Set?
-- x86
-- PowerPC
-- AMD x86 clone
-- Intel 64bit
-- AMD 64bit
-- Cyrix x86 clone
-- Detecting CPU Speed
-- Operating Modes
---- Protected Mode
---- Real Mode
---- Unreal Mode
---- V8086 Mode
Common Motherboard devices
-- PIT
-- PIC
-- APIC
Storage Systems
-- ATA ("IDE")
---- PIO
---- UDMA
---- ADMA
-- ATAPI
-- USB Flash storage
-- Floppy
-- SCSI
Video
-- Textmode
-- VGA
Sound
I/O Subsystems
-- Keyboard
-- Mouse
-- USB
-- non-USB Serial ports (RS232)
-- Parallel ports
-- Networking
---- each card ...
Power Supply
Obsolete PC Hardware
Other non-PC Architectures


And then all software oriented stuff is in a separate Software category -- that specifically
means "Generic PC OS software implementation", with subcategories like:

Booting
-- MBR
-- Bootloader
---- GRUB
-- BIOS INT calls
x86 CPU Mode Programming
-- Real mode programming
---- RM Interrupt table
-- Unreal mode programming
---- Entering Unreal mode
-- Protected mode programming
---- Entering Protected mode
---- PM Interrupt Table
---- GDT
---- Paging
---- Segmentation
Interrupts and Interrupt handlers
-- NMI
-- Exceptions
-- IRQs
Driver Modules
Power Management
Memory Management
-- Virtual Memory
Filesystems
-- Virtual Filesystems
-- FAT12
-- FAT16
-- FAT32
-- NTFS
-- ...


Top
 Profile  
 
 Post subject:
PostPosted: Tue Feb 13, 2007 1:30 am 
Offline
Member
Member
User avatar

Joined: Wed Feb 07, 2007 1:45 pm
Posts: 1401
Location: Eugene, OR, US
Maybe the "OS Theory" category should be renamed "Software" (to match the Hardware category) and the topics there folded into what I suggested above. -- I'll shut up now ...... :roll:


Top
 Profile  
 
 Post subject: Re: My detailed suggestion
PostPosted: Tue Feb 13, 2007 4:53 am 
Offline
Member
Member
User avatar

Joined: Wed Oct 18, 2006 3:45 am
Posts: 9301
Location: On the balcony, where I can actually keep 1½m distance
bewing wrote:
OK, after thinking it over a bit, I'm going to suggest some modifications to your suggestion, Combuster.

First off, we need a main topic heading called "Definitions" on the main page. It should contain short (not article sized) definitions ... especially of any alphabet soup abbreviations, and quickie descriptions of what a blahblah is. These would link to actual articles on instantiations of the definition. These definitions would be under alphabetized subcategories under "Definitions"?

There's a page on the old wiki nobody cared to port yet: http://www.osdev.org/osfaq2/index.php/C ... d%20Things
I think it does just that

Quote:
Beyond that, my next question would be "what precisely does 'Hardware' mean, anyway?"

IMO, its everything put into copper, silicon, and aluminum casings.

Quote:
I assume that we are going to admit, right off, that the only real "architecture" that we are all deving on is basically PC generic hardware? So we should toss any topic for any non-PC hardware into an Other catergory? Then the subcategories of Hardware would mean "driver and hardware spec info for this module on a generic PC system"?

I don't mind having a tendency towards PC based systems. However pre-intel macs are common enough, so basing the category tree on the intel architecture alone is IMO not good (myself, i work on 3 architectures - 4 if you count amd64 and ia32 as separate).

Quote:
And does the whole concept of "Hardware" mean that there should be a "Software" category also?
In contrast to hardware, the software is what we are developing. I.e. the contents of that is up to us osdevers. If you would indeed to introduce such a category it might introduce a feeling of being forced into some doctrine.


Quote:
So my vision of the proper subcategories of Hardware would be something like:

Motherboard Buses and types
-- ISA
-- PCI
-- AGP
-- "IO Port" Bus
Memory and Memory Transfers
-- RAM
-- ROM BIOS
-- Memory Mapped Hardware
-- A20 line
-- CMOS
-- ISA DMA
CPU types ... each of these with many subcategories, including Instruction Set?
-- x86
-- PowerPC
-- AMD x86 clone
-- Intel 64bit
-- AMD 64bit
-- Cyrix x86 clone
-- Detecting CPU Speed
-- Operating Modes
---- Protected Mode
---- Real Mode
---- Unreal Mode
---- V8086 Mode
Common Motherboard devices
-- PIT
-- PIC
-- APIC
Storage Systems
-- ATA ("IDE")
---- PIO
---- UDMA
---- ADMA
-- ATAPI
-- USB Flash storage
-- Floppy
-- SCSI
Video
-- Textmode
-- VGA
Sound
I/O Subsystems
-- Keyboard
-- Mouse
-- USB
-- non-USB Serial ports (RS232)
-- Parallel ports
-- Networking
---- each card ...
Power Supply
Obsolete PC Hardware
Other non-PC Architectures

My comments on that:
- It looks like your architecture category is doubled. (other architectures vs cpu types)
- I think I/O should be separated into input devices (mouse, KB) and communication devices (serial port, NICs)
- USB is a bus, i think it should be categorized as such
- Why make the distinction between various x86 compatibles - they all support the basic instruction set, and this listing looks confusing

Quote:
And then all software oriented stuff is in a separate Software category -- that specifically
means "Generic PC OS software implementation", with subcategories like:

Booting
-- MBR
-- Bootloader
---- GRUB
-- BIOS INT calls
x86 CPU Mode Programming
-- Real mode programming
---- RM Interrupt table
-- Unreal mode programming
---- Entering Unreal mode
-- Protected mode programming
---- Entering Protected mode
---- PM Interrupt Table
---- GDT
---- Paging
---- Segmentation
Interrupts and Interrupt handlers
-- NMI
-- Exceptions
-- IRQs
Driver Modules
Power Management
Memory Management
-- Virtual Memory
Filesystems
-- Virtual Filesystems
-- FAT12
-- FAT16
-- FAT32
-- NTFS
-- ...

Let me clarify what I meant in the first post on the talkpage: Kernels and Drivers may be software, but they are directly dealing with one or more pieces of hardware. I think its better to see OS code in context with the actual hardware specs to get a good overview of how things happen. Hence CPU programming would go to the corresponding architecture category, As would the boot sequences for each architecture (which are btw missing in your tree).

--------------------------------

bewing wrote:
Fortunately, it doesn't take much effort to reedit an entire smallish wiki?

Well, editing some 100 pages...:roll: That's why i decided to push the matter before it really got out of hand. It'll still be a lot of work.

Jhawthorn wrote:
I must be partially responsible for this
I've been as much involved as you, and i have been just as ignorant on it :wink:

bewing wrote:
Maybe the "OS Theory" category should be renamed "Software" (to match the Hardware category) and the topics there folded into what I suggested above.

See above: We make the software - and i doubt the osdev wiki is the place to document our OSes (with the obvious exception of the OS List)

--------------------------------

ATM i stick with this base list for the hardware tree:

Architectures
Common Devices
Communication
Input Devices
Peripheral Buses
Sound
Storage
Video

i'll leave the OS theory tree open for discussion for now.

If there are no problems with that i'll be going ahead with the reconstruction.

_________________
"Certainly avoid yourself. He is a newbie and might not realize it. You'll hate his code deeply a few years down the road." - Sortie
[ My OS ] [ VDisk/SFS ]


Top
 Profile  
 
 Post subject:
PostPosted: Tue Feb 13, 2007 4:54 pm 
Offline
Member
Member
User avatar

Joined: Wed Feb 07, 2007 1:45 pm
Posts: 1401
Location: Eugene, OR, US
Combuster wrote:
There's a page on the old wiki nobody cared to port yet: ... I think it does just that


The point was that I am going to agree with jhawthorn on this specific point -- having to navigate all the way into one particular article to find any old abbreviation whatsoever is non-intuitive, and where would you stick the article anyway (which category)?

Combuster wrote:
IMO, its everything put into copper, silicon, and aluminum casings.


I'd say that's too broad. That just means "everything except theory". If that's what it's supposed to be, then label it that way.

Combuster wrote:
so basing the category tree on the intel architecture alone is IMO not good


I was saying that based on the fact that the "Hardware" category is already tilting hard in that direction. I disagree that "architecture" and CPU mean the same thing. A Mac is an architecture, no matter what CPU it uses, and the same for a PC. And that is the big problem I see with your organization for "Hardware".

Someone coming to this wiki is only interested in ONE architecture. The one they are coding for. To use your "Hardware" tree, they would need to look at PC architecture under each separate heading of Common Devices, Communication, Input Devices, Peripheral Buses, Sound, Storage, Video, and "Architecture". This is not intuitive or efficient. If someone is programming a PC, they should click a category that says "PC architecture", and all of those headings whould be subcategories under PC Architecture, so that they are grouped rationally. And there would be a separate main Architecture category for Macs, because the hardware setup for Macs is totally different, and should not be mixed with the hardware specs for PC architectures.

Combuster wrote:
In contrast to hardware, the software is what we are developing. I.e. the contents of that is up to us osdevers.


But pretty much everyone needs a bootloader, don't they? We are boxed in, to some degree, by the architecture we are programming for -- its boot sequence, memory mapping layout, etc. People visiting the wiki need to be informed what those software limitations are. We also need to be informed how to interface with pre-existing OSes. These are all software issues.

Combuster wrote:
If you would indeed to introduce such a category it might introduce a feeling of being forced into some doctrine.


Perhaps, but I was trying to make the point that "Booting" is not a hardware specific task. It is a software specific task having to do with your kernel. The same with "Interrupts" to a large degree. GDTs & Interrupt tables. "How to Enter & Exit a particular CPU mode". Specific filesystem formats. These are all abstractions above hardware level concepts. So putting them in a category named "Hardware" is non-intuitive.

Combuster wrote:
- It looks like your architecture category is doubled. (other architectures vs cpu types)


As I said, a Mac is not a CPU type, and a K2-266 chip is not an architecture. An architecture is a box. A CPU is a chip. If you want to put the word "Chip" after all my CPU types, that might clarify it.

Combuster wrote:
- I think I/O should be separated into input devices (mouse, KB) and communication devices (serial port, NICs)


I just don't see a good reason to make a separate category for only mouse and KB, which are just unidirectional communication devices. And "communication devices" would seem to include modems, and muxes, and routers. I think the category name would be a little unclear.

Combuster wrote:
- USB is a bus, i think it should be categorized as such


OK.

Combuster wrote:
- Why make the distinction between various x86 compatibles - they all support the basic instruction set, and this listing looks confusing


Because one reason to be looking at this wiki is to be looking for special issues regarding the particular CPU that you are programming for. Chip bugs are specific to one manufacturer, and chipline. Optimization issues are also specific to manufacturers. And the main point is that it is the differences from the basic instruction set that are vital to know about. Lack of CPUID function. Lack of MTRRs. Different MSR set.

Combuster wrote:
Kernels and Drivers may be software, but they are directly dealing with one or more pieces of hardware.


I disagree about kernels. Kernels are one level of abstraction away from dealing with hardware. They are software.

Combuster wrote:
As would the boot sequences for each architecture (which are btw missing in your tree).


My tree was assuming that we would be aiming primarily at only PC architecture. Boot sequence in mine would be under Booting, in Software. And my tree was intended as an example, not to be complete.
:wink:


Top
 Profile  
 
 Post subject:
PostPosted: Tue Feb 13, 2007 5:49 pm 
Offline
Member
Member
User avatar

Joined: Wed Oct 18, 2006 3:45 am
Posts: 9301
Location: On the balcony, where I can actually keep 1½m distance
Lets clarify this architecture thing a bit:

Wikipedia wrote:
"Architecture" therefore typically refers to the fixed internal structure of the CPU (i.e. electronic switches to represent logic gates) to perform logical operations, and may also include the built-in interface (i.e. opcodes) by which hardware resources (i.e. CPU, memory, and also motherboard, peripherals) may be used by the software.


hence, the g4 macs and imacs are different architectures, while xbox and pc arguably are not. For this reason, its easier to classify systems by their processor class as thats what people write for. Note that windows runs on all three of xbox intel-mac and desktop, and most likely, the same holds for a properly configured linux kernel which would run unmodified on all three.

Note that I only things dependent on architecture are found in hardware-architecture-xxxx-topic. All the other categories are not subdivided into architectures: My HPPA box has an EISA bus and can therefore use all the hardware you could plug into an old PC.

Idea is: you visit hardware category, and if you want info on an specific architecture you go there (and to the appropriate subclass), or you pick the device type and hope your card is documented on the wiki.
Once you get to the x86 architecture, you have a list of programming documents, info on how various x86s boot with the appropriate bios (or EFI, if someone writes it) information.
The point was, is that you get mirrored trees when you want to split architecture-dependent software from the "silicon", which results in the need of browsing two trees when you're looking for some info.

_________________
"Certainly avoid yourself. He is a newbie and might not realize it. You'll hate his code deeply a few years down the road." - Sortie
[ My OS ] [ VDisk/SFS ]


Top
 Profile  
 
 Post subject:
PostPosted: Tue Feb 13, 2007 6:16 pm 
Offline
Member
Member
User avatar

Joined: Wed Feb 07, 2007 1:45 pm
Posts: 1401
Location: Eugene, OR, US
OK, then let's ace the word "architecture" entirely -- and talk exclusively about "Platform"s instead, in the category tree.

So, for your specifc tree (so far), my objections would be:
1) use "Platform" instead of "Architecture" -- since the word architecture is not as clear.
2) I don't like the titles "Communication", "Input Devices", and "Peripheral Buses", because they all mean similar and overlapping things.

-- And if you want help on recategorizing the tree, I'd be willing. But you're going to have to post a more complete tree here, because I really have very little idea where you would want specific topics to go, under half of your main categories.


Top
 Profile  
 
 Post subject:
PostPosted: Wed Feb 14, 2007 3:30 am 
Offline
Member
Member
User avatar

Joined: Wed Oct 18, 2006 3:45 am
Posts: 9301
Location: On the balcony, where I can actually keep 1½m distance
bewing wrote:
-- And if you want help on recategorizing the tree, I'd be willing. But you're going to have to post a more complete tree here, because I really have very little idea where you would want specific topics to go, under half of your main categories.


Here goes
(the items marked between square brackets iirc do not exist yet - they are just to give you an idea)

Code:
    Platforms

        PowerPC
           
            PowerPC Overview
           
        X86

            X86 CPU

                Global Descriptor Table
                Interrupt Descriptor Table
                CPU Bugs
                Protected Mode
                Virtual 8086 Mode
                Real Mode
                Interrupt Vector Table
                Unreal Mode
                AMD K6 WriteBack Optimisations
                Detecting CPU Speed
                Tutorial:GDT
                X86-64

                X86 Instructions

                    CLI
                    CPUID
                    INT
                    INVLPG
                    STI
                    XCHG

            System Initialization (PC)
            MBR (x86)
            BIOS (PC)
            [EFI (Intel-Mac)]
            A20 Line
            CMOS
            Interrupt Service Routines

            PowerManagement

                ACPI
                APM

        Platform xxx

            Platform xxx overview

    Network Devices

        3c556
        Ne2000
        Serial ports

    Common Devices

        PIC
        Programmable Interval Timer
        [RTC]

    Buses

        PCI
        USB
        [ISA]

    Input Devices

        [KBC]

    Storage

        ATA
        DMA
        Floppy Driver
        Storage

    Video

        VGA

            VGA Hardware
            VGA Resources

    [Sound]

        [Soundblaster]
        [AC97]

_________________
"Certainly avoid yourself. He is a newbie and might not realize it. You'll hate his code deeply a few years down the road." - Sortie
[ My OS ] [ VDisk/SFS ]


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 10 posts ] 

All times are UTC - 6 hours


Who is online

Users browsing this forum: No registered users and 21 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group