Category: Programming

  • Multi-threading Memory

    As I’ve written before, multi-threaded code is hard to write. It becomes even harder to write when you find that lock contention is an efficiency issue. On a modern multi-core system locks require some sort of memory cache coordination between the various cores. If your program is written using fine-grained locks which may be held…

  • Debugging

    I think that people who take a computer science degree in college should be required to study debugging. For better or for worse, debugging is an essential part of programming. However, most programmers are left to learn it on their own, in a way that is not true of many other aspects of programming. I…

  • Centralize/Decentralize

    One way to read the progress of computer usage is as an alternation between centralization and decentralization. Once there were no permanent documents: you ran your job, got the results, and took them away; centralized. Timesharing was introduced, and you had your own access to the single shared computer; less centralized Minicomputers let different groups…

  • Kernel Linker Features

    As I continue trying to build the kernel with gold, I’ve had to copy several features from the GNU linker to gold. Historically, the GNU linker implemented the -R option to mean that it should only use the symbols found in the named object; the object should not actually be included in the output file.…

  • Gold Feature Complete

    I think that the new linker, gold, is now feature complete, and with a bit more testing it should be ready for an open release. I wanted to get it to the point where it could build the Linux kernel. I haven’t actually tested that yet, but it now has everything it needs. The most…