linux

linux上下文切换

上下文切换 CPU 上下文切换,就是先把前一个任务的 CPU 上下文(也就是 CPU 寄存器和程序计数器)保存起来,然后加载新任务的上下文到这些寄存器和程序计数器,最后再跳转到程序计数器所指的新位置,运行新任务。 上下文切换的类型 中断上下文切换 线程上下文切换 用户态内核态上下文切换 进程上下文切换 用户态内核态上下文切换 进程既可以在用户空间运行,又可以在内核空间中运行。进程在用户空间运行时,被称为进程的用户态,而陷入内核空间的时候,被称为进程的内核态。 从用户态到内核态的转变,需要通过系统调用来完成。比如,当我们查看文件内容时,就需要多次系统调用来完成:首先调用 open() 打开文件,

  • 凯文
5 min read
linux

linux之lsof

lsof命令是什么? 可以列出被进程所打开的文件的信息。被打开的文件可以是 普通的文件 目录 网络文件系统的文件 字符设备文件 (函数)共享库 管道,命名管道 符号链接 底层的socket字流,网络socket,unix域名socket 在linux里面,大部分的东西都是被当做文件的…..还有其他很多 lsof使用 列出所有打开的文件: lsof 备注: 如果不加任何参数,就会打开所有被打开的文件,建议加上一下参数来具体定位 查看谁正在使用某个文件 lsof /filepath/file 递归查看某个目录的文件信息 lsof +D /filepath/

  • 凯文
2 min read
linux

linux之内存&cpu分享

问题 RAM与ROM分别是什么? RAM为什么不能持久化? 内存管理的最小单位是什么? 什么是虚拟内存? cache line的作用? volatile的具体实现? RAM RAM作用 内存的存储单元采用了随机读取存储器(RAM, Random Access Memory)。所谓的“随机读取”,是指存储器的读取时间和数据所在位置无关。与之相对,很多存储器的读取时间和数据所在位置有关。就拿磁带来说,我们想听其中的一首歌,必须转动带子。如果那首歌是第一首,那么立即就可以播放。如果那首歌恰巧是最后一首,我们快进到可以播放的位置就需要花很长时间。 RAM的存储 RAM依赖电容器存储数据。电容器充满电后代表1(二进制),未充电的代表0。 这样的话,

  • 刘凯
16 min read
linux

linux之cpu cache

CPU缓存概述 为什么需要CPU缓存 cpu缓存访问速度 cpu缓存介绍 CPU Cache Cache 结构 cache寻址方式 Cache Entry & Cache line L3 Cache CPU高速缓存读操作 直接映射寻址过程 组关联寻址过程 Cache Miss CPU高速缓存写操作 缓存写入策略 写直达 写回 缓存一致性协议 MESI MESI协议缓存状态 MESI状态转换 多核缓存协同操作 读写屏障 MESI优化和他们引入的问题 CPU切换状态阻塞解决-存储缓存(

  • 刘凯
32 min read
linux

主板频率、内存频率与cpu频率

频率与超频 【频率】电子元件工作的时候会运行在一定的频率下,频率越高,这个元件的处理速度越快,这就和汽车发动机的马力一样,但是在电脑中,性能不单单只是由频率这一项参数决定,所以频率仅限相同的产品,同一代进行横向对比。 【超频】电子元件既然会照着一定的频率运行,这个频率肯定不是凭空而来,他是厂家在出厂的时候人为设定的,厂家会将频率设定在一个能长期稳定运行的状态下,既然频率是人为设定的,那我们也可以去人为更改,将默认的频率手动修改到更高,让元件超负荷运转,这就是俗称的超频,由于频率高了,电压与发热也会变高,因此超频虽然能免费提升性能,但也要承担相应风险。 内存条的标注频率 内存条的标注频率指的就是你在买内存的时候,商品标题所写的内存频率,这个就是代表了内存条的物理属性。 内存条的标注频率代表了这个内存最高可以稳定工作在什么样的频率下,这里有两个关键词就是最高和稳定,内存频率是人为设定的,只要你想,2400的内存同样可以设定为3200,

  • 凯文
6 min read
linux

linux之CPU

问题 CPU的规格一样吗? 多核 CPU 和多个 CPU 有何区别? CPU线程切换时,CPU缓存中的数据如何变化? CPU概述 cpu作用 CPU只执行三种基本的操作,分别是读出数据、处理数据和往内存写数据。 cpu规格 主流CPU还是Intel和AMD两家的天下。无论是高端还是低端,两大品牌都有着全线的产品。 Intel和AMD的规格是不同的,根据根据主板的cpu接口选择适当的cpu,值得一提的是,同样的Intel,不同系列的cpu,规格也不同,如i3~9与至强系列 系列 尺寸 接口 i3~i9 37.5×

  • 刘凯
20 min read
linux

linux之手动实现容器

目录隔离 创建目录 在工作目录下创建/usr,并将本机该目录下的所有文件copy到工作目录中 启动程序 启动单独mount namespace的程序 unshare -m bash 如果通过unshare命令后,挂载目录后,在其它的mount namespace中仍然可以通过 mount 命令查到,则下载最新的unshare可执行文件 挂载目录 当通过docker run -v挂载目录时,将某个容器外的目录挂载至容器内 mount --bind /data1 data 发现在该mount namespace中,mount命令执行结果如下 [root@k8s-master mount]

  • 刘凯
10 min read
linux

linux系统之磁盘存储

问题 ls的size表示什么,与du查看大小的区别是什么? 为什么目录占空间大小为4096? 分区是按盘面还是柱面? 软连接和硬连接有什么区别? 文件名存储在inode还是文件对应的block中? 磁盘结构 盘片、盘面、磁头 硬盘中一般会有多个盘片组成,每个盘片包含两个面,每个盘面都对应地有一个读/写磁头。受到硬盘整体体积和生产成本的限制,盘片数量都受到限制,一般都在5片以内。盘片的编号自下向上从0开始,如最下边的盘片有0面和1面,再上一个盘片就编号为2面和3面。 磁道、扇区 磁道 上图显示的是一个盘面,盘面中一圈圈灰色同心圆为一条条磁道 扇区 从圆心向外画直线,可以将磁道划分为若干个弧段,每个磁道上一个弧段被称之为一个扇区(图践绿色部分) 扇区是磁盘的最小组成单元,通常是512字节。

  • 刘凯
7 min read
linux

linux存储相关命令

磁盘操作 fdisk-查看及管理分区 分区操作 df-分区情况统计 mount/umount-挂载/取消挂载 tune2fs-调整和查看ext2/ext3文件系统参数 blkid-查看文件系统基本信息 e2label-设定分区的label blockdev-获取/设置块设备的属性值 dumpe2fs-查看分区详细信息 格式化 mkfs-格式化分区 mke2fs-格式化ext系统分区 文件操作 du-查看占用空间大小 ls-列出文件 stat-显示文件详细信息 fuser-查找使用文件的进程 检查/修复分区 fsck-检查并修复linux文件系统 badblocks-检查硬盘坏道 filefrag-查看文件碎片报告 e2label 作用 e2label命令,用于获取或设置ext2、ext3文件系统对应的分区的卷标。 卷标:

  • 刘凯
15 min read
linux

tcp 的三个接收队列

prequeue 在linux内核中,每一个网络数据包,都被切分为一个个的skb,这些skb先被内核接收,然后投递到对应的进程处理,进程把skb拷贝到本tcp连接的sk_receive_queue中,然后应答ack。 以往的内核处理这些skb的时候,是直接通过内核调度的,有数据来了,就进行进程调度,这样虽然实时性高,但是会导致进程阻塞,或者调度消耗大的问题。因此内核搞出来一个新的东西叫做,prequeue,skb先统一由内核接收, 然后通过内核原有的进程调度机制进行调度,当调度到某一个进程的时候,该进程发现prequeue中有skb属于自己,于是把prequeue中的skb拷贝到本进程的sk_receive_queue中,并做ack应答。 这样一来,收发网络数据包,就不会引起进程调度了,虽然ack的时间可能会不那么及时,但是cpu的利用率实际上是提高了。 sk_

  • network
1 min read
linux

Connection reset by peer

连接原因 如果一端的Socket被关闭(或主动关闭,或因为异常退出而 引起的关闭),另一端仍发送数据,发送的第一个数据包引发该异常(Connect reset by peer)。 Socket默认连接60秒,60秒之内没有进行心跳交互,即读写数据,就会自动关闭连接。 一端退出,但退出时并未关闭该连接,另一端如果在从连接中读数据则抛出该异常(Connection reset)。 简单的说就是在连接断开后的读和写操作引起的。 Connection reset by peer的常见具体原因 1)服务器的并发连接数超过了其承载量,服务器会将其中一些连接关闭; 如果知道实际连接服务器的并发客户数没有超过服务器的承载量,则有可能是中了病毒或者木马,引起网络流量异常。可以使用netstat -an查看网络连接情况。

  • 凯文
2 min read
linux

kill 命令解析

kill命令概述 通过man kill查看文档说明 kill命令将指定的信号发送到指定的进程或进程组。 如果未指定信号,则默认的发送信号为TERM,当该进程未处理TERM信号时,该信号将杀死该进程。 如果发送的信号为0,则不发送信号,但仍会执行错误检查。 linux信号列表 [root@test-master temp]# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE

  • 凯文
3 min read
linux

理解inode

inode是什么? 在文件系统中,文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。 操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。

  • 凯文
9 min read
linux

TUN/TAP概述及操作

TUN/TAP概述 在云计算时代,虚拟机和容器已经成为标配。它们背后的网络管理都离不开一样东西,就是虚拟网络设备,或者叫虚拟网卡,tap/tun 就是在云计算时代非常重要的虚拟网络网卡。 TUN/TAP 是什么 tap/tun 是 Linux 内核 2.4.x 版本之后实现的虚拟网络设备,不同于物理网卡靠硬件网卡实现,tap/tun 虚拟网卡完全由软件来实现,功能和硬件实现完全没有差别,它们都属于网络设备,都可以配置 IP,都归 Linux 网络设备管理模块统一管理。

  • 凯文
9 min read
linux

Linux中的终端、控制台、tty、pty

tty(终端设备的统称): tty一词源于teletypes,或者teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘阅读和发送信息的东西,后来这东西被键盘与显示器取代,所以现在叫终端比较合适。 终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。 pty(伪终端,虚拟终端): 但是如果我们远程telnet到主机或使用xterm时不也需要一个终端交互么?是的,这就是虚拟终端pty(pseudo-tty) pts/ptmx(pts/ptmx结合使用,进而实现pty): pts(pseudo-terminal slave)是pty的实现方法,与ptmx(pseudo-terminal master)配合使用实现pty。 终端特殊设备 在Linux系统的设备特殊文件目录/

  • network
4 min read