- 博客(281)
- 资源 (1)
- 收藏
- 关注
原创 linux性能调优汇总(三)IO负载
本部分主要介绍日常开发中,经常使用的程序性能调试命令及思路,主要分为CPU、内存、磁盘IO三部分本章主要介绍IO部分
2024-03-23 10:49:06 89
原创 linux性能调优汇总(二)内存及sys目录
本部分主要介绍日常开发中,经常使用的程序性能调试命令及思路,主要分为CPU、内存、磁盘IO三部分本章主要介绍内存部分
2024-03-23 10:09:44 137
原创 linux性能调优汇总(一)cpu
本部分主要介绍日常开发中,经常使用的程序性能调试命令及思路,主要分为CPU、内存、磁盘IO三部分本章主要介绍CPU部分
2024-03-23 09:53:19 119
原创 Linux内核--设备驱动(一)驱动的结构介绍
本文首先介绍虚拟文件系统下层直至硬件输入输出设备的结构关系,然后重点分析字符设备相关的整体逻辑情况。
2024-02-01 15:08:06 353
原创 Linux内核--文件系统(七)文件系统中文件类型与使用
理解了文件系统的结构之后,我们来看一下文件的类型。Linux以文件的形式对计算机中的数据和硬件资源进行管理,也就是彻底的一切皆文件,反映在Linux的文件类型上就是:**普通文件、目录文件(也就是文件夹)、设备文件、链接文件、管道文件、套接字文件(数据通信的接口)**等等。而这些种类繁多的文件被Linux使用目录树进行管理, 所谓的目录树就是以根目录(/)为主,向下呈现分支状的一种文件结构。
2024-01-29 17:57:11 52
原创 Linux内核--文件系统(六)虚拟文件系统结构介绍
"一切皆文件"是Linux的基本哲学之一,不仅是普通的文件,包括目录、字符设备、块设备、套接字等,都可以以文件的方式被对待。实现这一行为的基础,正是Linux的虚拟文件系统机制。
2024-01-29 10:45:22 52
原创 Linux内核--文件系统(五)虚拟文件系统的操作原理
基于上文介绍的文件系统的基本结构,本文将继续深入Linux文件系统的精髓所在:虚拟文件系统及其底层实现。
2024-01-26 14:19:06 36
原创 Linux内核--文件系统(四)虚拟文件系统详解
下面就开始正式进入虚拟文件系统的探讨,首先和大家详细的了解一下虚拟文件系统的构成,下一篇文件会讲解虚拟文件系统的使用及其底层实现
2024-01-26 10:03:55 42
原创 Linux内核--文件系统(三)文件系统原理架构介绍
本节将正式开始分析Linux的文件系统。Linux一切皆文件的思想可谓众所周知,而其文件系统又是字符设备、块设备、管道、进程间通信、网络等等的必备知识,因此其重要性可想而知。本文将先介绍文件系统基础知识,然后介绍最重要的结构体inode以及构建于其上的一层层的文件系统。
2024-01-25 11:01:34 243 1
原创 Linux内核--文件系统(二)文件系统详解
现代操作系统为解决信息能独立于进程之外被长期存储引入了文件,文件作为进程创建信息的逻辑单元可被多个进程并发使用。在 UNIX 系统中,操作系统为磁盘上的文本与图像、鼠标与键盘等输入设备及网络交互等 I/O 操作设计了一组通用 API,使他们被处理时均可统一使用字节流方式。换言之,UNIX 系统中除进程之外的一切皆是文件,而 Linux 保持了这一特性。为了便于文件的管理,Linux 还引入了目录(有时亦被称为文件夹)这一概念。目录使文件可被分类管理,且目录的引入使 Linux 的文件系统形成一个层级结构的目
2024-01-23 14:36:24 41
原创 Linux内核--文件系统(一)磁盘IO及优化
计算机硬件性能在过去十年间的发展普遍遵循摩尔定律,通用计算机的CPU主频早已超过3GHz,内存也进入了普及DDR4的时代。然而传统硬盘虽然在存储容量上增长迅速,但是在读写性能上并无明显提升,同时SSD硬盘价格高昂,不能在短时间内完全替代传统硬盘。传统磁盘的I/O读写速度成为了计算机系统性能提高的瓶颈,制约了计算机整体性能的发展。硬盘性能的制约因素是什么?如何根据磁盘I/O特性来进行系统设计?针对这些问题,本文将介绍硬盘的物理结构和性能指标,以及操作系统针对磁盘性能所做的优化,最后讨论下基于磁盘I/O特性
2024-01-23 14:32:30 146
原创 Linux内核--网络协议栈(九)epoll的源码实现
在客户端和服务器连接成功,会得到一个连接套接字,开始通讯后,主机使用通讯套接字调用recv()来获取数据,当程序运行到 Recv 时,它会一直阻塞等待,直到接收到数据才往下执行那么,如何监视多个 Socket 呢?就是通过IO多路复用,让一个进程可以监视多个描述符,一个某个描述符数据就绪,就通知程序进行相应的读写操作。IO多路复用有很多方式,常见的有多线程、select、poll、epoll本文就来详细分析以下epoll的底层实现
2024-01-21 11:09:09 89
原创 Linux内核--网络协议栈(四)sk_buff介绍
在 Linux 的网络栈实现代码中,引用到了一些数据结构。要理解 Linux 内部的网络实现,需要先理清这些数据结构的作用。关键数据结构主要有两个: sk_buff 和 net_device。
2024-01-17 22:53:31 254
原创 Linux内核--网络协议栈(二)整体介绍
linux的网络部分由网卡的驱动程序和kernel的网络协议栈部分组成,它们相互交互,完成数据的接收和发送。Linux操作系统的最大功能之一是其网络栈。它最初是BSD协议栈的衍生物,并且组织良好,具有一组干净的接口。其接口范围从协议无关接口(如通用socket层接口或设备层)到各个网络协议的特定接口
2024-01-16 22:24:13 69
原创 Linux内核--网络协议栈(七)UDP协议层/IP层的处理
本文分享了Linux内核网络数据包发送在UDP协议层的处理,主要分析了udp_sendmsg和udp_send_skb函数,并分享了UDP层的数据统计和监控以及套接字发送大小的调优。最后会简单介绍IP层的处理,但不会深入讲解网络协议
2024-01-16 09:43:31 133
原创 Linux内核--网络协议栈(六)UDP数据包发送
本文首先从宏观上概述了数据包发送的流程,然后分析了协议层注册进内核以及被套接字的过程,最后介绍了通过套接字发送网络数据的过程。
2024-01-15 17:15:03 128
原创 Linux内核--进程管理(十二)LinuxIO基础知识与概念
程序是指储存在外部存储(如硬盘)的一个可执行文件, 而进程是指处于执行期间的程序, 本篇文章就来简单介绍以下进程中的IO的底层流程
2024-01-06 10:17:29 1204
原创 Linux内核--进程管理(六)内核进程管理几种CPU调度策略
我们知道,程序需要获得CPU的资源才能被调度和执行,那么当一个进程由于某种原因放弃CPU然后进入阻塞状态,下一个获得CPU资源去被调度执行的进程会是谁呢?下图中,进程1因为阻塞放弃CPU资源,此时,进程2刚IO操作结束,可以获得CPU资源去被调度,进程3的时间片轮转结束,也同样可以获得CPU资源去被调度,那么,此时的操作系统应该安排哪个进程去获得CPU资源呢?这就涉及到我们操作系统的CPU调度策略了。
2024-01-06 10:16:29 895
原创 Linux内核--进程管理(二)内核进程管理(创建与唤醒)原理详解
Linux是一种动态系统,能够适应不断变化的计算需求。Linux计算需求的表现是以进程的通用抽象为中心的。进程可以是短期的(从命令行执行的一个命令),也可以是长期的(一种网络服务)。因此,对进程及其调度进行一般管理就显得极为重要。
2024-01-06 10:16:15 914
原创 Linux内核--进程管理(七)内核进程调度的更替
内存中保存了对每个进程的唯一描述, 并通过若干结构与其他进程连接起来.调度器面对的情形就是这样, 其任务是在程序之间共享CPU时间, 创造并行执行的错觉, 该任务分为两个不同的部分, 其中一个涉及调度策略, 另外一个涉及上下文切换.
2024-01-06 10:16:02 783
原创 Linux内核--进程管理(九)Linux内核进程管理进程优先级
自从多任务操作系统诞生以来,进程执行占用cpu的能力就是一个必须要可以人为控制的事情。因为有的进程相对重要,而有的进程则没那么重要。进程优先级起作用的方式从发明以来基本没有什么变化,无论是只有一个cpu的时代,还是多核cpu时代,都是通过控制进程占用cpu时间的长短来实现的。
2024-01-06 10:15:45 864
原创 Linux内核--进程管理(十三)O(1)调度算法
Linux是一个支持多任务的操作系统,而多个任务之间的切换是通过 调度器 来完成,调度器 使用不同的调度算法会有不同的效果。Linux2.4版本使用的调度算法的时间复杂度为O(n),其主要原理是通过轮询所有可运行任务列表,然后挑选一个最合适的任务运行,所以其时间复杂度与可运行任务队列的长度成正比。而Linux2.6开始替换成名为 O(1)调度算法,顾名思义,其时间复杂度为O(1)。虽然在后面的版本开始使用 CFS调度算法(完全公平调度算法),但了解 O(1)调度算法 对学习Linux调度器还是有很大帮助的,
2024-01-03 16:11:39 821
原创 Linux内核--进程管理(十七)共享内存和信号量
本文为进程间通信的最后一篇,介绍共享内存和信号量。之所以将二者一起叙述,是因为二者有着密不可分的关系。共享内存会利用虚拟内存和物理内存的映射关系,让不同进程开辟一块虚拟空间映射到相同的物理内存上,从而实现了两个进程对相同区域的读写,即进程间通信。而信号量则实现了互斥锁,可以为共享内存提供数据一致性的保证,因此二者常结合使用。
2024-01-03 16:06:34 831
原创 Linux内核--进程管理(十六)进程间通信之信号
众所周知,System V IPC进程间通信机制体系中有着多种多样的进程间通信方式,如管道和有名管道,消息队列,信号,共享内存和信号量,套接字。从本文开始我们就逐个剖析进程间通信的机制和底层原理,本文文章主要介绍信号
2024-01-03 15:56:08 859
原创 Linux内核--进程管理(十)任务调度核心schedule的内核实现
在前文中,我们分析了内核中进程和线程的统一结构体task_struct,并分析进程、线程的创建和派生的过程。在本文中,我们会对任务间调度进行详细剖析,了解其原理和整个执行过程。由此,进程、线程部分的大体框架就算是介绍完了。本节主要分为三个部分:Linux内核中常见的调度策略,调度的基本结构体以及调度发生的整个流程。下面将详细展开说明。
2024-01-03 15:40:22 898
原创 Linux内核--进程管理(五)进程、线程的创建和派生
在前文中,我们分析了内核中进程和线程的统一结构体task_struct,本文将继续分析进程、线程的创建和派生的过程。首先介绍如何将一个程序编辑为执行文件最后成为进程执行,然后会介绍线程的执行,最后会分析如何通过已有的进程、线程实现多进程、多线程。因为进程和线程有诸多相似之处,也有一些不同之处,因此本文会对比进程和线程来加深理解和记忆。
2024-01-03 15:16:15 1054
原创 Linux内核--进程管理(四)进程的核心—task_truct
在 Linux 里面,无论是进程,还是线程,到了内核里面,我们统一都叫任务(Task),由一个统一的结构 task_struct 进行管理。这个结构非常复杂,本文将细细分析task_struct结构。主要分析顺序会按照该架构体中的成员变量和函数的作用进行分类
2024-01-03 15:05:55 890
原创 Linux内核--进程管理(一)进程的概念控制单元
本章开始,我们进入linux五大子系统之一的进程管理,本篇文章主要介绍进程的生命周期于内核中的控制单元
2023-12-12 21:01:50 963
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人