5

I have been reading today about the new AMD Ryzen processors not being supported under Windows 7 by drivers and so on.

How come a processor needs a driver to run, or that it can decide which OS to run or not?

I though processors are designed to conform to a standard of instructions (say x86), and that any OS that is compiled to that instruction can run on top of it.

How come now that the processor will choose what to run, and what not? And is there similar cases with Linux distributions? Like a processor that can run Ubunut, but not Fedora? It seems insane to me.

bwDraco
  • 46,683
Ghasan
  • 337

2 Answers2

3

I though processors are designed to conform to a standard of instructions (say x86), and that any OS that is compiled to that instruction can run on top of it.

There's a certain category of hardware/features that falls under the umbrella of "chipset" devices.

In the 80's, the CPU was one component of many discrete chips on a motherboard, and there were many other components (separate chips) which, while not technically required for the CPU itself to function, nonetheless formed the "base hardware" of a system - example devices are the programmable interrupt controller, programmable interval timer, and DMA controller. These devices form part of the system's "physical infrastructure" and let the CPU interact with the outside world a lot easier - and if this hardware is standardized, you have a platform.

Techincally, hardware of this type are "peripherals" since they are not built-in to the CPU, but you do not have an option to remove them. They can pretty much be always assumed to exist - and thus these became part of the "standard PC platform" by convention. These eventually became consolidated into one chip by various vendors, but was still called a "chipset" - and other traditionally discrete hardware such as IDE controllers, VGA controllers would start to be included as well.

Now in the modern era, most of the "chipset" type hardware are now advanced versions of legacy PC platform hardware (APIC, HPET, PCI-E bus controller, memory controller, USB and SATA controllers, etc.), plus new things like power management, power control, integration with a "Management Engine" type platform. Most of it is built into the CPU now; we may be soon reaching the point where a typical motherboard will have a CPU socket, PCI-E slots, and not much else (there are actual systems like this now). With Intel and AMD both integrating graphics into their CPUs, graphics are obviously probably a big part of the chipset now.

But the chipset hardware, to the extent it is configurable/programmable, still appears to the CPU on the "outside" like either traditional external devices or through an address mechanism called "Model Specific Registers" even though physically the hardware is now part the CPU.

So drivers are still needed like one would need with any external device. AMD is choosing not to make/release drivers for Windows 7.

Windows will still boot on it, it's just that various things that are chipset devices may appear as missing devices in Device Manager. These could include things like thermal sensors, PCI devices that talk to the graphics hardware, etc. Intel chipset drivers often override and implement better power/thermal management than the BIOS does (I've heard) and AMD chipset drivers may do the same.


Some in the comments are referencing things like 3d-Now, MMX, SSE, SSE2, etc. These are extensions to the x86 instruction set, and not all CPUs have all extensions. Drivers are not needed to access them. The program wanting to use them needs to check if the CPU can support them and this is easily done with a CPUID instruction.

LawrenceC
  • 75,182
1

In addition to the previous answer I'd like to add that while a driver might not be necessary for the os to run it is certainly beneficial if the os is aware of how the cpu is designed in order to run optimally.

For example in Ryzen's case the cpu is built from a varying number of ccx modules with up to 4 cores / 8 threads and 8 MB L3 cache each and each core has it's own dedicated L1 and L2 cache. Communication between the cores in each ccx is relatively fast while communication between cores in different ccxes is slow. From this we can see that it is optimal to schedule processes/threads in a way that minimises communication between ccxes and first utilising 1 thread per core. This gives much better performance than bouncing threads from one ccx to another or putting two resource intensive threads on the same core.