Best api & operating environments books according to redditors
We found 21 Reddit comments discussing the best api & operating environments books. We ranked the 12 resulting products by number of redditors who mentioned them. Here are the top 20.
We found 21 Reddit comments discussing the best api & operating environments books. We ranked the 12 resulting products by number of redditors who mentioned them. Here are the top 20.
In short, the answer is virtual memory and the protected mode flat model that the past generations of CPU architecture and operating systems have been using.
As you may know, programs are never given full, direct access to the RAM banks; the operating system abstracts this layer away from them in the form of virtual memory. Virtual memory is basically a system whereby you can map physical memory addresses to non-physical ones the OS controls and can readily re-arrange. Thanks to virtual memory the OS can trick an application into thinking it has way more RAM than it actually has and this also enables swapping processes out to disk when the system is running out of memory because there are too many processes being run at the same time. As I pointed out before, since virtual memory is fully managed by the kernel, it can move out chunks of a program's address space to disk, a process known as "paging".
Now, back in the DOS era, virtual memory followed the real mode segmented model, which, in very simple terms meant that, even though processes could be shuffled back and forth between RAM and disk, there were no safeguards in place to prevent a process from messing up another process' memory space via a dodgy pointer pointing to a memory address beyond the scope of the faulty process.
One of the major goals of the successor to this virtual memory model, "protected mode flat model" was to allow the kernel to create a completely isolated address space for the processes it spawns and stopping a rogue program from altering other processes like before. Whenever such an attempt is made, a "segmentation fault" (SIGSEV) or "general protection fault" is raised by the kernel, which in the case of Linux, will prompt the kernel to swiftly kill the offending process.
In practical terms, this means your application won't be able to reach beyond the virtual memory address space it has been allocated (unless it's a kernel-space process, like a kernel subsystem or device driver) and can in no way communicate with other processes by reading or writing memory that belongs to them. In order to accomplish that, you'll need to make use of inter-process communication (IPC) techniques like Unix sockets, pipes, RPC, etc.
This is by no means an in-depth or 100% accurate explanation though. If you've got any follow-up questions I'm more than happy to answer them.
As for the literature, pretty much any textbook about operating system architecture will cover virtual memory to a great extent. I can recommend Operating Systems: Internals and Design Principles and Modern Operating Systems.
Here are a few more books that touch upon the topic of virtual memory:
Assembly Language Step-by-Step: Programming with Linux covers the topic of virtual memory and the different models that have evolved over time over its first few chapters.
The Linux Programming Interface: A Linux and UNIX System Programming Handbook covers this subject (and many, many more) from a Linux systems programmer perspective.
What Makes It Page?: The Windows 7 (x64) Virtual Memory Manager, in case you're interested in learning how Windows does it.
EDIT: added IPC info
I've posted this before but I'll repost it here:
Now in terms of the question that you ask in the title - this is what I recommend:
Job Interview Prep
Junior Software Engineer Reading List
Read This First
Fundementals
Understanding Professional Software Environments
Mentality
History
Mid Level Software Engineer Reading List
Read This First
Fundementals
Software Design
Software Engineering Skill Sets
Databases
User Experience
Mentality
History
Specialist Skills
In spite of the fact that many of these won't apply to your specific job I still recommend reading them for the insight, they'll give you into programming language and technology design.
Aside from SANS FOR508 (the course on which the cert is based) the following helped me:
Windows Registry Forensics
Windows Forensic Analysis Toolkit 2nd ed
Windows Forensic Analysis Toolkit 4th ed
The 2nd edition covers XP, the 4th covers 7/8
Digital Forensics with Open Source Tools
File System Forensic Analysis
This is a new book, but I imagine it'll help as well:
The Art of Memory Forensics
I read many of these in preparation for taking mine, but your best resource are the SANS class/books which is what the cert tests after. Having a good index is key.
There may be other classes out there that might help, but I have no firsthand experience with them, so I can't say what I recommend. All the above books, however, are amazing. Very much worth your time and money.
Was it this? https://www.amazon.com/Programming-Unix-System-Calls-Svr/dp/0130176745
Hey now - Slackware 96 is still the Internet's Favorite 32-bit Operating System
Something like this, probably.
Books that I find very useful:
Beginning Portable Shell Scripting: From Novice to Professional
From Bash to Z Shell: Conquering the Command Line
Unix Power Tools, Third Edition
The UNIX Programming Environment
Running Linux (mine is old, but still useful)
I have bought lots of other useful books from O'Reilly.
Anything written by Michael W Lucas.
> pure le istruzioni della carta igienica
Nah, un vero ingegnere 10x al bagno legge questo.
> Thanks for your time, my god this was longer than expected.
I suppose in the age of twitter that was a bit of a novel. For us old fogies, that's just a bit more than a post card :)
Introduction to Algorithms is the book for learning everything about algorithms. You'll learn all the standards; how to analyze them (space/time efficiency, Big-O, Big-Theta); and how to prove them; etc.
If you want to learn a great low-level language, the typical things to learn are assembly and C, but I would highly suggest learning Forth. There's tons on the web about it, but the seminal book was Starting Forth. You get all of the low-level detail of assembly, a bit of scaffolding, and you learn to build your higher level language structures as you need them. Great fun, and it's turned out to be very useful through the years, even though I never get to use it in production/release.
Some books on my wishlist (not sure if you're okay with math):
TAOCP
Operating System Principles
Computer and the Brain
Path to the Quantum Computer
According to the CP/M wikipedia page, you need the following to run it:
So with the parts list above along with the UART should be enough to meet the requirements. You will need to use banked memory or a similar mechanism (since you need the bootstrap code at address 0, but CP/M needs RAM at address 0 as well). Only problem is the floppy drive, which you should be able to overcome with a Compact Flash card, an CF to IDE converter, and a IDE interface. I haven't tried this myself but I think something like this would work.
If you were interested in writing your own OS, Operating Systems by Woodhull Tanenbaum is a good book on the topic.
My recommendations then for self study:
Read all those and you will be in good shape ;)
EDIT: I hate trying to get reddit to do what I want.
System Programming Concepts for ECE 222. The book is this.
Huh. TIL. For the record, I'm older than the average Redditor, and I learned make about 20 years ago, from the 1994 2nd edition of "Mastering Make". Fortunately, SUFFIXES still works for
backwards compatibilityold farts like me.Edit: This one.
Allan Holub, "Enough Rope to Shoot Yourself in the Foot", 1995
http://www.amazon.com/Enough-Rope-Shoot-Yourself-Foot/dp/0070296898
A good thing for removing some "bad behavior" from your coding practice.
There is a book about that
http://www.amazon.com/Enough-Rope-Shoot-Yourself-Foot/dp/0070296898