Category Tree

All about the OSDev Wiki. Discussions about the organization and general structure of articles and how to use the wiki. Request changes here if you don't know how to use the wiki.
Post Reply
User avatar
Combuster
Member
Member
Posts: 9301
Joined: Wed Oct 18, 2006 3:45 am
Libera.chat IRC: [com]buster
Location: On the balcony, where I can actually keep 1½m distance
Contact:

Category Tree

Post by Combuster »

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 ]
User avatar
jhawthorn
Member
Member
Posts: 58
Joined: Sun Nov 26, 2006 4:06 pm
Location: Victoria, BC, Canada
Contact:

Post by jhawthorn »

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.
User avatar
bewing
Member
Member
Posts: 1401
Joined: Wed Feb 07, 2007 1:45 pm
Location: Eugene, OR, US

Things are out of place ...

Post by bewing »

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?
User avatar
bewing
Member
Member
Posts: 1401
Joined: Wed Feb 07, 2007 1:45 pm
Location: Eugene, OR, US

My detailed suggestion

Post by bewing »

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
-- ...
User avatar
bewing
Member
Member
Posts: 1401
Joined: Wed Feb 07, 2007 1:45 pm
Location: Eugene, OR, US

Post by bewing »

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:
User avatar
Combuster
Member
Member
Posts: 9301
Joined: Wed Oct 18, 2006 3:45 am
Libera.chat IRC: [com]buster
Location: On the balcony, where I can actually keep 1½m distance
Contact:

Re: My detailed suggestion

Post by Combuster »

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
Beyond that, my next question would be "what precisely does 'Hardware' mean, anyway?"
IMO, its everything put into copper, silicon, and aluminum casings.
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).
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.

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
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 ]
User avatar
bewing
Member
Member
Posts: 1401
Joined: Wed Feb 07, 2007 1:45 pm
Location: Eugene, OR, US

Post by bewing »

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:
User avatar
Combuster
Member
Member
Posts: 9301
Joined: Wed Oct 18, 2006 3:45 am
Libera.chat IRC: [com]buster
Location: On the balcony, where I can actually keep 1½m distance
Contact:

Post by Combuster »

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 ]
User avatar
bewing
Member
Member
Posts: 1401
Joined: Wed Feb 07, 2007 1:45 pm
Location: Eugene, OR, US

Post by bewing »

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.
User avatar
Combuster
Member
Member
Posts: 9301
Joined: Wed Oct 18, 2006 3:45 am
Libera.chat IRC: [com]buster
Location: On the balcony, where I can actually keep 1½m distance
Contact:

Post by Combuster »

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: Select all

    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 ]
Post Reply