Our purpose in this article is, “running” does not equal “executing.” I want to set up this terminological distinction near the outset of the article for clarity’s sake. So for the remainder of this article, we’ll say that a program has been launched and is “running” when its code (or some portion of its code) is loaded into main memory, but it isn’t actually executing until that code has been loaded into the processor. Another way to think of this would be to say that the OS runs programs, and the processor executes them. The other thing that I should clarify before proceeding is that the way that I divide up the processor in this and other articles differs from the way that Intel’s literature divides it. Intel will describe its processors as having an “in-order front end” and an “out-of-order execution engine.” This is because for Intel, the front-end consists mainly of the instruction fetcher and decoder, while all of the register rename logic, out-of-order scheduling logic, and so on is considered to be part of the “back end” or “execution core.” The way that I and many others draw the line between front-end and back-end places all of the out-of-order and register rename logic in the front end, with the “back end”/”execution core” containing only the execution units themselves and the retire logic. So in this article, the front end is the place where instructions are fetched, decoded, and re-ordered, and the execution core is where they’re actually executed and retired.

Related posts:

  1. Conventional multi threading
  2. What is Multi-threading