ISBN-13: 9781484271063 / Angielski / Miękka / 2021 / 290 str.
ISBN-13: 9781484271063 / Angielski / Miękka / 2021 / 290 str.
Beginning-Intermediate user level
Chapter 1: Concept and Fundamentals of Computer System
In this chapter we discuss a brief history and evolution of a computer System, and fundamentals of how it operates.
1. Evolution of Computer System
2. Von Neumann Model/Architecture: I/O, CPU and memory
1. Fetch:
2. Decode,3. Execute
3. Fetch: Address and Data
4. Decode: Instructions and Instruction Set Architecture:
1. Encode/Decode
1. Number Representation2. Negative Numbers
3. Little Endian/Big Endian.
2. Instruction Format, Opcode, Operand
3. Addressing modes
4. ISA:
1. Categories: RISC, CISC etc.
2. Examples: x86, ARM etc.
5. Execute:1. Fundamentals of Digital Logic
2. Examples: ADD, SUB.
6. Computer Hardware Advancements/Extensions:
1. Compute Block: Pipelining, and Predictive Execution and Data Hazards
2. Memory Hierarchy: Cache (inclusive, exclusive), Memory3. Interrupt Based vs. Polling
1. Interrupt Service Routine
4. DMA
5. Multiprocessor: SIMD, MIMD, VLIW etc.
7. Basic Architecture of x86 based computer
1. Stack, PC, General Purpose Registers (GPRs) etc.
8. IO Devices- Interface and Controller Advancements, Example: PCIe, USB
1. Controller, Bus, and Device9. Internal and External View of an Example Computer System Design
10. References and further reading:
1. Digital Logic and Computer Design: Morris Mano
2. Computer Organization and Design: The Hardware/Software Interface: Hennessy and Patterson
Chapter 2: Programming the Computer HardwareIn the preceding chapter we discussed the fundamentals about the computer hardware and architecture. Now having understood that, let’s discuss how to program/instruct the hardware to do what we want/need.
1. What’s programming?2. Assembly and Machine language
3. Programming in High Level Language- why?
4. Programming Language Fundamentals:
1. Language Definition:
· Syntax
· High Level Constructs to Machine Level Mapping, example:
1. Variable definition to memory allocation2. Assignment to mov
3. Operators to respective: ADD, SUB, MUL etc.
4. Conditional to cmp and jmp
5. Loops to cmp and jmp etc.
6. Functions to call and return, and stack· Other Key Concepts:
1. Variable Scope and Lifetime,2. Data Type and Type Casting
3. Formal, and Actual Parameter(arguments),
4. Function Call by Value and Reference
5. Lambda functions
2. Translation from High Level to Machine Level Language:
· Lexical: picking up tokens
· Parser: Syntax and Semantic Analysis· Code Generation
1. Intermediate code- why?2. Optimization- why?
3. Symbol Table
4. Libraries and Runtime?
· Why?
· Linking Process· Static, and Dynamic libraries
· Benefits and tradeoffs- DLL Hell?5. IDE: The one that puts it all together
5. Programming Paradigms:1. Procedural, Object Oriented,
2. Interpreted vs Compiled etc.
3. Why different Languages?
6. Good Code
1. Architecture and
2. Design Patterns
7. References and further reading:
1. Compilers: Principles, Techniques, and Tools: Aho Ullman Sethi
2. The art of computer Programming: Knuth
3. Linkers and Loaders: Levine
Chapter 3: Algorithm and Data Structure
We’ve discussed computer hardware and how to program it to achieve desired purpose. In this chapter we will discuss how to make programs more efficient.
1. What is an Algorithm
2. Good and *not so good* Algorithm:
1. Time/Space Complexity
2. Asymptotic Notation
3. Fundamental Data Structure and Algorithm:
1. Store (Data Structure): Stack, Queue, Tree, Graph, Linked List, Array, Hash2. Making use of the Data: Searching, Sorting
4. Problem Solving Techniques:
1. Recursion,
2. Divide and Conquer
3. Dynamic programming,4. Brute force,
5. Greedy Algorithms,
5. Class of problems:
1. NP Complete and NP Hard problems
2. Tractable and Intractable problems.
6. Databases:
1. Why: Persistence and Volume
2. Fundamental Requirements: ACID3. Brief History of Database System Evolution
4. Most Prominent Current Database Systems:
· Structured Data/ Unstructured Data
· Relational Data: Oracle, MySQL etc.
· NoSQL
1. Why
2. Brief History and Examples: Graph database Neo4j, BigTable, CouchDB, Cassandra, MongoDB7. References and further reading:
1. Introduction to Algorithms: Thomas Cormen
2. Database System Concepts: Avi Silberschatz
Chapter 4: Operating SystemHaving discussed the computer hardware and software fundamentals, now we will discuss how they work together to provide a good user experience and enhance the usability of the system.
1. Purpose of Operating System:
1. Bridge between User and the Hardware
2. What Systems need OS2. Key Drivers:
1. General Purpose: Multifunction
2. Multi-processor,
3. Multi-tasking
4. Multiuser
3. Key Function:
1. User Authentication:
· Virtualize CPU: Scheduling: Affinity, Preemption
2. Virtualize Memory:
· Segmentation, Paging, Demand Paging, Swapping
3. Access and Protection:
· Serialization: Deadlocks, Locks, and Semaphores
· Separation:
1. User Mode and Kernel/*Super User* Mode2. Separation Implementation
1. Protection Ring/Layers
3. Switching between Kernel and User Mode
4. Access to Hardware:
1. Device Driver, DDI, and Driver Models
4. User Shell: UI/Command Based
· Launching an Application
· Application/Program vs Process/Thread
· Application/Executable Format.
· Application Loading Process
5. Persistence of Configuration and Settings
· Registry for Windows
· Configuration Files for Linux
4. OS Categories:
1. Real time, and General Purpose
2. Design Considerations for Real time OS
5. Reference:
1. Operating System Concepts: Silberschatz, Galvin
2. Operating Systems: Three Easy Pieces: Andrea C Chapter 5: Computer Networks and Distributed Systems So far, we discussed the computer systems in isolation. There is a need for computers to talk to each other to enable communication and create distributed systems. In this chapter we will discuss how computers can talk to each other.1. History/Evolution of Networks/Internet
2. Protocol-Stateful and Stateless Protocol
3. Internet protocol (IP), TCP and UDP1. Host, IP Address, MAC, Port, Socket
2. DNS, DHCP
3. Proxy, Firewall, Router, Firewall
4. Distributed Systems: Prominent Architectures
1. Client-Server2. Peer-to-Peer
3. N-Tier
5. Distributed System Example:
1. World Wide Web- How it Works?
2. FTP- How it Works6. Case Study: Developing Web Application
1. System Architecture
2. Frontend- Technologies
3. Backend - Technologies
7. Reference and further reading:
1. Computer Networking: A Top-Down Approach: Kurose Ross
Chapter 6: Computer SecurityNow, that we discussed about the computer systems and how they can and do work together in computer networks. It becomes of pertinent importance to ensure the security of the system. In this chapter we’ll talk about the same.
1. Security- What and Why?
2. Security of Standalone System:1. Physical Security
2. Access Control- Authentication
· Authentication: Purpose
· Active Directory/Kerberos
· Integrated Windows Authentication
· Biometric
3. Malware(viruses) and Antiviruses- How they Work?
3. Communication Security
1. Cryptography· Symmetric, Asymmetric: Public and Private
· Various Algorithms:(AES-512, DES, …)
2. Hashing, Signing, Salting
4. Putting it in Practice
1. Algorithms to Exchange the Keys
2. Certificate
3. Digital signatures
4. Chain and Root of Trust
5. Certification Authorities, and Trust Chain
6. Certificate Stores5. Applications of the Security Concepts/Mechanisms:
1. Secure Boot
2. Network Security: TLS, SSL, HTTPS, IPsec, VPN
Chapter 7: Cloud Computing Traditionally, the businesses have managed their backend servers on their own at their premise. However, there is a trend to consolidate these resources and services somewhere (cloud) on network. And, these services can be used by businesses as needed. The resources can thus be shared and optimized. The services are provided and managed by “cloud service providers.” In this chapter we’ll discuss about the cloud offerings, implications/trade-off and deployment/adoption configurations.1. Cloud and its Offerings (Types)
1. IaaS
2. SaaS
3. PaaS
2. Benefits of Cloud Computing
3. Cloud Deployment/Adoption Configurations
1. Private,
2. Public3. Hybrid,
4. Cloud Resource Types: VM/Compute, Database, File Share, Lambda etc.
5. Cloud Interface/Mechanism
6. Developing and Deploying on Cloud
1. Cloud Orchestration and Deployment7. Top Cloud Providers: AWS, Azure, Google Cloud, Oracle etc.
8. Considerations for Developing Portable and Interoperable Solutions
Chapter 8: Machine LearningSo far, we, the human beings, have been developing algorithms and programs which computers just carry out. The algorithms and logic are developed and coded by human beings. The evolution in processing power and data storage has allowed computers to be able to learn and develop logic/intelligence form the data inputs- aka machine learning. In this chapter we discuss the fundamentals of machine learning.
What it is? Algorithmic Programming vs. Machine Learning
1. Fundamental Concepts in Machine Learning:
· Model
· Training· Inference
2. Four Different Categories of Machine Learning:· Supervised
· Unsupervised
· Semi-supervised
· Reinforcement
3. Real and Practical Applications of Machine Learning
· Ex: Web Search, E-Comm/Social Media Suggestions etc.
2. Evolution of Machine Learning:
1. Data Science to AI and ML
3. Practical Machine Learning:
1. Top leading machine learning frameworks
· TensorFlow, PyTorch, ONNX, CAFFE, Keras, Firebase ML kit etc.
4. Machine Learning and Cloud- Relationship and Dependency?
Appendix: A: SDLC
Planning, Analysis, Design, Implementation, Test, Deploy and Maintenance
Appendix B: Software Engineering Practices:1. Planning and Management Practices: Agile
2. Documentation
3. Testing:
1. Phases and Categories of Testing and Goals
· Algorithm Testing, Unit Testing, Integration etc.
2. Test Driven Development
4. Developing for Debug
5. Continuous Integration and Continuous Deployment
1. Purpose and Mechanism?2. Tools: Jenkins, TeamCity etc.
6. Build Optimization and Tools:
1. Purpose and Mechanism
2. Tools: Make, Maven, Gradle
7. SCM
1. Goal and Mechanism
2. Tools: P4, SVN, Git
Appendix: C: ACPI System States Appendix: C: Complete Flow of Boot to OS1. Computer BIOS and Boot process
2. Co-ordination b/w Firmware and OS
3. ACPI and Power Management?
Paul D. Crutcher is Senior Principal Engineer at Intel Corporation and manages the Platform Software Architecture team in the Client Computing Group. He has worked at Intel for more than 25 years and has also worked at two smaller software companies. Paul has a degree in computer science, with expertise spanning software development, architecture, integration, and validation based on systems engineering best practices in multiple areas. He holds several patents and has written multiple papers and presentations.
Neeraj Kumar Singh is a Principal Engineer at Intel with more than 15 years of system software and platform design experience. His areas of expertise are hardware software co-design, system/platform architecture, and system software design & development. Neeraj is the lead author of two other books: System on Chip Interfaces for Low Power Design and Industrial System Engineering for Drones: A Guide with Best Practices for Designing, in addition to many other papers and presentations.
Peter Tiegs is Principle Engineer at Intel with 20 years of software experience. Inside Intel he often consults on DevOps topics such as build automation and source code branching. Over the last decade Peter evangelized continuous integration and delivery as well as agile practices at Intel. He has written software at all levels of the stack from embedded C code to VUE.js. His programming language of choice is Python.
Understand essential computer science concepts and skills. This book focuses on the foundational and fundamental concepts upon which expertise in specific areas can be developed, including computer architecture, programming language, algorithm and data structure, operating systems, computer networks, distributed systems, security, and more.
According to code.org, there are 500,000 open programming positions available in the US— compared to an annual crop of just 50,000 graduating computer science majors. The US Department of Labor predicted that there will be almost a million and a half computer science jobs in the very near future, but only enough programmers to fill roughly one third of these jobs.
To bridge the gap, many people not formally trained in computer science are employed in programming jobs. Although they are able to start programming and coding quickly, it often takes them time to acquire the necessary understanding to gain the requisite skills to become an efficient computer engineer or advanced developer.
You will learn:
1997-2024 DolnySlask.com Agencja Internetowa