文档章节

csapp读书笔记1-计算机系统漫游

loda0128
 loda0128
发布于 2017/07/01 11:30
字数 1463
阅读 29
收藏 0

数据信息

hello.c

#include <stdio.h>

int main()
{
    printf("hello,world\n");
    return 0;
}

文件如果只含有ascii字符,那么就是文本文件,如果包含其他字符,就是二进制文件

编译

hello.c经过四个步骤,生成hello可执行文件

  • 预处理:读取源文件hello.c,识别#include<stdio.h>的头文件内容,插入源文件,生成hello.i
  • 编译:将hello.i翻译生成汇编代码hello.s
  • 汇编:将hello.o翻译生成机器语言文件hello.o
  • 链接:hello程序调用了printf,这个函数已经存放在预编译的文件printf.o中,链接步骤就是用来将这个函数整合到hello.o中,最后生成hello文件。该文件可以被操作系统执行

了解编译系统的好处

  • 优化程序性能
  • 理解链接时出现的错误
  • 避免安全漏洞

计算机硬件组成

  • 总线:贯穿硬件系统的一组电子通道,在各个部件之间传输字节。字节数据以字(word)为单位传输,现代计算机都是字长都是4字节或者8字节。有IO总线、系统总线、内存总线
  • IO设备:系统与外部联系的通道,每个IO设备通过控制器或适配器与IO总线想连。图中包含四个IO设备:鼠标、键盘、显示器、硬盘
  • 主存:由一组动态随机访问存储器(DRAM)组成,用来存取数据
  • 处理器:读取执行存储在主存中的指令。包含:程序计数器(PC),用来存储内存中某条指令地址;寄存器文件,存储少量数据;算法/逻辑单元(ALU),用来做简单计算

hello执行流程

首先,当输入"./hello"时,shell读取输入字符到寄存器,然后放入主内存

接着,当输入回车时,shell查找硬盘上的hello文件,加载进主内存

最后,cpu读取hello程序中main函数的机器指令并执行。示例指令中,会从主存拷贝"hello,world\n"字符串的字节到寄存器文件,再从寄存器文件拷贝到显示设备,最终显示在屏幕

高速缓存

hello程序执行步骤存在大量从内存到寄存器之间的拷贝操作。相比较寄存器,在内存操作数据会慢很多,大量拷贝操作存在于两端时,会导致内存端成为瓶颈。为了打破瓶颈提高性能,系统设计者提出了高速缓存的概念。它位于寄存器和主存之间。当缓存大量命中时,可减少cpu对主存数据的依赖。

考虑两个高速缓存的情况:寄存器-L1-L2-主存

L1和L2通过静态随机访问存储器(SRAM)硬件技术实现,L1位于处理器芯片,访问速度媲美寄存器,L2通过特殊总线连接处理器,速度为L1的5倍,主存在最后,访问速度为L2的5-10倍

存储器层次结构

操作系统管理硬件

  • 进程:软件上说是操作系统对正在运行的程序的抽象,硬件上说是操作系统对处理器、主存、IO设备的抽象,利用主存和IO设备存储进程的指令和数据,利用处理器切换执行多进程
  • 线程:在进程内,共享内存和数据,更加轻量级
  • 虚拟内存:操作系统对主存和IO设备的抽象,利用主存和IO设备存储虚拟内存的数据
  • 文件:操作系统对IO设备的抽象,操作文件就是操作各个IO设备

网络

网络也是一个IO设备。系统将数据从主存拷贝到网络适配器,经过网络,目的机器的系统读取网络适配器上的数据,拷贝到主存。这样就完成了数据在网络间的传输

并发与并行

现代计算机发展的两个目标:计算机做的更多,计算机运行更快。前者也就是并发,后者也就是并行,这两个关键字在现代计算机的体现如下

  • 线程级并发:一个进程中有多个控制流,采用多核处理器,可以使同时执行这些控制流,以加快程序运行速度
  • 指令级并行:现代处理器可以在一个周期处理多条指令
  • 单指令、多数据并行(SIMD并行):将一条指令拆成多条,并行执行

图示为四核处理器,每个核都有自己的寄存器、L1高速缓存(分为数据、指令)、L2高速缓存,四个核在一个芯片上,共享一个L3高速缓存,所有处理器芯片共享一个主存

抽象

总结

源程序以ascii文本形式存储,被编译器和链接器翻译成可执行的二进制文件。

处理器读取并处理二进制程序中的指令和数据时,会花费大量时间在寄存器、主存、IO设备之间拷贝数据。为了加速该过程,系统引入高速缓存,将系统分为cpu寄存器-高速缓存-主存-硬盘的多层结构。

操作系统内核作为应用程序和硬件之间的媒介,提供了一层抽象。

  • 文件:对IO设备的抽象
  • 虚拟内存:对主存和IO设备的抽象
  • 进程:对处理器、主存、IO设备的抽象

虚拟机又提供了基于操作系统、处理器、主存、IO设备的抽象

网络作为一种特殊的IO设备,提供了计算机系统之间通信的能力

© 著作权归作者所有

loda0128
粉丝 93
博文 96
码字总数 119400
作品 0
朝阳
程序员
私信 提问
深入理解计算机系统读书笔记(1)漫游

通读深计第一章漫游 得出以下几条结论,概述之: 1.本书主要讲解计算机系统中的3个问题即,信息的表示、信息的存储、和信息的处理。 2.计算机系统中抽象概念的重要性,以及对抽象概念的诠释。...

WhiteLeibniz
2012/12/02
350
0
看书和笔记

大家在读书的时候做读书笔记吗?都说看书的时候应该要做读书笔记,不知道大家在看计算机书籍的时候是不是也这样?

runeveryday
2011/09/03
321
7
《智能时代》读书笔记

《智能时代》读书笔记 笑遍世界2017-05-1322 阅读 人工智能大数据读书笔记 年初时看了罗辑思维2017跨年演讲《时间的朋友》,感觉按罗胖的意思再不了解和应用人工智能就真的晚了。之前买过吴军...

笑遍世界
2017/05/13
0
0
《Linux内核设计与实现》读书笔记 - 目录 (完结)

《Linux内核设计与实现》读书笔记 - 目录 (完结) 读完这本书回过头才发现, 第一篇笔记居然是 2012年8月发的, 将近一年半的时间才看完这本书(汗!!!). 为了方便以后查看, 做个《Linux内核设计...

你的猫大哥
2018/01/14
0
0
今年读过的还不错的计算机类书籍

今年读过的还不错的计算机类书籍 一年又快过去了,今年恶补了很多计算机基础知识,参kao了网上各种程序员必读书目,看下来觉得很有收获。 1. Web性能权威指南 干货很多,简明易懂,优化清单很...

xiaorong919
2015/12/14
306
0

没有更多内容

加载失败,请刷新页面

加载更多

黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
5
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
7
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
4
0
Django的ChoiceField和MultipleChoiceField错误提示,选择一个有效的选项

在表单验证时提示错误:选择一个有效的选项 例如有这样一个表单: class ProductForm(Form): category = fields.MultipleChoiceField( widget=widgets.SelectMultiple(), ...

编程老陆
昨天
7
0
Vue核心概念及特性 (一)

Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。 > 特点: 易用,灵活,高效,渐进式框架。 > 可以随意组合需要用到的模块 vue + components + vue-router + vuex + v...

前端优选
昨天
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部