I have a fairly strong background in C and Assembly and I am starting to look into basic compiler and operating systems design, but my biggest problem is where I should really start, seeing as both are very large project types to undertake.

My question is, what are some good resources or good known starting points when looking at getting into either of these programming arenas?

ADDENDUM

As I've been reading along over the past few months I've found that basic principle and theory are roughly similar, it's more of a I want to get into lower level design and want to know where to start, since much of what I've been reading has been theory and I haven't ran across a large amount of practical implementation information.

Well, aparently my google-foo just isn't as good as I thought it was. For not finding any of these I'm demoting myself from a black belt to a red belt pending any further blunders.
– Jeff LangemeierJul 21 '11 at 17:58

1

The two are 90% unrelated, why are they in one question?
– user7043Jul 21 '11 at 18:21

3 Answers
3

I guess based on your C knowledge, you want to design a compiler for C. There is an interesting OS book for Andrew S. Tanenbaum called Modern Operating Systems. For a compiler book you should try Compilers: Principles, Techniques, and Tools.
You should know that designing a new operating system is really a hard task and need a lot of experience, not just a programming experience but also you need to read a lot of researches and read the internal design of existing operating systems cause there are a lot of trade offs you can make. This for the design only, implementation is another big issue too. For compiler design, it's easier than OS design but still hard though. You need to be patient and make it a mission from the heart

On "really hard" - I can believe this (no experience, but enough knowledge to make an educated guess), but what about developing an OS component? For example, a file-system specification and driver? Not trivial, of course, but a reasonable goal for a learner?
– Steve314Jul 22 '11 at 13:10

Still hard target, cause you need to understand the hardware specs for this drive, know best practices, basically be strong at programming in C or C++. Anyway, even if you didn't succeed in delivering a commercial driver, you will get a lot of knowledge!
– K''Aug 9 '11 at 19:17

TIP: Before starting designing the OS you should have a good knowledge of computer organization. You mentioned you know Assembly programming, so I am assuming you have this knowledge already, but in case you need to brush up, a great book is Computer Organization by Carl Hamacher...