计算机领域的核心概念与思想
计算机领域的核心概念与思想
0.计算机系统原理Principles of Computer Systems
操作系统 Operating systems
进程、线程、虚拟内存
processes, threads, virtual memory
编译器 Compilers
计算机网络 Computer networking
在计算机之间建立功能连接的各种网络层
the various network layers that allow us to establish functional connections between computers
计算机安全 Computer security
1.抽象Abstraction
抽象是关于定义接口并关注函数背后的思想而不是实现细节。我们可以定义接口并使用它们,而无需知道一切在幕后如何工作,并且我们可以支持遵循相同接口的多个实现。
常用的抽象案例
文件系统:在以前的课程中,您可能使用过 CFILE *或 C++fstream而不知道它们是如何工作的
进程:您知道如何进行多处理,即使您并不真正了解在汇编指令级别发生了什么以支持该处理
信号:您了解如何发送和接收信号,但您可能不知道操作系统代表您做什么以使其发生
线程:你知道如何创建线程,但你并不真正知道它们是如何实现的
网络套接字:您知道如何使用网络连接作为连接两台计算机的管道,但您不知道操作系统内部发生了什么以提供这种错觉
2.模块化和分层Modularity and Layering
模块化:一旦代码开始变得复杂,让我们开始将其分解为可管理的部分。
分层是一种特殊的模块化形式,我们将各个部分堆叠在一起。
Modularity: as soon as code starts getting complicated, let’s start breaking it down into manageable pieces.
Layering is a special form of modularity in which we stack pieces on top of each other.
3.命名和名称解析 Naming and name resolution
我们需要名称来引用系统资源。(否则你会如何处理进程?否则你会如何处理打开的文件?)我们还需要名称解析系统将人性化的名称转换为机器友好的名称。
We need names to refer to system resources.(How else would you address a process? How else would you address an open file?) We also need name resolution systems to convert from human-friendly names to machine-friendly ones.
4.缓存Caching
缓存是一个组件——有时在硬件中实现,有时在软件中实现——用于存储数据,以便可以更快地处理未来的请求。
存储层次结构中的缓存storage hierarchy
基于网络的存储真的很慢 Network-based storage is really slow
如果需要,我们可以使用磁盘空间来缓存它We can use disk space to cache that if we want
我们可以使用 RAM 从磁盘缓存数据We can use RAM to cache data from disk
L3、L2 和 L1 处理器缓存来自 RAM 的缓存数据The L3, L2, and L1 processor caches cache data from RAM
最后,信息存储在寄存器中。Finally, information is stored in registers.
还有 TLB 缓存、DNS 缓存和 Web 缓存TLB caches, DNS caches, and web caches
5.虚拟化Virtualization
虚拟化就是让许多硬件资源看起来像一个,或者让一个硬件资源看起来像很多。
使许多硬件资源看起来像一个:
RAID 允许您将许多磁盘连接到一台机器上,显示为一个磁盘
AFS 对网络文件系统做了类似的事情
Web 负载平衡器将负载分配到许多服务器
使一种硬件资源看起来像许多:
虚拟内存使每个进程都认为它拥有所有内存
线程/进程提供了一切都在并行运行的错觉,即使只有一个 CPU
6.并发 Concurrency
同时运行的多个线程或进程。
MapReduce : 跨机器集群的并发性
信号和中断处理程序也是一种并发形式。
signal and interrupt handlers are a form of concurrency
一些编程语言(例如 Erlang)完全围绕并发性进行设计,以至于不可能出现竞争条件。
7.客户端-服务器请求-响应Client-server request-response
系统调用、多处理和网络请求。system calls, to multiprocessing, and to network requests.
请求/响应是将功能组织成具有明确职责的模块的好方法。
Request/response is a good way to organize functionality into modules that have a clear set of responsibilities.
计算机领域的核心概念与思想.png