操作系统

来源:转载

1:64位的寻址空间有多大

https://www.0xaa55.com/forum.php?mod=viewthread&tid=1042&extra=page%3D1&page=1


64位二进制整数能表示的最大值是1111111111111111111111111111111111111111111111111111111111111111b 这样很难看,因此我们把它拆开,就是 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111b 然后用十六进制表示就是 0xFFFFFFFFFFFFFFFF 转换为十进制就是 18446744073709551615 因为是64个存储位元,因此可以表示的数字的数目是18446744073709551616个数字。那么现在的电脑CPU基本都是x64的了,向下兼容32位的操作系统。 64位和32位有什么区别呢?首先32位的CPU的“寻址范围”就受到32个二进制位的限制,也就是说,假设它要访问内存,它的能力是,只能访问4G内存。 32位二进制数最大值是11111111 11111111 11111111 11111111b,十进制4294967295,能表示4294967296个数,那么也就是能访问4294967296个内存单元(字节)。 4294967296个字节 = 4294967296 B = 4194304 KB = 4096 MB = 4 GB 也就是说32位CPU只能访问4GB的内存喽。 对于现在的Win7也好Win8也好Win8.1也好Win10也好,都是不够的。这些操作系统为了让用户用起来更稳定,让程序运行更快,它们需要更多的内存来处理什么驱动、内核、页表、正在运行的程序、暂停了的程序等。比如你开10个浏览器,那就要给每个浏览器分配内存空间,存储图片,文字,浏览器要显示这些图像就要高速操作系统:“我这个程序要显示这些图像。”操作系统就要去问它安装的驱动:“你们这些驱动谁能显示图像?”这个时候显卡驱动就说“我能”,然后显示图像的工作就交给了显卡驱动……显卡驱动本身,以及其它的各种驱动,都是要占用内存的,否则它们在哪干活?只能在内存里干活。假设用64位来表示内存位置的索引,那就是这样: 18446744073709551616 ÷ 1024 = 18014398509481984 KB 18014398509481983 ÷ 1024 = 17592186044416 MB 17592186044415 ÷ 1024 = 17179869184 GB 17179869183 ÷ 1024 = 16777216 TB 16777215 ÷ 1024 = 16384 PB(我倒是见过1PB的硬盘,估计是服务器用的,很大,像个抽屉,各种散热风扇) 16383 ÷ 1024 = 16 什么B这个数字实在是太大了。大家平时用的硬盘也就500GB的样子,也有加装了256GB固态硬盘的,或者台式机装了几个3、4TB的仓库盘的,我听说过的最大的机械硬盘也就6T。 然而事实上,我们平时用的x64的Win7也好,Win8也好,都是AMD64的架构,除非那不是x64,那是IA64,才是Intel 64的架构。Intel的CPU支持AMD的x64。 AMD64规定CPU的指针是48位的,也就是有48位的寻址空间,用来临时存储数字的寄存器,它的高16位被用来做为其它用途,比如标记之类的。48位的二进制数能表示的最大的数字是111111111111111111111111111111111111111111111111b 11111111 11111111 11111111 11111111 11111111 11111111b 十六进制是0xFFFFFFFFFFFF 十进制是281474976710655 能表示281474976710656个数,那就是这样算: 281474976710655 ÷ 1024 = 274877906944 KB 274877906944 ÷ 1024 = 268435456 MB 268435456 ÷ 1024 = 262144 GB(我内存条也才16 GB) 262144 ÷ 1024 = 256 TB 也是很了不起的寻址能力了。

2:cpu ,硬盘,内存 cpu只寻址内存。外存的数据通过I/O电路导入到内存,然后被cpu寻址到。
CPU运算所需要的程序代码和数据来自于内存,内存中的东西则来自于硬盘。所以硬盘并不直接与CPU打交道。
常见的外储存器有硬盘、软盘、光盘、U盘等。 3:cpu寻址范围

一、什么叫寻址空间?


寻址空间一般指的是CPU对于内存寻址的能力。通俗地说,就是能最多用到多少内存的一个问题。数据在存储器(RAM)中存放是有规律的 ,CPU在运算的时候需要把数据提取出来就需要知道数据在那里 ,这时候就需要挨家挨户的找,这就叫做寻址,但如果地址太多超出了CPU的能力范围,CPU就无法找到数据了。 CPU最大能查找多大范围的地址叫做寻址能力 ,CPU的寻址能力以字节为单位。


通常人们认为,内存容量越大,处理数据的能力也就越强,但内存容量不可能无限的大,它要受到系统结构、硬件设计、制造成本等多方面因素的制约,一个最直接的因素取决于系统的地址总线的地址寄存器的宽度(位数)。


计算机的寻找范围由总线宽度(处理器的地址总线的位数)决定的,也可以理解为cpu寄存器位数,这二者一般是匹配的。


Intel公司早期的CPU产品的地址总线和地址寄存器的宽度为20位,即CPU的寻址能力为2^20=1024*1024字节=1024K字节=1M字节;286的地址总线和地址寄存器的宽度为24位,CPU的寻址能力为2^24=1024*4*1024*4B=4*1024*4KB=16M;386及386以上的地址总线和地址寄存器的宽度为32位,CPU的寻址能力为2^32=4096M字节=4G字节。 也就是说,如果机器的CPU过早,即使有很大的内存也不能得到利用,而对于现在的PⅡ级的CPU,其寻址能力已远远超过目前的内存容量。


由此推出:地址总线为N位(N通常都是8的整数倍;也说N根数据总线)的CPU寻址范围是2的N次方字节,即2^N(B)。

二、16位、32位、64位通常指的是什么?


从CPU的发展史来看,从以前的8位到现在的64位,8位也就是CPU在一个时钟周期内可并行处理8位二进字符0或是1,那么16就以此类推是64位就64位二进制.从数据计算上来讲理论上64位比32快一半。但因为电脑是软硬相配合才能发挥最佳性能的.所以操作系统也必须从32位的到64位的,而且系统的硬件驱动也必须是64位的. 在64CPU的计算机上要安装64位操作系统64位的硬件驱动,32位的硬件驱动是不能用的,只有这样才能发挥计算机的最佳性能.如果64CPU装32操作系统的话,那性能不会有明显的提升。



三、为什么是2的N次方,而不是其他数的N次方?


因为计算机是采用二进制计算的。 假设一台计算机,它只有1根地址线,请问它最多能对几个存储单元寻址?答案是:2个.因为在任何2进制计算机中,所有物理元件只有 0,1两种状态,对应这个例子,我们假设已经把这唯一的一根地址线与两个存储单元a和b连上了,那么究竟怎么确定何时读a何时读b?有一个办法,当地址线上的电压是高电压时我们读a,相反是低电压时,我们读b.如此一来,一根地址线的情况下,只能对2个存储单元进行寻址 依次类推,2根地址线时可以对4个存储单元进行寻址,对应的电压情况可以是:低低,低高,高低,高高;继续想下去,3根地址线就可以对8个存储单元进行寻址(3个1和3个0不同组合情况:111、110、100、000、101、100、001、011),4根就是16个,也就是说,当有n根地址线时,可以对2的n次方个存储单元进行寻址。


一根线是怎么连接到两个存储单元的?好像不同于一根电话线吧,他有两个线芯或才网线,有八个小线(线芯)?

四、什么是存储单元? 存储单元一般应具有存储数据和读写数据的功能,一般以8位二进制作为一个存储单元,也就是一个字节。每个单元有一个地址,是一个整数编码,可以表示为二进制整数。
程序中的变量和主存储器的存储单元相对应。变量的名字对应着存储单元的地址,变量内容对应着单元所存储的数据。

五、为什么计算机采用二进制?


(1)技术实现简单,计算机是由逻辑电路组成,逻辑电路通常只有两个状态,开关的接通与断开,这两种状态正好可以用“1”和“0”表示。


(2)简化运算规则:两个二进制数和、积运算组合各有三种,运算规则简单,有利于简化计算机内部结构,提高运算速度。


(3)适合逻辑运算:逻辑代数是逻辑运算的理论依据,二进制只有两个数码,正好与逻辑代数中的“真”和“假”相吻合。


(4)易于进行转换,二进制与十进制数易于互相转换。


(5)用二进制表示数据具有抗干扰能力强,可靠性高等优点。因为每位数据只有高低两个状态,当受到一定程度的干扰时,仍能可靠地分辨出它是高还是低。


另,Tomcat源码剖析电子书:


代码和UML图:https://github.com/Aresyi/HowTomcatWorks 排版更好的百度电子书:https://yuedu.baidu.com/ebook/ac92f0d35122aaea998fcc22bcd126fff7055d60

4:微处理器知识
微处理器的内部结构

http://wiki.mbalib.com/wiki/%E5%BE%AE%E5%A4%84%E7%90%86%E5%99%A8


微处理器最基本的功能结构包括:运算器、控制器、寄存器组及内部总线。图给出的是某8位微处理器的内部结构图,它包括:运算器、寄存器组(其中包括:累加器、状态寄存器、程序计数器和其他功能的寄存器组)、指令寄存译码器、地址寄存器、数据缓冲器、内部数据总线、外部引线(包括:地址信号线、数据信号线、控制/状态信号线)等。各部分在微处理器中起着不同的作用:



(1)运算器:是执行运算的部件,在控制信号作用下可完成加、减、乘、除、与、或、非、异或以及移位等工作,故又称为算术逻辑单元。


(2)寄存器组:用了加快运算和处理速度、暂存参加运算的数据或运算的中间结果,是微处理器中十分重要的部分。寄存器组中包括:


1)累加器:是通用寄存器中的一个。通常微处理器中至少包含一个累加器,它的功能比其他寄存器多。


2)状态寄存器:是寄存器组中的一个。专用于记录微处理器运行的某种重要状态,程序可以根据其提供的状态,来控制CPU的运行。


3)程序计数器:是加一计数器,每提供一个地址后自动加一,指向下一步要执行指令所在存储单元的地址。8位机为16位加一计数器,可提供65536(=0~FFFFH)个地址,硬件决定上电或复位时的初值状态。程序计数器是专为处理器提供的,用户无法通过指令访问它。其内容可以通过内部数据总线得到修改。


4)其他功能的寄存器组


(3)内部数据总线:它是微处理器内部各部分之间的数据传输通道,且为双向的。其总线的宽度决定微处理器内部数据传输的位数。


(4)指令寄存译码器:它由指令寄存器(IR)、指令译码器(ID)和控制逻辑(PLA)组成,是整个微处理器的控制指挥中心。CPU通过总线将外部存储器中的指令取入,并暂存在IR中。对IR中的指令进行分析解释,通过控制逻辑(PLA)产生相应的控制信号,来协调整个计算机有序地工作。

对CPU内部:控制着各部分的工作。
对CPU外部.摔制CPU对外部读操作或写操作.对存储器操作或对I/O接口操作等。

(5)地址寄存器:用于寄存CPU要向外部发出的地址,其内容来源可以是程序计数器,也可以是内部总线。通过它将地址输出给CPU以外的存储器或I/O接口。


(6)数据缓冲器:起到CPU内、外传输数据的缓冲作用,只有CPU允许数据传输时,该缓冲器的门才会打开。对于8位机它是8位的,对于16位机为16位。


(7)数据信号线(DB):CPU与存储器或I/O接口之间传输数据的通道,其宽度决定CPU与外部存储器或I/O接口传输数据的位数。


(8)地址信号线(AB):是CPU提供地址信息的通道,其宽度决定CPU对外的寻址范围。


(9)控N/状态信号线:用于传输控制或状态信号的通道,如提供读信号、写信号、存储器选通信号、I/O接口选通信号等,也可以接收时钟信号等。


随着技术的发展,微处理器功能的增强,微处理器的内部除了上述基本部分,还会增加存储器管理部件、高速缓存部件等


微处理器的工作原理[2]

微处理器的工作过程就是执行程序的过程,而执行程序就是逐步执行一条条指令的过微处理器仅能识别机器指令,需使用各种编译器将由高级程序设计语言编制的程序转机器指令构成的程序。微处理器在执行一条指令时,主要按以下几个步骤去完成:

取指令:控制器发出信息从存储器取一条指令。
指令译码:指令译码器将取得的指令翻译成起控制作用的微指令。
取操作数:如果需要操作数,则从存储器取得该指令的操作数。
执行运算:CPU按照指令操作码的要求,通过执行微指令,对操作数完成规定的运算处理。
回送结果:将指令的执行结果回送到内存或某寄存器中。

微处理器的操作是周期性的,即取指令,指令译码,取操作数,再取指令……,这一系列操作步骤是精确地按照时序进行的,因此微处理器需要一个时序电路。时序电路受控于晶体振荡电路所生成的标准振荡脉冲信号,一旦机器加电,时序电路便连续不断地发出时钟信号。

分享给朋友:
您可能感兴趣的文章:
随机阅读: