Linux磁盘分区
前言本文是视频教程韩顺平 一周学会Linux部分章节的归纳总结,内容补充和错误纠正。
概念Linux的磁盘分区机制
Linux的磁盘分区机制是指将物理硬盘划分为多个逻辑部分的过程。每个分区都被视为独立的逻辑驱动器,并有自己的文件系统进行格式化和挂载。以下是Linux磁盘分区机制的核心概念:
主分区(Primary Partition):主分区是硬盘上最基本的分区类型,最多可以划分为4个主分区。每个主分区都可以被视为一个独立的逻辑驱动器。
扩展分区(Extended Partition):扩展分区是一种特殊类型的主分区,它可以容纳多个逻辑分区。只能有一个扩展分区存在,并且必须在4个主分区之中。
逻辑分区(Logical Partition):逻辑分区是在扩展分区内创建的分区。通过扩展分区,可以划分出多个逻辑分区来扩展硬盘上的分区数量。
文件系统(File System):每个分区都需要格式化为特定的文件系统以用于存储数据。常见的Linux文件系统包括ext4、XFS、Btrfs等。
挂载(Mounting):挂载是将一个分区与Linux文件系统中的目录进行关联的过程。挂载点是一 ...
Kubeadm安装K8s集群指南
需求最近给公司的一批测试环境的服务器升级k8s集群,下面是一些要求:
k8s从v1.16.x版本升级到v1.27.4版本
运行时使用containerd:v1.6.20版本
网络插件停止以前的flannel,使用calico: v3.24.6版本
这批服务器机器不能连接外国网络
下面记录了主要的操作步骤,以备不时之需
[所有节点]关停旧版本节点的kubelet及其相关服务
关停服务
12345678910111213# 关停kubeletsystemctl stop kubeletsystemctl stop kube-proxy && systemctl disable kube-proxy# 关闭swapswapoff -a# 编辑注释掉swap开机启动vim /etc/fstab# 关停相关服务,下面的只有master节点需要关停systemctl stop etcd && systemctl disable etcdsystemctl stop kube-apiserver && systemctl disable kube ...
GMP模型的应用场景
场景1:G1创建G3P拥有G1,M1获取P后开始运行G1,G1使用go func()创建了G3,为了局部性,G3优先加入到P1(而不是P2)的本地队列。(被淘汰的旧版调度器没有本地队列,无法像现在一样维护局部性)
场景2:G1执行完毕G1执行完成后会执行goexit()函数退出,然后M上运行的goroutine切换为G0,G0负责调度时协程的切换,执行函数schedule()切换G。然后G0切换到G3,然后M开始运行G3,执行G3的excute()函数,这里实现了M的复用。
场景3:G2开辟过多的G假设每个P的本地队列只能存4个G。G2要创建了6个G,前4个G(G3,G4, G5,G6)已经加入p1的本地队列,p1本地队列满了。
G2在创建G7的时候,发现P1的本地队列已满,会将P1本地队列的前一半G取出,次序打乱,将G7和这一半G一同放入全局队列
现在G2再创建G8,队列已经不满了,就可以正常进入p1队列了
场景4:唤醒正在休眠的M在创建G时,运行的G会尝试唤醒其他空闲的P和M组合去执行。
如果G2成功唤醒一个M。这个M绑定了P2,运行G0,但P2的本地队列没有G,此时M ...
GMP模型的设计思想
前言通过上一期的文章,我们知道了Go调度器的由来及作用:Go调度器用于合理分配goroutine(go的协程)到内核级线程中运行,实现高并发
概念GMP模型是指Go调度器的内部模型结构,GMP三个字母是三个不同单词的简写:
G: Goroutine, Go 语言中的协程。每个 G 代表一个要执行的协程,包含了该协程的栈空间、执行状态等信息。调度器通过管理和调度 G 来实现并发执行。
M:Machine,操作系统(内核级)线程(OS thread)。M 是调度器和协程的中间层,负责将协程(G)绑定到线程(M)上执行。Go 调度器会根据系统的负载情况动态创建和销毁 M,以适应并发需求。每个 M 拥有自己的调用栈和一些状态信息,包括指令指针、堆栈指针等。 Go调度器最多可以创建 10000 个M。
P: Processor,逻辑处理器。P 是调度器的实际执行者,负责执行 G。一个 P 在某个时刻只能执行一个 G,但可以执行多个 G。P 执行 G 的过程中,G 会占用 P 的上下文(上下文切换),直到执行完成或发生阻塞。一个 M 可以绑定到一个 P 上执行。
要注意的是:M是操作系统(内核 ...
调度器的由来和分析
前言我在看刘丹冰老师的视频教程Golang深入理解GPM模型时,发现《调度器的由来和分析》这章节有很多有同学在弹幕和评论区表示质疑和不解,所以我结合了一些操作系统的知识对这一章节进行的重构,创作了本文章。如果有出现纰漏,请及时指出。
用户态|内核态我们的操作系统有两种状态,用户态和内核态,我们可以简单把用户态和内核态理解为平民阶级和特权阶级。应用程序在用户态下执行时,只能访问受限的资源和执行受限的指令集。内核态下运行的代码则可以直接操作硬件设备、更改系统资源状态、执行特权指令等。这是为了保护系统,因为一些特权指令是很危险的,例如清空内存。如果我们不得不使用用户态下的特权指令时,可以通过系统调用切换状态。值得注意的是系统调用发生在用户态,对系统调用的相关处理需要在内核态下进行。
关于更多用户态和内核态的知识,大家可以自行查询相关资料,但是对于接下来课题的学习,大家只要记住一点就好了:用户态和内核态的切换是一种昂贵的操作,涉及到上下文切换、权限切换等开销。
进程|线程|协程进程、协程和线程是计算机中用于实现并发和并行的概念。它们表示了不同的执行单元和调度方式。
进程
进程是操作系统分 ...
Linux任务调度工具
前言本文是视频教程韩顺平 一周学会Linux部分章节的归纳总结,内容补充和错误纠正。
概述Linux中的任务调度是指在特定的时间或条件下执行预定的任务。crond和at都是Linux中用于任务调度的工具。crond可以周期性地执行任务,而at则可以在指定的时间点执行任务。它们都可以帮助用户在特定的时间或条件下自动执行预定的任务,提高工作效率。
crond简要介绍
crond是Linux系统中的一个守护进程,负责周期性地执行预定的任务。它根据预设的时间表(通常是crontab文件)来触发任务的执行。crontab文件包含了一系列的任务定义,每个任务定义包括了任务的执行时间、执行的命令或脚本等信息。crond会根据这些定义,按照设定的时间间隔周期性地执行任务。常见的时间间隔包括每分钟、每小时、每天、每周、每月等。
需要注意的是,at命令在某些系统上可能未预装(本人使用的Ubuntu 22.04未预装),可能需要通过包管理器安装。
基本语法
corntab [选项]:选项如下
选项
说明
-e
编辑corntab文件
-l
查询corntab定时任务调度
-r
递归删 ...
Linux权限管理
前言本文是视频教程韩顺平 一周学会Linux部分章节的归纳总结,内容补充和错误纠正。
概念组
Linux系统中的每个文件和目录都有一组权限,用于控制对它们的访问。这些权限分为三个类别:
所有者(Owner)
所属组(Group)
其他人(Others)
权限
每个类别都有读(Read)、写(Write)和执行(Execute)权限。权限可以使用符号表示法来表示,其中每个类别都有一个字母表示权限:
r(读权限):表示可以读取文件内容或查看目录中的文件列表。
w(写权限):表示可以修改文件内容,或在目录中创建、删除和重命名文件。
x(执行权限):对于文件,表示可以执行文件作为可执行程序;对于目录,表示可以进入目录。
注意:如上面所说,如果你对一个文件拥有w权限,你可以修改这个文件,但是你并不能删除这个文件。删除这个文件的前提是你拥有文件所在目录的w权限
在Linux中权限有两种表示方法:
符号表示法
权限符号表示法的格式为:[所有者权限][所属组权限][其他人权限]。
例如,rw-r--r--表示所有者具有读写权限,所属组和其他人只有读权限,数字表示法表示为644
数字表示法
权限 ...
基于均方根(RMS)和过零率的语音/音乐判别器
原文链接https://www.csd.uoc.gr/~tziritas/papers/07tmm01-panagiotakis-proof.pdf
摘要在过去的几年,我们对开发提取音视频媒体中信息的方法做出了很多重大努力,以便于在数据库中自动存储和检索这些信息。在这项工作中,我们处理音频的特征,这可能用于更大的音视频系统的一部分或者作为独立的系统,例如将音频记以数字信号形式存储在磁盘。我们的目标是先开发一个系统用于对单独的音频分段,然后将其分为两个主要分类之一:语音或者音乐。系统要求包括处理速度以及在实时环境中以尽量小延迟去执行操作。因为限制了两个类,需要提取的特征更少了,而且需要的计算都是直接计算。实验结果表明,在不牺牲性能的情况下,效率非常好。
分段基于平均信号幅度分布,而分类则利用与频率相关的附加特征。 分类算法可以与分段算法结合使用,在这种情况下,它可以验证或否定 音乐-语音或语音-音乐的转换,或者对于给定的音频片段独立地使用。基本特征是在20毫秒的时间间隔内计算的,从而可以将分段的边界精确到20毫秒的准确度。最小的分段长度为一秒。分割和分类算法在一个大型数据集上进行了基准测 ...
Linux常用命令
前言本文是视频教程韩顺平 一周学会Linux部分章节的归纳总结,内容补充和错误纠正。
概述Linux命令是一组用于在Linux操作系统上执行特定任务的命令。这些命令可以在终端窗口中使用,也可以通过脚本自动化执行。Linux命令可以用于管理文件和目录、安装和卸载软件、配置网络、查看系统状态等多种任务。在Linux中,命令通常由一个或多个单词组成,可以带有选项和参数,用于指定命令的行为和操作对象。Linux命令是Linux操作系统中的核心组件之一,掌握Linux命令可以帮助用户更好地管理和使用Linux系统。
下面整理了一些Linux系统中常用的命令,让我们一起看看吧
帮助命令基本介绍
man [命令|配置文件]:获取该命令或配置文件的帮助信息,例如查看ls命令的帮助信息可以输入man ls
help [命令] :获取Shell内置命令的帮助信息,例如help cd查看cd命令信息
--help:一般所有的CLI程序都是命令和选项组成的,一般情况都有--help选项(有时候是-h),可以查看该命令及其选项将要说明
关机和重启基本介绍
shutdown -h now:立刻关机
shut ...
Linux的目录结构
前言本文是视频教程韩顺平 一周学会Linux部分章节的归纳总结,内容补充和错误纠正。
概述在Linux中,一切皆为文件。Linux系统会把硬件,网络,系统等各种东西映射成文件。
因此与Windows不同,Linux中的目录结构是有规范的,不同的目录承载着不同的功能。
具体的目录结构下表整理了Linux系统一些具体的目录结构,使用频率和说明
目录
使用频率
说明
/bin
【常用】如/usr/bin,/usr/local/bin
Binary的简写,存放着最常用的程序(命令)
/sbin
【常用】如/usr/sbin,/usr/local/sbin
Super User Binary的简写,存放系统管理员使用的系统管理程序(命令)
/home
【常用】如/home/UserName
在Linux中每一个普通用户都有一个自己的目录,一般以自己的用户名命名
/root
【常用】
系统管理员的目录,也称为超级权限者的用户目录
/lib
【不常用】
系统开机所需最基本的动态链接共享库,其作用类似于Windows里的DDL文件。几乎所有的应用程序都需要用到这些共享库 ...