#183 in Computers & technology books
Use arrows to jump to the previous/next product

Reddit mentions of Operating System Concepts

Sentiment score: 12
Reddit mentions: 28

We found 28 Reddit mentions of Operating System Concepts. Here are the top ones.

Operating System Concepts
Buying options
View on Amazon.com
or
    Features:
  • New
  • Mint Condition
  • Dispatch same day for order received before 12 noon
  • Guaranteed packaging
  • No quibbles returns
Specs:
Height9.783445 Inches
Length7.51967 Inches
Number of items1
Weight3.1 Pounds
Width1.543304 Inches

idea-bulb Interested in what Redditors like? Check out our Shuffle feature

Shuffle: random products popular on Reddit

Found 28 comments on Operating System Concepts:

u/[deleted] · 14 pointsr/programming

This might be a good step by step way of doing it:

u/hell_onn_wheel · 13 pointsr/Python

Good on you for looking to grow yourself as a professional! The best folks I've worked with are still working on professional development, even 10-20 years in to their profession.

Programming languages can be thought of as tools. Python, say, is a screwdriver. You can learn everything there is about screwdrivers, but this only gets you so far.

To build something you need a good blueprint. For this you can study objected oriented design (OOD) and programming (OOP). Once you have the basics, take a look at design patterns like the Gang of Four. This book is a good resource to learn about much of the above

What parts do you specify for your blueprint? How do they go together? Study up on abstract data types (ADTs) and algorithms that manipulate those data types. This is the definitive book on algorithms, it does take some work to get through it, but it is worth the work. (Side note, this is the book Google expects you to master before interviewing)

How do you run your code? You may want to study general operating system concepts if you want to know how your code interacts with the system on which it is running. Want to go even deeper with code performance? Take a look at computer architecture Another topic that should be covered is computer networking, as many applications these days don't work without a network.

What are some good practices to follow while writing your code? Two books that are widely recommended are Code Complete and Pragmatic Programmer. Though they cover a very wide range (everything from organizational hacks to unit testing to user design) of topics, it wouldn't hurt to check out Code Complete at the least, as it gives great tips on organizing functions and classes, modules and programs.

All these techniques and technologies are just bits and pieces you put together with your programming language. You'll likely need to learn about other tools, other languages, debuggers and linters and optimizers, the list is endless. What helps light the path ahead is finding a mentor, someone that is well steeped in the craft, and is willing to show you how they work. This is best done in person, watching someone design and code. Also spend some time reading the code of others (GitHub is a great place for this) and interacting with them on public mailing lists and IRC channels. I hang out on Hacker News to hear about the latest tools and technologies (many posts to /r/programming come from Hacker News). See if there are any local programming clubs or talks that you can join, it'd be a great forum to find yourself a mentor.

Lots of stuff here, happy to answer questions, but hope it's enough to get you started. Oh, yeah, the books, they're expensive but hopefully you can get your boss to buy them for you. It's in his/her best interest, as well as yours!

u/whydna1 · 9 pointsr/AskComputerScience

Firstly, you should pick up a text on Operating Systems. There's a few classics:

  • Silbershatz's Operating System Concepts (aka "The Dinosaur Book")
  • Andrew Tanenbaum's Operating System Design and Implementation (aka "The Minix Book")

    That being said, the summarized version (assuming we're talking about pre-emptive multitasking) is that shortly after the OS boots, it initializes the hardware timer with some delay value (1ms is common in modern OS's, but others aren't unheard of). When the hardware timer expires, it issues an interrupt. When a hardware interrupt occurs, the processor will push the instruction pointer, stack pointer, flag registers (and perhaps others) onto the stack and begins executing the code at the address configured for the interrupt.

    An OS will have installed an interrupt handler for the timer that will run the task scheduler. In a really simple model, the task scheduler will suspend the currently running task by copying the various registers (flags, instruction pointer, stack pointer, etc) from the stack into memory. It will then select the next task that it wishes to execute and copy its registers onto the stack (replacing what was pushed there initially by the timer interrupt). Finally, it will reset the timer for another delay and will issue an "interrupt return" instruction which will pop the saved-registers off the stack and back into their corresponding locations in the CPU registers. At this point, the previous task is suspended, the new task is running.

    If you're feeling adventurous and have access to a microprocessor which has a timer and hardware interrupt support, you can write a fairly simple/naive scheduler yourself with relative ease (I did this on a Motorola HC12 in university for fun).

    In practice, a modern OS has a bit more to deal with than just the CPU registers. There might also be a virtual memory sub-system which needs to be updated, many other registers beyond just the IP, SP and flags which need to be saved and restored, etc. Additionally, many OS's have potential complex algorithms to select which task to run based on a variety of considerations: is the task interactive or doing batch work, are we trying to meet real-time scheduling requirements, is there an affinity to a particular CPU core that we want to consider (perhaps there's L2 cache that we like the application to stay close to), etc.

    In short: the PC isn't nulled out, it's saved away and then eventually restored.

    There's a whole other discussion which could be had about other types of multi-tasking. Co-operative multitasking was common until the mid-90s (System 7 on the Mac was co-operative, for example). In this model, applications need to periodically release control to the operating system. This is done through a system-call (and thus a software interrupt); in the case of the mac, this was WaitNextEvent.
u/Xiroth · 7 pointsr/compsci

Operating Systems Concepts (AKA The Dinosaur Book) is generally quite well regarded.

Artificial Intelligence: A Modern Approach tends to be the text of choice for teaching AI to undergraduates - it doesn't deal with many of the most modern techniques, but it establishes the common functionalities.

u/shred45 · 6 pointsr/gatech

So, when I was younger, I did attend one computer science related camp,

https://www.idtech.com

They have a location at Emory (which I believe I did one year) that was ok (not nearly as "nerdy"), and one at Boston which I really enjoyed (perhaps because I had to sleep on site). That being said, the stuff I learned there was more in the areas of graphic design and/or system administration, and not computer science. They are also quite expensive for only 1-2 weeks of exposure.

I felt it was a good opportunity to meet some very smart kids though, and it definitely lead me to push myself. Knowing and talking to people that are purely interested in CS, and are your age, is quite rare in high school. I think that kind of perspective can make your interests and hobbies seem more normal and set a much higher bar for what you expect for yourself.

On the other side of things, I believe that one of the biggest skills in any college program is an openness to just figure something out yourself if it interests you, without someone sitting there with you. This can be very helpful in life in general, and I think was one of the biggest skills I was missing in high school. I remember tackling some tricky stuff when I was younger, but I definitely passed over stuff I was interested in just because I figured "thats for someone with a college degree". The fact is that experience will make certain tasks easier but you CAN learn anything you want. You just may have to learn more of the fundamentals behind it than someone with more experience.

With that in mind, I would personally suggest a couple of things which I think would be really useful to someone his age, give him a massive leg up over the average freshman when he does get to college, and be a lot more productive than a summer camp.

One would be to pick a code-golf site (I like http://www.codewars.com) and simply try to work through the challenges. Another, much more math heavy, option is https://projecteuler.net. This, IMO is one of the best ways to learn a language, and I will often go there to get familiar with the syntax of a new language. I think he should pick Python and Clojure (or Haskell) and do challenges in both. Python is Object Oriented, whilst Clojure (or Haskell) is Functional. These are two very fundamental and interesting "schools of thought" and if he can wrap his head around both at this age, that would be very valuable.

A second option, and how I really got into programming, is to do some sort of web application development. This is pretty light on the CS side of things, but it allows you to be creative and manage more complex projects. He could pick a web framework in Python (flask), Ruby (rails), or NodeJS. There are numerous tutorials on getting started with this stuff. For Flask: http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world. For Rails: https://www.railstutorial.org. This type of project could take a while, there are a lot of technologies which interact to make a web application, but the ability to be creative when designing the web pages can be a lot of fun.

A third, more systems level, option (which is probably a bit more opinionated on my part) is that he learn to use Linux. I would suggest that he install VirtualBox on his computer, https://www.virtualbox.org/wiki/Downloads. He can then install Linux in a virtual machine without messing up the existing OS (also works with Mac). He COULD install Ubuntu, but this is extremely easy and doesn't really teach much about the inner workings. I think he could install Arch. https://wiki.archlinux.org. This is a much more involved distribution to install, but their documentation is notoriously good, and it exposes you to a lot of command line (Ubuntu attempts to be almost exclusively graphical). From here, he should just try to use it as much as possible for his daily computing. He can learn general system management and Bash scripting. There should be tutorials for how to do just about anything he may want. Some more advanced stuff would be to configure a desktop environment, he could install Gnome by default, it is pretty easy, but a lot of people really get into this with more configurable ones ( https://www.reddit.com/r/unixporn ). He could also learn to code and compile in C.

Fourth, if he likes C, he may like seeing some of the ways in which programs which are poorly written can be broken. A really fun "game" is https://io.smashthestack.org. He can log into a server and basically "hack" his way to different levels. This can also really expose you to how Linux maintains security (user permissions, etc. ). I think this would be much more involved approach, but if he is really curious about this stuff, I think this could be the way to go. In this similar vein, he could watch talks from Defcon and Chaos Computer Club. They both have a lot of interesting stuff on youtube (it can get a little racy though).

Finally, there are textbooks. These can be really long, and kinda boring. But I think they are much more approachable than one might think. These will expose you much more to the "Science" part of computer science. A large portions of the classes he will take in college look into this sort of stuff. Additionally, if he covers some of this stuff, he could look into messing around with AI (Neural Networks, etc.) and Machine Learning (I would check out Scikit-learn for Python). Here I will list different broad topics, and some of the really good books in each. (Almost all can be found for free.......)

General CS:
Algorithms and Data Structures: https://mitpress.mit.edu/books/introduction-algorithms
Theory of Computation: http://www.amazon.com/Introduction-Theory-Computation-Michael-Sipser/dp/113318779X
Operating Systems: http://www.amazon.com/Operating-System-Concepts-Abraham-Silberschatz/dp/0470128720

Some Math:
Linear Algebra: http://math.mit.edu/~gs/linearalgebra/
Probability and Stats: http://ocw.mit.edu/courses/mathematics/18-05-introduction-to-probability-and-statistics-spring-2014/readings/

I hope that stuff helps, I know you were asking about camps, and I think the one I suggested would be good, but this is stuff that he can do year round. Also, he should keep his GPA up and destroy the ACT.

u/yaschobob · 3 pointsr/compsci

For systems, Operating Systems Concepts. This is a classic book.

u/annodomini · 3 pointsr/linuxdev

Here are some resources on operating systems in general, that discuss many of these things:

  • You can start from the Wikipedia article on operating system kernels and follow resources from there
  • For just a basic overview of feature support, Wikipedia has a chart on some kernels. There are various charts comparing other components, like filesystems
  • The OSDev Wiki has lots of information on operating system development; it is targeted at hobbyists building their own operating systems
  • Operating Systems Concepts, an undergraduate textbook (Amazon, you can also find pirated PDFs online if you wanted)
  • The Mach Kernel, a chapter from previous editions of Operating Systems Concepts that has later been removed but is now available for free.
  • Linux in a Nutshell (somewhat outdated)
  • The Design and Implementation of the 4.4 BSD Operating System (very outdated, but as you'll see with many of these resources, looking at the design of older versions of kernels can be quite instructive without all of the baggage that tons of hardware support, legacy support, and lots of new and complicated features and concurrency primitives that modern kernels have)
  • Xv6, an implementation of V6 Unix for modern x86 processors. This is inspired by [John Lion's Commentary on the Sixth Edition UNIX Operating System](Commentary on the Sixth Edition UNIX Operating System), AKA the "Lion's Book"
  • The Linux Programming Interface has lots of information on the interaction between user-space and the kernel in Linux, and compares many of the interfaces to other systems.
  • Mac OS X Internals details a lot of the inner workings of Mac OS X and the xnu kernel
  • The Minix 3 Operating System and book

    The list goes on and on. This just barely scratches the surface. There is not, as far as I know, any simple side by side comparisons of all of these components of two different operating systems; there are decades worth of benchmarks, academic papers, practical reviews, and so on, but there's no one single source I can point you to, because it's such a big topic.

    That's why I asked you to narrow down your question a bit. Start with that Wikipedia article. Determine what you want to learn more about. You probably want to start with learning about the general structure of operating systems, what they do and what all of the components are, then pick one area and a couple of operating systems and focus on those.
u/Boxxy_runner · 3 pointsr/java

This is what I would do in your situation. Pick one of the may University resources for java heres a good one.
Find a secondhand university bookshop and get some used inexpensive comp sci text books that would support such a course. Also I would get a good Linux book and a good comp sic text book for operating systems(difficult but worth while subject). The classic opp systems. To work as a java dev you tend to need to know everything

u/zkSNARK · 3 pointsr/ComputerEngineering

If you wanna go deeper with the hardware, this is the book my university used. It contains a lifetime of knowledge. However, it is nowhere close to the readability of Code. Where I found code to be friendly and inviting, this book is more of a grind through 100 pages in 2 months and question your existence type of thing. For OS stuff, we used this one. I'd say its a lot more friendly to read than the architecture book, but really as you go deeper into both of these subjects, they don't get friendlier.

u/e-kayrakli · 2 pointsr/explainlikeimfive

There are many heuristic algorithms to find a suitable position for the file. Also, note that it is quite likely that you will not be able to find a place that is large enough to fit your file. That's why operating systems store files in blocks or clusters. Different file systems have different approaches for file allocation and minimizing disk fragmentation. Therefore, it is safe to say that there is no ideal solution for these problems and it varies from one file system to another. You can read wikipedia article about fragmentation {Seriously? I cannot have a link with ')' ?!}. Or if you are more interested than that go ahead and read about file systems. If you want to learn this stuff completely I absolutely love this book.

u/maxels · 2 pointsr/learnprogramming

I am pretty poor at these topics as well, but I remember using this book in my college course on operating systems. If you can get your hands on a copy I'm sure it would be a good resource.

u/exacube · 2 pointsr/linux

First, you need to learn C and be very comfortable with it -- this happens when you work on a large project with multiple source files, especially when you start one from scratch yourself.

Second, you need to learn about operating system/kernel fundamentals -- C is just a tool/language. You need to know a lot about what you're developing! So get a book on OS -- http://www.amazon.com/Modern-Operating-Systems-Andrew-Tanenbaum/dp/0136006639 or http://www.amazon.com/Operating-System-Concepts-Abraham-Silberschatz/dp/0470128720 , or reading lecture notes from your school (preferrably from a very good Computer Science school). Here's one: http://www.student.cs.uwaterloo.ca/~cs350/W11/reading.html

Third, start exploring the kernel source code and try and figure what things are and how things work. Subscribe to linux mailing lists, read more articles on how Linux internals work, etc.

The most important step here is step number 2! It will require the most work and the most effort.

It'll be challenging and fun, and will take quite a lot of time :) Be persistant and good luck!

u/kaosjester · 2 pointsr/linux4noobs

Not sure if it's for Linux or OS in general. The other links here are a nice look at Linux in general. These are the two textbooks used in most modern OS classes:

  • The Circus Book - Modern Operating Systems
  • The Dinosaur Book - Operating System Concepts

    Honestly, I find the first much easier to read. The second discusses things at a verbose and somewhat rambling fashion. They're both good for learning the real ideas behind modern operating systems, though.
u/BSoDduringDDoS · 2 pointsr/ItalyInformatica

Per i sistemi operativi https://www.amazon.it/Operating-System-Concepts-Abraham-Silberschatz/dp/0470128720

Per le reti https://www.amazon.it/calcolatori-internet-approccio-top-down-aggiornamento/dp/8871929381


Per iniziare forse sono un po' troppo (anche come prezzo, il primo sono €80) però secondo me sono i migliori.

u/unshift · 1 pointr/programming

CLRS is a great book and you'll likely need it in any reasonable CS dept. It's very heavy on the math and might be a bit over your head right now, but it's a solid book. It's a bit more than $50 but Operating Systems Concepts is also a good buy. I personally don't go for language-specific books since they quickly go obsolete, but books on fundamentals are very useful to have in your library.

u/aweeeezy · 1 pointr/C_Programming

This is something I definitely want to attempt before taking my operating systems class...

It seems this is a common university level text on the subject:
http://www.amazon.com/gp/aw/d/0470128720/ref=redir_mdp_mobile?pc_redir=T1&tag=stackoverfl08-20

Any other recommendations?

u/sanimalp · 1 pointr/linux4noobs

You should start by picking one open source filesystem. EXT3 would be a good one. take a look at the source for it. Read the wikipedia entry and kernal documenation on it. make sure to google and understand the terminology in the documentation, because they are written with a level of jargon that assumes you know intimately what a 'journaling block device' layer is.. and other fundamental concepts.

EXT3 is relatively modern, and all the code is available to you, so you A) read through it, B) change it to see what happens to a VM drive filesystem or a physical practice hard drive file system, and C) benefit from community knowledge on it.

After you learn about EXT3, read up on other open source filesystems. All the code is there, making life easy. With the knowledge you get from that, you can more easily understand pros and cons of other filesystems, including proprietary ones.

There might be better ways, but that is how i would start. instead of EXT3, you could look at older EXT file systems for simpler examples.

Additionally, you may pick up a fundamentals of operating systems book, and make sure it has a chapter, or 10, on filesystems. 'Operating system concepts' is a book i like that has a chapter on distributed file systems that is good but assumes a lot of prior knowledge.

u/pilt · 1 pointr/programming

There are three fundamental multithreading models:

  • Many-to-One — Many user-level threads mapped to one kernel thread.
  • One-to-One — One kernel thread per user-level thread.
  • Many-to-Many — Many user-level threads multiplexed to a smaller or equal number of kernel threads.

    I recommend the dinosaur book for further reading.
u/tyggerjai · 1 pointr/learnprogramming

The classics are generally the dinosaur book ( https://www.amazon.com/Operating-System-Concepts-Abraham-Silberschatz/dp/0470128720 ) or Tananbaum ( https://www.amazon.com/Modern-Operating-Systems-Andrew-Tanenbaum/dp/013359162X ). Neither are terribly user friendly. Try /r/osdev -they're not hugely active but the sidebar resources should get you started.

u/red-hedder · 1 pointr/AskComputerScience

Oh, one other thing... if you want to start from "the base up" then you're going to have to learn a lot of Electrical Engineering and Signal Processing. If you want to start at the Computer Science layer, then you'll need to start at operating systems. For that, you should probably pick any operating system book with dinosaurs on the cover

u/Beignet · 1 pointr/learnprogramming

This is the book that my university uses, should it help any: http://www.amazon.com/Operating-System-Concepts-Abraham-Silberschatz/dp/0470128720

I have it even though I've never taken any OS courses either. I've flipped through it and TBH, it looks like a pretty dry read :/ I'm still determined to sit down one of these days and get something out of it. Hopefully something else good turns up in this thread!

u/DaRtYLeiya · 0 pointsr/learnprogramming

I have this book I needed to buy for a course once:

Operating System Concepts by Abraham Silberschatz

u/Neres28 · 0 pointsr/learnprogramming

Wasn't impressed at all with the dinosaur book. Was more of a book for managers and astronaut architects, not a single point in time did I say "Oh, that's how it was done."