用Google搜异常信息,肯定都访问过Stack Overflow网站 全球最大的程序员问答网站,名字来自于一个常见的报错,就是栈溢出(stack overflow) 从函数调用开始,在计算机指令层面函数间的相互调用是怎么实现的,以及什么情况下会发生栈溢出 1 栈的意义 先看一个简单的C程序 function.c 直接在Linux中使用GCC编译运行 [hadoop@JavaEdge Documents]$ vim function.c [hadoop@JavaEdge Documents]$…
程序 = 算法 + 数据结构 对应到计算机的组成原理(硬件层面) 算法 --- 各种计算机指令 数据结构 --- 二进制数据 计算机用0/1组成的二进制,来表示所有信息 程序指令用到的机器码,是使用二进制表示的 存储在内存里面的字符串.整数.浮点数也都是用二进制表示的 万物在计算机里都是0和1,搞清楚各种数据在二进制层面是怎么表示的,是我们的必修课. 在实际应用中最常遇到的问题,也就是文本字符串是怎么表示成二进制的,特别是我们会遇到的乱码究竟是怎么回事儿 在开发的时候,所说的Unicode和UT…
既然程序最终都被变成了一条条机器码去执行,那为什么同一个程序,在同一台计算机上,在Linux下可以运行,而在Windows下却不行呢? 反过来,Windows上的程序在Linux上也是一样不能执行的 可是我们的CPU并没有换掉,它应该可以识别同样的指令呀!!! 如果你和我有同样的疑问,那这一节,我们就一起来解开. 1 编译.链接和装载:拆解程序执行 写好的C语言代码,可以通过编译器编译成汇编代码,然后汇编代码再通过汇编器变成CPU可以理解的机器码,于是CPU就可以执行这些机器码了 你现在对这个过…
人用纸和笔来做运算,都是用十进制,直接用十进制和我们最熟悉的符号不是最简单么? 为什么计算机里我们最终要选择二进制呢? 来看看,计算机在硬件层面究竟是怎么表示二进制的,你就会明白,为什么计算机会选择二进制. 1 怎么做到"千里传书" 马拉松的故事相信你听说过.公元前490年,在雅典附近的马拉松海边,发生了波斯和希腊之间的希波战争.雅典和斯巴达领导的希腊联军胜利之后,雅典飞毛腿菲迪皮德斯跑了历史上第一个马拉松,回雅典报喜.这个时候,人们在远距离报信的时候,采用的是派人跑腿,传口信或者送信…
1. 存储管理的基本概念 逻辑地址:用户地址,从零开始编号 一维逻辑地址:(地址) 二维逻辑地址:(段号: 段内地址) 主存储器的复用方式 按分区:主存划分为多个固定/可变分区,一个程序占一个分区 按页架:主存划分为多个固定页架,一个程序占多个页架 存储管理的模式 单连续:一维逻辑地址程序,占一个固定/可变分区 段   式:二维逻辑地址程序,占多个可变分区 页   式:一维逻辑地址程序,占多个页架 段页式:二维逻辑地址程序,占多个页架 地址转换:逻辑地址 --> 物理地址 静态重定位:程序装入内…
1. 计算机软硬件系统 冯诺伊曼结构 以运算单元为核心,控制流由指令流产生 程序和数据存储在主存中 主存是按地址访问,线性编址 指令由操作码和地址码组成 数据以二进制编码 其他:参考<重学计算机-计算机组成原理> 2. 计算机操作系统的发展 概述:任何一台机器都有其操作平台和操作系统 洗衣机:开关表示.按钮控制.亮灯显示 演进过程 手工操作:手动调动地址和数据按钮录入内存,然后点运行 引进装入程序:用卡片和纸带,通过ROM上的装入程序载入内存 汇编语言:对指令提供了助记符号 高级语言:面向问题…
1. IO的控制方式 演进过程:轮询 --> 中断 --> DMA --> IO通道 经典布局:南北桥 PS:详见<计算机组成原理> 2. IO的实现 软件实现层次:硬件 --> 中断处理程序 --> 设备驱动程序 --> 独立于设备的IO软件 --> 用户空间的IO软件 IO缓冲: 解决问题: 设备与CPU速度不匹配 逻辑记录大小和物理记录大小不一致 减少IO操作对CPU的中断次数 实现:缓冲区 内存中开辟一个专门临时存放IO数据的区域 分类:单缓冲…
1. 输入输出系统概述 组成:外设.接口.总线.管理软件 基本功能 完成计算机内外的信息传递 保证CPU正确选择输出设备 利用缓冲等,实现主机与外设的速度匹配 特点:异步性.实时性.设备无关性 输入过程:CPU把地址值放入总线 --> CPU等候设备数据有效 --> CPU从总线读入数据存入寄存器 输出过程:CPU把地址值放入总线 --> CPU把数据值放入总线 --> 设备等数据有效取走数据 IO系统性能:存储IO.通信IO 连接特性:哪些设备可以和IO相连 IO系统容量:IO系…
1. 系统总线的特性及应用 总线概念:将计算机系统中各部件连接起来 总线分类:(外部/内部,系统/非系统,串行/并行,同步/异步...) 按用途分类: 存储总线:cpu与存储器 系统总线:连接存储总线和IO总线的中间总线 IO总线:连接外部设备 按位置分类: 外部总线:USB,火线(IEEE1394) 内部总线:PCI(连网卡),AGB(连显卡) (芯)片内总线:AMBA(ARM处理器) 按组成分类 数据总线:传数据,双向三态 地址总线:传地址,单向三态 控制总线:控制信号和时序信号 电源线和地…
1. 指令系统基本概念 指令集:一台机器所有指令的集合.系列机(同一公司不同时期生产):兼容机(不同公司生产) 指令字长:指令中包含的二进制位数,有等长指令.变长指令. 指令分类 根据层次结构:高级.汇编.机器.微指令 根据地址码字段个数:零.一.二.三地址指令 根据操作数物理位置 存储器-存储器(SS) 寄存器-寄存器(RR) 寄存器-存储器(RS) 根据指令功能:传送.算术运算.位运算.控制转移 指令格式:操作码+数据源+寻址方式 2. 寻址方式 指令寻址方式:顺序寻址,跳跃寻址 操作数寻址…
1. 存储系统层次结构 主存速度缓慢的原因:主存增速与CPU不同步,执行指令期间多次访问主存 主存容量不足的原因: 存在制约主存容量的技术因素:如由CPU.主板等相关技术指标规定了主存容量 应用对主存容量需求不断扩大:window98 -- 8M,windows 8 -- 1G -----> 存储体系结构化层次:  CPU -- Cache1 -- Cache2(解决速度) -- 主存 -- 辅存(解决容量) 存储体系结构化层次理论基础: 时间局部性:程序体现为循环结构 空间局部性:程序体现为顺…
1.基本概念 真值:+0101,-0100:机器数: [x]原=0101 2.几种机器数 原码:x = -0101,[x]原 = 1101 反码:x = -0101,[x]反 = 1010 补码:x = -0101,[x]补 = 1011 移码:x = -0101,[x]移 = 2^n + x = 0011 PS:这里说说对补码与移码自己的理解.补码是为了化减法为加法方便计算机设计运算,移码是为了方便比较大小,用在浮点数的阶码中. 补码——任何一个有模的系统中,减法都可以通过加其补码来表示.最简…
1.冯诺依曼计算机组成 主机(cpu+内存),外设(输入设备+输出设备+外存),总线(地址总线+数据总线+控制总线) 2.计算机层次结构 应用程序-高级语言-汇编语言-操作系统-指令集架构层-微代码层-硬件逻辑层 3.计算机性能指标 非时间指标 [字长]机器一次能处理的二进制位数 ,常见的有32位或64位 [总线宽度]数据总线一次能并行处理的最大信息位数,一般指运算器与存储器之间的数据总线的位数 [主存容量]主存的大小 [存储带宽]单位时间内与主存交换的二进制位数 B/s 时间指标 [主频f]时…
1. 并发程序的基本概念 程序顺序性 内部顺序性:CPU严格按照顺序执行指令 外部顺序性:程序员设计程序时往往用顺序设计的思想 顺序程序特性 程序执行的顺序性 计算环境的封闭性: 程序执行时犹如独占资源 计算结果的确定性 计算过程的可再现性 并发进程 无关的并发进程:一组并发进程,在不同变量集上运行 交往的并发进程:一组并发进程,共享某些变量,相互影响 并发进程制约关系 进程互斥:争夺某一个资源 进程同步:共同完成某一个任务,协调先后顺序 发生问题: 与时间有关的错误:结果错误.永远等待 临界区…
1. 文件系统 文件系统概述 文件的组织: 逻辑结构:流式.记录式 物理结构:顺序.连接.直接.索引 文件的存取:顺序.直接.索引 文件的控制:逻辑控制.物理控制 文件的使用:打开.关闭.读.写.控制 文件的存储 块:存储介质上连续存储的区域,是主存与辅存信息交换的单位 顺序存取设备:光盘.磁带 直接存取设备:磁盘 2. 文件 文件的逻辑结构 流式文件:只是由一段字节序列构成的 记录式文件:有含义有结构的信息,比如员工工资记录 文件的物理机构 顺序文件:块块之间相连,批处理文件和系统文件一般都这…
1. 指令与处理器模式 指令执行周期:取指.译码.执行 指令分类(根据权限) 特权指令:只能被操作系统内核使用(启动IO,置PC值) 非特权指令:所有程序都能使用 处理器模式: 共有四种:0内核模式,1系统调用,2共享库程序,3用户模式 一般来说:只有0内核模式(能执行全部指令)和3用户模式(只能执行非特权指令) 模式切换: 用户模式 --> 内核模式(系统调用.异常.响应中断) 内核模式 --> 用户模式(中断返回指令) 2. 中断 概念: 操作系统是中断驱动的.即中断是激活操作系统的唯一方…
1. CPU的组成与功能 2. 数据通路 概念:执行部件间传送信息的路径,分共享通路(总线)和专用通路 抽象模型:时钟驱动下,A --> 组合逻辑 --> B D触发器定时模型: 时钟触发前要稳定一段时间:建立时间(Setup Time) 时钟触发后要稳定一段时间:保持时间(Hold Time) 时钟触发到输出稳定的时间:触发器延迟(Clk_to_Q) 与时钟周期的关系: 时钟周期 > Clk_to_Q + 关键路径时延 + Setup Time Clk_to_Q + 最短路径时延 &g…
1. 定点数运算及溢出 定点数加减法:减法化加法,用补码直接相加,忽略进位 溢出:运算结果超出了某种数据类型的表示范围 溢出检测方法:统一思想概括为正正得负或负负得正则溢出,正负或负正不可能溢出 方法1:V = XYS + XYS(XY为两个加数的符号位,S为结果的符号位,_表示非),那么V = 1则为溢出 方法2:V = C0 ⊕ C1(C0是最高数据位产生的进位,C1是符号位产生的进位),那么V = 1则为溢出 方法3:V = Xf1 ⊕ Xf2(数据采用变型补码 Xf1Xf2 X0X1X2…
1.封装 import java.util.Date; public class Human { protected String name; protected BirthDay birthDay; protected String sex; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return…
总算解决一大心头之患了,比想象中容易,通宵两夜,刷完了十个实验,这个实验就是最后的了.感慨颇多.特地写篇总结. 想做一件事,就立马去做把.你会发现没那么困难,往往最大的困难,是心里的困难. 培养了HDL(Hardware Description Language)思维,并行,串行混合.它先是一个电路,再才是一个程序,电路为主,程序为辅,用RTL的思维去思考. 这个实验也不怎么难,就是一个大的模拟题,当年ACM给我良好的代码功底受益颇多. 能硬件级别揣摩CPU的一点点运行方式,但是还有很多疑问,需…
第一题 .data outputd: .asciiz "Alpha","November","First","alpha","november","Bravo","Oscar","Second","bravo","oscar","China","Paper","…
Linux入门 linux简介   学习目的:linux服务器操作系统稳定长期运行,python,pycharm装于linux上 linux系统组成 应用软件:调用系统软件接口 linux操作系统分两类:1)系统调用接口(调用内部接口),系统分组概念(1组,2组,3组): 2)内核:负责管理PC所有物理资源(硬件) 硬件 虚拟机如何建立:进入BIOS程序,设置intel中virtual technology:yes(允许建立虚拟机) 如何对linux系统盘(20GB)进行分区:一般根目录(/bo…
1.什么是C语言 C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点.计算机语言是从第二次世界大战以后,经历了戏剧性的发展过程.从机器语言到汇编语言和高级语言.C语言是与硬件无关的,并且有许多独特的优点. 2.为什么使用C语言 C语言是一种融合了控制特性的现代语言,在现在的计算机科学的理论和实践中,控制特性是很重要的.其设计使得用户可以自然地采用自定向下的规划.结构化的编程.,以及模块化得设计,这样的编程可以使得编写出来的程序更可靠,更易懂.因为C语言具有设计特性.高效…
首先通过一段代码进入讨论的主题 var r = new Promise(function(resolve, reject){ console.log("a"); resolve() }); setTimeout(()=>console.log("d"), 0) r.then(() => console.log("c")); console.log("b") // a b c d 了解过 Promise 对象的都知道…
(实验五  CPU组成与指令周期实验) 课程 计算机组成原理实验 实验日期 2015 年 12 月  8 日 一.实验目的 1.将微程序控制器同执行部件(整个数据通路)联机,组成一台模型计算机. 2.用微程序控制器控制模型计算机的数据通路. 3.通过TEC-5执行由8条机器指令组成的简单程序,掌握机器指令与微指令的关系,牢固建立计算机的整机概念. 二.实验内容 1. 实验电路图1 2.实验任务 (1)将下表5-1的程序按机器指令格式手工汇编成二进制机器代码(要求预习时完成). 表5-1 内存地址…
注意: 本文章为 <重学js之JavaScript高级程序设计>系列第五章[JavaScript引用类型]. 关于<重学js之JavaScript高级程序设计>是重新回顾js基础的学习. 1. 什么是面向对象 面向对象的语言有一个标志,那就是它们都有类的概念,而通过类可以创建任意多个具有相同属性和方法的对象.但是,再前面提到过.ES中没有类的概念,因此它的对象也与基于类的语言中的对象有所不同. 对象的定义:'无序属性的集合,其属性可以包含基本值.对象或者函数.' 严格来讲,这就相当…
计算机基础方面的知识,对于一些非科班出身的同学来讲,一直是他们心中的痛,而对于科班出身的同学,很多同学在工作之后,也意识到自身所学知识的不足与欠缺,想回头补补基础知识.关于计算机基础的课程很多,内容繁杂,但无论是相关书籍还是大学课程,都有点脱离工作.特别地,计算机基础知识体系庞杂,想要从零学习或者复习都耗时耗力. 有鉴于此,本系列文章将带你更快的补足编程必备基础知识,涵盖计算机领域三大基础知识:计算机组成原理.操作系统.计算机网络,这些都是大学计算机课程里面最重要的内容.文章对这些内容做了提炼和…
先放上链接吧,项目已经开始2周了:https://github.com/hellozhangran/happy-egg-server 想法 现在是2019年11月24日,还有人要开始学习Node.js吗? Node.js大概从2014年开始火热,现在搜一下学习教程,很多开源教程都是3~5年前写下的.再详细搜一下express.mongodb相关文章,时间点大部分也是2017,大量的Node.js开源项目也已经停更了.当年大家都在讨论Node.js为何这么火,而此刻我发现大家开始讨论为何Node.…
目录 文章目录 目录 前文列表 逻辑电路部件 组合逻辑电路 时序逻辑电路 阵列逻辑电路 中央处理器(CPU) 控制单元(控制器) 运算单元(运算器) 存储单元(寄存器组和片内缓存) CPU 的工作原理 时钟周期.机器周期.指令周期和总线周期 CPU 流水线 主流 CPU 指令集架构 CISC(复杂指令集计算机) x86 系列处理器 RISC(精简指令集计算机) ARM 系列处理器 PowerPC 系列处理器 MIPS 架构 RISC-V 架构 前文列表 <计算机组成原理 - 冯诺依曼体系结构>…
BS