现在是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. Java中8种基本数据类型是哪些

    1 public class Ceshi { 2 int a; 3 double b; 4 boolean c; 5 char d; 6 float f; 7 byte e; 8 long h; 9 ...

  2. 并发包下常见的同步工具类(CountDownLatch,CyclicBarrier,Semaphore)

    在实际开发中,碰上CPU密集且执行时间非常耗时的任务,通常我们会选择将该任务进行分割,以多线程方式同时执行若干个子任务,等这些子任务都执行完后再将所得的结果进行合并.这正是著名的map-reduce思 ...

  3. Linux 基础优化

    1.操作的最小化原则 1)安装系统最小化 一般情况下安装OS时,软件安装包组(Package Group)的选择: base--------------------------基本环境 editors ...

  4. 攻防世界shrine

    shrine import flask import os app = flask.Flask(__name__) app.config['FLAG'] = os.environ.pop('FLAG' ...

  5. python学习笔记(六)——程序调试

    在我们平时编写程序时,常常会遇到各种错误,俗称BUG.而我们程序猿的工作常常需要对程序进行调试,也就是所谓的debug. 程序调试是将编制的程序投入实际运行前,用手工或编译程序等方法进行测试,修正语法 ...

  6. python学习笔记(五)——模块导入

    模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py.模块可以被别的程序引入,以使用该模块中的函数等功能.这也是使用 python 标准库的方法. 1.模块的定义与分类 在python中模块实 ...

  7. C语言类型转换原理

    C语言类型转换 int a; a=1.23 这里把1.23赋值给a发生了隐式转换,原理如下: int a; float b=3.14; a=b; b赋值给a的过程:首先找一个中间变量是a的类型(该例中 ...

  8. vue双向绑定、Proxy、defineproperty

    本文原链接:https://www.jianshu.com/p/2df6dcddb0d7 前言 双向绑定其实已经是一个老掉牙的问题了,只要涉及到MVVM框架就不得不谈的知识点,但它毕竟是Vue的三要素 ...

  9. ES6-11学习笔记--const

    新声明方式:const 1.不属于顶层对象 window 2.不允许重复声明 3.不存在变量提升 4.暂时性死区 5.块级作用域   以上特性跟let声明一样,特性可看 let 的学习笔记:链接跳转 ...

  10. 设计模式之:抽象工厂模式AbstractFactoryPattern的实现

    相比于工厂模式,抽象工厂模式的每个工厂可以创建产品系列,而不是一个产品: 抽象工厂用到的技术:接口.多态.配置文件.反射: 抽象工厂模式的设计原则: 实现客户端创建产品和使用产品的分离,客户端无须了解 ...