Spread my Knowledge

classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

Spread my Knowledge

anas_ashraf
I have finished this book. It was awesome. Is there any books that you suggest me to read to spread my knowledge with technical projects ?
Reply | Threaded
Open this post in threaded view
|

Re: Spread my Knowledge

rleininger
Here are a few books that I have found useful which are similar to The Elements of Computing Systems.  Most of these treat the subject matter in more detail.

Justice, Matthew. (2021). How Computers Really Work. San Francisco, California: No Starch Press.

Null, Linda, & Lobur, Julia. (2019). The Essentials of Computer Organization and Architecture. 5th Edition. Burlington, Massachusetts: Jones and Bartlett Learning.

Patt, Yale N., & Patel, Sanjay J. (2020). Introduction to Computing Systems: From Bits and Gates to C and Beyond. 3rd Edition. New York, New York: McGraw Hill Education.

Petzold, Charles. (2009). Code: The Hidden Language of Computer Hardware and Software. Redmond, Washington: Microsoft Press.

Scott, John Clark. (2009). But How Do It Know? The Basic Principles of Computers for Everyone. Oldsmar, Florida: John C. Scott.

Whipple, Richard. (2019). Build Your Own Computer from Scratch. Seattle, Washington: Amazon Kindle.
Reply | Threaded
Open this post in threaded view
|

Re: Spread my Knowledge

Dan1984mor2017
In reply to this post by anas_ashraf
Did you know that you can get certified by The University of Jerusalem? The course is on Coursera.org Search Nand2Tetris That's what I'm working towards.
Reply | Threaded
Open this post in threaded view
|

Re: Spread my Knowledge

anas_ashraf
I know that you made a course on coursera but I want courses and books after this course(nand to tetris) in more details  
Reply | Threaded
Open this post in threaded view
|

Re: Spread my Knowledge

anas_ashraf
In reply to this post by rleininger
Thank You Mr.rleininger.

I have another question : Is there books that look deep in operating system ?
Reply | Threaded
Open this post in threaded view
|

Re: Spread my Knowledge

rleininger
I'm afraid I don't have much experience in this area.  Most of the books available on this topic are college textbooks and not written for beginners.  They are also generally quite expensive to purchase.  The exception to this is:

Arpaci-Dusseau, Remzi H., & Arpaci-Dusseau, Andrea C. (2014). Operating Systems: Three Easy Pieces. Madison, Wisconsin: Arpaci-Dusseau Books, LLC.

which can be purchased in Kindle format from Amazon for only about $10.  I have this book in my library and managed to get through about 1/3 of it.  Although the book is well-written, the subject matter becomes very technical, very quickly.  The authors, professors at the University of Wisconsin in Madison, illustrate the concepts they present with examples (written in C) of implementations in real-world operating systems.

I'm aware of two other books which I believe are well-known in the area of operating system theory.

Silbershatz, Abraham, & Galvin, Peter B., & Gagne, Greg (2018). Operating System Concepts. 10th Edition. Hoboken, New Jersey: John Wiley & Sons, Inc.

Tannenbaum, Andrew, & Bos, Herbert. (2015). Modern Operating Systems. 4th Edition. Upper Saddle River, New Jersey: Pearson Education, Inc.

These are also textbooks, and I believe have widespread use in operation system concepts courses in universities.

Sorry I am not more help.
Reply | Threaded
Open this post in threaded view
|

Re: Spread my Knowledge

WBahn
Administrator
In reply to this post by anas_ashraf
One thing you will need to do is define what is meant by "look deep". This is very possibly something that will have to take shape as you start exploring the topic, but some questions to keep in mind as you go on your travels are:

Do I want to know the theoretical underpinnings of the concepts behind operating systems>
Do I want to know how to implement those concepts in a functional way (i.e., performance doesn't matter)?
Do I want to know how those concepts are implemented in an efficient way?
Do I want to know how those concepts come together and play nice with each other?
Do I want to know how specific operating systems have chosen to deal with these concepts?
Do I want to know how to effectively use the features of a specific operating system?
Do I want to know how to manage and configure a specific operating system properly?

There are certainly other aspects that could be listed and each one of these can be a very deep dive in its own right (to be sure, there are overlaps between them -- no way to avoid that even if that were the goal).

While there's no one "best" way to go about this, a couple of paths that come to mind might be:

Approach #1
First take a shallow dive into the broad concepts that is as divorced from any real operating system as possible. The intent is to get familiar with the big picture of what an operating system needs to (are at least should) do and why it needs to (or should) do it. Don't worry about how it does it. Real operating systems (especially anything approaching a modern operating system) are behemoths with a huge amount of complexity. You want to first focus on the core concepts.

Then look at how those concepts can be implemented functionally, preferably by writing a toy operating system that does the bare minimum and then adding features bit by bit. Don't expect it to be usable -- that's not the point.

After that, you can start doing deeper dives into various aspects of real operating systems with some confidence that you have a mental framework to build on.

Approach #2
Come at it from the other direction entirely. Pick a real OS and start getting some mastery at administering it. Learn what it can do and how to bend it to your purposes. Don't worry at all about how it does things under the hood (though you will pick up a bunch of that along the way).

The starting picking aspects of it and deep dive into their implementation (linux is probably best for this since it is open source). Learn about the theoretical and conceptual aspects as needed to understand the implementation.

Approach #3
Pick one narrow aspect of an OS (networking, file management, process management, memory management, etc., etc.) and focus your efforts on that. You can come from either direction, but keep your focus tight. When you've reached the level of knowledge and skill you are comfortable with (at least for the time being), shift your focus to something else.