In school we see some things about the pc and how the tables work and basic segment protection, protected mode, etc..
Where do you go to school?
Even in OS lectures at Cambridge, we don't cover anything in this much detail.
We do a lot of theory such as paged vs segmented memory management and polled vs interrupt IO but no specific coding examples. We might move onto some code example when we do the case studies which should be starting in about 45mins (from writing this part of the post).
As for C++ vs C#, the syntax is fairly similar but you have much more control at a lower level (e.g. pointer arithmetic which is very useful when used correctly), and the ability to insert inline assembly for anything you cant directly do in C++.
The main problem when writing an OS in any higher level language is the lack of libraries that you normally use for 'normal' programming - but writing these libraries is a good way to learn!
Andrew