自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(121)
  • 收藏
  • 关注

原创 内核IPv4路由选择子系统(简述)

内核IPv4路由选择子系统(简述)

2022-08-10 09:56:45 1442 1

原创 epoll系统调用及内核实现

epoll系统调用及内核实现

2022-08-10 09:56:02 345

原创 内核Netfilter框架的原理及功能

内核Netfilter框架的原理及功能

2022-08-10 09:55:35 759

原创 一文详解TCP三次握手的状态迁移(从应用层到内核传输层)

一文详解TCP三次握手的状态迁移(从应用层到内核传输层)

2022-08-10 09:55:08 271

原创 内核与协议无关接口层的实现

内核与协议无关接口层的实现

2022-08-09 17:01:29 491

原创 Linux内核ICMP协议的实现

Linux内核ICMP协议的实现

2022-08-09 17:00:07 937

原创 内核传输层的实现

​ 每个操作系统都必须提供网络子系统入口及API,Linux内核网络子系统提供的标准POSIX套接字API向用户提供接口。在Linux中传输层之上的一切都属于用户空间。SOCK_STREAM(流套接字):提供可靠的字节流通信信道。TCP套接字就属于流套接字。SOCK_DGRAM(数据报套接字):支持消息交换。数据报套接字提供的通信信道不可靠,因为数据包可能被丢弃、不按顺序到达或重复。UDP套接字属于数据报套接字。SOCK_RAW(原始套接字):直接访问IP层,支持使用协议无关的传输层格式收发数据。...

2022-08-09 16:58:23 392

原创 内核网络层的实现

在任何IP实现中,路由都是一个重要的部分,不仅在转发外部分组时需要,而且也用于发送本地计算机产生的分组。查找数据从计算机“外出”的正确路径的问题,不仅在处理非本地地址时会遇到,在本地计算机有几个网络接口时,也会有此类问题。即使只有一个物理上的网络适配器,也可能有环回设备这样的虚拟接口,同样会导致该问题。每个接收到的分组都属于下列3个类别之一。(1) 其目标是本地主机。(2) 其目标是当前主机直接连接的计算机。(3) 其目标是远程计算机,只能经由中间系统到达。​ 前一节讨论了第一类分组。...

2022-08-09 16:56:40 415

原创 Linux内核netLink套接字

本章介绍了Netlink套接字。它提供了一种在用户空间和内核间进行通信的机制,被广泛用于网络子系统。在此你见到了一些Netlink套接字使用示例。另外,本章还讨论了Netlink消息以及它们是被如何创建和处理的。...

2022-08-09 16:54:55 3603

原创 Linux内核邻接子系统(arp协议)的工作原理

Linux内核邻接子系统(arp协议)

2022-08-09 16:49:38 1589

原创 内核网络接口层的实现

内核网络接口层的实现

2022-08-09 16:46:55 289

原创 套接字相关数据据结构及分层模型

套接字相关数据据结构及分层模型

2022-08-09 16:43:52 671

原创 Linux 文件系统(VFS、EXT、proc)

为支持各种本机文件系统,且在同时允许访问其他操作系统的文件,Linux内核在用户进程(或C标准库)和文件系统实现之间引入了一个抽象层。该抽象层称之为虚拟文件系统(Virtual File System),简称VFS。VFS的任务并不简单。一方面,它用来提供一种操作文件、目录及其他对象的统一方法。另一方面,它必须能够与各种方法给出的具体文件系统的实现达成妥协,这些实现在具体细节、总体设计方面都有一些不同之处。但VFS的回报很高,它使得Linux内核更加灵活了。内核支持40多种文件系统,其来源各种各样:来自MS

2022-08-09 08:38:33 644

原创 一文详解处理器缓存(缓存一致性、读写屏障、指令预取、false sharing)

一文详解处理器缓存(缓存一致性、读写屏障、指令预取、false sharing)

2022-08-09 00:25:34 991

原创 页回收机制的原理

当我们申请分配页的时候,页分配器首先尝试使用低水线分配页。如果使用低水线分配失败,说明内存轻微不足,页分配器将会唤醒内存节点的页回收内核线程,异步回收页,然后尝试使用最低水线分配页。如果使用最低水线分配失败,说明内存严重不足,页分配器会直接回收。物理页根据是否有存储设备支持分为两类。(1)交换支持的页:没有存储设备支持的物理页,包括匿名页,以及tmpfs文件系统(内存中的文件系统)的文件页和进程在修改私有的文件映射时复制生成的匿名页。(2)存储设备支持的文件页。针对不同的物理页,采用不同的回收策略:(1)

2022-08-08 02:25:50 272

原创 反碎片化技术(外部碎片)的原理

如何避免Linux的物理内存碎片化内存碎片可分为内部碎片和外部碎片,对于内核来说,外部碎片是一个问题,内核有时候需要分配超过一页的物理内存,因为内核使用线性映射区域的虚拟地址,所以必须分配连续的物理页。为解决外部碎片问题,内核引入反碎片技术:a)2.6.33版本引入虚拟可移动区域;b)2.6.23版本引入成块回收(集中回收),从3.5版本废除,被内存碎片整理技术取代。c)2.6.24版本引入了根据可移动性分组的技术,把物理页分为不可移动页、可移动页和可回收页3种类型,伙伴分配器中已经介绍了这种反碎片技术。d

2022-08-06 23:07:35 699

原创 页错误异常处理(page fault)的实现

在取指令或数据的时候,处理器的内存管理单元需要把虚拟地址转换成物理地址。如果虚拟页没有映射到物理页,或者没有访问权限,处理器将生成页错误异常(page fault)。

2022-08-06 07:55:30 2497

原创 页表缓存(TLB)和巨型页的实现

页表缓存(TLB)和巨型页的实现

2022-08-06 01:20:21 893

原创 不连续页分配器 & 每处理器内存分配器 & 页表

当设备长时间运行后,内存碎片化,很难找到连续的物理页。在这种情况下,如果需要分配长度超过一页的内存块,可以使用不连续页分配器,分配虚拟地址连续但是物理地址不连续的内存块。在32位系统中,不连续页分配器还有一个好处:优先从高端内存区域分配页,保留稀缺的低端内存区域。vmalloc的优点:vmalloc的大块内存(大于等于1页)分配成功率一般高于kmalloc以及高阶buddy。避免外部碎片的问题,在机器长时间运行后,外部碎片严重,可能出现无法通过buddy或者kmalloc等分配大块连续的物理内存,这个时候

2022-08-05 17:05:24 335

原创 块分配器SLAB的内核实现

假设一个slab包含4个对象,使用1号对象存放空闲对象链表,初始状态如图3.28所示。这种方案会不会导致可以分配的对象减少一个呢?答案是不会,存放空闲对象链表的对象可以被分配。这种方案采用了巧妙的方法。(1)必须把存放空闲对象链表的对象索引放在空闲对象数组的最后面,保证这个对象是最后一个被分配出去的。(2)分配最后一个空闲对象,page->active增加到4,page->freelist变成空指针,所有对象被分配出去,已经不需要空闲对象链表,如图3.29所示。...

2022-08-04 23:53:13 319

原创 伙伴分配器的内核实现

内核中的伙伴分配器

2022-08-02 00:32:29 226

原创 mmap内核实现及物理内存组织结构

mmap内核实现及物理内存组织结构

2022-07-31 00:00:59 396

原创 内存映射原理及mmap

内存映射原理及mmap

2022-07-30 23:58:35 1106

原创 内存管理架构及虚拟地址空间布局

内存管理架构及虚拟地址空间布局

2022-07-30 23:56:38 561

原创 Linux 内核活动专题

​在CPU得知发生中断后,它将进一步的处理委托给一个软件例程,该例程可能会修复故障、提供专门的处理或将外部事件通知用户进程。由于每个中断和异常都有唯一的编号,内核使用一个数组,数组项是指向处理程序函数的指针。相关的中断号根据数组项在数组中的位置判断,如图14-1所示。...

2022-07-29 20:02:31 347

原创 Ubuntu 的Linux内核更换操作流程

Ubuntu 内核更换

2022-06-25 15:17:36 428

原创 现代操作系统 第五章 输入/输出

现代操作系统 第五章 输入/输出文章目录现代操作系统 第五章 输入/输出I/O 硬件原理内存映射I/O直接存储器存取重温中断I/O软件原理I/O软件层次中断处理程序设备驱动程序与设备无关的 I/O 软件设备驱动程序的统一接口缓冲!用户空间的I/O软件总结本文为读书摘要(个人认为重要的知识点)本文只选取了 与I/O硬件编程有关的一般性背景知识(5.1~5.3)。这些内容可以看成是对1.4节介绍性材料的复习和扩充。I/O 硬件原理I/O设备I/O设备大致可以分为两类:块设备(block dev

2022-03-27 15:42:45 2267

原创 现代操作系统 第六章 死锁

现代操作系统 第六章 死锁文章目录现代操作系统 第六章 死锁资源死锁死锁检测和死锁恢复死锁避免死锁预防其他问题两阶段加锁通信死锁活锁 (活动的”死锁“)习题本文为读书摘要(个人认为重要的知识点),穿插课后习题的选取(主要选取考察概念性的习题)资源为了尽可能使关于死锁的讨论通用,**我们把这类需要排他性使用的对象称为资源(resource)。**资源可以是硬件设备(如蓝光驱动器)或是ー组信息(如数据库中一个加锁的记录)。通常在计算机中有多种(可获取的)资源。ー些类型的资源会有若干个相同的实例,如三

2022-03-26 17:32:02 1033

原创 现代操作系统 第十章 UNIX、Linux 和 Android 下

现代操作系统 第十章 UNIX、Linux 和 Android文章目录现代操作系统 第十章 UNIX、Linux 和 AndroidLinux中的I/O系统I/O在Linux中的实现Linux文件系统基本概念Linux文件系统的实现Linux虚拟文件系统Linux ext2文件系统Linux ext4文件系统/proc文件系统习题本文为读书摘要(个人认为重要的知识点)Linux中的I/O系统Linux把设备当作一种特殊文件整合到文件系统中。毎个I/O设备都被分配了一条路径,通常在/dev目录下。

2022-03-26 11:03:40 3743

原创 现代操作系统 第十章 UNIX、Linux 和 Android 上

现代操作系统 第十章 UNIX、Linux 和 Android文章目录现代操作系统 第十章 UNIX、Linux 和 AndroidLinux到Linux的接口内核结构Linux中的进程Linux中进程与线程的实现进程描述符的信息(task_struct)Linux中的线程Linux中的调度 与 两种调度器Linux中的内存管理Linux中内存管理的实现物理内存管理 与 内存映射内存分配机制 伙伴算法 与 slab机制 vmalloc & kmalloc虚拟地址空间表示Linux中的分页页面

2022-03-25 21:58:14 4731

原创 现代操作系统 第三章 内存管理

现代操作系统 第三章 内存管理文章目录现代操作系统 第三章 内存管理无存储器抽象ー种存储器抽象:地址空间交换技术空闲内存管理虚拟内存分页分页过程的两个问题加速分页减小页表空间页面置换算法用软件模拟LRU —— 老化算法工作集页面置换算法工作集时钟页面置换算法分页系统中的设计问题有关实现的问题缺页中断处理习题本文为读书摘要(个人认为重要的知识点),穿插课后习题的选取(主要选取考察概念性的习题)无存储器抽象最开始并没有对存储器进行抽象,直接简单粗暴的使用物理内存地址,直接从0到某个上限值。每个地址可

2022-03-21 18:05:55 1387

原创 现代操作系统 第二章 进程与线程

现代操作系统 第二章 进程与线程文章目录现代操作系统 第二章 进程与线程进程进程的实现中断的实现机理多道程序设计模型线程经典的线程模型在用户空间中实现线程在内核中实现线程混合实现调度程序激活机制进程间通信竞争条件 与 临界区忙等待的互斥信号量与互斥锁futex (fast userspace mutex) 实现机制RCU调度进程切换的代价:进程行为 与 调度时机调度算法的目标系统中的调度算法习题本文为读书摘要(个人认为重要的知识点),穿插课后习题的选取(主要选取考察概念性的习题)ー个进程是某种类

2022-03-19 17:17:10 683

原创 现代操作系统 第一章 引论

现代操作系统 第一章 引论文章目录现代操作系统 第一章 引论计算机硬件介绍CPU存储器I/O 设备总线实时操作系统微内核习题本文为读书摘要(个人认为重要的知识点),穿插课后习题的选取(主要选取考察概念性的习题)考察操作系统有两种观点:资源管理观点和扩展的机器观点。在资源管理观点中,操作系统的任务是有效地管理系统的各个部分。 (自底向上,对下管理资源)在扩展的机器观点中,系统的任务是为用户提供比实际机器更便于运用的抽象。 (自顶向下,对上提供抽象)这些抽象包括进程、地址空间以及文件。

2022-03-18 18:18:05 1092 3

原创 HTTPS 协议核心原理

HTTPS 协议核心原理“安全”的四个特性机密性(加解密)完整性(摘要算法)身份认证(接收方确认身份)不可抵赖(发送方不能否认自己的行为)后两个通过私钥加密,公钥解密 以及 摘要算法实现的数字签名 进行实现对称加密对称加密: 客户端和服务器共享同一个密钥,客户端给服务器发消息时,客户端用此密钥加密,服务器用此密钥解密;反过来,服务器给客户端发消息时,相反的过程。这种加密方式在互联网上有两个问题:**1. 密钥如何传输?**密钥A的传输也需要另外一个密钥B,密钥B的传

2022-03-16 17:21:35 7569

原创 手撕代码 C++11线程池 极简80行代码

好几篇面试的文章看到要手撕线程池和消费者、生产者的所以先准备个答案生产者消费者#include <iostream>#include <queue>#include <thread>#include <condition_variable>#include <semaphore>#include <mutex>using namespace std;// 生产者消费者template <class T&gt

2022-03-05 22:11:08 454

原创 InnoDB索引的相关知识点

索引文章目录索引主键的选择利用 explain 分析 索引的执行过程explain结果字段分析慢查询日志索引的优化覆盖索引利用最左前缀原则索引下堆Changer Buffer 和 唯一索引使用索引就一定能用到吗 —— force index字符串字段创建索引索引常见问题总结MySQL InnoDB以主键的值构造成一颗树,叶子节点存放着该主键对应的整行数据。此为聚簇索引。其他的索引为辅助索引,叶子节点存放着索引字段的值及对应的主键值。主键的选择由于每个非主键索引的叶子节点上都是主键的值。如果用身份证

2022-03-05 16:40:57 545

原创 InnoDB的MVCC大致实现原理 与 锁规则

事务隔离性的支持 —— MVCC文章目录事务隔离性的支持 —— MVCC概述利用undo log 实现 ”保存“ 多版本数据如何确定快照版本 —— 实现一致性读当前读 —— 防止更新丢失一致性读 —— 事务的可重复读在 MySQL 里,有两个“视图”的概念:一个是 view。它是一个用查询语句定义的虚拟表,在调用的时候执行查询语句并生成结果。创建视图的语法是 create view … ,而它的查询方法与表一样。概述MVCC是多版本并发控制(Multi-Version Concurrency

2022-03-04 20:28:38 412

原创 模拟编译器,手动优化虚函数(有点鸡肋)

模拟编译器,手动优化虚函数(顺便学习perf和虚函数)

2022-02-22 00:39:07 600

原创 Sylar服务器框架 配置模块 源码分析

Sylar服务器框架 配置模块 源码分析文章目录配置模块整体设计使用方式类的设计ConfigVarBase => ConfigVar => ConfigLexicalCast日志模块与配置模块整合自定义类型特例化的模板使用方式通过 静态全局变量的构造函数 添加的回调函数配置模块整体设计一个配置模块应具备的基本功能:支持定义/声明配置项,也就是在提供配置名称、类型以及可选的默认值的情况下生成一个可用的配置项。由于一项配置可能在多个源文件中使用,所以配置模块还应该支持跨文件声明配置项

2022-02-20 20:27:00 1536

原创 Sylar服务器框架 日志模块 源码分析

Sylar服务器框架 日志模块 源码分析文章目录日志库模块整体设计关键的类日志库整体流程和重要函数说明(最终是由LogAppender的LogFormatter负责相应调用完成最终日志输出)重要代码逐行分析LogFormatter::init —— 格式解析函数(100行左右)大致流程日志库模块整体设计用于格式化输出程序日志,方便从日志中定位程序运行过程中出现的问题。这里的日志除了日志内容本身之外,还应该包括文件名/行号,时间戳,线程/协程号,模块名称,日志级别等额外信息,甚至在打印致命的日志时,

2022-02-17 19:11:54 1213

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除