这边主要是介绍计算机的基础知识,比如数据结构,算法等。
计算机基础
cpu
中央处理器(英语:Central Processing Unit,缩写:CPU)是计算机的主要设备之一,功能主要是解释计算机指令以及处理计算机软件中的数据。
1、CPU使用率
CPU使用率其实就是你运行的程序占用的CPU资源,比如A进程占用10ms,然后B进程占用30ms,然后空闲60ms,在一段时间内都是如此,那么这段时间内的占用率为40%。
以上只是一个简单的比如说明,在我们使用linux的top命令时候是怎么计算的?
在Linux的内核中,有一个全局变量:Jiffies。 Jiffies代表时间单位。它的单位随硬件平台的不同而不同。系统里定义了一个常数HZ,代表每秒种最小时间间隔的数目。这样jiffies就是 1/HZ。
Intel平台jiffies的单位是1/100秒,这就是系统所能分辨的最小时间间隔了。
在Linux系统中,CPU使用情况都保留在/proc/stat文件,这个文件的头几行记录了每个CPU的用户态,系统态,空闲态等状态下的不同的Jiffies,常用的监控软件就是利用/proc/stat里面的这些数据来计算CPU的利用率的。
# cat /proc/stat
cpu 11772990 3685567 11586702 994389437 1502196 0 617801 0 0 0 ----总cpu的
cpu0 1925911 145536 1479330 123377541 944584 0 71441 0 0 0 ----每个cpu的
cpu1 1493902 723778 1332508 123809933 398061 0 186171 0 0 0
cpu2 1218152 138174 1327108 125164685 28448 0 67759 0 0 0
cpu3 1408917 788649 1408734 124241479 31922 0 64644 0 0 0
cpu4 1347669 144848 1477635 124881583 38168 0 54423 0 0 0
cpu5 1318674 827204 1696224 124014206 24080 0 63939 0 0 0
cpu6 2189237 147904 1743240 123789739 16803 0 57403 0 0 0
cpu7 870526 769470 1121920 125110268 20126 0 52016 0 0 0
intr 6041226474 39 9 0 2 31344 0 2 0 356 0 0 29 130 0 879833 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 110214 0 94382684 987 0 83207017 751 0 120017596 99 0 23038227 0 1319554 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ctxt 11176275226
btime 1440513807
processes 83672461
procs_running 1
procs_blocked 0
softirq 5289823244 0 2558726670 741 402209688 239962 0 3821129 628773714 0 1696051340
详细说明
- user 从系统启动开始累计到当前时刻,用户态的CPU时间(单位:jiffies) ,不包含 nice值为负进程。1jiffies=0.01秒
- nice 从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间(单位:jiffies)
- system 从系统启动开始累计到当前时刻,核心时间(单位:jiffies)
- idle 从系统启动开始累计到当前时刻,除硬盘IO等待时间以外其它等待时间(单位:jiffies)
- iowait 从系统启动开始累计到当前时刻,硬盘IO等待时间(单位:jiffies) ,
- irq 从系统启动开始累计到当前时刻,硬中断时间(单位:jiffies)
- softirq 从系统启动开始累计到当前时刻,软中断时间(单位:jiffies)
CPU时间=user+system+nice+idle+iowait+irq+softirq,我们一般说的cpu使用率就是non-idle(除了idle的时间)占用的时间比例。其实目前来说cpu核心占用时间并不是使用而是中断切换等待的时间,可以优化这方面的使用率,这边不详细说明。
下面几行在使用的时候也是比较重要的信息
- “intr”这行给出中断的信息,第一个为自系统启动以来,发生的所有的中断的次数;然后每个数对应一个特定的中断自系统启动以来所发生的次数。
- “ctxt”给出了自系统启动以来CPU发生的上下文交换的次数。
- “btime”给出了从系统启动到现在为止的时间,单位为秒。
- “processes (total_forks) 自系统启动以来所创建的任务的个数目。
- “procs_running”:当前运行队列的任务的数目。
- “procs_blocked”:当前被阻塞的任务的数目。
2、核
单路、双路、四路指的就是服务器中有几个物理CPU
物理核:每颗CPU的核数也就是CPU中的数据处理单元数量
逻辑核:一般一个核心对应了一个线程,而intel开发出了超线程技术,1个核心能够做到2个线程进行计算。逻辑核数与线程是一一对应的。一般情况下,服务器默认开启超线程,如果CPU支持多线程则会使用。如果不想使用到CPU的超线程功能,需要重启服务器并在BIOS中手动关闭。
cat /proc/cpuinfo | grep “siblings” | uniq --查看单颗CPU的逻辑核数
cat /proc/cpuinfo| grep “cpu cores”| uniq --查看单颗CPU的物理核数
cat /proc/cpuinfo | more
processor : 0 -----逻辑CPU的唯一标识符
vendor_id : GenuineIntel —标识英特尔处理器
cpu family : 6
model : 62
stepping : 4
cpu MHz : 2089.986
cache size : 16390 KB
physical id : 0 —物理cpu的唯一标识
siblings : 12 —代表逻辑cpu个数
core id : 0 —每个物理内核的唯一标识
cpu cores : 6 —物理cpu中的核心数
网络
传统上来说 TCP/IP 被认为是一个四层协议, 而ISO(国际标准化组织),制定了一个国际标准OSI七层协议模型,OSI协议以OSI参考模型为基础界定了每个阶层的协议和每个阶层之间接口相关的标准。
分层的作用
- 应用层为操作系统或网络应用程序提供访问网络服务的接口。应用层协议的代表包括:Telnet、FTP、HTTP、SNMP等。
- 表示层将应用处理的信息转换为适合网络传输的格式,或将来自下一层的数据转换为上层能够处理的格式。数据的表示、安全、压缩。
- 会话层负责建立和断开通信连接(数据流动的逻辑通路),以及数据的分割等数据传输相关的管理。
- 传输层管理两个节点之间的数据传输。负责可靠传输(确保数据被可靠地传送到目标地址)。
- 网络层管理地址管理与路由选择, 在这一层,数据的单位称为数据包(packet)(路由器)。
- 数据链路层负责互连设备之间传送和识别数据帧(交换机)。
- 物理层以”0”、 “1”代表电压的高低,灯光的闪灭,在这一层,数据的单位称为比特(bit),(中继器、集线器、还有我们通常说的双绞线也工作在物理层)。
七层通信
发送方由第七层到第一层 由上到下按照顺序传送数据,每个分层在处理上层传递的数据时,附上当前层协议所必须的 “首部”信息。接收方由第一层到第七层 由下到上按照顺序传递数据,每个分层对接收到的数据进行 “首部”与”内容”分离,在转发给上一层。最终将发送的数据恢复为原始数据。
传输方式的分类
网络通信科根据数据发送方法进行多种分类,分类方法很多,下面列举几种常见的:
面向有连接型和面向无连接型
- 面向有连接型
发送数据之前,需要在收发主机之间建立一条通信线路,在通信传输前后,专门进行建立和断开连接的处理,如果与对端之间无法通信,可避免发送无谓的数据
- 面向无连接型
报文、帧、数据包等的区别
报文(message)是网络中交换与传输的数据单元,也是网络传输的单元。 报文包含了将要发送的完整的数据信息,其长短不需一致。 报文在传输过程中会不断地封装成分组、包、帧来传输,封装的方式就是添加一些控制信息组成的首部,那些就是报文头。
- 应用层:报文(message),一般指完整的信息,传输层实现报文交付,位于应用层的信息分组称为报文;
- 传输层:报文段(segment),组成报文的每个分组;
- 网络层:分组(packet)是网络传输中的二进制格式单元,数据包(datapacket)是TCP/IP通信协议传输中的数据单位;通过网络传输的数据基本单元,包含一个报头和数据本身,其中报头描述了数据的目的地及其与其他数据之间的关系,可以理解为数据传输的分组,我们将通过网络传输的基本数据单元称为数据报(Datagram);
- 链路层:帧(frame),数据链路层的协议数据单元,为了保证数据的可靠传输,把用户数据封装成帧;
- 物理层:PDU(bit),协议数据单元; 抓包,抓到的是传输层的包,packet/frame/Datagram/segment是存在于同条记录中的,这些是基于所在协议层的不同取了不同的名字。
各协议详解