自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(68)
  • 收藏
  • 关注

原创 计算机组成原理new15 磁盘

注:每个磁道含有的扇区的个数都是相同的,虽然看上去不同的扇区的大小不同,但是实际上每个扇区存储的数据都是相同的,这很好理解,因为磁盘的基本读取单位就是扇区,所以必须每个磁道的扇区大小都相同。固态硬盘内具有检测手段,会定义检测块的寿命和块内数据的用处,例如下图中两个块存储的是电影数据和游戏数据,固态硬盘在检测到以后,会发现存储游戏的块寿命比较短,而游戏数据经常需要写入,所以其会让两个块的内容进行一个交换,即让寿命较短的块存储尽可能是读的数据,寿命较长的块存储尽可能是写的数据。即n个盘,n/2盘都是拷贝。

2023-10-21 19:49:12 591

原创 计算机组成原理 new14 双端口RAM和多模块存储器

首先我们需要知道什么是程序的局部性原理:对于高位交叉编址和低位交叉编址来说,其中空间局部性都是能够满足的,但是时间局部性高位交叉编址无法满足,因为其存储单元是在相同的存储器芯片内连续存放,其每次读完一个存储单元都需要一段恢复时间,而低位交叉编址中,连续的存储单元在不同的存储器芯片,所以可以实现较短时间的访问连续的存储单元。而多模块存储器中,通过将数据放在不同的存储器芯片,可以使得宏观上不需要等待存储器芯片的恢复时间,可以更快的取出数据,所以对于存储器而言,吞吐率应该是取出数据的速度。

2023-10-21 19:49:01 1008

原创 计算机组成原理第三章 13 主存芯片的构成 主存和CPU之间的连接 字扩展和位扩展 $\color{red}{2^n}$

和主存内的译码器类似,在主存的译码器中,我们左边对应的是地址总线,右边对应的是字选线。需要非常注意的是,题目中的片选译码器可能不是一个3-8译码器之类的译码器,题目可能给了实际的电路,然后给了片选地址,让你分析这个片选地址是否合理:我们判断片选是否合理就是看片选经过电路以后,产生的0或者1信号是否能够导通一个芯片组,因为如果我们这个片选地址没法导通任何一个芯片,那就说明这个地址无效的,所以这类题目我们一般是通过电路然后根据片选地址判断出译码器得到的片选信号和芯片需要的片选信号是否相同。

2023-10-21 19:48:48 1674

原创 计算机组成原理第三章 new 12 DRAM和SRAM $\color{red}{Δ}$

DRAM的刷新操作是如何完成的?之前,我们说过n位的地址,需要n条地址线,

2023-10-21 19:48:16 1157

原创 计算机组成原理第三章 11 存储器的层次结构 存储器的分类 存储器的性能指标

因为在编址的时候,bios芯片也参与了主存的编址,也就是说通过寻址我们也是能够找到bios的,即ROM。固态硬盘的存储芯片用的也是闪存芯片,事实上SSD和U盘没什么区别,只不过固态硬盘内加了控制电路,其特性是速度快,功耗低(这里的功耗我们应该理解为机械硬盘寻址非常慢,需要读写头,定位盘片,扇区等操作,其读写需要花费的时间长,所以耗能就比较高),价格高但是(这里的价格我们应该使用固态硬盘和机械硬盘进行比较),寿命相比机械硬盘要短,因为每个页的擦除次数都是有限的,机械硬盘基本上可以一直使用。

2023-10-21 19:48:01 213

原创 计算机组成原理 new10 浮点数的运算和表示 $\color{red}{Δ}$

浮点数也是如此,因为浮点数的数值位的第一位必须是1,所以能够表示的最大的尾数肯定是小于0的,无论阶码多大,其也还是小于0,所以蓝色就是该浮点数能够表示的最大负数,蓝色到0之前是无法表示的负数,叫做负下溢。所以IEEE中进行了一定的优化:之前对于全0和全1的两种移码,我们是没有算进移码的表示范围的,因为全0和全1被特殊规定了:当为全0时,这时候尾数部分就没有存储的要求了,数值位最高可以是,并且没有隐含的1,但是还是0.xxxxx,通过阶码的最小值搭配尾数的最小值我们就可以得到浮点数表示的最小范围。

2023-10-21 19:47:38 202

原创 计算机组成原理 new09 定点数的移位运算

为何正数原码和反码的移位都是补0因为正数原码和反码的数值位具有权重。

2023-10-21 19:47:25 299

原创 计算机组成原理 new08 电路 $\color{red}{Δ}$

实际上在计算机中,加法和减法都是通过加法电路完成的,而加法电路的本质是使用异或门来完成,异或可以采用与或非电路完成。ALU内没有寄存器,ALU没有存储功能,所以ALU内没有寄存器这些东西,所以ALU需要搭配外部的寄存器完成运算功能。前面说的三种溢出电路,本质都是使用异或来进行溢出判断的。

2023-10-21 19:47:08 159

原创 计算机组成原理 new07 真值和机器数 无符号整数 定点整数 定点小数 $\color{red}{Δ}$

无符号整数:无符号整数即最高位不表示符号位,每一位都是数值位。定点整数:定点整数是纯整数,简单来说就是不含小数,小数点在数值位之后。若数据X的表示形式为X=x0x1x2xnx0​x1​x2​...xn​其中x0x0​是符号位,剩下的数值位x1x1​xnxn​是尾数,xnxn​为最低有效位。有符号整数分为:原码,反码,补码,移码。纯小数(假设机器字长为n+1位):当x≥0x≥0时,当x≥0x≥。

2023-10-21 19:46:55 691 1

原创 计算机组成原理 new06 第二章 BCD码

进制转换x进制:逢x进一任意进制转10进制权重*对应位置的数字逢x进一二进制->八进制三个二进制看作一组二进制转16进制八进制转二进制十六进制转二进制真值和机器数BCD码概念:在计算机中,除了能够用二进制表示十进制之外,在二进制的基础上还衍生出了很多种的表示方式这些种表示方式的统称就是BCD码。8421码概念:8421码用4位二进制来表示一个十进制位。在二进制中4位二进制能够表示0-15的数字,但是十进制每一位的范围是0-9。所以8421码会有10

2023-10-21 19:46:41 230

原创 计算机组成原理 new05 第二章01 R进制和十进制的转换

答案是一定是唯一的,因为任何的R进制本质都是逢R进一,也就是说任意R进制的排列组合本质都是从1开始指向无穷的,逐渐递增的,既然如此那对应的排列组合必须也是唯一的,也就是说一个排列组合对应了一个独立的数字,所以说我们使用拼凑法得到的数字也是唯一的,但是拼凑法一般用于二进制,因为二进制除了0就是1,而其他进制基本符号较多,所以难以进行拼凑,所以可以使用短除法,或者进行间接的转换(十进制先转二进制,二进制再转对应的R进制(这种方法在后面我们会介绍))基数:R进制每位最多使用到的不同符号的个数,R进制的基数为R。

2023-10-21 19:46:16 1109

原创 计算机组成原理 03 1.2.3 计算机的层次结构 编译程序 解释程序

虽然我们这里写的是编译程序和解释程序的运行速度,但是实际上应该理解为编译型语言的运行速度和解释型语言的运行速度,这里一个需要理解的词语是运行速度,对于解释型语言和编译型语言来讲两者对于这个词语的理解是不同的。这句话很好理解,从机器语言层高级语言层,随着编程语言的高级化,计算机的功能明显得到了扩展,所以上层是下层功能的扩展。对于编译型语言而言:编译型语言的运行的时候只需要运行可执行程序,所以说编译程序的运行时间就是程序运行的时间,其是不包含源文件编译变成可执行程序的编译时间的,其是实实在在的运行时间。

2023-10-21 19:45:52 289

原创 计算机组成原理new 22 指令流水线 $\color{red}{Δ}$ ⭐⭐⭐⭐

我们假设在执行操作进行浮点数的运算:我们假设有4条指令都需要进行浮点数的运算,所以我们就可以这样设计:在宏观上,对于流水线进行分段,分成5段,然后在运算执行阶段,如果需要使用到浮点运算器则再进行分段,这样A指令执行到浮点运算的对阶的时候,B指令开始执行求阶差,以此类推,可以达到功能部件级别的流水线,可以更大化的提高部件的利用率,但是也会使电路的部件设计变得复杂。但是指令流水线中,我们在写入pc时,可能已经根据原有的pc值读入了好几条指令了,这时候就出现问题了,后面的指令我们本来是不应该执行的。

2023-10-16 21:39:35 616

原创 计算机组成原理04 存储器容量 主频 时钟周期 IPS CPI FIPS 数据通路带宽 吞吐量 响应时间

CPU的主频越高,能否说明CPU的性能越好?不能,CPU的主频越高,说明CPU发送脉冲信号的速度更快,对应也就是时钟周期的持续时间很短,但是一条指令的运行,在不同CPU的背景下,运行的时间是不同的,即使是同一条指令,使用相同的CPU重复执行一次,也可能花费不同的时钟周期,例如在当前时钟周期中,CPU需要访问主存,但是主存现在正处于其他工作,这时候就可能导致这条指令/微操作需要花费更多的时钟周期。

2023-01-27 17:19:51 1515

原创 计算机组成原理 new02 1.2.2 主存储器 运算器 控制器 计算机的工作过程

1.PC在取完指令后进行自增2.MDR取到指令以后需要通过数据总线将数据送至IR。

2023-01-17 16:05:43 769 5

原创 计算机组成原理 01 1.2.1 软件和硬件 冯诺依曼结构和现代计算机结构 主机 指令

二进制低电平表示0高电平表示1在计算机内部通过电信号传递数据什么是计算机系统计算机系统=硬件+软件硬件:看的见摸得着软件:看的见摸不着计算机的实体,如主机,外设等等软件:操作系统,微信,qq硬件是计算机系统的物理基础,软件决定了硬件性能的发挥程度计算机性能好坏=软件+硬件软件分为系统软件和应用软件计算机硬件的发展这是一台军用的计算机,当时需要计算弹道…人工计算太慢第一台电子数字计算机 ENIAC(1946)机器语言?:这时使用的是纸带编程没孔表示1 有孔表示0晶体

2023-01-09 17:36:51 690 1

原创 基础IO 文件描述符 重定向 缓冲区 文件系统和inode 软硬链接

当父进程退出时,父进程会将用户缓冲区的数据刷新至内核缓冲区,刷新缓冲区本质其实也是一种写入操作,因此发生写时拷贝,子进程在退出的时候操作系统也会将用户缓冲区的内容刷新至内核缓冲区,最后操作系统会将内核缓冲区的内容输出到硬件上,其本质还是刷新的策略的变换。在语言层面可以看出,这三个流的类型都是文件,也就是三个文件流,对应到硬件上就是键盘,显示器,显示器,所以这三个文件也可以看作是键盘文件,显示器文件,显示器文件。国家分为省,市,县,镇,村,每一个区域都有自己的管辖人员进行管理。所以进程被创建的时候,其。

2022-09-25 16:26:33 971 3

原创 Linux 进程终止 进程等待 进程替换 简易shell

= =

2022-08-15 16:21:10 1056 3

原创 Linux 进程地址空间

对于进程地址空间我们简单进行理解,我们常讲的内存分区其实就是对于进程地址空间而谈的,程序加载到内存成为进程,进程地址空间也随之产生,进程地址空间可以看作是一个结构体。一个进程地址空间的内部大致像下面一样:通过end和start来标识每个区域的大小。事实上,每个进程地址空间大小基本和物理内存差不多,虽然这里我们只标识了区域的起始和结束,但是其内部还是一个个地址,从,这些地址也 称作虚拟地址(线性地址),在语言层面上打印出的地址也就是进程地址空间内的虚拟地址。...

2022-08-10 09:23:06 400 2

原创 Linux 优先级 环境变量 命令行参数

定义变量不仅仅是语言的任务,语言上面定义变量本质是在内存中开辟空间(有编号/名字),环境变量本质是操作系统在内存/磁盘中开辟的空间,用来保存系统相关的数据,环境变量和语言中定义的变量其实没有太多的区别,只不过环境变量存储的是系统的一些数据,而语言定义的变量存储的一般是一些具体的数值,两者都是变量名+变量内容,首先,我们需要知道二者的区别,命令行参数是用户填入的,而环境变量是系统填入的,并不需要人为控制,因此具体的个数没有太大的意义。关于子进程会继承父进程的环境变量,在文章的末尾我们会进行代码上的验证。...

2022-08-06 19:56:15 633 8

原创 Linux 进程创建,进程状态,优先级

在计算机中,进程都是互相独立的,如在windows下,微信,qq,英雄联盟都是一个个进程,其中一个进程挂掉不会影响其他进程的运行,这是进程的独立性。子进程和父进程的代码和数据是共享的,代码是不能被修改的,这意味着代码不会影响进程的独立性,所以我们只需要考虑数据被修改的情况。中,进程也是具有分类的,一般通过不同的状态来对进程进行分类,方便操作系统快速判断进程,完成特定的功能,进程的状态信息一般存储在。之内把子进程干掉,父进程在休眠,这时子进程的资源父进程无法接收和分析,该子进程就变成僵尸进程。........

2022-08-03 19:55:24 790 4

原创 Linux 初始操作系统和进程 git的使用

找不到.o文件,所以需要运行.o的依赖文件.s,.s又依赖.i,所以就得先从第8行开始运行了。$^ 和 $@$^ :源文件$@:目标文件在运行的时候 $^ 和 $@会自动被替换成源文件和目标文件make +指定的目标文件回车和换行回车:回到当前行的开始换行:列不变,行+1回车换行和缓冲区(带有\n回车换行)直接就打印出Hello Linux了。没有先打印出Hello Linux!问题:难道是因为sleep比printf先运行了,所以没有在显示器上显示出来吗?答案

2022-06-15 20:44:10 781 6

原创 Linux g++,gcc,gdb的概念与使用

gcc前面和大家提过一个概念:一个代码经过翻译生成可执行程序有以下四个阶段:1.预处理(宏替换,去掉注释,头文件展开)2.编译(生成汇编语言)3.汇编(生成可重定向的二进制语言)4.链接(调用标准库,查询符号表…)今天在Linux上,我们继续详谈这四个阶段:  (1)(1)(1)预处理 -E格式 gcc -E .c结尾的文件功能:文件预处理完以后便停止这句命令会将预处理以后的结果显示到屏幕上,本身就没有多少意义。因此可以配合-o后缀进行使用,-o的含义是将结果输出到指定文件中。预处

2022-05-28 15:49:39 825 3

原创 Linux vim的使用与配置

在学习yum安装软件之前,我们需要先铺垫一些知识:什么是服务器服务器一词在计算机的世界中经常被提到,但是对于服务器我们又感觉说不清其到底是什么?关于服务器我们可以将其看作是一台大型计算机,类比于我们的电脑,只不过这台大型计算器没有鼠标,键盘....这类设备。在一家公司中,一台服务器从买回来到开机一般都不会关机,7x24小时全天候的为我们提供服务。在服务器上部署了很多的服务,就像电脑上下载的软件。我们平常使用qq,微信都是对应公司的服务器在我们提供服务,为我们提供数据。但是服务器并不是只通电就能够使

2022-05-18 18:06:03 986 8

原创 Linux 权限理解及其概念

再次理解Linux的版本广义上:Linux发行版=Linux内核+外壳程序狭义上:Linux=Linux内核一般来说,普通用户是不能直接与操作系统进行沟通的,因此我们需要一个中介与操作系统进行构造,在Linux中这个中介就是外壳程序shell。为什么我们不能直接使用操作系统呢因为这样成本很高,并且有可能对操作系统造成损坏用户将指令传递给shell(命令行解释工具),shell翻译以后传递给操作系统执行命令。同时将结果翻译给用户shell直接拒绝你的过程就是对内核的一种保护。也就是对于非法请

2022-05-13 19:53:03 927 4

原创 Linux 基本指令与概念

文章目录历史基本概念创建用户删除用户lswho am ipwdnanoLinux的存储结构which和alias当前路径和上级路径stat绝对路径和相对路径cdcat和tactouchmkdirrmrmdir这里有点bug还没解决。manmoreheadtailecho输出重定向和输入重定向管道目标:学会Linux中常见的基础指令,对于不常用的指令,会给出使用的格式和功能。历史基本概念相比于一些操作系统,Linux的出生时间较晚,但是其发展速度却非常之快,很大的一个原因就是Linux之父将Linux进

2022-05-05 10:23:12 1468 13

原创 C++vector的模拟实现

文章目录vector框架默认构造函数有参构造函数sizecapacity内置数据类型的构造函数const修饰的匿名对象reserveresize迭代器拷贝构造函数传统写法拷贝构造函数现代写法findinsert迭代器失效erasevector框架 template <class T> class vector { public: T _start;//(1) T _finsih;//(2) T _endofstorge;//(3)};  (1)(1)(1)指向当前空间的第一个

2022-04-29 17:44:31 1933 9

原创 C++ vector函数接口及其底层原理

什么是vectorvector类我们可以将其底层看作是一个能够动态扩容数组。在vs下其扩容一般每次是按照前一次容量的1.5倍进行扩容。如:4,69…string类支持的功能,在vector下基本都能使用。vector的构造函数vector的底层原理vector类中包含了三个T类型的指针,分别是-start:指向空间的起始部分_finish:指向当前已用空间的末尾_endofstorger:指向申请空间的末尾push_backvector的push_back和string一样,都是

2022-04-28 14:27:43 2815 11

原创 C++string类模拟实现

ssssss

2022-04-27 17:20:20 1689 11

原创 C++ string类

string类string其实是C++中的一个类。通过cplusplus可以对该类进行具体的学习:这种网站一般都是全英的,简直噩梦,我一般都是看一点查一下有道,英语太菜了= =通过该文档我们大致可以知道string其实是basic_string这个类typedef出来的。string的所有功能都是通过basic_string这个类进行封装的。同样的,string具有6个构造函数。以及非常多的成员函数接下来我们开始详细学习string这个类的功能:这里我们对于常用string接口进行详细

2022-04-25 10:00:00 1142

原创 C++函数模板初阶

为何需要用到模板在引入模板的的概念之前,我们先看一段代码:这里我们想实现两个char类型变量的交换和两个int类型变量的交换。并为此写了两个swap函数,通过对比两个函数,可以看出,两个函数除了变量的类型不一样之外,其实现原理基本一致。这种写法就导致代码冗余,并且在修改代码的时候需要修改好几份。C++的设计者为了解决这种情况,思考都否有一种函数,能只要实现一份就可以满足同种函数的功能实现。因此就有了函数模板的出现,模板就类似一份模具,其可以对同类型的产品进行复用。void swap(char &a

2022-04-24 15:33:47 701 10

原创 C++内存管理

C++的内存分区C++和C语言的内存分区基本类似:大致可以分成以下几个区,学习内存分区可以帮助我们更好的使用空间。1.栈区:栈区是C++中经常要使用到的区域,函数的形参,局部变量等等都存储在栈上。栈的特点:容量较小,大致有8M左右生命周期:栈帧结束,栈里的局部变量和函数形参便会被系统自动回收2.堆区:堆区是一种需要人为开辟的空间,可以通过 malloc,new等方式进行开辟。堆的特点:容量很大,2G左右,编译器一般不会自动开辟堆上的空间,因此常常需要人为开辟。生命周期:堆申请的数据伴随

2022-04-22 08:30:00 1253 18

原创 C++类和对象(下)

cout<<d1原本是对象插入到流中d1<<cout这样就变成流插入到对象中了cout是cin都是属于全局的对象初始化列表在前面我们学习了构造函数,得知了构造函数会对类的成员变量进行初始化。除此之外,C++又提供出了另一种初始化成员变量的方式,也就是初始化列表。注意:只有构造函数才有初始化列表这一功能,因为只有构造函数才是完成初始化工作的。具体语法:我们以日期类Date为例这时通过类创建对象的时候,初始化列表就会自动完成成员变量的初始化。但是明明C++已

2022-04-11 10:22:18 388 8

原创 C++类和对象---(中)

在了解什么是构造函数之前,需要先知道C++中都有哪些数据类型。C++中的两种类型1.内置数据类型:如int,char,指针,数组,double等等2.自定义类型:struct/class 定义的类型。构造函数在写数据结构的时候,经常需要对其进行初始化操作,但是免不了会忘记了对其进行初始化操作,C++为了避免这一类情况,提出了构造函数这一概念。构造函数是一个特殊的成员函数,函数名与类名相同,实例化对象时由编译器自动调用,需要注意的是,构造函数的虽然名称叫构造,但是构造函数的主要任务并不是

2022-03-17 15:24:22 1586 17

原创 C++类和对象(上)

面向对象和面向过程C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成就拿外卖来举例,C语言关注的是外卖的点餐,送餐。而C++关注的是点餐的人,送餐的人之间的联系。类的引入我们知道在C语言中有结构体这种结构strutc student{int a;string name;};在结构体里我们声明变量。从前在C语言中定义一个结构体的对象需要这样:struct st

2022-03-15 11:08:20 1119 9

原创 C++引用及其底层原理

文章目录引用引用的注意事项引用做参数引用引用的注意事项引用做参数在讲引用做参数之前,我们先需要了解一下,参数传值和传引用的区别。如上图所示,这段代码调用func函数时使用的是传递的是值。...

2022-03-13 16:59:07 5505 10

原创 【Leetcode每日一题】---521. 最长特殊序列 Ⅰ(脑筋急转弯)

题目链接521. 最长特殊序列 Ⅰ这题感觉题目很绕,这里的特殊子序列该如何理解,举例说明:字符串a=“aaa”,b=“bbb”,a的子序列就为aaa,b的子序列为bbb,a的子序列没有在b中出现,b的子序列没有在a中出现。这时a,b都为特殊子序列。因此总共就两种情况:情况一.a串的长度==b串的长度:这时最长子序列就是字符串本身,如果a和b有一个字符不相等,说明两个子序列都是特殊子序列。反之说明两个字符串一模一样。情况二.a串的长度!=b串的长度:这时返回更长的字符串就好了(因为其子序

2022-03-05 11:14:10 8074 6

原创 【Leetcode每日一题】---258. 各位相加(数学巧求数根)

题目链接258. 各位相加方法一:模拟用sum来接收num每位上数字相加的结果,用sum更新num的数值,直到num<=10,符合题目的条件。最后的num即是题目的结果class Solution {public: int addDigits(int num) { while(num>=10){ int sum=0; while(num){ sum+=num%10;

2022-03-03 11:10:27 6802 11

原创 【Leetcode每日一题】---6. Z 字形变换(找规律)

题目链接:6. Z 字形变换r方法一:找规律模拟数组题目要求构造一个从左到右的Z型矩阵。通过分析,可以看出这个Z型矩阵的特点Z型矩阵就是如图中的橙色,绿色这样部分组合在一起的,Z型矩阵就是由一个个相同周期组成的。周期的构成满足这样一个规律:在第一列向下填写矩阵行数r个字符,接着向其右上部分共(r-2)列分别填写一个字符。Z型矩阵的周期t=r+r-2=2*r-2,每个周期会占用矩阵的r-1列,总共有字符长度len/t个周期(将最后一个周期视作完整周期)。因此创建一个具有r行row列的的

2022-03-02 21:30:53 7053 11

原创 C++命名空间,缺省参数,函数重载底层原理

文章目录为何需要用到命名空间命名空间的定义命名空间的三种使用方式编译器查找数据的过程缺省参数全缺省与半缺省为何需要用到命名空间在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或者名字的污染。namespace关键字的出现就是针对这种问题的。命名空间的定义格式namespace+命名空间的名字{括号里填写命名空间想要设置的内容}如:namespac

2022-03-01 10:41:22 1401 18

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除