Tag Info

Hot answers tagged

14

Imagine a physical disk storing the binary value 0101. Physically, on the disk, the charges exist as real values, which are rounded up or down by the disk controller binary -> physical charge 0 1 0 1 -> 0.1 0.9 0.1 0.9 If you were to overwrite the data with zeros, some residual charge would remain from the previous values, so you could in this simple ...


11

A great kernel is MINIX 3 deeply explained in the Tanenbaum's book (exist in paperback): Operating Systems Design and Implementation. ...Written by the creator of Minux, professional programmers will now have the most up-to-date tutorial and reference available today. Revised to address the latest version of MINIX (MINIX 3), this streamlined, ...


8

The next proposed systems language should feature wide adoption. Seriously, you haven't demonstrated anything that Go lacks besides users. Most languages are chosen not because of the language itself, but because of the libraries, tools, and support available. There needs to be an ecosystem for a language to have a chance at adoption. I've also stated ...


8

Consider writing a small embedded project on an embedded controller like the Arduino. This is a great way to begin the process of learning systems programming, because it starts you off at a basic level and allows you to grow into it.


7

Interesting question! You'll find that languages like Java and C# do in fact support fairly low level programming. For example look at some of the I/O source code in the OpenJDK for Java. You'll see that the higher level methods are implemented with lower level socket technologies, byte arrays and bit twiddling. With regards to C# and Java, those languages ...


7

The multipass erase is necessary to destroy data on magnetic storage devices. Data can be recovered with the right equipment even if it was overwritten by another sequence of 1s and 0s from the layers below or in between. However, there are voices on the internet which claim that multipass erasure is no longer necessary, as the areal density of data on ...


7

You have two distinct but related challenges: learning about "reliable distributed systems" (eventually you will discover that is an incomplete specification within a large and complex field); and getting a job in that field at some point in your education. Two activities are crucial to the education challenge: becoming familiar with the pertinent ...


7

Microsoft Research Singularity. A very different approach to designing an Operating System. Based on advances in modern programming languages, type systems, tools, static analysis, compilers and program verification. In fact, the majority of the team didn't even come from Microsoft Research's Operating System Division, they were language, tool, verification ...


6

Inferno -- worth checking out, because many of it's ideas sooner or later get 'backported' to Linux/Unix. It's an experimental operating system by Bell Labs, and continuation of their work on Plan9. Most interesting feature of Inferno is how it makes network resources completely transparent to applications: Transparent Resources Inferno offers ...


6

The idea of building software (I'm not even sure if that's the correct terminology to use for it) at a low level that interacts with the operating system seems interesting. I believe you're getting system programming confused with application development. System programming would be more along the lines of writing the operating system, not ...


5

I would imagine its not very important if you're writing non GUI utilities on top of a modern operating system without working on its internals. Its probably a different story if you are working on changing a modern operation system or developing a new one. If you're working with video hardware or a bare metal windowing system, you're going to need ...


5

Oberon. The books are The Oberon System: User Guide and Programmer's Manual and Project Oberon: The Design of an Operating System and Compiler Oberon is an existence proof of the assertion that big workstation operating systems don't have to be big. At a time when Unix required many megabytes just to load (and one of the early Linux distros wouldn't load ...


5

Mmm OS stuff really doesn't use ALL that much assembly. But for starters take a look at Linux kernal programming, making device drivers/inserting your own modules. It's a good start and it's where I started. It can be a bit confusing but once you get a hang of it it's actually pretty fun/cool. I highly suggest "Linux Device Drivers" by oreily. and Linux ...


5

I'll go ahead and say that I don't think calculus or linear algebra are likely to be important for systems programming. I certainly think calculus and linear algebra are worth learning in general -- I'm a math guy! And, as other answers point out, there is some indirect relevance, as performance analysis and algorithm design can use advanced math. ...


5

SomeKittens' comment is right on the money: You need calculus and linear algebra because those courses change the way that you think and the way that you understand the world. Linear algebra is all about mapping from one domain to another; calculus covers the way functions behave. They're powerful tools themselves, but the techniques you learn when studying ...


4

Most "low-level" programming basically amounts to directly interfacing with the Operating System. The reason it doesn't seem to you like there is an "obvious" way to do this is because generally speaking, higher level languages like Java strive for ease of use and portability. Code that directly interfaces with the Operating System is generally a lot less ...


4

Well, exactly what you're going to need wil depend on the class, though some generalities will likely hold. I'd suggest getting a C book intended for Java programmers. It's likely to point out the major pitfalls and help you transition. The biggest items that you're going to worry in C that you don't really worry about in Java are pointers and memory ...


4

If you're interested in systems programming, nothing beats actually working on an operating system (either on the core of the OS kernel or on the related device drivers) I'd therefore suggest getting involved in Linux development - it's a very good community to learn about OS internals. I learnt a huge amount about operating systems simply by following the ...


3

I suspect it's true around the edges. System programmers have to be far more concerned about performance and reliability, so algorithm analysis might be important, and calculus is sometimes needed for proofs of Big-Oh analysis. Subjects like queuing theory and discrete optimization (that's mathematical optimization not code optimization) can a play a role ...


3

There are several questions you can ask yourself to gain practice in deciding that question. Was the system originally sold without this program? Angry Birds may be a "Killer App" for a smart phone (the reason why someone buys it), but it is still a separate third-party app written long after the phone was introduced. Writing it would have been ...


3

Suspending a command (CTRL-Z) works by sending a SIGTSTP to the child process. The shell is then free to interact with the user via stdin/stdout. Resuming is accomplished by sending SIGCONT to the child process and then continuing to wait for it to finish. Backgrounding a process is accomplished by sending SIGCONT but not waiting for it to finish. In this ...


2

The problem encountered when creating a new systems programming language is that computer architecture has not changed that much since the early fifties. Granted, processors have gotten a lot faster and main memory sizes have grown to levels that industry pioneers could have only dreamed about sixty years ago, but modern computers are still based on an ...


2

Have no fear - it's only code Java and C have very similar syntax coming from the same family of languages. As others have said, your biggest hurdles will be learning pointers (hint: they're just indirection), and memory management. Suddenly all those arrays you've been declaring in your Java have to be disposed of. Like any subject, once you've twigged ...


2

While you can do low-level stuff with C# or Java (or most other languages), most people don't. Therefore, any reasonably popular book you pick up on either will leave low-level stuff out. They're likely to cover the language features you'd need, but not apply them the way you're curious about. Similarly, books on low-level stuff will probably be in C, ...


2

What I did what learned a high level language (Java) then became more interested, as you are, about low level languages and hardware. In its most primitive state, a computer is electronics. 1's and 0's are just figures for electrical charges (on and off). Once I began to understand the logic behind processors, and what is inside an Arithmetic Logic Unit, ...


2

The good news is, it can be done with Java or C#. The only problem you need to know is how. Basically, you need to know this nice little things about Hardware Architecture (not necessary PC, but Playstation if that's what you want to emulate). And I am afraid you would need to go deep, like Assembler and Machine Language. All ALUs, registers, MMUs and stuff ...


2

What you are looking for is a niche job. The only way to get one of those is like any other really: apply for a job that fits the description. Of course since you have little experience in the design and building of such systems you'd have to either run for an entry level job, or otherwise leverage your experience if any of it could be of interest to that ...


2

Generally speaking, if it ain't broke, it ain't gonna be fixed. If your company already has systems in place that solve this and they don't see a problem with it, chances are they're not going to want to pay you to fix it, which doesn't make them any money (relative to those applications that people use, with those boring CRUD ops ;)). If your company has ...


2

Also, I'm mostly a Java/Web developer guy, so I would like to avoid as much C programming as possible. You're going to have to learn to live with C if you wish to do much of anything with microcontrollers, at least have a passing knowledge anyway. Most code you'll see for microcontrollers is written in C. Even if you don't want to write it, you'll at ...


2

Most microcontrollers can be programmed but you'll need to do things like set their reset pins to a higher voltage to put them into "programming mode", or in some other way signal them to do that. A brief look at the hardware you purchased indicates the micro is integrated into the board, so unless they support reprogramming of the controller they're using, ...



Only top voted, non community-wiki answers of a minimum length are eligible