【读书笔记】《深入理解计算机系统(原书第三版)》第一章 计算机系统漫游

news/2025/9/24 8:42:26/文章来源:https://www.cnblogs.com/HarryMiau/p/19107039

引言

计算机系统是由硬件和系统软件组成的,它们共同工作来运行应用程序。

1.1 信息就是 位 + 上下文

ASCII标准:用一个唯一的单字节大小的整数值来表示每个字符。大部分的现代计算机系统都使用 ASCII 标准来表示文本字符。
image

程序的生命周期:从一个源程序(或者说源文件)开始,即程序员通过编辑器创建并保存的文本文件。
源程序:实际上就是一个由值0和1组成的位(又称为比特)序列,8个位被组织成一组,称为字节。每个字节表示程序中的某些文本字符。
基本思想
系统中所有的信息,包括磁盘文件、内存中的程序、内存中存放的用户数据以及网络上传送的数据,都是由一串比特表示的。
区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文。

1.2 程序被其他程序翻译成不同的格式

编译器驱动程序:将源文件转化为目标文件
编译系统 compilation system:预处理器、编译器、汇编器和链接器

image

预处理阶段

hello.c(文本) → hello.i(文本)
预处理器(CPP)读取系统头文件的内容,并把它直接插入程序文本中。

编译阶段

hello.i(文本) → hello.s(文本)
编译器(ccl)生成汇编语言程序

汇编阶段

hello.s(文本) → hello.o(二进制)
汇编器(as)将 hello.s 翻译成机器语言指令,把这些指令打包成一种叫做可重定位目标程序(relocatable object program)的格式,并将结果保存在目标文件 hello.o 中。

链接阶段

hello.o + printf.o → hello 可执行目标程序(二进制)
链接器 (ld) 处理调用合并,得到可执行目标文件,可以被加载到内存中,由系统执行。

1.3 了解编译系统如何工作是大有益处的

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

1.4 处理器读并解释储存在内存中的指令

使用命令行解释器(shell)加载并运行hello程序。

1.4.1 系统的硬件组成

image

① 总线

贯穿整个系统的一组电子管道。
携带信息字节并负责在各个部件间传递。

② I/O 设备

系统与外部世界的联系通道,如键盘、鼠标、显示器、磁盘等。
每个 I/O 设备都通过一个 控制器 或 适配器 与 I/O 总线相连。

💡 控制器和适配器之间的区别:主要在于它们的封装方式
控制器: I/O 设备本身或者系统的主印制电路板(通常称作主板)上的芯片组。
适配器: 一块插在主板插槽上的卡。

③ 主存

临时存储设备,在处理器执行程序时,用来存放程序和程序处理的数据。
物理上,由一组动态随机存取存储器(DRAM)芯片组成。
逻辑上,一个线性的字节数组,每个字节都有其唯一的地址(数组索引)。

④ 处理器

解释(或执行)存储在主存中指令的引擎。
程序计数器(PC):一个大小为一个字的存储设备,是处理器的核心。在任何时刻,PC 都指向主存中的某条机器语言指令(即含有该条指令的地址)。

1.4.2 运行 hello 程序

输入命令

image

加载可执行文件(通过 DMA 技术)

image

输出结果

image

1.5 高速缓存至关重要

局部性原理:程序具有访问局部区域里的数据和代码的趋势。
高速缓存存储器 cache memory:暂时的集结区域,存放处理器近期可能会需要的信息。由静态随机访问存储器(SRAM)硬件技术实现。

1.6 存储设备形成层次结构

image
主要思想:上一层的存储器作为低一层存储器的高速缓存。

1.7 操作系统管理硬件

操作系统:应用程序和硬件之间插入的一层软件,所有应用程序对硬件的操作尝试都必须通过操作系统。

基本功能:

  1. 防止硬件被失控的应用程序滥用
  2. 向应用程序提供简单一致的机制来控制复杂而又通常大不相同的低级硬件设备
    image

抽象概念:进程、虚拟内存、文件
image

1.7.1 进程

image

进程是操作系统对一个正在运行的程序的一种抽象。
并发运行:一个进程的指令和另一个进程的指令交错执行。在大多数系统中,通过处理器在进程间切换来实现 需要运行的进程数 > 可以运行它们的 CPU 个数。
上下文:进程运行所需的所有状态信息。比如 PC 和寄存器文件的当前值,以及主存的内容。

1.7.2 线程

一个进程实际上可以由多个称为线程的执行单元组成, 每个线程都运行在进程的上下文中,并共享同样的代码和全局数据

1.7.3 虚拟内存

虚拟内存:一个抽象概念,它为每个进程提供了一个假象,即每个进程都在独占地使用主存。
每个进程看到的内存都是一致的,称为虚拟地址空间
image

程序代码和数据

对所有的进程来说,代码是从同一固定地址开始,紧接着的是和 C 全局变量相对应的数据位置。
代码和数据区是直接按照可执行目标文件的内容初始化的。
代码和数据区在进程一开始运行时就被指定了大小。

堆可以在运行时动态地扩展和收缩。

共享库

大约在地址空间的中间部分是一块用来存放像 C 标准库和数学库这样的共享库的代码和数据的区域。

位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数调用。
和堆一样,用户栈在程序执行期间可以动态地扩展和收缩。

内核虚拟内存

地址空间顶部的区域是为内核保留的。
不允许应用程序读写这个区域的内容或者直接调用内核代码定义的函数。它们必须调用内核来执行这些操作。

1.7.4 文件

文件就是字节序列。
每个 I/O 设备,包括磁盘、键盘、显示器,甚至网络,都可以看成是文件。
它向应用程序提供了一个统一的视图,来看待系统中可能含有的所有各式各样的 I/O 设备。

1.8 系统之间利用网络通信

网络也可以视为一种 I/O 设备。

1.9 重要主题

1.9.1 Amdahl 定律

当我们对系统的某个部分加速时,其对系统整体性能的影响取决于该部分的重要性和加速程度。

总的执行时间

Told = 系统执行某应用程序需要时间
α = 系统某部分所需执行时间与总时间的比例
k = 该部分性能提升比例
image

加速比

image
image

1.9.2 并发和并行

并发(concurrency):一个同时具有多个活动的系统
并行(parallelism):用并发来使一个系统运行得更快

1. 线程级并发

2. 指令级并行

3. 单指令、多数据并行

1.9.3 计算机系统中抽象的重要性

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/915384.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何将PPT每一页批量导出为高清JPG图片?一文讲清处理流程

如何将PPT每一页批量导出为高清JPG图片?一文讲清处理流程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consola…

实用指南:计算机视觉:基于YOLOv11 实例分割与OpenCV 在 Java 中的实现图像实例分割

实用指南:计算机视觉:基于YOLOv11 实例分割与OpenCV 在 Java 中的实现图像实例分割pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; f…

哪个公司做网站最好深圳网站建设拟解决问题

在IC设计项目的验证过程中,功能测试(通过使用测试平台)有助于定位设计错误或漏洞。这个验证过程有三个阶段:构建和启动测试平台、验证基本测试用例以及验证边界情况。 在前两个阶段,漏洞很容易被检测到,因…

百度网站地图北京专业网站制作公司

一、Spring Cloud(Base工程构建) 1.1 Spring Cloud 简述 1.1.1 Spring Cloud 版本推荐 在讲解 Spring Cloud 之前,首先推荐一下各个依赖的版本,以免出现版本错误 版本推荐 必须根据以上版本,否则可能会出现一些不…

品牌创意型网站建设山东省城乡建设厅官网

目录 1.背景介绍1.1. 项目背景1.2. 项目难点1.3. 项目环境 2. flask后端开发实现的功能3. flask部署和前后端对接3.1. flask运行配置和服务器部署3.2. flask前后端传参 4. 后端测试工具4.1. 工具介绍4.2. 工具使用 后记 1.背景介绍 1.1. 项目背景 就是前几个月临时接手了一个…

html网站开发心得体会大丰市市城乡建设局网站

来源:中国电子信息产业发展研究院10月19日,由北京市人民政府、工业和信息化部主办,工业和信息化部装备工业发展中心、中国电子信息产业发展研究院(以下简称“赛迪研究院”)等机构共同承办的“世界智能网联汽车大会”进…

互联网app下载手机优化加速有什么用

dubbo自定义了很多xml标签,例如,那么这些自定义标签是怎么与spring结合起来的呢?我们先看一个简单的例子。一 编写模型类1 packagecom.hulk.testdubbo.model;23 public classHero {4 privateString name;5 private intage;67 publicString ge…

北京网站设计济南兴田德润团队怎么样专门代写平台

点击上方蓝字关注我们(本文阅读时间:4 分钟)活动介绍▌MAUI 跨平台应用开发实战前端应用开发往往需要面对 iOS、Android、Windows 等多平台开发的问题。如能用一种开发工具进行多平台的开发,可以跨平台共享 UI 布局和设计&#xf…

电子商务公司名称大全简单大气wordpress优化软件

可以设置小程序跳转,引流也不错支持小程序后台流量主激励视频广告用户下载一次观看一次视频广告,收入非常可观支持小程序后台流量主banner广告支持全网短视频解析,苹果安卓通用支持后台无限生成卡密支持自定义文字广告支持图片广告支持小程序…

网站数据库模板下载90设计手机站

小张一年前入职,当时毕业已经一年了,一年换了4份工作。最少的才呆了一周。 小张的简历很正规,彩色打印,整整5页。技能篇写的很全,基本上市面上的技术都写到了,都是精通。面试的时候,表现也很好&…

Java实现双色球历史是否中奖查询

Java实现双色球历史是否中奖查询 在一些问答里,很多彩友都在问:如何查看自己的双色球号码在历史期次中有没有中过奖?作为开发者兼彩友,这个问题就简单了,决定解决一下这个问题,先上结果: 双色球历史是否中奖查询…

iframe引入界面有el-date-picker日期框,点击出现闪退问题处理 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

ABC424 游记(VP)

前五题没什么难度,第六题恰好会,运气好 6t 没寄。省流 前五题没什么难度,第六题恰好会,运气好 6t 没寄。9.23 内含剧透,请vp后再来。 不是题解!!!!!!! 赛前 下午下大雨没去图书馆,浪费了一下午,晚上准备…

Java实现大乐透历史是否中奖查询

Java实现大乐透历史是否中奖查询 在一些问答里,很多彩友都在问:如何查看自己的大乐透号码在历史期次中有没有中过奖?作为开发者兼彩友,这个问题就简单了,决定解决一下这个问题,先上结果: 大乐透历史是否中奖查询…

怎么弄网站做网站卖东西wordpress 怎样写函数

在Android开发中使用View制作一个引导动画发布时间:2020-11-20 16:46:16来源:亿速云阅读:98作者:Leah这篇文章将为大家详细讲解有关在Android开发中使用View制作一个引导动画,文章内容质量较高,因此小编分享…

网站如何做会员通用西安网站制作网站

第一种方案:使用CountDownLatch工具类 CountDownLatch:是Java多线程编程中的一个同步工具类(计数锁),它允许一个或多个线程等待其他线程完成操作后再继续执行。其内部维护了一个计数器,当线程在执行任务完…

如何把网站做的和别人一样网站的具体内容

XSS漏洞(跨站脚本) 1.XSS 漏洞简介 ​ XSS又叫CSS(Cross Site Script)跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从…

新类型网站利用js做网站

1. 题目 2. 分析 合理地改造原数据,这样会使得代码逻辑大大简化。 为了让代码走相同的逻辑,这里需要在原数据后面追加一个price 0。这个price 0大大地简化了处理[1,2,3,4,5] 这类型数据的复杂度。 3. 代码 class Solution:def maxProfit(self, pri…

怎么做网站不用备案怀宁做网站

高斯模糊、加载监听、圆角图片这些相信大家都很熟悉,那如何实现这些效果,请大家参考本文进行学习。1、引用compile com.github.bumptech.glide:glide:3.7.02、加载图片2.1 基本加载Glide.with(context).load(url).into(imageView);2.2 设置加载中和加载失…

找项目seo网站设计多少钱

集合里面的 E是泛型 暂且认为是object转载于:https://www.cnblogs.com/classmethond/p/10011374.html