《深入理解计算机系统》第一章学习笔记

信息就是位+上下文

源程序:就是一个由0和1组合的位(bit)序列,8位组成一字(byte),每个字节表示某个文本字符。

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

C语言的起源:

由Dennis Ritchie在1969年~1973年创建的。

美国国家标准学会(American National Standards Institute,ANSI)在1989年颁布了ANSI C标准,后来由国际标准化组织(International Standards Organization,ISO)负责C语言的标准化工作。

Kernaghan和Ritchie合著的经典书被程序“K&R”。

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

为了在系统上运行hello.c程序,每条C语句都被编译器转化成一系列的低级机器语言指令。然后这些指令按照一种称为可执行目标程序的格式打好包,并以二进制磁盘文件的形式存放起来。目标程序也称为可执行目标文件。

代码-hello.c文件:

#include <stdio.h>

int main()
{
    printf("hello world\n");
}

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

unix> gcc -o hello hello.c

系统的硬件组成

总线

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

传送定长的字节块 , 也就是字 ( word )。

现在的大多数机器字长有的是 4 个字节 ( 32 位 ), 有的是 8 个字节 ( 64 位 )。

假设字长为 4 个字节 , 并且总线每次只传送 1 个字。

I/O设备

每个 I/O 设备都通过一个控制器或适配器与 I/O 总线相连 。

控制器和适配器之间的区别主要在于它们的封装方式 。

控制器:置于 I/O 设备本身的或者系统的主印制电路板 ( 通常称为主板 ) 上的芯片组 ;

适配器:则是一块插在主板插槽上的卡。

主存

主存是一个临时存储设备 , 在处理器执行程序时 , 用来存放程序和程序处理的数据。

物理上,是一组动态随机存取存储器 ( DRAM )芯片。

逻辑上 , 是一个线性的字节数组 , 每个字节都有其唯一的地址 ( 即数组索引 ), 这些地址是从零开始的。

例如 , 在运行 Linux 的 IA32 机器上 , short 类型的数据需要 2 个字节 , int 、 float 和 long 类型需要 4 个字节 , 而 double 类型需要 8 个字节 。

处理器

中央处理单元 ( CPU ), 简称处理器 , 是解释 ( 或执行 ) 存储在主存中指令的引擎 。

处理器的核心是一个字长的存储设备 (或寄存器), 称为程序计数器( PC )。在任何时刻 , PC都指向主存中的某条机器语言指令 (即含有该条指令的地址)。

CPU 在指令的要求下可能会执行以下操作 :

加载:把一个字节或者一个字从主存复制到寄存器 , 以覆盖寄存器原来的内容。

存储:把一个字节或者一个字从寄存器复制到主存的某个位置 , 以覆盖这个位置上原来的内容 。

操作: 把两个寄存器的内容复制到ALU, ALU 对这两个字做算术操作, 并将结果存放到 一个寄存器中 , 以覆盖该寄存器中原来的内容 。

跳转:从指令本身中抽取一个字, 并将这个字复制到程序计数器(PC) 中 , 以覆盖 PC中原来的值。

存储设备形成层次结构

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

时间: 2024-12-20 22:53:29

《深入理解计算机系统》第一章学习笔记的相关文章

【tapestry3笔记】--tapestry 初探,《 tapestry in action 》第一章学习笔记

由于要维护一个项目,要用到tapestry3这个老框架,虽然这个框架很老,但是在我看来ta的思想还是很先进的---面向组件编程. 由于网上资料少的可怜,辛苦找了很久终于找到一本名为<tapestry in action>的工具书,以下学习笔记均以此书为参考. 正文---tapestry初探 tapestry in action 第一章学习笔记 tapestry是一款以组件为核心的开发框架,组件就向一个黑盒子,我们无需关系组件是如何实现的,只需合理使用即可.这有点像jquery的插件,我们无需关

headfirst python第一章初始python速记卡

headfirst python这本书非常不错,但是很多人没耐心读,出的速记卡,有用的尽管下载headfirst python第一章初识python速记卡.rar原书下载HeadfirstPython.pdf 原文地址:https://blog.51cto.com/382392/2386391

《HeadFirst Python》第一章学习笔记

对于Python初学者来说,舍得强烈推荐从<HeadFirst Python>开始读起,这本书当真做到了深入浅出,HeadFirst系列,本身亦是品质的保证.这本书舍得已在<Python起步:写给零编程基础的童鞋>一文中提供了下载.为了方便大家的学习,舍得特意制作了Jupyter Notebook格式的笔记,文章末尾舍得提供了笔记的下载地址. 读<HeadFirst Python>的同时,最紧要的是及时做练习,你甚至可以在快速浏览过一章后,便拿起练习来做. 做练习的时候

Python 第一周学习笔记

1.Python 解释器 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:Tian Ba Python3 字符集默认支持中文 2.变量定义的规则: .变量名只能是字母.数字或下划线的任意组合 .变量名的第一个字符不能是数字 3.字符串 所有带引号的都是字符串,包含(单引号,双引号,三引号) 4.注释 当行注释:#被注释内容 多行注释:"""被注释内容"""  (可以是单引号或者是双引号)

java第一章学习笔记

关于疯狂的java笔记 这本还是可以的,说的很细致,但是有一点让我很头疼,有一种感觉是作者和我一人一台电脑,我们 的画面是一样的,然后他给我介绍如何处理,可是看书的时候,我并没有电脑显示同步的画面,比如书中例举出来的当前目录, 谁知道你在说什么,还是要结合着视频学习. 2.我今天学会的东西 配置path:让java的bin目录下的运行程序在cmd的任何目录下都可以直接调用, 方法是设定好环境变量,可以设置系统环境变量也可以设置用户环境变量.效果基本一样. 需要补充的是如果使用他人的电脑可以在cm

python第一天学习笔记

Python编程 本实验使用Ubuntu系统 Python官网下载 www.python.org Ubuntu官网下载 www.ubuntu.org.cn [email protected]:~$ python–V         //查看python版本 Python 2.7.6 本实验适用python版本为2.6.2.7 编程风格: 语法要求:统一缩进 变量:标识符第一个字符必须是字母表中的字母或下划线,标识符由下划线.字母.数字组成,标识符对大小写敏感 [email protected]:

Python第一周 学习笔记_待补充(3)

Python内置数据结构 一.数值型 1.数据类型分类: int:整数 python3的int就是长整型,且没有大小限制,受限于内存区域的大小int(x) 返回一个整数 float:浮点数 有整数部分和小数部分组成.支持十进制和科学计数法表示.只有双精度型.float(x) 返回一个浮点数 complex:复数 有实数和虚数部分组成,实数和虚数部分都是浮点数,3+4.2Jcomplex(x).complex(x,y) 返回一个复数 bool:布尔 int的子类,仅有2个实例True.False对

Python第一周 学习笔记(2)

习题解析 0.打印10以内偶数:位运算 for i in range(10): if not i & 0x01: print(i) 1.给定一个不超过5位的正整数,判断其有几位(使用input函数) 方法一:正常逻辑处理 a = int(input("Please enter a numer: ")) if a < 0: print('Error') if a < 10: print(1) elif a < 100: print(2) elif a <

《Linux内核设计与实现》第一、二章学习笔记

<Linux内核设计与实现>第一.二章学习笔记 姓名:王玮怡  学号:20135116 第一章 Linux内核简介 一.关于Unix ——一个支持抢占式多任务.多线程.虚拟内存.换页.动态链接和TCP/IP网络的现代化操作系统 1.主要发展过程   1969年,贝尔实验室的程序员们设计了一个文件系统原型,最终发展演化成了Unix 1971年,Unix被移植到PDP-11型机中 1973年,整个Unix系统使用C语言进行重写,为后来Unix系统的广泛移植铺平了道路 Unix第六版(V6)被贝尔实