程序员必知的硬核知识大全 程序员必知的硬核知识大全 CPU是什么 CPU实际做什么 CPU的内部结构 CPU是寄存器的集合体 计算机语言 汇编语言 程序计数器 条件分支和循环机制 标志寄存器 函数调用机制 通过地址和索引实现数组 CPU指令执行过程 什么是内存 内存的物理结构 内存的读写过程 内存的现实模型 内存的使用 指针 数组是内存的实现 栈和队列 栈 队列 链表 二叉树 为什么用二进制表示 什么是二进制数 移位运算和乘除的关系 便于计算机处理的补数 算数右移和逻辑右移的区别 逻辑运算的窍门 认识压缩算法 文件存储 压缩算法的定义 几种常用压缩算法的理解 RLE算法的机制 RLE算法的缺点 哈夫曼算法和莫尔斯编码 用二叉树实现哈夫曼算法 哈夫曼树能够提升压缩比率 可逆压缩和非可逆压缩 认识磁盘
程序不读入内存就无法运行 磁盘构件 磁盘缓存 虚拟内存 虚拟内存与内存的交换方式 节约内存 通过DLL文件实现函数共有 通过调用_stdcall来减少程序文件的大小 磁盘的物理结构 操作系统环境 Windows操作系统克服了CPU以外的硬件差异 不同操作系统的API差异性 FreeBSDPort帮你轻松使用源代码 可以使用虚拟机获取其他环境 提供相同运行环境的Java虚拟机 BIOS 和引导 操作系统功能的历史 要把操作系统放在第一位 系统调用和编程语言的移植性 操作系统和高级编程语言使硬件抽象化 Windows 操作系统的特征 32位操作系统 通过API函数集来提供系统调用 提供采用了GUI的用户界面 通过WYSIWYG实现打印输出 提供多任务功能 提供网络功能和数据库功能 通过即插即用实现设备驱动的自动设定 汇编语言和本地代码 通过编译器输出汇编语言的源代码 不会转换成本地代码的伪指令 汇编语言的语法是操作码操作数 指令解析 函数的调用机制 函数的内部处理 全局变量和局部变量 临时确保局部变量使用的内存空间 循环控制语句的处理 条件分支的处理方法 了解程序运行逻辑的必要性 应用和硬件的关系 支持硬件输入输出的IN指令和OUT指令 测试输入和输出程序 外围设备的中断请求 用中断来实现实时处理 利用DMA实现短时间内大量数据传输 文字和图片的显示机制
大家都是程序员,大家都是和计算机打交道的程序员,大家都是和计算机中软件硬件打交道的程序员, 大家都是和CPU打交道的程序员,所以,不管你是玩儿硬件的还是做软件的,你的世界都少不了计算 机最核心的-CPU CPU是什么 CPU的全称是CentralProcessingUnit,它是你的电脑中最硬核的组件,这种说法一点不为 过.
CPU是能够让你的计算机叫计算机的核心组件,但是它却不能代表你的电脑,CPU与计算机的 关系就相当于大脑和人的关系.
它是一种小型的计算机芯片,它嵌入在台式机、笔记本电脑或者平板电 脑的主板上.
通过在单个计算机芯片上放置数十亿个微型晶体管来构建CPU.
这些晶体管使它能够执 行运行存储在系统内存中的程序所需的计算,也就是说CPU决定了你电脑的计算能力.
CPU实际做什么 CPU的核心是从程序或应用程序获取指令并执行计算.
此过程可以分为三个关键阶段:提取,解码和 执行.
CPU从系统的RAM中提取指令,然后解码该指令的实际内容,然后再由CPU的相关部分执行 该指令.
RAM:随机存取存储器(英语:RandomAccessMemory,缩写:RAM),也叫主存,是与 CPU直接交换数据的内部存储器.
它可以随时读写(刷新时除外),而且速度很快,通常作为操 作系统或其他正在运行中的程序的临时数据存储介质
CPU的内部结构 说了这么多CPU的重要性,那么CPU的内部结构是什么呢?
又是由什么组成的呢?
下图展示了一般 程序的运行流程(以C语言为例),可以说了解程序的运行流程是掌握程序运行机制的基础和前提.
1.程序员用C语言等高级语言编写的程序 4.CPU解释井执行程序内容 inta a=12 CPU printf("%d" a) 2.程序编译后转换成机器语言的EXE文件 3.程序运行时,在内存中生成EXE副本 0101010100001111 11101010... 内存 程序编译执行的过程 在这个流程中,CPU负责的就是解释和运行最终转换成机器语言的内容.
CPU主要由两部分构成:控制单元和算术逻辑单元(ALU) 控制单元:从内存中提取指令并解码执行 算数逻辑单元(ALU):处理算数和逻辑运算 CPU是计算机的心脏和大脑,它和内存都是由许多晶体管组成的电子部件.
它接收数据输入,执行指 令并处理信息.
它与输入/输出(I/O)设备进行通信,这些设备向CPU发送数据和从CPU接收数 据.
从功能来看,CPU的内部由寄存器、控制器、运算器和时钟四部分组成,各部分之间通过电信号连 通.
CPU 控制器 寄存器1 运算器 寄存器2 时钟 寄存器n CPU内部结构图 寄存器是中央处理器内的组成部分.
它们可以用来暂存指令、数据和地址.
可以将其看作是内存 的一种.
根据种类的不同,一个CPU内部会有20-100个寄存器.
控制器负责把内存上的指令、数据读入寄存器,并根据指令的结果控制计算机 运算器负责运算从内存中读入寄存器的数据 时钟负责发出CPU开始计时的时钟信号 接下来简单解释一下内存,为什么说CPU需要讲一下内存呢,因为内存是与CPU进行沟通的桥梁.
计算机程序的运行都是在内存中运行的,内存又被称为主存,其作用是存放CPU中的运算数 据,以及与硬盘等外部存储设备交换的数据.
只要计算机在运行中,CPU就会把需要运算的数据调到 主存中进行运算,当运算完成后CPU再将结果传送出来,主存的运行也决定了计算机的稳定运行.
主存通过控制芯片与CPU进行相连,由可读写的元素构成,每个字节(1byte=8bits)都带有一个地 址编号,注意是一个字节,而不是一个位.
CPU通过地址从主存中读取数据和指令,也可以根据地址 写入数据.
注意一点:当计算机关机时,内存中的指令和数据也会被清除.
CPU是寄存器的集合体 在CPU的四个结构中,我们程序员只需要了解寄存器就可以了,其余三个不用过多关注,为什么这 么说?
因为程序是把寄存器作为对象来描述的.
说到寄存器,就不得不说到汇编语言,我大学是学信息管理与信息系统的,我就没有学过汇编这门课 (就算有这门课也不会好好学hhhh),出来混总是要还的,要想作为一个硬核程序员,不能不了解这些 概念.
说到汇编语言,就不得不说到高级语言,说到高级语言就不得不牵扯出语言这个概念.
计算机语言 我们生而为人最明显的一个特征是我们能通过讲话来实现彼此的交流,但是计算机听不懂你说的话,你 要想和他交流必须按照计算机指令来交换,这就涉及到语言的问题,计算机是由二进制构成的,它只能 听的懂二进制也就是机器语言,但是普通人是无法看懂机器语言的,这个时候就需要一种电脑既能识 别,人又能理解的语言,最先出现的就是汇缩语言.
但是汇编语言晦涩难懂,所以又出现了像是C, C,Java的这种高级语言.
所以计算机语言一般分为两种:低级语言(机器语言,汇编语言)和高级语言.
使用高级语言编写的程 序,经过编译转换成机器语言后才能运行,而汇编语言经过汇编器才能转换为机器语言.