一、信息就是位+上下文:系统中的所有信息(包括磁盘文件、内存中的程序、网络上传送的数据),都是由一串比特表示,根据上下文对这些比特表示进行翻译。

二、C程序编译过程

  1.源码结构

  

// test.c
#include <stdio.h>
#include "mymath.h"// 自定义头文件
int main(){
int a = 2;
int b = 3;
int sum = add(a, b);
printf("a=%d, b=%d, a+b=%d\n", a, b, sum);
}
// mymath.h
#ifndef MYMATH_H
#define MYMATH_H
int add(int a, int b);
int sub(int a, int b);
#endif
// mymath.c
#include<mymath.h>
int add(int a, int b){
return a+b;
}
int sub(int a, int b){
return a-b;
}

  2.编译流程

  

  a.预处理:进行宏替换、include文件展开等工作

  命令:gcc -E -I./inc test.c -o test.i

  观察:对include内容进行展开,从几行程序扩展成为800+行程序,如将#include<mymath.h>这行代码展开为mymath.h文件中的具体内容,仍然为C语言程序

  

  b.编译:将预处理后的程序编译为汇编代码

  命令:gcc -S -I./inc test.c -o test.s

  结果:

  

  c.汇编:将汇编代码翻译为机器码,每一个源文件均会生成一个.o文件(可重定位目标文件)

  命令:gcc -c test.s -o test.o

  d.链接:多个目标文.o以及所需的库文件(.so等)链接成最终的可执行文件

  命令:ld -o test.out test.o inc/mymath.o  ...libraries...

  可替换命令:gcc -o test.out test.o inc/mymath.o

  静态链接与动态链接:

  • 静态链接:函数代码将从其所在的静态链接库中被拷贝到最终的可执行程序中。
  • 动态链接:链接程序此时所做的只是在最终的可执行程序中记录下共享对象的名字以及其它少量的信息,在可执行程序被执行时,动态链接库(.so)的全部内容将被影射到运行时相应进程的虚拟地址空间。动态链接程序将根据可执行程序中记录的信息找到对应的函数代码。

  

三、典型系统硬件组成

  1.PC:程序计数器指向主存中某条机器指令(包含该指令的地址)

  2.寄存器:每个寄存器都有固定的名字

  3.CPU在PC指向指令的要求下可能执行加载、存储、操作、跳转等操作

  4.处理器是指令集架构的简单实现

  

四、cache

  1.局部性原理:程序具有访问局部区域里的数据和代码的趋势,通过在缓存中存放经常访问的数据,大部分内存操作都能在cache中完成

  2.L1缓存访问速度与寄存器几乎一样快,比L2高5倍,L2比主存快5-10倍

  

五、进程切换

  1.上下文切换:进程所需的所有状态信息进行切换,需要通过系统调用

  

六、虚拟内存

  1.虚拟内存:为每个进程提供抽象,即每个进程都在独占的使用主存,每个进程看到的内存是一致的,称为虚拟内存空间

  2.基本思想:把一个进程虚拟内存的内容存储在磁盘上,然后用主存作为磁盘的高速缓存

  

七、并发

  1.线程级并发

  超线程:一个CPU执行多个控制流

  

  2.指令级并行:每个时钟周期执行多条指令(指令流水线)

  3.SIMD:单指令、多数据

参考:

  https://www.cnblogs.com/CarpenterLee/p/5994681.html

CSAPP:第一章学习笔记:斗之气1段的更多相关文章

  1. Spring实战第一章学习笔记

    Spring实战第一章学习笔记 Java开发的简化 为了降低Java开发的复杂性,Spring采取了以下四种策略: 基于POJO的轻量级和最小侵入性编程: 通过依赖注入和面向接口实现松耦合: 基于切面 ...

  2. Day1 《机器学习》第一章学习笔记

    <机器学习>这本书算是很好的一本了解机器学习知识的一本入门书籍吧,是南京大学周志华老师所著的鸿篇大作,很早就听闻周老师大名了,算是国内机器学习领域少数的大牛了吧,刚好研究生做这个方向相关的 ...

  3. [蛙蛙推荐]SICP第一章学习笔记-编程入门

    本书简介 <计算机程序的构造与解释>这本书是MIT计算机科学学科的入门课程, 大部分学生在学这门课程前都没有接触过程序设计,也就是说这本书是针对编程新手写的. 虽然是入门课程,但起点比较高 ...

  4. 《Django By Example》第一章 学习笔记

    首先看了下目录,在这章里 将会学到 安装Django并创建你的第一个项目 设计模型(models)并且生成模型(model)数据库迁移 给你的模型(models)创建一个管理站点 使用查询集(Quer ...

  5. 《Java基础教程》第一章学习笔记

    Java 是什么呀! 计算机语言总的来说分成机器语言,汇编语言,高级语言.其中Java一种高级计算机语言,它是一种可以编写跨平台应用软件,完全面向对象的程序设计语言. Java划分为三个技术平台,Ja ...

  6. 【Python自然语言处理】第一章学习笔记——搜索文本、计数统计和字符串链表

    这本书主要是基于Python和一个自然语言工具包(Natural Language Toolkit, NLTK)的开源库进行讲解 NLTK 介绍:NLTK是一个构建Python程序以处理人类语言数据的 ...

  7. <<学会提问>>第一章学习笔记

    中国应不应该现在取消死刑? 中医是不是伪科学? 读书无用论? 集体主义和团队精神? 欧洲难民危机,你是支持接收难民,还是反对? 欧洲白左是不是幼稚圣母,抑或是右派种族歧视,顽固保守? 如何看待&quo ...

  8. Scala第一章学习笔记

    面向对象编程是一种自顶向下的程序设计方法.用面向对象方法构造软件时,我们将代码以名词(对象)做切割,每个对象有某种形式的表示服(self/this).行为(方法).和状态(成员变量).识别出名词并且定 ...

  9. JAVA编程思想学习笔记7-chap19-21-斗之气7段

    1.枚举 2.内置三种注解 @Override @Deprecated @SuppressWarnings 3.元注解:用于注解其它注解 4.注解处理器:通过反射 5.创建线程的两种方式 实现Runn ...

随机推荐

  1. Swift GCD的使用1

    typealias Task = (cancel : Bool) -> () func delay(time : NSTimeInterval, task : () -> ()) -> ...

  2. 代码生成工具更新--快速生成Winform框架的界面项目

    在之前版本的代码生成工具Database2Sharp中,由于代码生成都是考虑Winform和Web通用的目的,因此Winform界面或者Web界面都是单独生成的,在工具中生成相应的界面后,复制到项目里 ...

  3. JavaEE 之 SpringBoot

    1.Springboot a.定义:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程 b.约定目录结构:(Maven的资源文件目 ...

  4. python3 使用代理

    #代理使用 >>> proxy_handler=urllib.request.ProxyHandler({'http':'211.81.31.18:8081'}) >>& ...

  5. Android系统层次解析

    目标:从宏观上解释Android整个系统结构 来源: <Android4高级编程> 目录: 1. Android软件栈结构 一.Android软件栈结构 Android软件栈分为四个结构: ...

  6. BOM 浏览器对象模型_同源限制

    “同源政策”(same-origin policy) 浏览器安全的基石 协议相同 域名相同 端口相同 1995年,同源政策由 Netscape 公司引入浏览器.目前,所有浏览器都实行这个政策 A 网页 ...

  7. React 面向组件化编程 - 封装了webpack - npm run build 产生的包的 /static 引用路径问题

    React 面向组件化编程 面向对象 ----> 面向模块 ----> 面向组件 套路: 注意: 组件名必须大写开头: 只能有一个根标签: <input />虚拟DOM 元素必 ...

  8. prometheus + grafana + node_exporter + alertmanager 的安装部署与邮件报警 (一)

    大家一定要先看详细的理论教程,再开始搭建,这样报错后才容易找到突破口 参考文档 https://www.cnblogs.com/afterdawn/p/9020129.html https://www ...

  9. 一个bat病毒分析(part1)

    之前没学过bat,这里借分析顺便学一波,分析过程可能有点啰嗦 这里的@echo off关闭回显,病毒一般都是隐秘的执行的,然后setlocal enabledelayedexpansion是设置本地变 ...

  10. JMeter参数化中存在逗号的解决方法

    在Jmeter中通过CSV Data Set Config进行参数化时,如果参数化数据中存在逗号(,)我们可以通过一下方式进行设置 如何存在中文乱码,可以设置file encoding:gb2312