Don't get too hung up on which languages you need to learn. It's more about learning problem solving skills, design patterns, data structures and algorithms. I learned Java at university and about 1% of the commercial code I have written has been in Java. Once you know one language, subsequent languages are easily picked up.
.NET is a windows framework that several languages are based on, including C# .NET and Visual Basic (VB) .NET. I had only read a few lines of C# before entering the workforce, now much of the code I write is in C# .NET, but again I must stress that it is not important which language(s) you learn.
As for the detailed architecture of a computer, I think so long as you have a general understanding of how a computer works you will be fine. Unless you wish to work for Intel designing new components, then you might need a more expert depth of knowledge, but for software development a general understanding should suffice. That's not to say that it would hurt to know what's going on under the hood...
I'm not sure what you are trying to ask about the general structure of an OS? Since each OS differs I think that learning the theory behind how an OS operates can't hurt, but I wouldn't stress if you only have a general understanding when you complete your degree.
Personally I think that your degree should teach you skills in design, logic, problem solving and investigation, and any language or theory should be learned to enhance these skills. You are probably developing these skills without even realising it :)