自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

JT同学的博客

我是JT同学,专注分享C/C++,Linux应用、网络编程、内核知识。

  • 博客(106)
  • 资源 (12)
  • 收藏
  • 关注

原创 Linux进程管理(二)进程调度

Linux进程管理(二)进程调度文章目录Linux进程管理(二)进程调度一、进程调度解决什么问题?二、进程调度整体框架三、优先级与调度策略四、调度类五、运行队列和调度实体六、FIFO 和 RR 调度算法七、完全公平调度算法(CFS)八、总结一、进程调度解决什么问题?我们在使用电脑的时候,比如打开一个视频剪辑器,一个文本编辑器,可以认为它们都是一个进程。假如CPU是单核的,那么在同一时间只能运...

2019-11-03 20:59:48 2806 3

原创 我的开源项目-RtspServer

我的开源项目-RtspServer文章目录我的开源项目-RtspServer一、项目介绍二、功能介绍三、开发环境四、使用方法4.1 传输音视频文件4.2 采集V4L2摄像头4.3 采集ALSA音频设备4.4 RTP_OVER_RTSP4.5 多播五、技术点一、项目介绍使用C++实现的一个RTSP服务器GitHub传送门二、功能介绍支持H264、AAC的音视频格式支持传输H2...

2019-08-09 13:59:36 31012 37

原创 深入浅出MySQL事务(二)MVCC的实现原理

深入浅出MySQL事务(二)视图实现原理文章目录深入浅出MySQL事务(二)视图实现原理一、视图是如何创建的?二、查询逻辑三、更新逻辑四、小结上一篇文章介绍了事务隔离的实现,里面讲到,事务通过创建一个视图,然后根据视图逻辑来获取当前事务看到的数据,你可能会好奇这个视图是何方神圣,本文就来好好讲讲视图的实现原理。一、视图是如何创建的?在InnoDB里面,每个事务都有一个ID,叫做 trans...

2020-02-23 18:05:35 1021 3

原创 深入浅出MySQL事务(一)事务隔离

深入浅出MySQL事务(一)事务隔离文章目录深入浅出MySQL事务(一)事务隔离一、为什么需要事务?二、隔离级别三、事务隔离的实现四、事务的启动方式五、小结一、为什么需要事务?事务有什么作用?简单的说,事务是确保一组操作要么全部成功,要么全部失败一个最经典的例子就是转账,假设A要给B转账,需要进行一下步骤检查A的余额是否足够减少A的余额增加B的余额如果由于意外,只执...

2020-02-23 11:33:25 550 1

原创 深入浅出MySQL索引(二)InnoDB存储引擎的索引

深入MySQL浅出索引(二)InnoDB存储引擎的索引文章目录深入MySQL浅出索引(二)InnoDB存储引擎的索引一、InnoDB的索引模型1.1 主键索引1.2 普通索引二、索引维护三、覆盖索引四、最左前缀原则在上一篇文章中介绍了为什么需要索引,以及常见的索引模型,本文讲介绍InnoDB的索引InnoDB使用B+Tree来组织索引,每个索引都是一棵B+Tree,不过对于主键索引和普通索引...

2020-02-15 23:09:42 672

原创 深入浅出MySQL索引(一)常见的索引模型

深入浅出索引(一)常见的索引模型文章目录深入浅出索引(一)常见的索引模型一、为什么需要索引?二、常见的索引模型2.1 有序数组2.2 哈希表2.3 二叉搜索树2.4 B-Tree2.5 B+Tree一、为什么需要索引?MySQL的数据存放在数据表中,数据表会被保存在磁盘上,例如下面我们创建一个数据表,那么在磁盘上就会有一个数据表文件来存放数据create table users( id ...

2020-02-15 21:49:46 3233

原创 Linux进程管理(四)进程调度之抢占式调度

Linux进程管理(四)进程调度之抢占式调度文章目录Linux进程管理(四)进程调度之抢占式调度一、抢占式调度二、设置需要重新调度的标志的时机(TIF_NEED_RESCHED)三、进程抢占的时机3.1 用户态的抢占时机3.2 内核态的抢占时机四、总结上篇文章我们将了内核调度分为主动调度和抢占式调度,主动调度我们已经讲解过了,这篇文章我们来讲解一下抢占式调度一、抢占式调度我们说过,进程真正...

2019-11-07 14:44:58 7096 1

原创 Linux进程管理(三)进程调度之主动调度

Linux进程管理(三)进程调度之主动调度文章目录Linux进程管理(三)进程调度之主动调度一、抢占式调度和主动调度二、主动调度的发生的情况三、schedule 函数四、总结在上一篇文章中,我们讲了Linux进程调度的总体内容,接下来的两篇文章我们将来讨论进程调度具体是什么时候发生的一、抢占式调度和主动调度前面我们说过,进程的切换总是通过 shedule 函数发生的,而 schedule ...

2019-11-06 14:05:04 1768 1

原创 Linux进程管理(一)进程数据结构

Linux进程管理(一)进程数据结构文章目录Linux进程管理(一)进程数据结构双向链表任务ID信号处理进程状态进程调度运行统计信息进程亲缘关系内存管理文件与文件系统进程内核栈栈结构current宏Linux内核中使用 task_struct 结构来表示一个进程,这个结构体保存了进程的所有信息,所以它非常庞大,在讲解Linux内核的进程管理,我们有必要先分析这个 task_struct 中的各...

2019-10-27 16:59:50 4680

原创 linux图像显示(三)使用libjpg处理jpg图片

linux图像显示linux图像显示(一)framebuffer操作linux图像显示(二)bmp图片linux图像显示(三)使用libjpg处理jpg图片linux图像显示(四)使用libpng处理png图片linux图像显示(五)使用freetype处理矢量字体移植libjpg移植libjpeg到arm板上,我们主要是要得到动态链接库.so,静态链接库.a,头...

2019-10-27 09:22:35 4074 1

原创 Linux进程间通讯(五)信号量

Linux进程间通讯(五)信号量文章目录Linux进程间通讯(五)信号量一、信号量集的创建二、信号量的设置三、信号量的PV操作四、SEM_UNDO标志的含义五、总结一、信号量集的创建信号量集的创建需要通过系统调用 semget,其定义如下(这里需要注意的是,semget创建的是一个信号量集合,也就是一个集合是可以包含多个信号量的)SYSCALL_DEFINE3(semget, key_t,...

2019-10-22 14:15:14 769 1

原创 Linux进程间通讯(四)共享内存

Linux进程间通讯(四)共享内存文章目录Linux进程间通讯(四)共享内存一、IPC总览三、将共享内存映射到进程虚拟地址空间四、访问共享内存五、总结一、IPC总览在内核中,对于共享内存、消息队列、信号量都是使用统一的机制管理起来的,都叫做 ipcxxx为了维护这三种进程间通讯的机制,内核定义了一个三项的数组,如下struct ipc_namespace {...... struct...

2019-10-21 20:02:49 758

原创 Linux进程间通讯(三)管道

Linux进程间通讯(三)管道文章目录Linux进程间通讯(三)管道一、匿名管道二、有名管道三、总结一、匿名管道匿名管道通过系统调用 pipe 创建,其定义如下int pipe(int fd[2])通过这个系统调用,可以在内核中创建一个管道,返回两个文件描述符,表示管道的两端,一个用于读,一个用于写下面看一看内核时如何实现的SYSCALL_DEFINE1(pipe, int _...

2019-10-19 17:25:47 439

原创 Linux进程间通讯(二)信号(下)

Linux进程间通讯(二)信号(下)文章目录Linux进程间通讯(二)信号(下)一、信号的发送二、信号的处理三、总结上一篇文章讲解了信号的注册,这篇文件讲解信号的发送和信号的处理一、信号的发送我们可以直接通过 kill 或者 sigqueu 系统调用,给某个进程发送信号,也可以通过 tkill 或者 tgkill 给某个线程发送信号。虽然方法很多,但是最终调用的都是 do_send_sig...

2019-10-18 21:30:26 1240

原创 Linux进程间通讯(一)信号(上)

Linux进程间通讯(一) 信号(上)文章目录Linux进程间通讯(一) 信号(上)一、信号概述二、注册信号三、总结一、信号概述在Linux中,当遇到某些紧急的情况,可以给进程发送信号,紧急处理一些事情在Linux中,定义了许多信号,可以使用 kill -l 命令来查看# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4...

2019-10-18 18:50:09 573

原创 Linux文件系统(四)文件缓存

Linux文件系统(四)文件缓存文章目录Linux文件系统(四)文件缓存一、系统调用层和虚拟文件系统层二、ext4 文件系统层2.1 直接读写2.2 带缓存的读写三、总结前几篇文章讲解了文件系统的挂载和文件的打开,这篇文章讲解文件的读写一、系统调用层和虚拟文件系统层文件的读写就是通过调用 read、write 系统调用来实现的,由于读写的实现过程很多逻辑都是相似的,所以两部分放在一起讨论...

2019-10-16 19:31:21 1583

原创 Linux文件系统(三)虚拟文件系统

Linux虚拟文件系统文章目录Linux虚拟文件系统一、文件系统框架二、挂载文件系统三、打开文件一、文件系统框架文件系统需要许多层的组件一起协作,具体怎么协作,下面来看一看在应用层,进程操作文件可以通过 open、read、write 等系统调用在内核,每个进程都需要对其打开的文件,维护一定的数据结构在内核,整个系统打开的文件,也需要维护一定的数据结构Linux可以支持多大数十种...

2019-10-15 17:27:33 785

原创 Linux文件系统(二)磁盘文件系统

磁盘文件系统文章目录磁盘文件系统一、inode与块的存储二、inode 位图和块位图三、文件系统的格式四、目录的存储形式五、软链接和硬链接的存储格式六、总结我们常见的磁盘长下面这样子,左边中间圆是磁盘的盘片,右边是抽象出来的图每一层有多个磁道,每个磁道有多个扇区,每个扇区大小为512个字节文件系统是安装在磁盘之上的,本文将讲解Linux主流的文件系统 —— ext系列的文件系统格式一、...

2019-10-13 12:43:24 872

原创 Linux文件系统(一)文件系统概述

Linux文件系统文章目录Linux文件系统一、文件系统的功能规划二、文件系统相关的命令三、文件系统相关的调用四、总结一、文件系统的功能规划文件系统是用来管理磁盘空间,存储文件的一套软件,它需要满足下面几个特点文件系统要有严格的组织形式,使得文件能以块为单位存储文件系统需要索引区,用来查找存储文件的多个块存放在哪个区域如果文件系统的某个文件时热点文件,最近经常被访问,那么...

2019-10-13 09:36:09 1186

原创 STL源码剖析(十八)关联式容器之hash_map、hash_multimap

STL源码剖析(十八)关联式容器之hash_map、hash_multimap文章目录STL源码剖析(十八)关联式容器之hash_map、hash_multimap一、hash_map、hash_multimap的数据结构二、hash_map、hash_multimap的迭代器三、hash_map、hash_multimap的操作3.1 构造函数3.2 析构函数3.3 插入元素3.4 删除元素3...

2019-10-07 11:54:23 502

原创 STL源码剖析(十七)关联式容器之hash_set、hash_multiset

STL源码剖析(十六)关联式容器之hash_set、hash_multiset文章目录STL源码剖析(十六)关联式容器之hash_set、hash_multiset一、hash_set、hash_multiset的数据结构二、hash_set、hash_multiset的迭代器三、hash_set、hash_multiset的操作3.1 构造函数3.2 析构函数3.3 插入元素3.4 删除元素3...

2019-10-07 11:26:21 272

原创 STL源码剖析(十六)关联式容器之hashtable

STL源码剖析(十五)关联式容器之hashtable文章目录STL源码剖析(十五)关联式容器之hashtable一、hashtable的数据结构二、hashtable的迭代器三、hashtable的操作3.1 构造函数3.2 析构函数3.3 插入元素3.4 删除元素3.5 其他操作hashtable 是哈希表的意思,它并不是 STL 标准的,也就是 STL 并没有要求实现它。hashtable...

2019-10-07 10:41:09 348

原创 STL源码剖析(十五)关联式容器之map、multimap

STL源码剖析(十五)关联式容器之map、multimap文章目录STL源码剖析(十五)关联式容器之map、multimap一、map、multimap的数据结构二、map、multimap的迭代器三、map、multimap的操作3.1 构造函数3.2 析构函数3.3 插入元素3.4 删除元素3.5 其他操作map 和 multimap 每个元素都是一个对组,有 key 也有 dadama...

2019-10-06 17:28:46 288

原创 STL源码剖析(十四)关联式容器之set、multiset

STL源码剖析(十四)关联式容器之set、multi_set文章目录STL源码剖析(十四)关联式容器之set、multi_set一、set、multi_set简介二、set、multi_set的数据结构三、set、multiset的迭代器四、set、multiset的操作4.1 构造函数4.2 析构函数4.3 插入元素4.4 删除元素4.5 其他操作一、set、multi_set简介关联式容...

2019-10-06 16:48:33 402

原创 STL源码剖析(十三)关联式容器之rb_tree

STL源码剖析(十三)关联式容器之rb_tree文章目录STL源码剖析(十三)关联式容器之rb_tree一、rb_tree的数据结构二、rb_tree的迭代器三、rb_tree的操作3.1 构造函数3.2 析构函数3.3 插入元素3.4 删除元素3.5 其他操作rt_tree是红黑树,在STL中,它并没有对使用者开放,但它非常重要,它作为set和map的底部支持这篇文章不详细讨论红黑树的算法...

2019-10-06 15:50:56 424

原创 Linux内存管理(二)物理内存管理(上)

Linux物理内存管理(上)文章目录Linux物理内存管理(上)一、物理内存的组织形式二、节点三、区域四、页五、页的分配六、总结一、物理内存的组织形式由于物理内存是连续的,页也是连续的,每个页的大小一样,从0开始给每个页编号,每个页用struct page表示,存放在一个大数组里。因此对于任何一个地址,只要除以页的大小,就可以得到对应页的编号,根据下标就可以找到对应的struct page结...

2019-10-05 16:56:15 1142 3

原创 STL源码剖析(十二)序列式容器之slist

STL源码剖析(十二)序列式容器之slist文章目录STL源码剖析(十二)序列式容器之slist一、slist的数据结构二、slist的迭代器三、slist的操作3.1 构造函数3.2 析构函数3.3 添加元素3.4 删除元素3.5 其他操作slist是这个版本的STL中的单向链表,它是非标准的,也就是STL的标准中并没有要求实现它。在C++11中,有一个标准的单向链表,称为forward_l...

2019-10-05 13:35:54 497 1

原创 STL源码剖析(十一)序列式容器之stack、queue、priority_queue

STL源码剖析(十一)序列式容器之stack、queue、priority_queue文章目录STL源码剖析(十一)序列式容器之stack、queue、priority_queue一、stack1.1 stack的数据结构1.2 stack的操作二、queue2.1 queue的数据结构2.2 queue的操作三、priority_queue3.1 priority_queue的数据结构3.2 ...

2019-10-02 10:06:37 382 1

原创 STL源码剖析(十)序列式容器之deque

STL源码剖析(十)序列式容器之deque文章目录STL源码剖析(十)序列式容器之deque一、deque的数据结构二、deque的迭代器三、deque的操作3.1 构造函数3.2 析构函数3.3 添加元素3.4 删除元素3.5 其他操作前面我们说的vector是单向开口,而deque是双向开口,也就是保证常数时间在头部和尾部插入元素一、deque的数据结构我们先讨论deque是如何实现双...

2019-09-30 12:38:04 478

原创 一文带你读懂指针

指针究竟是个什么东西?(一文带你看懂指针)文章目录指针究竟是个什么东西?(一文带你看懂指针)一、内存长什么样?二、变量在内存中的存储形式三、指针在内存中的存储形式3.1 指向普通变量的指针3.2 指向数组的指针3.3 指针数组3.4 指向指针的指针四、指针取值在初学学习指针的时候,难免会为其感到困惑,如指针数组、数组指针、指向指针的指针等形容常常让人头晕目眩,感到非常的玄乎其实只要明白指针的...

2019-09-29 11:20:22 1540

原创 STL源码剖析(九)序列式容器之list

STL源码剖析(九)序列式容器之list文章目录STL源码剖析(九)序列式容器之list一、list的数据结构二、list的迭代器三、list的操作3.1 构造函数3.2 析构函数3.3 添加元素3.4 删除元素3.5 其他操作一、list的数据结构list的底层是一个双向链表,下面来看一看list的数据结构template <class T, class Alloc = alloc...

2019-09-28 13:08:11 396

原创 STL源码剖析(八)序列式容器之vector

STL源码剖析(八)序列式容器之vector文章目录STL源码剖析(八)序列式容器之vector一、容器简介二、vector的数据结构三、vector的迭代器四、vector的操作4.1 构造函数4.2 析构函数4.3 添加元素4.4 删除元素4.5 其他操作一、容器简介STL的容器分为序列式容器和关联式容器,所谓序列式容器是指其中的元素是可序的。所谓关联式容器,指的是每个元素都有key和v...

2019-09-25 18:41:51 368

原创 STL源码剖析(七)traits机制

STL源码剖析(七)traits机制文章目录STL源码剖析(七)traits机制一、为什么需要traits机制?二、iterator traits2.1 iterator traits的定义2.2 iterator traits相关的函数三、type traits一、为什么需要traits机制?traits可以称为萃取机,可以通过它来获取迭代器的一些信息,在STL算法中发挥巨大的作用如下面...

2019-09-24 21:43:10 582

原创 STL源码剖析(六)迭代器

STL源码剖析(六)迭代器文章目录STL源码剖析(六)迭代器一、什么是迭代器?二、实现一个简单的容器三、实现容器的迭代器四、STL迭代器的规范4.1 STL迭代器的规范4.2 STL迭代器的分类本文将带你学习什么是迭代器,以及STL的迭代器规范一、什么是迭代器?迭代器是一种有指针行为(->,*,++)的东西,它可以是原生指针,也可以是重载了``operator->、operat...

2019-09-24 20:36:21 309

原创 STL源码剖析(五)构造和析构的基本工具

STL源码剖析(五)构造和析构的基本工具文章目录STL源码剖析(五)构造和析构的基本工具一、如何将对象的内存分配释放与构造析构分开?二、construct三、destroy在C++中,使用new运算符的时候,会先为对象分配内存,然后再调用其构造函数。STL为了更加灵活,将内存的分配和对象的构造函数调用分开,前面我们所谈到的空间配置器只负责内存的分配和释放,STL为对象的构造和析构提供了两个全局...

2019-09-22 12:15:17 326

原创 STL源码剖析(四)模板的特化

STL源码剖析(四)模板的特化文章目录STL源码剖析(四)模板的特化一、什么是模板的特化?二、为什么需要模板的特化?三、模板特化的语法3.1 类模板的特化3.2 函数模板的特化在STL中,有许多地方使用到了模板的特化,在往下面讲解前,我们需要来学习以下什么是模板的特化,以及为什么需要模板的特殊还有其语法一、什么是模板的特化?首先看一个例子template <class T>...

2019-09-22 11:34:29 359

原创 STL源码剖析(三)第二级空间配置器

STL源码剖析(三)更加精致的空间配置器文章目录STL源码剖析(三)更加精致的空间配置器一、为什么需要更加精致的空间配置器?二、源码剖析2.1 初步分析2.2 分配内存(allocate)2.3 释放内存 (deallocate)2.4 内存池填充(refill)2.5 内存池(chunk_alloc)上一篇文章中,我们讨论了空间配置器的作用,还有看了普通的空间配置器的源码,接下来我们来剖析特...

2019-09-21 20:00:21 505 1

原创 STL源码剖析(二)第一级空间配置器

STL源码剖析(二)空间配置器之第一级空间配置器文章目录STL源码剖析(二)空间配置器之第一级空间配置器一、空间配置器的作用二、空间配置器定义三、第一级空间配置器源码剖析一、空间配置器的作用在学习空间配置器之前,我们需要先知道它是用来干嘛的,简单的说,它就是给容器分配内存的工具,每个容器都需要指定一个空间配置器,用于分配内存和释放内存我们先看一眼vector容器的源码template &...

2019-09-21 16:00:39 441 1

原创 STL源码剖析(一)STL简介

STL源码剖析(一)STL简介文章目录STL源码剖析(一)STL简介一、STL概述二、STL六大组件2.1 容器(containers)2.2 算法(algorithms)2.3 迭代器(iterators)2.4 仿函数(functors)2.5 适配器(adapter)2.6 配置器(allocators)三、源码下载一、STL概述STL是Standard Template Librar...

2019-09-21 12:21:03 1317

原创 数据结构与算法之树(四)红黑树

数据结构与算法之树数据结构与算法之树(一)二叉树概念及遍历方式(图文并茂)数据结构与算法之树(二)二叉查找树数据结构与算法之树(三)AVL树数据结构与算法之树(四)红黑树数据结构与算法之树(四)红黑树文章目录数据结构与算法之树(四)红黑树一、为什么需要红黑树?二、红黑树性质三、红黑树的插入操作3.1 情况分类3.2 调整操作四、总结上一篇文章我们介绍了平衡二叉搜索树和讲解了AVL树还...

2019-09-18 20:07:20 431

SGI STL源码.zip

SGI版本的STL源码。

2019-09-21

将H.264封装成FLV(C语言实现)

将H.264封装成FLV格式,使用C语言实现。

2019-03-19

freetype库和示例代码

freetype库和示例代码。。。。。。。。。。。。。。。。

2018-12-17

数码相框基于s5pv210开发板

涉及framebuffer操作,BMP图片解码和显示,JPEG图片解码和显示,PNG图片解码和显示,能对文件夹及其子文件的图片进行检索,通过双向循环链表管理图片,支持触摸屏翻页,使用了多线程和信号同步

2018-12-13

modbus-主机-msp430F5移植源码与调试工具

modbus-主机-msp430F5移植源码与调试工具......................

2018-07-27

modbus-主机-stm32移植源码与调试工具

modbus-主机-stm32移植源码与调试工具.............................................

2018-07-27

HC-05调试软件与指令集

蓝牙HC-05模块软件调试助手与指令集。。

2018-07-22

MSP430F5529移植modbus

MSP430F5529移植modbus。。。。。。。。。。。。。。。。。。。。。。。。。。。。

2018-07-20

STM32F1标准外设库与HAL库

STM32F1标准外设库与HAL库。。。。。。。。。。。。。。。

2018-07-12

Qt采集下位机数据并显示波形

Qt采集下位机数据并显示波形..............................................................................

2018-07-12

MSP430F5数据手册,用户指南,官方例程

MSP430F5数据手册,用户指南,官方例程。。。。。。。。。。。。。。。。。

2018-07-12

AD各类USB集成库

AD各类USB集成库,包含原理图与各类封装.......................................................................

2018-07-12

空空如也

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

TA关注的人

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