Henry H
Henry H

Reputation: 103

Low level systems programming with C++

I have been using C++ for a while now and I began to get interested in lower level system programming like drivers and stuff. Even some kind of primitive operating system could be very interesting project!

I have no clue where I could start. Are there any not-too-challenging things I could get started with and are there anything about C++ I should try to avoid like exceptions in performance critical code?

My current OS is Windows 7 if that matters much.

Upvotes: 5

Views: 22902

Answers (7)

James
James

Reputation: 9278

Symbian OS is written in a variant of C++. Of course, there's assembly code for low-level things, but that is all wrapped up. You cannot use exceptions, and for real-time drivers you cannot do normal things like dynamic memory allocation, not even in C.

Upvotes: 0

vpit3833
vpit3833

Reputation: 7951

I have heard the recently open sourced Symbian OS is written using C and C++. Not sure which parts of it are done with C++ as I have not read the code base. Consider looking into it.

Kerneltrap.org has some very good discussions about why the Linux kernel does not have C++ in its code base. Consider reading that as well.

Upvotes: 0

Hans Passant
Hans Passant

Reputation: 941873

Writing Windows device drivers in C++ isn't impossible, there are not many CRT functions that you could use to get you into trouble. The new operator is unusable for example, you don't have to fear a std::bad_alloc. Unless you replace it, that cuts out a rather large swath of standard C++ library classes.

But that's not really the point of a device driver, it is rather important that you make it as small as possible. C++ pays off when you write complex code. You explicitly do not want to write complex code in a device driver. Debugging it is redrum.

Linus really likes C in the kernel. There's a good reason for that.

Upvotes: 15

SingleNegationElimination
SingleNegationElimination

Reputation: 156228

C++ doesn't provide quite all of the tools you will need to actually implement a full operating system in it. There are a few machine specific things that cannot be done in c++. These things are handling and raising interrupts, controlling the MMU, controlling access to supervisor cpu instructions, and a handful of other small odds and ends.

Fortunately, these things are few enough that they can be written in assembly language accessed from C++.

Upvotes: 2

RobertO
RobertO

Reputation: 2663

I recommend C Programming Language and assembler. I'm not sure if it's possible to low-level much with C++.

Upvotes: -2

Marcelo Cantos
Marcelo Cantos

Reputation: 185922

I would strongly suggest you start by hacking existing open source device-drivers and kernels, which you can really only do in Linux or *BSD. The experience will also give you a good sense of whether you're cut out for this kind of programming.

Upvotes: 0

ChristopheD
ChristopheD

Reputation: 116227

Have a look at osdev.org (lots of questions that will pop into your mind when considering developing your own OS are answered here).

Upvotes: 1

Related Questions