Hi, On 24/04/15 03:50, Andrew Saxsma wrote: > Hi Everybody - Very general question. Coming from an embedded C > background, I'm used the entire body of code, including the > operating system, compiled and linked into one boot executable and > one application executable, with little use of standard C libraries > or an operating system, and a compiler is specialized for a specific > target microprocessor. Recently I've started PC programming, where > the operating system and each application are all compiled > separately. In the PC world, are compilers specialized for both a > target processor AND an operating system? How does the spawning take > place? What is the primary means for applications to communicate > with each other and the operating system? Where can I go to learn > more? This is a very large topic, and not strictly about GCC. However, yes, compilers are specialized for both a processor and OS. It's important to reaize that the system call interface effectively is a barrier between user space programs and kernel programs. User space does not (and cannot) have any idea what is going on in kernel space. Programmers tend to specialize in user space work or kernel work: spawning processes is very much a kernel thing. There are lots of ways appliations can communicate with each other. The main ones are sockets (http://en.wikipedia.org/wiki/Berkeley_sockets) and shared memory. The basic design of an operating system kernel is still recognizably the same as it was in UNIX circa 1973, and classic works like Bach's "The Design of the Unix Operating System" are still in print 30 years after they were first published. They're rather out of date on details, as you'd expect. Some operating systems like Windows are not based on UNIX and are somewhat different in detail, but the concepts are much the same. It all depends on how much you want to learn. Do you really want to know how an OS works, or just enough to write user-space programs? Andrew.