The Compliacation System

gcc 处理过程

预处理

预处理器以 #开头的代码来修改原始程序

如读取头文件插入 hello.c

得到 hello.i 文件

依旧是文本文件

编译

将 hello.i 翻译为 hello.s

词法分析

语法分析

语义分析

中间代码生成

优化

更多详见《编译原理》

汇编(Assembler)

将.s 翻译成机械指令,并按一定的规则打包,生成 hello.o 可重定位文件

链接

诸如 printf 的函数,已经事先 变成了 printf.o 文件

按照一定的规则调整 hello。o 和 printf。o

得到可执行文件 hello

了解这些的意义:

1. 优化程序性能

2. 理解连接时出现的错误(大部分奇奇怪怪的错误都源自连接器)

3. 避免安全漏洞

Run Hello Program by Shell

shell 是一个命令解释程序

如果命令行的第一个单词不是命令符号,shell 就会假设这是一个可执行的程序并执行

(shell 实现:第八章)

Hardware Organization of a System

CPU

1.PC: 大小为一个字的存储区域,存放某一条指令的地址,处理器不断执行 pc 指向的指令,然后更新,执行下一条(不一定相邻)

一个字:对 32 位 4b,对 64 位 8b

2. 寄存器文件 Register file

一些单字长的寄存器构成,是临时存放数据的空间

3.ALU

用寄存器数据计算

存储

1. 主存 main memory

主要存放程序指令以及数据

从物理上讲,内存是由随机动态存储器芯片组成

从逻辑上讲,内存可以看成一个从零开始的大数组

(更多,第六章)

2. 总线

内存和处理器通过总线来进行数据传递

总线贯穿了整个计算机系统,总线通常被设计成传送固定长度的字节块,字

字是多少字节不同系统不一样

3.I/O

每个输入输出设备都通过一个控制器或者适配器与 I/O 总线连接

控制器与适配器的主要区别是在于它们的封装方式

功能都是在设备和总线之间传递数据(更多在第六章与第十章)

hello 程序运行全过程

1. 键盘输入

2.shell 程序将输入的字符逐一读入寄存器

3. 处理器将 hello 这个字符串放入内存中

4. 回车键后,shell 执行一系列指令来加载可执行文件 hello

5. 这些指令将 hello 中的数据和代码从磁盘复制到内存

6. 复制过程利用 DMA 技术(DIRECT MEMONRY ACESS)数据可以不经过处理器直接从磁盘到达内存

7. 处理器开始执行 main 函数代码,cpu 将 helloworld 字符串从内存复制到寄存器文件,然后再从寄存器文件复制到显示设备

8. 显示到屏幕上,完毕;

(上述描述省略细节)

Caches Matter

Register file 100-1000B

L1 cache 高速缓存 访问速度几乎和寄存器文件一样快 10-100kb

L2 cache 高速缓存 访问耗费时间是 L1 的五倍 10kb-100kb L3 cahce 高速缓存 更慢 10-100mb

Memory Hierarchy

L0-----L1-----------L2----------L3-------------L4---------------L5-------------L6......... 核心思想:上一层存储设备是下一层存储设备的高速缓存

regs caches 内存 磁盘

The Operating System Manage Hardware

我们可以把操作系统看作应用程序和(处理器 + 内存 + I/O 的中间层)

这样设计的目的

1. 防止硬件失控被滥用

2. 操作系统提供统一的机制来控制这些复杂的底层硬件

为了达到这个目的

引入以下抽象概念

文件时对 I/o 设备的抽象

虚拟内存是对内存和磁盘 I/O 的抽象

进程是对处理器,内存,IO 设备的抽象

Process Context Switching

借助 helloworld 来解释一下进程

1. 两个并行进程 hello 和 shell

只有 shell 在运行,等待命令行输入

2. 输入后 shell 进程会通过系统调用来执行我们的请求

system call 会将控制权从 shell 进程传递给操作系统

3. 操作系统保存 shell 进程的上下文,然后创建一个新的 hello 进程及其上下文

然后将控制权转交给新的 hello 进程

4.hello 进程进行完以后,操作系统会回复 shell 进程的上下文

并将控制权转交给 shell 进程并等待下一个命令的输入

上下文

操作系统会跟踪进程运行中所需要的所有状态信息

这种状态就是上下文(第八章,进程

Thread

一个进程由多个线程组成

每个进程都运行在进程的上下文中,共享代码和数据

线程(12 章,多线程程序)

虚拟地址空间

地址从下向上 0-----2^48-1

以下按从下向上排序

1.Read-only code and date

存放程序的代码和数据

2.1+read/write data

这个区域的内容是从可执行目标文件中加载而来

如 C 的全局变量(第七章

3.Run-time heap(created by malloc)

再向上就是堆

如 malloc 函数,申请的内存空间就是在这个堆中

程序的代码和数据区在程序一开始的时候就被指定了大小

但是堆可以在运行的过程中动态的扩展或者收缩(第九章,虚拟内存,详细介绍堆)

4.Memory-mapped region for shared libraries

. 共享库存放

如 c 语言标准库和数学库这种共享代码库

如 hello 程序中的 printf 函数(第七章链接,会将共享库怎么工作

5.User Stack(created at run time)

再往上就是用户栈,函数调用的本质就是压栈

每一次程序进行函数调用的时候,栈就会增长,函数执行完毕返回时,栈就会收缩,栈的增长方向是从高地址到低地址,(第三章详细介绍编译器如何使用栈来实现函数调用)

6.Kernel Memory

在最上面,应用程序代码不能读写这个区域的数据,也不能直接调用内核中定义的函数,这个区域对应用程序不可见

Files

第十章 unix io 一切皆为文件

Use ssh run hello program

1. 本地 ssh 软件发送 hello 字符串给 ssh 服务器

2.ssh 服务器 send hello 给 shell 程序

3. 通过网络把运行结果发送给 ssh 客户端(十一章,创建简单 web 服务器

Amdahl’s law

S=T (old) / T (new)=1 / [(1-a) + a /k ] K: 性能提升比例 T:时间 a 为程序中可加速部分,其余为不可加速

k 的计算举例 过去 10s 现在 5s (10-5)/5=100% 故 k=1+100% 10/k=5s

定律思想:对系统某一部分加速时,被加速部分的重要性和加速程度是影响整体系统性能的关键因素

Concurrency and Parallelism

解决优化问题的方法

1. 线程级并发

2. 指令级并行

3. 单指令多数据并行

Multi-core Processor Organization

1. 服务器增加集成的 cpu 核心数,提高系统的性能

Hyperthreading

超线程,又叫核心多线程

实现方法:cpu 内部,pc 和 registerfile 有很多备份,浮点运算部件硬件只有一份

常规单线程处理器在做线程切换时,大概要 20000 个时钟周期;超线程处理器在单周期基础上,可以决定执行哪一个线程,使 cpu 更好利用,当一个线程因为读取数据而进入等待状态时,

cp 可以去执行另外一个线程,只需要极少时间(十二章并发

Instruction-Level Parallelism

现代处理器可以同时执行多条命令的属性称为指令级并行

每条指令从开始到结束大概需要 20 个时钟周期或者更多

处理器采用了非常多的技巧可以同时处理多达 100 条命令

所以近几年的处理器可以保持每个周期 2-4 条指令的执行速率(第四章流水线技术

Single instruction Multiple Data

一条指令产生多个并行操作,被称为单指令多数据

SIMD 提高处理视频,声音这类数据的执行速度

Abstractions in Computer Systems

虚拟机是对整个计算机系统的抽象,包括操作系统,处理器,和程序

CSAPP深入理解计算机原理_第一章相关推荐

  1. python dict 排序原理_第一章Python数据结构和算法(字典排序)

    字典排序 问题 你想创建一个字典,并且在迭代或序列化这个字典的时候能够控制元素的顺序. 解决方案 为了能控制一个字典中元素的顺序,你可以使用 collections 模块中的OrderedDict 类 ...

  2. 读书笔记|《金字塔原理》_第一章

    读书笔记|<金字塔原理>_第一章 [章节]--第一章为什么要用金字塔结构 [讲了什么] 1.首先是为什么要用金字塔结构? 2.如何将思想组织成金字塔结构? 2.1 归类分组,将思想组织成金 ...

  3. c++语言编程,一个电灯两个开关控制,[理学]四川大学计算机学院精品课程_面向对象程序设计C++课件_游洪越_第一章绪论.ppt...

    [理学]四川大学计算机学院精品课程_面向对象程序设计C课件_游洪越_第一章绪论 主讲教师: 游洪跃 个人主页: /~youhongyue 邮件地址: youhongyao@ 教材:<C++面向对 ...

  4. 《深入理解分布式事务》第一章 事务的基本概念

    <深入理解分布式事务>第一章 事务的基本概念 文章目录 <深入理解分布式事务>第一章 事务的基本概念 一.事务的特性 1.原子性 2.一致性 3.隔离性 4.持久性 二.事务的 ...

  5. 计算机组成原理第一章课件,计算机组成原理ppt 第一章课件.ppt

    计算机组成原理ppt 第一章课件 计算机组成原理;教材白中英,计算机组成原理·网络版,科学出版社,2002参考书石磊,计算机组成原理·第2版, 清华大学出版社,2006钱晓捷,微型计算机原理及应用, ...

  6. 【笔记】Cocos2d-x高级开发教程:制作自己的捕鱼达人 笔记一:序_前言_第一章

    [笔记]Cocos2d-x高级开发教程:制作自己的<捕鱼达人> 笔记一:序_前言_第一章 转载请注明出处:http://blog.csdn.net/l_badluck/article/de ...

  7. 计算机原理存储器课件,计算机原理第五章存储器课件.ppt

    计算机原理第五章存储器课件.ppt 教材例题讲解 图5.33 全译码法8088与6264构成32KB存储空间 图5.34 部分译码法8088与6116构成8KB存储空间 图5.35 8088与ROM/ ...

  8. 【XJTUSE计算机图形学】第一章 绪论

    禁止转载 文章目录 [XJTUSE计算机图形学]第一章 绪论 1.1 研究内容 1.图形系统的主要任务 2.计算机图形学的研究对象 3.图形的要素[填空题] 4.图形图像表示法 5.图形研究例子 6. ...

  9. 计算机网络自考第一章知识点,完整版18版自考04741计算机网络原理知识点第一章...

    <完整版18版自考04741计算机网络原理知识点第一章>由会员分享,可在线阅读,更多相关<完整版18版自考04741计算机网络原理知识点第一章(5页珍藏版)>请在人人文库网上搜 ...

最新文章

  1. 干货 | 如何入手卷积神经网络
  2. geoserver 通过代码实现发布地图服务
  3. 一次布环境,引起的总结
  4. pytorch--nn.Sequential学习
  5. 开榨油店的失败教训_想开水果店没有经验?线下开水果店经营心得分享,或许你用得上...
  6. Python——调用shell命令的三种方法
  7. ubuntu下使用锐捷
  8. 如何用vmware虚拟服务器,虚拟机怎么用,详细教您vmware虚拟机怎么用
  9. 蒸汽流量计算软件_海口气体腰轮订制,涡街流量计脉冲,期待合作
  10. 安卓模拟PC浏览器发送http请求
  11. 关于app申请软件著作权登记时软件名称命名的问题
  12. 2022年第十三届蓝桥杯大赛软件省赛Java学B组试题
  13. 中银泰各种投资理财方式对比
  14. Joplin 软件转换中文
  15. 手机技巧:苹果手机这8个实用小技巧
  16. android studio怎么设置,android studio快捷键如何设置 android studio快捷键设置方法
  17. bili—Excel零基础入门进阶到函数
  18. mysql函数中打印信息_mysql信息函数
  19. STM32驱动TSL2561
  20. qt 关于时间转换(老是多出八小时)

热门文章

  1. @所有人 | 万众瞩目的2021SHD超级街舞梦想营来了!-莆田站回顾
  2. Echarts环形图设置空数据样式
  3. 小程序全局悬浮窗_微信小程序悬浮窗弹出怎么实现?
  4. 拼多多开店要营业执照吗?宝讯网捷电商
  5. js打包文件生成zip
  6. Ai工具介绍及使用方法
  7. 在微信小程序中打开地图选择位置功能
  8. 如何简简单单批量给PDF加水印
  9. 怎样才能处理掉下载Gif动图的黑边,水印呢?
  10. 牛刀:2010年上海房价第一个开始下跌