深入理解计算机系统

深入理解计算机系统9个重点笔记 引言深入理解计算机系统,对我来说是部大块头。说实话,我没有从头到尾完完整整的全部看完,而是选择性的看了一些我自认为重要的或感兴趣的章节,也从中获益良多,看清楚了计算机系统的一些本质东西或原理性的内容,这对每个想要深入学习编程的程序员来说都是至关重要的。只有很好的理解了系统到底是如何运行我们代码的,我们才能针对系统的特点写出高质量、高效率的代码来。这本书我以后还需要多研究几遍,今天就先总结下书中我已 阅读详情

深入理解计算机系统学习笔记(一)

计算机系统漫游


信息就是位+上下文

  0和1组成的位序列,又称为比特序列,8个位被组织成一组,成为字节。每个字节表示程序中的某些文本字符。

  系统中的所有信息–包括磁盘文件、内存中的程序、内存中存放的的用户数据以及网络上传送的数据,都是有一串比特表示的。区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文。

  大部分Unix内核(操作系统的核心)以及所有支撑工具和函数库都是用C语言编写的。


C语言程序执行流程

  每条C语句必须被其他程序装华为一系列的低级机器语言指令,然后打包成可执行目标程序的格式,以二进制磁盘文件存放起来。

  在Unix系统上,从源文件到目标文件的转化是由编译器驱动程序完成的:
  gcc -o hello hello.c

编译过程:
  1. 预处理阶段
       预处理器(cpp)根据以字符#开头的命令,修改原始的C程序。通常以”.i”为扩展名。
  2. 编译阶段
      编译器(ccl)将“.i”文件翻译成“.s”文件,它包含一个汇编语言程序。
  3. 汇编阶段
      汇编器(as)将“.s”文件翻译成机器语言指令,打包成克重定位目标程序的格式,保存在“.o”的二进制文件中。
  4. 链接阶段
      链接器(ld)将“.o”文件与其中引用函数的预编译好的目标文件合并,得到可执行目标文件。

系统的硬件组成

典型的系统硬件组成

  1. 总线
       贯穿整个系统的一组电子管道,负责携带信息在各个部件之间传递。
  2. I/O设备
       系统与外部世界的联系通道。键盘、鼠标、显示器、磁盘驱动器。每个I/O设备都通过一个控制器或者适配器与I/O总线相连。
  3. 主存
       临时存储设备,用来存放处理器执行程序时程序和其处理的数据。物理上,主存是一组动态随机存取存储器(DRAM)芯片组成的;逻辑上,存储器是一个线性的字节数组。
  4. 处理器
       解释或执行存储在主存中指令的引擎。处理器的核心是一个大小为一个字的存储设备或寄存器,成为程序计数器(PC)。任何时刻,PC都指向主存中的某条机器语言指令。

高速缓存

  根据机械原理,较大的存储设备比较小的存储设备运行的慢,而快速设备的造价远高于同类的低速设备。
   高速缓存存储器,作为暂时的的集结区域,存放处理器近期可能会需要的信息。L1和L2高速缓存是用一种叫做静态随机访问存储器(SRAM)的硬件技术实现的。

这里写图片描述


操作系统管理硬件

  shell 和可执行程序并没有直接访问硬件,而是依靠操作系统提供的服务。

操作系统基本功能:
  1. 防止硬件被失控的应用程序滥用;
  2. 向应用程序提供简单一致的机制来控制复杂而又通常大不相同的低级硬件设备。
实现方式:

  通过几个基本的抽象概念(进程、虚拟内存和文件)。文件是对I/O设备的抽象表示,虚拟内存是对主存和磁盘I/O设备的抽象表示,进程则是对处理器、主存和I/O设备的抽象表示。


进程

  进程间的切换是由操作系统内核管理的。内核是操作系统代码常驻主存的部分。


虚拟内存

  每个进程看到的内存是一致的,称为虚拟地址空间。
Linux进程的虚拟地址空间


文件

  字节序列。每个I/O设备都可以看成是文件。文件向应用程序提供了一个统一的视图,来看待系统中可能含有的所有的I/O设备。


Amdahl定律

主要思想:

  当我们对系统的某个部分加速时,其对系统的整体性能的影响取决于该部分的重要性和加速程度。α为某部分所需执行时间占总时间的比例,该部分性能提升k。总的执行时间:
   Tnew=(1−α)Told+(αTold)/k=Told[(1−α+α/k)]

加速比 S=Told/Tnew=11−α+α/k


并发和并行

  并发指一个同时具有多个活动的系统。并行指用并发来是一个系统运行的更快。

  1. 线程级并发
      单处理器模拟并发、多核处理器、超线程
  2. 指令级并行
      现代处理器可以同时执行多条指令的属性
    3.单指令、多数据并行
      许多现代处理器拥有特殊的硬件,允许一条指令产生多个可以并行执行的操作,这种方式称为单指令、多数据,即SIMD并行。
带你读懂《深入理解计算机系统》开篇 我的计划是2020年用一整年的时间带你读一本书。 有人说一年才读一本书是不是太少了。在我看来一年完整读完一本书的已经超过63%的成年人了(中国综合社会调查(CGSS)一项数据显示,在过去的一年里,我国年满18岁的成年人中有63%的人,一本书也没读过(包括纸本书和电子书)),要是专业书籍来说,读完一本书的人就更少了。而且这是一本内容如此丰富的书。很多人整天“速读,跳读,扫读”,以为自己多么有效率,其实不然,精度一本好书,远远超过十本速读书,这个在计算机专业书籍更是如此。 阅读详情

相关推荐

【实战】ESP32 + LN298N 实现电动推杆的闭环位置伺服控制

本文详细介绍了如何使用ESP32微控制器和LN298N电机驱动模块,为普通电动推杆增加编码器反馈,实现精准的闭环位置伺服控制。文章从硬件选型与接线讲起,深入解析了编码器四倍频计数原理与位置换算,并重点阐述了PID控制算法的核心思想、代码实现及参数整定方法,旨在帮助读者从零构建一个反应迅速、定位精准的智能执行器系统。

weixin_29195615的博客 318

《深入理解计算机系统》CSAPP,全书分章节分享(一)

这是一本很经典的书,它涵盖对计算机系统从硬件到软件的全面理解,包括处理器架构、存储系统、网络通信等,很适合学习计算机底层知识。由于实在太经典了,就不做过多的赘述了。 处理器读取并解释存放在主存里的二进制指令。因为计算机花费了大量的时间在内存、I/O 设备和 CPU 寄存器之间复制数据,所以将系统中的存储设备划分成层次结构——CPU 寄存器在顶部,接着是多层的硬件高速缓存存储器、DRAM主存和磁盘存储器。在层次模型中,位于更高层的存储设备比低层的存储设备要更快,单位比特造价也更高。层次结构中较高层次的存储设备

m0_74255303的博客 3994

【计算机视觉学习03】全景图像拼接

文章目录一、基本原理1.1 图像拼接的几何原理1.2 直线,圆,复杂曲线方程拟合1.3 RANSAC算法1.4 APAP算法1.5 寻找最佳拼接缝(Seam Finding)1.5.1 最大流问题1.5.2 最大流问题的增广链算法1.5.3 最大流最小割定理二、 图像拼接具体实现2.1 代码2.2 运行结果 一、基本原理 将两幅或多幅具有重叠区域的图像,通过特征匹配将具有相同的特征点(SIFT特征点)的图像拼接在一起,将来自多个不同视角拍摄的图像变换到同一视角下,拼接成一张宽视野图像。 图像拼接基础流程

一个正在努力学习的iter 7790

【深入理解计算机系统-学习笔记】第一章 计算机系统漫游

第一章 计算机系统漫游 简介: 我们通过跟踪hello程序的生命周期来开始对系统的学习—-从它被程序员创建开始,到在系统上运行,输出简单的消息,然后终止 我们将沿着这个程序的生命周期,简单得介绍一些逐步出现的关键概念、专业数据和组成部分 hello代码: #include <stdio.h> int main() { printf("hello, workd\n"); return 0; } 1.1、信息就是位+上下文 hello程序的生命周期从源程序开始 源程序:即源文件,程序员通过创

shitou_12的博客 848

告别手动下载!用Python脚本5分钟搞定NREL风速数据(附完整API调用代码)

本文详细介绍了如何使用Python脚本自动化获取NREL风速数据,从API密钥申请到数据保存的全流程。通过完整的API调用代码和实战技巧,帮助研究人员和开发者高效下载全球高精度风速数据,告别繁琐的手动操作,提升工作效率。

weixin_33724059的博客 297

rv1126 SDK编译【2020-0912版本SDK包】

rv1126 sdk 编译

学习记录 1万+

《深入理解计算机系统》学习笔记 —— 1.计算机系统概述

《深入理解计算机系统》 视频链接https://www.bilibili.com/video/BV1Lp4y167im/?spm_id_from=333.788shell命令解释程序: 如果输入的第一个字母不是内置的可执行命令,则他就会假设这是一个可执行文件的名字。后面会讲解shell实现。 PC:program count,大小为一个word的存储区域。word在不同的系统上是不同的32位机器4byte, 64位机器8byte。(如何查看一个机器是多少位呢?) 其实他就是4byte或者8byte的存储空

Charles Ren's Tech Blog 2109

手把手入门YOLO到改进优化教程 | 【P5进阶篇】YOLOv8损失函数改进实战-损失函数IoU之KLD Loss

在本节,将从 KLD Loss(Kullback–Leibler Divergence Loss)的理论到实战代码实现,带你把 KLD Loss融合进 YOLOv8 的训练框架中。并通过训练日志与实验结果,验证 KLD Loss 在实际工程中的优势。

嵌入式阿齐Archie 2万+

深入理解计算机系统(一)

上述表示方法说明了一个基本思想:系统中的所有信息——包括磁盘文件、内存中的程序、内存中存放的用户数据以及网络上传送的数据,都是由一串比特表示的。hello程序的生命周期是从一个高级C语言程序开始的,但是为了在系统上运行hello.c程序,每一条语句都被转化为一系列低级机器语言指令,然后这些指令按照一种称为可执行目标程序(可执行目标文件)的格式打包好,并以二进制磁盘文件的形式存放起来。下图是Linux进程的虚拟地址空间,地址空间最上面的区域是保留给操作系统中的代码和数据的,对所有进程而言都一样。

yangSHU21的博客 1387

Opencv项目实战:20 单手识别数字0到5

今天要做的是单手识别数字0到5,通过在窗口展示,实时的展示相应的图片以及文字。在这里,我提供一下识别更多数字的方法(0-10)。首先最简便的是双手识别,完全不用更改代码,把图片处理好就行了;其次,就是按照最上面的那张图片,参数figureup是一个长度为5的列表[0,0,0,0,0],你可以参照着手势将其打印出来,然后将其用if条件判断。当然,在我们这边最常见的还是华北手势表示数字,大家按照自己的习惯来就行。

m0_62919535的博客 2878

C#winform自定义绘制曲线控件实例

本文实例讲解自定义绘制曲线控件过程。 在实际项目中,需要绘制曲线,系统的提供的绘制曲线的控件有时不能满足自己的需要,需要根据项目需要定制开发曲线控件。 实例目标,实时绘制显示温湿度值曲线。

qq_30725967的博客 1735

《深入理解计算机系统》

我在b站搬运了相关的视频,感兴趣的小伙伴可以看看 卡内基梅隆大学 Introduction to Computer Systems CMU 15-213 Fall 卡内基梅隆大学 Introduction to Computer Systems CMU 15-213 2015 Spring 华盛顿大学软硬件接口 The Hardware/Software Interface 安利一本书:计算机系统基础--NJU袁春风著。 去年考研NJU的CS,NJU其中一门专业课的推荐教材就是此书。后...

Peter的博客 1041

微信小程序 - 最新详细实现气泡菜单功能,点击任意元素在底部或附近周围弹出气泡菜单列表,仿微信气泡弹框显示菜单快捷功能收纳,自定义气泡弹窗/菜单气泡弹窗,小程序气泡框嵌套菜单组件插件,自动计算弹出定位

微信小程序,vue2,vue3,气泡列表,汽泡菜单,气泡框,泡泡框,悬浮框,悬浮菜单,点击菜单按钮弹出气泡,对话箭头气泡框,弹出的气泡准确定位并吸附在附近,弹出式气泡,弹窗菜单,气泡自定义HTML弹窗,带三角的气泡弹框,三角气泡框里面嵌套菜单,当点击一个按钮或元素时,会从附近弹出一个小气泡一样的菜单列表,自定义气泡框内的内容,点击一个元素在附近弹出一个气泡弹框功能效果,气泡弹框不准怎么办,被盖住了,挡住了,长按弹出,组件插件,微信,自定义气泡菜单组件,气泡弹出框,小程序自定义气泡框,菜单气泡,包裹列表的三角

🏆 前端领域优质创作者 3921

深入理解计算机系统(EN).pdf

技术周刊 · 哀莫的技术笔记 1091

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

《深入理解计算机系统》怎样学?个人看法和资源分享

《深入理解计算机系统》怎样学?个人看法和资源分享

达的程序员日记 7195

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

深入理解计算机系统-评价

深入理解计算机操作系统 引子: 在我刚刚进入中科院计算所读研的时候,同宿舍的师兄便向我推荐了一本《深入理解计算机系统》,这本书从一个程序员的视角详细剖析了整个计算机系统,涵盖了组成原理、汇编语言、体系结构、操作系统、网络等计算机基础知识。 由于时间所限,我并没有立刻阅读,而是将其列入了找工作前的复习书单。2010年8月,我用了一个月的时间读完了这本书的原...

angyongq537199的博客 229

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

《深入理解计算机系统》实验Link Lab源文件

《深入理解计算机系统》实验Link Lab源文件 【下载地址】深入理解计算机系统实验LinkLab源文件 本仓库提供了《深入理解计算机系统》实验Link Lab的源文件及相关文档说明和答案。该实验对应于书籍的“第七章 链接”部分,旨在帮助读者深入理解计算机系统中的链接过程 ...

gitblog_09703的博客 372

从《深入理解计算机系统》谈一谈编程入门

在本书中,邓老师会给你讲解C++中一些模板的底层实现原理,如Vector模板的扩容原理,学完之后我们就能明白动态的数组是怎么创建的,它是如何巧妙地扩容来保证它的高可用的。这本书是讲解C语言的,不知道大家发现没有,很多讲解计算机科学相关的书籍,如描述操作系统、计算机网络、数据库等学科的书,里面的例子几乎都是用C语言描述的。它从你的计算机讲起,描述你的主机中有什么部件,你的主板上有什么零件,CPU、内存和硬盘之间怎么连接的。学习的过程是不能急的,特别是还在上大学的朋友,你们有大把连续的时间,这就是资本。

sybhdxx的博客 994

无责任书评:《深入理解计算机系统》这本神书到底好在哪儿?

刘大,我想学Java ,你觉得《Java编程思想》适合入门吗?刘哥,《深入理解计算机系统》第三版豆瓣评分都快接近10分了, 我想买一本,你觉得怎么样?刘师傅,学习数据结构...

码农翻身 8988

《深入理解计算机系统》读书笔记

《深入理解计算机系统》读书笔记注:《深入理解计算机系统》是我们《系统级编程》课程的参考书。这里主要记载的是在看《深入理解计算机系统》这本书的过程中,遇到的一些以前没有注意到的知识。但是,这本书的稿子是2001年的,有点旧了,而且据说卡内基梅隆大学的讲义每年要更新30%。我会在其中增加一些我们系统级编程课程中的一些新的知识点。第0章 绪论1,不能用x-y第1章 计算机系统漫游1,

天的世界 8637

坚持读《深入理解计算机系统》

从2016年11月1日开始,每天晚上都坚持读《深入理解计算机系统》这本书。全面的了解了计算机是如何工作的。按照目前的的进度,应该在2016年12月15日就可以看完了。 我也想晚上可以放松下,看看电影,可是总是觉得没什么意义。还是在年轻时多学学吧。 本书已经在20161212看完了   图片发自简书App    图片发自简书App...

我是榜样的博客 335

深入理解计算机系统思维导图

深入理解计算机系统思维导图 文章目录深入理解计算机系统思维导图前言一、第1章 计算机系统漫游二、第2章 信息的表示和处理三、第5章 优化程序性能四、第7章 链接五、第9章 虚拟内存六、第10章 系统级I/O总结 前言 近期发现之前阅读CSAPP而整理的部分章节的思维导图,当初也费了不少功夫,所以现在上传希望能给其他人提供一些帮助。 这些思维导图是我结合《深入理解计算机系统》中文译本原书第3版,以及哈工大csapp课程课件制作而成。 一、第1章 计算机系统漫游 二、第2章 信息的表示和处理

qq_40680007的博客 3824
上一篇: spring源码导入IntelliJ IDEA
Think_in_java_k
博客等级 码龄10年 0粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值