Are you asking how C gets turned into Assembly or how does C interact with the machine? A compiler will compile your C code into assembly and an assembler will produce machine code from your assembly. Everything, no matter how high level it is, eventually is a series of instructions on some physical processor. C is basically just a higher level of representation of the assembly code the machine runs. Since you have experience in both, I'm sure you can see how C constructs translate into assembly code. Example how a while or for loop uses conditional branching or how local variables are allocated on the stack. Operating systems are written in a mix of C and assembly, as some things are specific to the machine you are running on. For instance, switching between Protected mode and 32e mode on an x86-64 processor. If you're also wondering how your code calls into operating system calls, it depends on both the processor and the operating system. For example on x86/linux, some arguments are passed via registers and on the stack and a software interrupt is called to transfer control to the OS and have the OS service the request on your behalf, such as file I/O or memory allocation. The more you study both of them, the more apparent it becomes how easily linked they are. I think what most people like about C is that its higher level than assembly but still gives you enough constructs that are close to the machine.