JAVA SOCKET学前知识点-内存


物理内存

顾名思义,是实实在在的、插在板子上的那个内存条。

虚拟内存 

指在硬盘中开辟出的、用于辅助物理内存交换数据的那部分空间(内存文件),因为现在软件所需要的内存都很大,在内存不足时,系统会把一些内存里面的文件临时存放在硬盘上,这就是虚拟内存。 而准确的“虚拟内存”(Virtual Memory)定义是指操作系统以物理内存、页面文件等虚拟出的整个内存空间。

Windows的“页面文件”(pagefile.sys),Linux中的类似定义是Swap分区。

交换区    

  指一块内存区域或硬盘区域,用来处理数据交换。

 提供一个空间,为内存中换出的页存放使用。是一种对内存的仿真,但是因为介质的不同,速度是相差很多的,当系统面临大的应用时,他们通常所需要的内存大于系统中安装的物理内存容量,此时交换区就发生作用了。一个大的交换区可以使用自己的磁盘分区,在一些linux不同版本中,其中的一些就在安装的时候提示要安装一个交换区。也就是交换区的实现可以使用自己的磁盘分区,也可是用用包含在大型分区中的文件。每个交换区都由一组页槽组成(page slot)。由一组4096字节大小的块组成,每块中包含一个换出的页。第一个页槽用来永久存放有关交换区的信息,由联合体swap_header描述。在联合体中,magic[10]用于将磁盘的一块标示成交换区,他的内容就是:SWAPSPACE2。通常位于第一个页槽的末尾。
而交换区中的数据只在系统运行时有效,也就是说,他的生存是与进程相关的,当系统关闭时,进程被杀死,同样,进程存放在交换区中的数据也将消失。


CPU核心(硬件)

核心又称为内核,是CPU最重要的组成部分。CPU中心那块隆起的芯片就是核心,是由单晶硅以一定的生产工艺制造出来的,CPU所有的计算、接受/存储命令、处理数据都由核心执行。各种CPU核心都具有固定的逻辑结构,一级缓存、二级缓存、执行单元、指令级单元和总线接口等逻辑单元都会有科学的布局。

双核处理器就基于单个半导体的一个处理器上拥有两个一样功能的处理器核心,即是将两个物理处理器核心整合入一个内核中。


内核(不同于CPU核心。是软件)

内核,是一个操作系统的核心。是基于硬件的第一层软件扩充,提供操作系统的最基本的功能,是操作系统工作的基础,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性
现代操作系统设计中,为减少系统本身的开销,往往将一些与硬件紧密相关的(如中断处理程序、设备驱动程序等)、基本的、公共的、运行频率较高的模块(如时钟管理、进程调度等)以及关键性数据结构独立开来,使之常驻内存,并对他们进行保护。通常把这一部分称之为操作系统的内核。
程序可以直接地被调入计算机中执行,这样的设计说明了设计者不希望提供任何硬件抽象和操作系统的支持,它常见于早期计算机系统的设计中。最终,一些辅助性程序,例如程序加载器和调试器,被设计到机器核心当中,或者固化在只读存储器里。这些变化发生时,操作系统内核的概念就渐渐明晰起来了。

当前有:单内核 微内核 混合内核 外内核

核心内存
操作系统核心程序使用的物理内存。

核心内存即内核内存,是操作系统为内核对象分配的内存
内存地址从0-FFFFFFFF这段地址称为基本内存,也叫核心内存。内核内存是指操作系统内核和设备驱动程序所使用的内存。
分页是早期操作系统对提高内存使用效率的一种技术。分页数就是已经从内存调进交换区的量。物理内存是指计算机上安装的总物理内存,也称RAM。
“分页数”是可以复制到页面文件中的内存,由此可以释放物理内存;“未分页”是保留在物理内存中的内存,不会被复制到页面文件中。虚拟内存使用情况是指:正被系统使用的页面文件的量。执行内存是指分配给程序和操作系统的内存,由于虚拟内存的存在,其峰值可以超过最大物理内存,“总数”值则与“物理内存使用记录”图表中显示的值相同。


寄存器
寄存器是中央处理器内的组成部份。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。
寄存器是CPU内部的元件,寄存器拥有非常高的读写速度,所以在寄存器之间的数据传送非常快。
寄存器(Cache)是CPU内部集成的,内存是挂在CPU外面的数据总线上的,访问内存时要在CPU的寄存器(Cache)填上地址,再执行相应的汇编指令,这时CPU会在数据总线上生成读取或写入内存数据的时钟信号,最终内存的内容会被CPU寄存器(Cache)的内容更新(写入)或者被读入CPU的寄存器(Cache)

CPU缓存(L1 L2)
CPU缓存的容量比内存小的多但是交换速度却比内存要快得多。缓存的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾,因为CPU运算速度要比内存读写速度快很多,这样会使CPU花费很长时间等待数据到来或把数据写入内存。
缓存大小是CPU的重要指标之一,而且缓存的结构和大小对CPU速度的影响非常大,CPU内缓存的运行频率极高,一般是和处理器同频运作,工作效率远远大于系统内存和硬盘。实际工作时,CPU往往需要重复读取同样的数据块,而缓存容量的增大,可以大幅度提升CPU内部读取数据的命中率,而不用再到内存或者硬盘上寻找,以此提高系统性能。但是从CPU芯片面积和成本的因素来考虑,缓存都很小。
按照数据读取顺序和与CPU结合的紧密程度,CPU缓存可以分为一级缓存,二级缓存,部分高端CPU还具有三级缓存,每一级缓存中所储存的全部数据都是下一级缓存的一部分,这三种缓存的技术难度和制造成本是相对递减的,所以其容量也是相对递增的。当CPU要读取一个数据时,首先从一级缓存中查找,如果没有找到再从二级缓存中查找,如果还是没有就从三级缓存或内存中查找。一般来说,每级缓存的命中率大概都在80%左右,也就是说全部数据量的80%都可以在一级缓存中找到,只剩下20%的总数据量才需要从二级缓存、三级缓存或内存中读取,由此可见一级缓存是整个CPU缓存架构中最为重要的部分。
L1 Cache
一级缓存(Level 1 Cache)简称L1 Cache,位于CPU内核的旁边,是与CPU结合最为紧密的CPU缓存
一般来说,一级缓存可以分为一级数据缓存(Data Cache,D-Cache)和一级指令缓存(Instruction Cache,I-Cache)。
二者分别用来存放数据以及对执行这些数据的指令进行即时解码。大多数CPU的一级数据缓存和一级指令缓存具有相同的容量
L2 Cache(二级缓存)
L2 Cache(二级缓存)是CPU的第二层高速缓存,分内部和外部两种芯片。内部的芯片二级缓存运行速度与主频相同,而外部的二级缓存则只有主频的一半。L2 Cache早期一般是焊在主板上,现在也都集成在CPU内部


内存使用顺序

寄存器  >  L1\L2\L3 > 核心内存  > 内存 > 交互区、 虚拟内存


网卡

网卡本身是有内存的,每个网卡一般都有4K以上的内存,用来发送,接收数据。网卡本身的内存,又多是按照256字节为1页的方式,把所有内存分页,之后把这些页组成队列

数据在从主内存搬到网卡之后,不是立即就能被发送出去的,而是要先在网卡自身的内存中排队,再按照先后顺序发送;
同样的,数据从以太网传递到网卡时,网卡也是先把数据存储到自身的内存中,等到收到一帧数据了,再经过中断的方式,告诉主CPU(不是网卡本身的微处理器)把网卡内存的数据读走,而读走后的内存,又被清空,再次被使用,用来接收新的数据,如此循环往复。

访问内存有专门的CPU指令,可以将指定内存地址的数据读取到CPU寄存器。实际CPU的工作还有虚拟内存映射、一级缓存二级缓存、流水线控制等等,对用户来说,单条CPU指令就可以直接读取内存地址中的数据。
从硬件上来说,socket接口中的数据通过send方法从内存经过复制进入内核内存空间,由内核的网卡驱动(协议栈)进行处理,转化为发送到物理网卡的指令和数据,通过直接读写设备总线或者DMA传输的方式将数据和指令发送到物理网卡,由物理网卡将数据转化为电信号发送到网线上,再经过若干个中间的交换和路由设备,报文最终转化为电信号被接收端的网卡收到,网卡通过中断通知CPU,CPU启动DMA过程将数据从设备读取到内核内存空间,由内核的网卡驱动(协议栈)进行处理,然后通知用户态的程序从recv的阻塞状态恢复,或者使select/epoll返回。用户态程序通过recv接口将内核内存空间中的数据读取到用户空间进行详细的协议分析与处理。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值