深入理解计算机系统应该什么时候学_圣经使用指南——深入理解计算机系统

最近在学习计算机操作系统的内容,刚看完《深入理解计算机系统》这本书,趁热打铁先把这本书的使用指南写了。 如果你最近刚好在学这本书,建议收藏本文,并且不用再往下看了。 等到看书的时候,再一边看,一边对照后文中讲到的如何学习每一章节内容,方便你更快更好的吃完这本书。 如果你还没听过这本书,建议更要收藏本文,并且下翻到资料获取部分,保存我提供的资料。因为只要你还在这行混,迟早都要看这本书。 当然写这篇指南不是让各位糊弄了事,而是先把书读薄,在学习时有一个清晰的侧重点。 在第一次学习时可以只抓重点,后续还是需要反复体会这本书,毕竟这本书可是号称比同等重量金子的价值还高。 上期( 69af7f7d2dcf7ace3668d3ffbe1c5d17.png 我能带给你什么惊喜? )提到《深入理解计算机系统》是豆瓣技术类书籍评分9.8的神书,足可以看出此书在业界的地位,技术类圣经9.0+的书籍很多,但评分接近满分的可不多。 a2f91d5670c8e40ce525920214439228.png

本期围绕三个问题来说:何时学习这本书?参考资料有什么?到底如何学习每一章节?简称When? What? How?

When?

我是在过完C++基础语法,数据结构以后,进入操作系统学习时,开始学习这本书。

这本书系统地介绍了整个计算机系统的工作原理。适合在系统学习操作系统之前来看这本书,学完以后可以很好地从宏观上来理解操作系统。

What?

下方附有本书配套资料,也是我亲自使用的内容,全部无偿,毫无套路! 我看的是在拼夕夕上面二十块买的纸质书(尽量还是支持正版书,不过良心话这家店的书真的堪比正版书的了,没有广告,真是私人买书店,等我有钱了给大家抽奖送书)。 这本书电子版和南大视频配套讲义在第一个百度云链接中。如果下载链接失效,请在文末或者后台留言。 南大配套视频链接也已经列出,如果有需要可以直接复制到浏览器中,2倍速观看完全没问题。 学有余力的可以看看这本书作者在CMU上课视频和配套lab,但对于我来说还是不太适应西方这种启发跳跃式课堂氛围。 ✎ 资料获取 

《深入理解计算机系统》电子版+南大视频配套讲义

链接:https://pan.baidu.com/s/1kLobpP24Wb63e29TufN4cg

提取码:52yc


南京大学袁春风视频

《计算机系统基础(一)程序的表示、转换与链接》

链接:https://www.icourse163.org/learn/NJU-1001625001?tid=1460891441#/learn/content

《计算机系统基础(二)程序的执行和存储访问》

链接:https://www.icourse163.org/learn/NJU-1001964032?tid=1460893441#/learn/announce

《计算机系统基础(三)异常、中断和输入/输出》

链接:https://www.icourse163.org/learn/NJU-1002532004?tid=1460894441#/learn/content


CMU配套lab和PPT:https://www.cs.cmu.edu/~213/schedule.html

B站CMU课程录播:https://www.bilibili.com/video/BV1iW411d7hd?from=search&seid=3859911496382583350

How?

这部分内容结合了豆瓣书评,知乎以及个人学习经验,简称章节使用指南。看每一章之前建议先阅读指南对应部分。

第1章 计算机系统漫游
以最简单的程序简单明了介绍计算机系统的总体。 应试 ★★★:可能会有一些整体上的概念题。 修炼 ★: 属于计算机最基本的概念。

第一章书里就十几页,看看书就可以了,没必要看视频。

第2章 信息的表示和处理

信息在计算机中的表示形式。分别包括整数和浮点数的表示形式。

应试 ★: 应试中很少会考到。

修炼 ★★★★:有很多人可能写了多年的代码都不知道浮点数是如何用那4(8)个字节存储的,这也是后面章节的基础。

明明是一个很简单的知识点,但书上用各种数学公式来表示,非常不直观,建议这一部分无需看书,直接对着讲义PDF看视频《计算机系统基础一》第二、四周的内容,保你看的清清楚楚明明白白。 第3章 程序的机器级表示
汇编语言的复习。 修炼 ★★★★★:理解汇编语言和寄存器结构是后面很多内容的基础。 3.7 过程★★★★★:过程调用,尤其是过程调用(包括递归调用)中堆栈的使用情况。参数传递中按地址传递与按值传递的区别。 3.10 对齐 ★★★★★:数据在内存中的“对齐”方式,经常出现在考题中的。比如定义一个结构体数组,打印出其中一个元素的地址,问这个地址相对数组起始地址有多少个字节的距离。 others ★★★:汇编在应试中考的还是比较少的(除专门的职位)。
过程建议先看视频,再用书中3.7节巩固一番。对齐这一知识点常考但不难,建议只需看视频第八周第3讲。 第4章 处理器体系结构
计算机体系结构的内容。处理器结构,各种逻辑门、功能单元,指令集,指令的执行,指令执行的流水线等。 应试 ★:对于软件相关职位来说,很少会考到这么底层的东西的。 修炼 ★★★:对于从事软件层面的技术人员来说,不用深入,但是也应该理解,知道是怎么回事。

这节只标了一两颗星就知道不用深入,如果时间有限可以直接跳过。

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

这一部分我是直接跳过了。

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

缓存时操作系统中经常用到的一个概念,可以结合第10章虚拟内存来看。

第7章 链接
顾名思义,详细讲解了程序的链接过程,主要分为静态链接和动态链接,以及链接过程中使用到的技术。 应试 ★★★:需要知道链接的基本概念,尤其是 动态链接 可能会考到。 修炼 ★★★★★: 有的时候,你很可能会被一个链接错误折磨好几天。 另外,动态链接库的应用现在也是很普遍的。
第8章 异常控制流
本章主要讲解异常控制,不过这里的“异常”并不是Java或者C++里的狭义的异常,而是一个广义的“Exceptions”的概念。 包括中断,陷阱,错误,页错误,中止。 在介绍异常处理的同时,引入了进程的概念,对进程控制也进行了详细介绍,以及 进程 级别的异常, 信号, 这个级别的异常处理由操作系统完成,通常叫做上下文切换。 应试 ★★: 主要掌握进程的概念即可。 修炼 ★★★: 知道异常控制流是怎么回事,用户程序和系统交互(如系统调用)的原理和方式即可,不用太深入。
第9章 虚拟内存
非常重要的一章,虚拟存储机制是计算机实现多任务的一项重要技术。 计算机正是通过时间片技术使得每个进程在执行时仿佛独占CPU,进而又通过虚拟存储机制使得每一个进程在执行时,仿佛独占内存。 10.1介绍了虚拟地址和物理地址,CPU进行寻址操作产生的是虚拟地址,通过存储管理单元转换为实际的物理内存地址。 10.3~10.5讲述了虚拟存储机制的优点,使得内存可以作为硬盘的cache;能够更方便的管理内存;能更好的提供内存保护机制。 10.6 介绍了虚拟地址如何转换为物理地址。 10.7 很精彩的一节,通过Linux的实例讲述了整个存储管理机制。本节内容正是通过实例让你对刚学的理论机制有一个直观的了解。 10.8~10.10 讲述了存储映射、动态内存分配和垃圾回收机制。 10.11 很实用的一节,列举了一些C编程中容易犯的内存引用错误。 应试 ★★★★:本章内容是操作系统课程的重点内容,如果考操作系统,极有可能考到。10.11节的知识也能帮你应对一些程序挑错题。 修炼 ★★★★★:操作系统中重要的基础内容,即使你只使用Java这样的高级编程语言,至少也应该弄懂垃圾回收机制吧。
我给这一章的题目直接加粗,足以证明这章的重要性,同时这一部分不管是书还是视频都讲的不够细,建议再看一下《现代操作系统》第3章内存管理。 第10章 系统级I/O
介绍类Unix系统下的I/O读写,主要介绍系统层面的I/O接口。 由于我们日常编程所用的I/O接口都是各种高级语言提供的经过封装的标准接口,故而如果不进行嵌入式编程的话这部分知识不是必须的,我跳过没读。
第11章 网络编程
简单介绍了网络模型,TCP/IP协议,类Unix系统的socket接口等。 应试和修炼 ★★:因为篇幅限制,本章只做了简单讲解,要掌握网络编程知识还需要参考专门的网络技术书籍。
第12章 并发编程
本章简单介绍了并发程序设计的内容,主要包括:进程级别的并发,各子进程拥有不同的虚拟地址空间,需要IPC机制共享数据,进程之间切换开销大。I/O复用,事件驱动,单进程运行,共享虚拟地址空间,并发效果不理想。线程,介于上述两种中间,各子线程共享进程的虚拟地址空间,线程间切换开销较小。另外介绍了并发编程中访问共享变量的信号量机制。给出了4类容易引起线程不安全的函数。应试 ★★:除应聘相关职位外,并发编程考的比较少,不过需要清楚锁机制和信号量机制等。修炼 ★★★:多线程程序在现今的开发中还是很常见的,但是本章介绍的比较简单,需要参考另外专门的书籍。

当然一大堆东西,也不知道大家觉得有没有用,反正甭管怎么样,都没必要都照搬,从中选择最适合自己的,也是聪明的拿来主义了。

00ae5a034e49311b0a84ccb9fe2f3992.gif

---------- 悄悄话 -----------

此公众号意在跟喜欢我的朋友分享一些学习笔记,经验,心得等,是一个很小众的圈子。

公众号内全部笔记、干货等全部无偿、永久无偿~

因百度云链接容易失效,我平时学业比较忙,不容易检查每个链接,如果出现这种情况,麻烦在后台私信或者留言,我会及时更新哒~

公众号内回复所有关键词或是文章内链接均不会要求大家转发分享或者付费等情况,请朋友们放心。毫无套路可言。

愿我们慢慢相处,一起成长~

后续我想到其他要说明的,再来跟大家说一下~

最近有朋友想向我咨询交流一些问题,公众号后台回复有时效限制,文末留言功能也被下线,专门申请了微博号。如果有需要可以微博私信我,一定知无不言,言无不尽!如果想要围观我的生活学习,也可以来看我哦~

2730286e2336f4fd6cb45b207af177e3.png

之前考虑不周,私人微信不方便告诉大家,也 不要通过微信号之类的来找我了 ,谢谢!
2ba980d430e48e6feff7f973ded4fcde.gif

今天,你转发锦鲤了吗?

↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓

0c2c0decd63f064af7f323d6cc1bb89c.png


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值