Category Tree
- Combuster
- 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
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
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
Things are out of place ...
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?
Fortunately, it doesn't take much effort to reedit an entire smallish wiki?
My detailed suggestion
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
-- ...
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
-- ...
- Combuster
- 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
There's a page on the old wiki nobody cared to port yet: http://www.osdev.org/osfaq2/index.php/C ... d%20Thingsbewing 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"?
I think it does just that
IMO, its everything put into copper, silicon, and aluminum casings.Beyond that, my next question would be "what precisely does 'Hardware' mean, anyway?"
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).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"?
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.And does the whole concept of "Hardware" mean that there should be a "Software" category also?
My comments on that: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
- 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
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).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
-- ...
--------------------------------
Well, editing some 100 pages... That's why i decided to push the matter before it really got out of hand. It'll still be a lot of work.bewing wrote:Fortunately, it doesn't take much effort to reedit an entire smallish wiki?
I've been as much involved as you, and i have been just as ignorant on itJhawthorn wrote:I must be partially responsible for this
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)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.
--------------------------------
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.
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:There's a page on the old wiki nobody cared to port yet: ... I think it does just that
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:IMO, its everything put into copper, silicon, and aluminum casings.
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".Combuster wrote:so basing the category tree on the intel architecture alone is IMO not good
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.
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:In contrast to hardware, the software is what we are developing. I.e. the contents of that is up to us osdevers.
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:If you would indeed to introduce such a category it might introduce a feeling of being forced into some doctrine.
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:- It looks like your architecture category is doubled. (other architectures vs cpu types)
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:- I think I/O should be separated into input devices (mouse, KB) and communication devices (serial port, NICs)
OK.Combuster wrote:- USB is a bus, i think it should be categorized as such
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:- Why make the distinction between various x86 compatibles - they all support the basic instruction set, and this listing looks confusing
I disagree about kernels. Kernels are one level of abstraction away from dealing with hardware. They are software.Combuster wrote:Kernels and Drivers may be software, but they are directly dealing with one or more pieces of hardware.
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.Combuster wrote:As would the boot sequences for each architecture (which are btw missing in your tree).
- Combuster
- 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:
Lets clarify this architecture thing a bit:
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.
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.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.
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.
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.
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.
- Combuster
- 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:
Here goesbewing 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.
(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]