深入理解计算系统导读

2024-06-14 23:38

本文主要是介绍深入理解计算系统导读,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Chapter 1
A Tour of Computer System
一个对计算机系统总体的介绍,简单明了。

应试 ★★★:可能在笔试中会有一些整体上的概念题。
修炼 ★: 属于计算机最基本的概念。


chapter 2
Representing and Manipulating Information
信息在计算机中的表示形式。分别包括整数和浮点数的表示形式。

应试 ★: 应试中很少会考到。
修炼 ★★★★:有很多人可能写了多年的代码都不知道浮点数是如何用那4(8)个字节存储的。


chapter 3
Machine-Level Representation of Program
汇编语言的复习。

修炼 ★★★★★:理解汇编语言和寄存器结构是后面很多内容的基础。
应试:
3.7 Procedures ★★★★★:过程调用,尤其是过程调用(包括递归调用)中堆栈的使用情况是经常会考到的。
3.10 Alignment ★★★★★:数据在内存中的“对齐”方式,也是经常出现在考题中的。比如定义一个结构体数组,打印出其中一个元素的地址,问这个地址相对数组起始地址有多少个字节的距离。
others ★★★: 汇编在应试中考的还是比较少的(除专门的职位)。


chapter 4
Processor Architecture
计算机体系结构的内容。
处理器结构,各种逻辑门、功能单元,指令集,指令的执行,指令执行的流水线等。

应试 ★: 对于软件相关职位来说,很少会考到这么底层的东西的。
修炼 ★★★: 对于从事软件层面的技术人员来说,不用深入,但是也应该理解,知道是怎么回事。


chapter 5
Optimizing Program Performance
如何优化程序的执行效率,包括代码的优化,编译器的优化,及CPU级别的优化。

5.1-5.6
应试 ★★★★: 经常会有一些让你寻找程序瑕疵的问题,你能看出代码在哪些细节上可以优化吗?
修炼 ★★★★★: 你当然需要知道编译器能在什么层面上自动帮你优化代码,在编译器无法优化时你自己如何在小细节上优化代码。
5.7以后
CPU级别的优化,微指令的概念,功能单元上微指令的并行,程序分支的预测等。
应试 ★: 对于软件相关职位来说,不会考这些东西的。
修炼 ★★★: 不用深入,但是应该知道并能够理解。


chapter6
The Memory Hierarchy
详细介绍了计算机系统中的存储结构。

6.1 介绍了不同种类的存储设备以及对应的存取数据的方式。
应试 ★: 很少会考到这么底层的东西
修炼 ★★: 知道就好了。
6.2-6.5 介绍了存储设备的组织形式,着重介绍了Cache及其工作方式。
应试 ★★★★: 在面试中,经常会考到跟cache相关的题目。
修炼 ★★★★: 存储结构和cache是计算机中很基础也很重要的概念。
6.6-6.7 介绍了程序如何和cache打交道,不同的循环嵌套顺序、遍历方向等对cache命中的影响。
应试 ★★: 很少会考到这些东西。
修炼 ★★★★: 你当然希望在写多重循环的时候知道什么样的嵌套顺序效率最高。


chapter 7
Linking
顾名思义,详细讲解了程序的链接过程,主要分为静态链接和动态链接,以及链接过程中使用到的技术。

应试 ★★★:需要知道链接的基本概念,尤其是动态链接可能会考到。
修炼 ★★★★★:有的时候,你很可能会被一个链接错误折磨好几天。另外,动态链接库的应用现在也是很普遍的。


chapter 8
Exceptional Control Flow
顾名思义,本章主要讲解异常控制,不过这里的“异常”并不是Java或者C++里的狭义的异常,而是一个广义的“Exceptions”的概念,包括中断(Interrupt,硬件层面,主要是I/O中断),陷阱(Trap,主动产生的异常,主要用于用户程序和系统内核间的交互,如系统调用),错误(Falut,如除0错误;页错误:在虚拟内存中,所请求页面并不在内存中,需要从硬盘读取等。错误可能恢复),中止(Abort,致命错误,无法恢复,如硬件问题等)。
在介绍异常处理的同时,引入了进程的概念,对进程控制也进行了详细介绍,以及进程级别的Exception:信号(signal),这个级别的异常处理由操作系统完成,通常叫做上下文切换(context switch)。

应试 ★★: 主要掌握进程的概念即可。
修炼 ★★★: 知道异常控制流是怎么回事,用户程序和系统交互(如系统调用)的原理和方式即可,不用太深入。


chapter 9
Measuring Program Execution Time
本章介绍了如何尽可能准确的测量程序执行的时间。在实际编程中,我们极少会需要进行如此精确的测量,所以我跳过本章不读。


chapter 10
Virtual Memory
非常重要的一章,虚拟存储机制是计算机实现多任务的一项重要技术。计算机正是通过时间片技术使得每个进程在执行时仿佛独占CPU,进而又通过虚拟存储机制使得每一个进程在执行时,仿佛独占内存。
10.1介绍了虚拟地址和物理地址,CPU进行寻址操作产生的是虚拟地址,通过存储管理单元(memory management unit)转换为实际的物理内存地址。
10.3~10.5讲述了虚拟存储机制的优点:使得内存可以作为硬盘的cache;能够更方便的管理内存;能更好的提供内存保护机制。
10.6 介绍了虚拟地址如何转换为物理地址。
10.7 很精彩的一节,通过Intel Pentium和Linux的实例讲述了整个存储管理机制。记得以前上操作系统课的时候,各种理论、机制学了一大堆,但是就是不知道实际的操作系统到底用的哪套方法。而本节内容正是通过实例让你对刚学的理论机制有一个直观的了解。
10.8~10.10 讲述了存储映射(Memory Mapping)、动态内存分配和垃圾回收机制。
10.11 很实用的一节,列举了一些C编程中容易犯的内存引用错误。

应试 ★★★★: 本章内容是操作系统课程的重点内容,如果考操作系统,极有可能考到。10.11节的知识也能帮你应对一些程序挑错题。
修炼 ★★★★★: 操作系统中重要的基础内容,即使你只使用Java这样的高级编程语言,至少也应该弄懂垃圾回收机制吧。


chapter 11
System-Level I/O
介绍类Unix系统下的I/O读写,主要介绍系统层面的I/O接口。由于我们日常编程所用的I/O接口都是各种高级语言提供的经过封装的标准接口,故而如果不进行嵌入式编程的话这部分知识不是必须的,我跳过没读。


chapter 12
Network Progranmming
简单介绍了网络模型,TCP/IP协议,类Unix系统的socket接口等。
应试和修炼 ★★: 因为篇幅限制,本章只做了简单讲解,要掌握网络编程知识还需要参考专门的网络技术书籍。


chapter 13
Concurrent Programming
本章简单介绍了并发程序设计的内容,主要包括:
进程级别的并发,各子进程拥有不同的虚拟地址空间,需要IPC(InterProcess Communication)机制共享数据,进程之间切换开销大。
I/O复用,事件驱动,单进程运行,共享虚拟地址空间,并发效果不理想。
线程,介于上述两种中间,各子线程共享进程的虚拟地址空间,线程间切换开销较小。

另外介绍了并发编程中访问共享变量的信号量机制。给出了4类容易引起线程不安全的函数。
应试 ★★: 除应聘相关职位外,并发编程考的比较少,不过需要清楚锁机制和信号量机制等。
修炼 ★★★: 多线程程序在现今的开发中还是很常见的,但是本章介绍的比较简单,需要参考另外专门的书籍。

对应书籍:
2~3章:
《汇编语言》
《加密与解密》看雪

4~6章:
《计算机系统要素》
《计算机组成结构:硬件/软件接口》

7~8 章:
《程序员的自我修养》

9~12章
《现代操作系统》
《apue》

参考:https://book.douban.com/review/5627139/

这篇关于深入理解计算系统导读的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1061822

相关文章

C++简单日志系统实现代码示例

《C++简单日志系统实现代码示例》日志系统是成熟软件中的一个重要组成部分,其记录软件的使用和运行行为,方便事后进行故障分析、数据统计等,:本文主要介绍C++简单日志系统实现的相关资料,文中通过代码... 目录前言Util.hppLevel.hppLogMsg.hppFormat.hppSink.hppBuf

GO语言zap日志库理解和使用方法示例

《GO语言zap日志库理解和使用方法示例》Zap是一个高性能、结构化日志库,专为Go语言设计,它由Uber开源,并且在Go社区中非常受欢迎,:本文主要介绍GO语言zap日志库理解和使用方法的相关资... 目录1. zap日志库介绍2.安装zap库3.配置日志记录器3.1 Logger3.2 Sugared

深入理解Redis线程模型的原理及使用

《深入理解Redis线程模型的原理及使用》Redis的线程模型整体还是多线程的,只是后台执行指令的核心线程是单线程的,整个线程模型可以理解为还是以单线程为主,基于这种单线程为主的线程模型,不同客户端的... 目录1 Redis是单线程www.chinasem.cn还是多线程2 Redis如何保证指令原子性2.

深入理解MySQL流模式

《深入理解MySQL流模式》MySQL的Binlog流模式是一种实时读取二进制日志的技术,允许下游系统几乎无延迟地获取数据库变更事件,适用于需要极低延迟复制的场景,感兴趣的可以了解一下... 目录核心概念一句话总结1. 背景知识:什么是 Binlog?2. 传统方式 vs. 流模式传统文件方式 (非流式)流

深入理解Go之==的使用

《深入理解Go之==的使用》本文主要介绍了深入理解Go之==的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录概述类型基本类型复合类型引用类型接口类型使用type定义的类型不可比较性谈谈map总结概述相信==判等操作,大

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

linux系统中java的cacerts的优先级详解

《linux系统中java的cacerts的优先级详解》文章讲解了Java信任库(cacerts)的优先级与管理方式,指出JDK自带的cacerts默认优先级更高,系统级cacerts需手动同步或显式... 目录Java 默认使用哪个?如何检查当前使用的信任库?简要了解Java的信任库总结了解 Java 信

Oracle数据库在windows系统上重启步骤

《Oracle数据库在windows系统上重启步骤》有时候在服务中重启了oracle之后,数据库并不能正常访问,下面:本文主要介绍Oracle数据库在windows系统上重启的相关资料,文中通过代... oracle数据库在Windows上重启的方法我这里是使用oracle自带的sqlplus工具实现的方

Python实现精确小数计算的完全指南

《Python实现精确小数计算的完全指南》在金融计算、科学实验和工程领域,浮点数精度问题一直是开发者面临的重大挑战,本文将深入解析Python精确小数计算技术体系,感兴趣的小伙伴可以了解一下... 目录引言:小数精度问题的核心挑战一、浮点数精度问题分析1.1 浮点数精度陷阱1.2 浮点数误差来源二、基础解决

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom