PG电子(中国)官方网站手绘图解计算机基础计算机芯片,central processsing unit,由数十亿个微型晶体管构建,来执行计算内存中的程序
核心是从程序或应用程序获取指令并计算:提取(RAM中:随机存取存储器Random Access Memory,主存/内存,与cpu直接交换,可以随时读写,速度快,作为系统和程序的临时数据存储介质),解码,执行
主存通过控制芯片与cpu相连,每个字节byte带有一个地址编号,cpu通过地址从主存中读取数据,指令或者写入
内部结构:控制单元(提取解码)和算术逻辑单元(alu,处理算术和逻辑运算),功能来看由寄存器,,运算器和时钟四部分组成,通过电信号连通
最初:机器语言(二进制)(过程为反汇编)=汇编语言(assembly)=c,c++,java高级语言=编译转换为汇编语言=经汇编器转换为机器语言(过程为汇编)
程序计数器:储存下一条指令所在单元的地址,由执行,地址0100是程序运行的起始位置,程序计数器控制程序的流程
标志寄存器:保存累加寄存器的运算结果,,负责溢出和奇偶校验;程序比较的指令,实际是在cpu做减法运算
函数调用机制:通过吧程序计数器的值设定为函数存储的地址来实现,调用和返回的指令:call,return
栈(stack):采用LIFO(last in first out)即先进后出的方式对内存进行操作,比如一个书箱,最后放的先拿,操作为压入(push)和弹出(pop)
队列:先进先出FIFO(first in first out),如景区买票,先到先得;写入(入队)为enqueue(),读取(出队)为dequeue();队列的实现有顺序队列和循环队列两种,循环队列一般以环状缓冲区(ring buffer)方式实现(头尾相连),来缓存数据流
链表:在数组基础上,元素附带下一个元素的索引;不用考虑索引顺序就可以元素读写,高效添加删除(链表的添加不涉及数据移动,而数组涉及到移动,所以较慢,通常用数组检索,链表添加和删除)
ic就是集成电路(integrated circuit),ic元件两侧就是引脚,有0v和5v两种电压,决定了计算机信息处理用0和1表示,一个引脚表示0或1;计算机最小单位是位/bit,8位二进制为一个字节(8bit),因为8位能涵盖所有字符编码
计算机位数表示处理位数,32位一次可以表示4个字节的二进制数,64位8个字节;一般开发中用十进制表示会转换为二进制处理
移位:左移右移,对应扩大缩小;左移时,无论图形或数值,移位后只需将地位补0,右移时,需要根据情况判断逻辑右移还是算术右移
常用压缩算法:RLE(run length encoding,行程长度编码),去重化文本,针对连续的字节序列压缩效果比较好;哈夫曼算法:多次出现的数据用小于8位的字节数表示,不常用的数据用超过8位的字节数表示(莫尔斯编码:高频率的字符用短编码表示); 哈夫曼算法:频率高的字符用尽量少的位数编码表示,用二叉树实现
早期的磁盘(soft disk,软盘),现在的磁盘(hard disk,硬盘),磁盘中存储的程序必须加载到内存中才能运行(负责解析和运行程序内容的cpu需要通过程序计数器来指定内存地址读出指令)
虚拟内存是内存和磁盘交互的第二个媒介,是指把磁盘一部分作为假想内存来使用(背景:程序占用内存大,空间不够),在硬盘上的形式是pagefile.sys页面;运行时虚拟内存和内存进行置换(swap)
置换方式:分页式(不考虑程序构造,按照固定大小切分,以页为单位,读到内存page in和写入磁盘page out);分段式
c语言和java主要区别是c需要人为控制释放内存空间(栈清理:把不需要的数据从接收和传递函数的参数时使用的内存上的栈区域中清理出去)
磁盘的物理结构:也就是磁盘存储数据的形式,划分空间有可变长方式(划分成长度可变的空间)和扇区方式(划分为固定长度的空间)两种,把磁盘表面划分为同心圆的空间是磁道,按照固定大小存储空间划分磁道的是扇区(物理读写的最小单位)
初期的操作系统=监控系统+基本的输入输出程序(后加硬件/程序控制系统,编程语言处理器(汇编,编译,解析)以及各种应用程序)
MS-DOS应用大多不经过操作系统直接控制硬件,Windows应用则基本都是由windows操作系统控制硬件
应用程序通过API向系统传递指令,外围设备的交互功能也是通过API提供的,不同操作系统间API差异也较大
API的实体是通过C编写的函数,通过DLL文件来提供;GUI(graphical User Tnterface)就是图形用户界面;通过wysiwyg实现打印输出;通过时钟分割(短时间间隔内,多个程序切换运行)实现多任务功能,底层是cpu时间切片,也是多线程多任务的核心
Unix系列操作系统FreeBSD中的Portsj机制,可以结合运行环境的硬件环境来编译应用的源代码,进而获得本地运行代码,会自动使用FTP(file transfer protocol,传送文件的协议)连接相应站点下载代码
虚拟机(Virtual Machine)是通过软件的具有完整硬件系统功能的,运行在一个完全隔离环境中的完整计算机系统
java编译后生成的不是特定的cpu本地代码,而是字节代码,直接代码的运行环境称为java虚拟机,它一边把java字节代码逐一转换为本地代码一边在运行着,可以实现相同的字节码在不同操作系统环境下运行
程序的运行环境,存在着名为BIOS(basic input/output system)的系统,存储在ROM中,是内置在计算机主机内部的程序,主要功能是键盘,磁盘,显卡控制,引导程序(存储在启动驱动器启示区域的小程序)
开机后,BOIS确认硬件是否正常,没有异常直接启动引导程序(把在硬盘等记录的OS加载到内存中运行)
中间件:处于操作系统和应用的中间层,操作系统和中间件组合称为系统软件,应用也可以使用中间件的功能
汇编语言是一种低级语言,符号语言,是第二代计算机语言,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址,编译器(汇编器)把汇编语言编写的源代码转换为本地代码,这个过程也叫汇编,本地代码转换为汇编代码的过程是反汇编(更困难:不一一对应),执行反汇编的程序是反汇编程序
c等高级语言写得程序为源代码(文本文件),通过对其进行编译,就可以得到本地代码,之后由CPU运行解释
操作码过程:本地代码加载到内存运行,内存中存储的构成本地代码的指令和数据,程序运行时CPU从内存把数据指令读出,放在cpu寄存器处理
cpu和寄存器关系:寄存器是cpu的存储区域,主要功能是临时存储,计算运算.x86系列主要种类:
局部变量是函数在处理期间临时保存在寄存器和栈中的,函数内部利用栈进行局部变量的存储(寄存器不足时)
多线程的核心是cpu待机和运行的切换,多线程处理运行一行代码时可能切换到其他线程,造成函数重复调用等bugs,可以采用C或函数禁止线程切换的锁定方法,保证线程安全
TextOut函数API向窗口和打印机输出字符,windows向cpu传递了指令,通过软件控制了硬件
IN,OUT指令支持硬件的输入和输出,IN指令通过指定的端口号输入数据,OUT指令把寄存器中的数据输出到指定端口号的端口
IO设备通过连接器(连接显示器和外围设备)内部用来交换计算机主体和外围设备间电流特性的IC(IO),IO有保存临时数据的内存(端口,也叫寄存器:区别于内存的寄存器,只是用来临时存储数据),IC中有多个端口,用端口号(IO地址)区分,IO可以控制多个设备,指令在端口号指定的端口和cpu进行数据传输,和通过内存地址对内存读写类似
实施中断请求的是连接外围设备的IO,负责实施中断处理的是cpu,中断来进行缓冲,中断时把寄存器的数值保存到内存栈中,中断程序完成后再还原到cpu寄存器,然后进行主程序处理
轮询:按照顺序检查外围设备的状态:提高系统效率,维持系统可靠正常工作;满足实时处理需求;提供故障现场处理手段