现在是2022年4月17日晚10点,本月计划的网课《csapp讲解》视频课看到了第八章“异常”第三讲,视频讲的很好但更新很慢,暂时没有最新的讲解,所以先做一个简单总结。总的来说,让我对自己写的代码是如何在操作系统中被加载然后按照代码逻辑运行有了更深层次的理解。这门课目前涉及到的知识点总的可以分为计算机硬件架构和操作系统与程序这两部分,即硬件与软件。之前本科阶段也学过计算机硬件技术基础,但没有学过操作系统和编译原理这些CS必修课。这门课也涉及到很多非常底层和硬件讲解,对那些感觉以后也不会用到的比如存储技术、三级缓存等等,只做了简单了解原理,并未深究。

1. 总体结构



这个结构是应该刻在我们的大脑里的,CPU和内存之间通过系统总线和内存总线通讯,IO总线负责和外部设备的通讯,所有的计算任务都会送到cpu中计算。cpu中真正进行计算的硬件是ALU(计算单元),此外还有寄存器用于保存变量,此外还有为提高和内存通讯速度的三级缓存也在CPU里面等等。当一个main.cpp被编译为可执行文件后,在终端输入./main.o后,执行该可执行文件的命令会传给操作系统,操作系统从磁盘加载该文件到内存,然后将cpu控制权交给该可执行文件,cpu从内存中读取对应的代码段起始指令,即main函数。然后按照逻辑执行。

2. 信息存储

常见数据类型在内存中的存储方式,如int、char、float等,再比如无符号数和有符号数的区别,以及表示方法的区别。这部分内容相对而言很基础,虽然深挖还是有很多东西,但没必要,会用就行。

3. 程序表示和执行

代码编译流程是必须掌握的,这里大概做下总结:

  • 预处理:宏展开和include替换、删除无关代码,生成预处理后文件
  • 编译:将高级语言转为汇编代码,生成汇编代码,用指令集表示命令
  • 汇编:将汇编代码转为机器代码,生成机器代码,二进制形式的cpu指令表示
  • 链接:将引用的代码包含进来,包括静态链接和动态链接,保证可执行文件能够运行。



    下面是指令集的一个示例,高级语言翻译为底层汇编后就是长这个样子,这些命令和CPU架构是匹配的,所以为不同平台编译的汇编文件是不一样的,如常见的下x86架构和arm架构,需要不同的编译器来完成为目标平台生成可执行代码的工作。题外话,目前深度学习需要用到异步计算设备GPU的支持,GPU的功能和CPU是相似的,但CPU更偏向于通用,GPU更偏向于简单计算并行化,以提高运算速度,此外还会为特殊的数学计算提供硬件支持,如模型中常见的Sigmoid等非线性计算。此外,CUDA库大大降低了软件人员调用GPU计算的难度,在此基础上,还有如onnxruntime、mxnet、ncnn等推理库实现了非常全面的网络OP,进一步方便了相关算法的落地。

4. 处理器工作逻辑

5. 程序优化

6. 存储技术

7. 编译原理

8. 异常

《计算机组成原理/CSAPP》网课总结(一)的更多相关文章

  1. 《计算机组成原理/CSAPP》网课总结(二)——编译原理基础

    这部分是四月份的安排,拖到五一放假了,主要是对源码编译过程的一次总结,总的来说,大致可分为预编译.编译.汇编和链接四部分.这里简单记录一下: 一 概述 1.预处理 或者说是预编译,指的是在编译前需要做 ...

  2. linux的系统组成和计算机组成原理,linux常用操作

    Linux入门 linux简介   学习目的:linux服务器操作系统稳定长期运行,python,pycharm装于linux上 linux系统组成 应用软件:调用系统软件接口 linux操作系统分两 ...

  3. 《计算机组成原理 》& 《计算机网络》& 《数据库》 Roadmap for self-taugh student

    计算机组成原理: UCB的这门课绝对是不错的资源. Great Ideas in Computer Architecture (Machine Structures) B站:https://www.b ...

  4. Linux内核学习期末总结(网课)

    标签(空格分隔): 20135321余佳源 余佳源(原创作品转载请注明出处) <Linux内核分析> MOOC课程http://mooc.study.163.com/course/USTC ...

  5. 推荐书单(网课)-人生/编程/Python/机器学习-130本

    目录 总计(130本) 一.在读 二.将读 三.已读 非专业书单(77本) 四.已读 专业书单(53本) 五.已看网课(8个) 六.在看网课 一个人如果抱着义务的意识去读书,便不了解读书的艺术.--林 ...

  6. 《数据结构》《C++程序设计》《计算机组成原理》中的英语名词

    一.数据结构 data 数据data element 数据元素data item 数据项data object 数据对象data structure 数据结构ADT (Abstruct Date Ty ...

  7. 计算机组成原理(电脑硬件&语言分类)

    计算机组成原理 一.电脑硬件配置 CPU :中央处理器(人类的大脑) -飞机 内存:存放一些临时数据(人类的短暂记忆-右脑) -高铁 硬盘:存储永久数据(左脑-长期记忆) - 汽车 输入输出:键盘鼠标 ...

  8. 计算机组成原理往年试题以及答案(tzf!!!)

    计算机组成原理往年试题以及答案(下载链接!!!) 太子妃升职记(1~36) ::http://pan.baidu.com/s/1dDP5Kqd

  9. 计算机组成原理实验之CPU组成与指令周期实验

    (实验五  CPU组成与指令周期实验) 课程 计算机组成原理实验 实验日期 2015 年 12 月  8 日 一.实验目的 1.将微程序控制器同执行部件(整个数据通路)联机,组成一台模型计算机. 2. ...

随机推荐

  1. Kafka 与传统 MQ 消息系统之间有三个关键区别?

    (1).Kafka 持久化日志,这些日志可以被重复读取和无限期保留 (2).Kafka 是一个分布式系统:它以集群的方式运行,可以灵活伸缩,在内部通过 复制数据提升容错能力和高可用性 (3).Kafk ...

  2. 你在项目中哪些地方用到了 XML?

    XML 的主要作用有两个方面:数据交换和信息配置.在做数据交换时,XML 将数 据用标签组装成起来,然后压缩打包加密后通过网络传送给接收者,接收解密与 解压缩后再从 XML 文件中还原相关信息进行处理 ...

  3. Java 中你怎样唤醒一个阻塞的线程?

    在 Java 发展史上曾经使用 suspend().resume()方法对于线程进行阻塞唤醒,但 随之出现很多问题,比较典型的还是死锁问题. 解决方案可以使用以对象为目标的阻塞,即利用 Object ...

  4. 打败算法 —— 删除链表的倒数第n个结点

    本文参考 出自LeetCode上的题库 -- 删除链表的倒数第n个结点,官方的双指针解法没有完全符合"只遍历一遍链表"的要求,本文给出另一种双指针解法 https://leetco ...

  5. SVN之屏蔽不需要提交的xml等文件

    SVN之屏蔽不需要提交的xml等文件 在默认"Default changelist"中是我们正常需要提交的文件 在"不需要提交的文件"中存储的是一些线下环境需要 ...

  6. (stm32学习总结)—对寄存器的理解

    芯片里面有什么 我们看到的 STM32 芯片是已经封装好的成品,主要由内核和片上外设组成.若与电脑类比,内核与外设就如同电脑上的 CPU 与主板.内存.显卡.硬盘的关系.STM32F103 采用的是 ...

  7. 前端每日实战:89# 视频演示如何用 CSS 和 D3 创作旋臂粒子动画

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/xJrOqd 可交互视频 此视频是可 ...

  8. 基 vue-element-admin升级的Vue3 +TS +Element-Plus 版本的后端管理前端解决方案 vue3-element-admin 正式对外发布,有来开源组织又一精心力作,毫无保留开放从0到1构建过程

    项目简介 vue3-element-admin 是基于 vue-element-admin 升级的 Vue3 + Element Plus 版本的后台管理前端解决方案,是 有来技术团队 继 youla ...

  9. Native方法的使用

    Java不是完美的,Java的不足除了体现在运行速度上要比传统的C++慢许多之外,Java无法直接访问到操作系统底层(如系统硬件等),为此Java使用native方法来扩展Java程序的功能. 可以将 ...

  10. JS中Map和ForEach的区别

    定义 forEach()方法: 针对每一个元素执行提供的函数. map()方法: 创建一个新的数组,其中每一个元素由调用数组中的每一个元素执行提供的函数得来. 区别 forEach()方法不会返回执行 ...