测试基础 计算机基础信息难点

烂柯人 · August 05, 2021 · 1867 hits

一、cpu
1、什么是 cpu

2、cpu 核
超线程技术把多线程处理器内部的两个逻辑内核模拟成两个物理芯片,让单个处理器就能使用线程级的并行计算,进而兼容多线程操作系统和软件。超线程技术充分利用空闲 CPU 资源,在相同时间内完成更多工作。虽然采用超线程技术能够同时执行两个线程,当两个线程同时需要某个资源时,其中一个线程必须让出资源暂时挂起,直到这些资源空闲以后才能继续。因此,超线程的性能并不等于两个 CPU 的性能。双核心技术是将两个一样的 CPU 放置于一个封装内(或直接将两个 CPU 做成一个芯片),而英特尔的多线程技术是在 CPU 内部仅复制必要的资源、让两个线程可同时运行;在一单位时间内处理两个线程的工作,模拟实体双核心、双线程运作。

总核数=物理 cpu 个数 * 每个物理 cpu 的核数
总逻辑 cpu 数 = 物理 cpu 个数 * 每个物理 cpu 的核数 * 超线程数
查看物理 cpu 个数: cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
查看每个物理 cpu 的 core 个数:cat /proc/cpuinfo| grep "cpu cores"| uniq
查看逻辑 cpu 的个数:cat /proc/cpuinfo| grep "processor"| wc -l
查看超线程是否开启:lscpu

多线程
如果线程数不多余 cpu 核心数,则各个线程分配一个核心,不需要分配,而线程多于 cpu 核心数才会分片。
并发与并行
并发:当多个线程在操作时,如果系统只有一个 cpu,把 cpu 运行时间分成若干个时间片,分配给各个线程执行,在一个时间段的线程运行时,其他线程处于挂起状态,这种方式称之为并发。并发=间隔发生

3、内核态和用户态
内核态:cpu 可以访问内存的所有数据,包括外围设备,例如硬盘,网卡,cpu 也可以将自己从一个程序切换到另一个程序。

用户态:只能受限的访问内存,且不允许访问外围设备,占用 cpu 的能力被剥夺,cpu 资源可以被其他程序获取。

当在执行用户自己的代码时,则称其处于用户运行态(用户态),此时处理器特权级最低,是普通的用户进程运行的特权级,大部分用户直接面对的程序都是运行在用户态。
当因为系统调用陷入内核代码中执行时,处于内核运行态(内核态),此时处理器处于特权级最高。如果要执行文件操作、网络数据发送等操作必须通过 write、send 等系统调用,这些系统调用会调用内核的代码。会从用户态切换到内核态的内核地址空间去执行内核代码来完成相应的操作,在执行完后又会切换回用户态

二 、内存

1、内存和缓存
CPU 中有寄存器,因此寄存器的速度最快!内存、外存统称为 CPU 的 “外存”。
高速缓存是存放在 CPU 中的,它是介于 CPU 与内存之间的,以缓解它们之间速度不匹配的矛盾,使得内存访问 CPU 的时候较快。
缓存是指在内存中划分出一块区域用于存放常使用的输入输出数据,以缓解 CPU 与外设处理速度不匹配的问题。
CPU 与(内存、外存)是不同的概念,CPU 是一个独立的概念,而(内存、外存)是指对存储器的划分,内存的速度较外存的速度快,并且内存具有 “掉电信息全部消失” 的特性,而外存则具有 “掉电信息也不会丢失” 的特性

2、虚拟内存
顾名思义,虚拟内存实际上并不存在,它只是存在于这套巧妙的内存管理机制中。当一个进程启动时,内核会给新的进程建立一个虚拟地址空间。这个虚拟地址空间代表了该进程可能使用到的所有内存,当然它是可以动态变化的。虚拟地址结构示意图如下,从下往上地址增大,主要包括以下几个部分:(1)代码段:该部分只读,用于存放加载的代码。(2)数据段:用于存放全局变量和静态变量。(3)堆:动态内存,当 malloc/free 申请释放内存小于某个阈值(一般操作系统设定为 128K,可以修改)时,通过 brk/sbrk 系统调用,控制堆顶指针向高地址偏移(malloc)或者低地址偏移(free)。(4)文件映射区:动态内存,当 malloc/free 申请释放内存大于 128K 时,通过 mmap 系统调用分配一块虚拟地址空间。(5)栈:用于存放局部变量和进程上下文。看到这里可能会产生一个疑问:既然都有了物理内存,为什么还要有虚拟内存呢?这是因为由于成本的限制,物理内存往往无法做的很大,但是进程运行阶段所需申请的内存可能远远超过物理内存,并且系统不可能只跑一个进程,会有多个进程一起申请使用内存,如果都直接向物理内存进行申请使用肯定无法满足。通过引入虚拟内存,每个进程都有自己独立的虚拟地址空间,这个空间理论上可以无限大,因为它并不要钱。一个进程同一时刻不可能所有变量数据都会访问到,只需要在访问某部分数据时,把这一块虚拟内存映射到物理内存,其他没有实际访问过的虚拟地址空间并不会占用到物理内存,这样对物理内存的消耗就大大减少了 。

虚拟内存->物理内存的映射机制
3、共享内存
进程在运行过程中,会加载许多操作系统的动态库,比如 libc.so、libld.so 等。这些库对于每个进程而言都是公用的,它们在内存中实际只会加载一份,这部分称为共享内存
4、驻留内存
驻留内存,这是指虚拟内存中实际映射到物理内存的那部分,也就是进程实际占用的物理内存大小。所以判断一个进程使用的内存大小,主要是看占用的物理内存,也就是驻留内存的大小,即 RSS

共收到 0 条回复 时间 点赞
烂柯人 关闭了讨论 09 Aug 14:45
烂柯人 重新开启了讨论 09 Aug 14:45
需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up