《计算机系统要素》概述

来源:互联网 发布:门户源码 编辑:程序博客网 时间:2024/05/24 01:11

背景:

  我不是科班出身,对于计算机系统底层的知识了解很少,我的PM向我推荐了《计算机系统要素》这本书。是国外的两位学校教授编写,从最简单的与或非逻辑门,编译器,虚拟机,到最后操作系统的搭建,他们还有相应的网站,里面你可以下载到所有资料,还有视频。对于想系统了解计算机系统的同学来说,是个很不错的课程。还有大量的课后习题,当然也给出了参考答案,本文是我读后的一个笔记总结。就像小时候爬山,别人冲我喊了一句,“快上来啊!,这里好漂亮啊!”,然后奋起而上,希望也能给你带来这样的感觉,然后去了解下计算机底层的魅力。


本文目的:

  了解计算机操作系统底层原理。


备注:

  本书项目作业需动手实验,不方便展开,本文只谈理论知识。


第五章:计算机体系结构


计算机最小系统

一个最简陋的计算机系统由以下硬件组成:    1.内存:用来存储数据和指令    2.CPU: 核心硬件,用来进行逻辑操作和算术操作    3.输入:和计算机进行    4.输出:和人进行交互 

第六章:汇编编译器

 什么是汇编编译器?    将汇编指令翻译成计算机能够识别的机器语言。    机器语言分为两类:一种是二进制型,一种是符号型(我觉得其本质还是二进制,只是在硬件层进行封装映射了) 汇编编译器工作流程,编译器要完整解析代码,要进行两个阶段读取解析指令:    第一阶段:        逐行扫描指令代码,将每条命令建立一个相对应的地址    第二阶段:        再次重新扫描整个指令代码,对每一行的语法进行解析

第第七、八章:虚拟机-堆栈

 什么是虚拟机?    是一个抽象的计算机,不是真实的硬件平台,可以理解为就是一个软件。 虚拟机有什么用?    让某种高级语言代码,可以在任何硬件平台运行,但是虚拟机也不能直接运行某种高级语言代码,它也需要某种特定的编译器,产生虚拟机能够识别读取的代码才可以运行 那关堆、栈什么事?    我们说到,既然虚拟机是一个抽象的计算机,且高级代码经过编译后要运行在它上面,它就需要进行一系列的算术操作、内存访问等等。这些关于数据的操作值就是保存在堆(heap)栈(stack)这种精良的数据结构中。其中所有数据值是要经过栈(stack)中转的,而堆(heap)是用来存储对象和数组数据。虚拟机的操作除了基于堆、栈还基于函数。从本质来讲,每个对象实例最后都在RAM上被序列化成一串数字,在该章节,开发一个虚拟机,采用软件工程中经典两层编译模型进行开发,在第一层高级代码被翻译为运行在虚拟机上的中间代码;在第二层中间代码被翻译为目标硬件平台的机器语言。本书对Java程序员很友好,因为它提到的VM模型是以JVM为蓝本的,所以上面提到的高级语言可以理解为是Java,虚拟机可以理解为JVM,中间码可以理解为bytecode,通过本章节,了解到Java之所以跨平台正是因为虚拟机的存在。

关于堆栈可以参考这篇博客:什么是堆和栈,它们在哪儿?


第十、十一章:编译器

什么是编译器?    将高级语言程序从源语言编译成目标语言,这个过程就是编译器要做的事情。那它是如果工作的呢?    编译器要将源语言代码编译成目标语言,要经过一系列的规则,算法,但主要可以分为两个步骤:        1.语法分析————经过一系列特定的规则和算法,解析出一定的格式规范;        2.代码生成————对变量、数据、表达式、逻辑运算进行一系列操作;

第十二章:操作系统

作为本书的最后一章,从如何搭建一个最小系统,编写一个汇编编译器,编写一个虚拟机,选择一门高级语言作为开发语言(Jack类似Java),编写一个编译器,设计API类库,内存,I/O,再将前面的内容全部整合,从01设计一个计算机系统。

结语

这本书从0到1,从最简单的与或非逻辑门,一步一步手把手教你,不需要任何基础,只需要耐心,细心,相信最后对底层系统了解会更上一层楼。


ELEVEN:
个人转载无须申请版权许可