views:

131

answers:

3

I'm interested in learning more about the PC from a lower (machine) level. I graduated from a school which taught us concepts using the Java language which abstracted out that level almost completely. As a result I only learned a bit from the one required assembly language course. In order to cram in ASM and quite a few details about architecture, it was hard to get a very deep picture of what is going on there.

At work I focus on unix socket programming in C, so i'm much closer to the hardware now, but I feel I should learn a bit more about what streams really are, how memory management and paging works, what goes on when you call "paint()" on a graphics buffer, etc. I missed out on a lot of this and i'm looking for a good resource to get me started.

I've heard a lot about the "Pink Book" by Peter Norton (Programmer's Guide to the IBM PC, Programmer's Guide to inside the PC, etc). It seems like this is on the right track, however the original is quite out dated and the newer ones have had conflicting reviews, with many people saying to stay away from it. I'm not sure what the SO crowd thinks about this book or if they have some suggestions for similar books, online resources, etc that may be good primers for this sort of thing. Any suggestions would be appreciated.

+1  A: 

Sounds like you might get what you want from the Operating Systems and System Programming lecture course at academicearth.org (a Berkeley course)

Course Description

Basic concepts of operating systems and system programming. Utility programs, subsystems, multiple-program systems. Processes, interprocess communication, and synchronization. Memory allocation, segmentation, paging. Loading and linking, libraries. Resource allocation, scheduling, performance evaluation. File systems, storage devices, I/O systems. Protection, security, and privacy.

Brabster
A: 

I would recommend you two books from Andrew Tanenbaum.

Structered Computer Organization - This covers topics from digital logic level to Assembly language Level.

Modern Operating Systems - This will give you the main idea about how operating systems work under the hood which in my opinion is very important for a C programmer.

Birkan Cilingir
A: 

After taking the OS course prescribed above, you might find the Linux kernel very interesting. The documentation is ok, and there are literally millions of lines of low-level code to deal with low level hardware type issues.

LXR is a great site for browsing the kernel sources. Also a fair amount of text documentation.

Also, LDD3 is a great free online book for learning to write device drivers (etc) for Linux

Best of luck

Sam Post