自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(56)
  • 资源 (3)
  • 问答 (1)
  • 收藏
  • 关注

原创 7、软中断原理

函数如下,不再深入介绍,我们只需要知道,通过如下函数引发中断后,内核就会通过do_softirq() 函数循环处理中断数组中的所有中断;至于如何禁用中断、如何清除软中断位图等操作也不再深入。,当并不深入介绍软中断,仅仅记录以下软中断的结构类型;毕竟用户不会直接用到软中断。结构体,只有一个成员函数指针,自然是用于绑定软中断要执行的函数:;事实上内核用一个数组表示所有的软中断,数组名为。, 每个元素的类型为。

2024-05-06 09:17:15 91

原创 ubuntu开启message文件

环境:ubuntu 20.04。

2024-04-29 10:14:25 368

原创 6、tasklet原理与软中断

由于硬中断执行期间不能被调度且会屏蔽同类型的中断,所以它的执行时间要特别短,就需要把不紧急的任务放在所谓的“下半部”延后处理;软中的类型和编号如下,可见其资源确实比较稀缺,但由于它主要作为其他延时机制的基础,所以其限制不算大;但内核对tasklet做了更多的限制,同类型的tasklet只能串行的在一个cpu上执行;就激活了tasklet,处理器就能择机尽快执行tasklet绑定的函数了;我们上节介绍的是常规tasklet;使用软中断,只有中枢的内核代码才会用到软中断,因为软中断是很稀缺的资源;

2024-04-29 09:43:39 312

原创 5、tasklet

tasklet也是用于中断下半部的一种方法,而且是I/O驱动程序的首选方案;守护线程大部分时间都在睡眠,当进程会把工作项添加到进程所在的处理器上,守护线程被唤醒;2、初始化: 参数1,是tasklet变量;参数3,是传给函数的参数。我们首先仍然只看tasklet的用法,只需如下几部,以megaraid博通Raid。但是要注意,守护线程可以在本cpu上运行,也可以调度到其他cpu上运行。),它会创建一个cpu数量的数组,且每个数组项有一个守护线程;介绍完工作队列,不得不说一下tasklet;

2024-04-28 09:51:02 153

原创 4、工作队列用法

内核创建了一个标准的工作队列,称为events(注:每个处理器都有这样一个工作队列);故用户无需在创建工作队列,只需创建工作项;基本上每个内核模块都会自定义工作队列,一个队列上可以有多个工作项,包括延时工作项;工作队列是用内核线程去实现所需的工作,这样看来比用户空间编程还方便些,毕竟用户空间需要用户自己创建线程。由于工作队列的实现比等待队列复杂,我们不深入介绍,这里还是只看一下工作队列的用法。这种方式适合执行时间短的工作,如果执行时间长就延误了其他工作项的执行。:内核自带了工作队列,用户只需定义工作项;

2024-04-25 10:01:33 395

原创 3、完成量

这就意味着 进程不必要等待已经发生的事件;因为事件发生已经调用了complete() ,此时done已经++,而后在调用wait_for_completion()时,发现done!=0,进程就不会睡眠;这就是完成量与等待队列的差别支持!(名称上区别信号量),是根据等待队列实现的,看如下定义,可见它就是一个。函数,这俩函数我们不再展开介绍,我们主要看一下这俩函数对。但wait_for_completion()只有在。complete() 时。等待队列另加一个计数器。

2024-04-22 09:13:12 170

原创 2、等待队列原理深入

在上一节从使用者的角度分布介绍了等待队列、完成量和工作队列的使用场景和使用步骤;本节我们稍微深入一下,先看一下等待队列的基本工作原理,当然不会太深入,因为那是内核的工作。

2024-04-18 09:52:56 150

原创 1、等待队列、完成量、工作队列的使用场景

首先创建一个工作队列,然后加入工作项,这些工作项稍后由内核线程去执行;完成量跟等待队列的使用场景非常类似,起始完成量就是通过等待队列实现的,我们在后续介绍原理的时候看完成量的定义就一目了然了。关键在“等待”二字,用于使进程(线程)等待某一特定事件发生,进程在等待期间会睡眠,在事件发生时由内核唤醒。在名称上区分于“等待队列”;以上是我们自定义了工作队列,其实系统自带了标准的工作队列,我们只需要将新的工作项添加到该队列就行了;,但如果我们在开始等待时,起始事情已经发生,这样就永远无法唤醒睡眠的进程了;

2024-04-17 13:34:37 515

原创 Linux系统报错锦集二: engine libaio not loadable

本来我以为不需要fio源码编译了,毕竟我下载的是3.26版本的,这里已经有fio-3.27的rpm包了,但是rpm -ivh fio-3.27xxxx.rpm 后,没有找到fio的可执行文件,但安装libaio-devle需要依赖fio-3.27.幸亏还安装了redhat9.1 的vmware虚拟机,经查,在目录 /run/media/qwe123/RHEL-9-1-0-BaseOS-x86_64/AppStream/Packages/ 下存有rpm包,把需要安装的报拷贝到服务器上,

2024-01-05 18:30:17 822

原创 Linux系统报错锦集一

我编译软Raid1.ko后,拷贝到 /lib/modules/5.15.78/kernel/drivers/md/ 目录下,重启系统依然加载的是原驱动(我驱动里面增加了日志,但是没有打印);这个问题的原因,是因为系统镜像initramfs文件的,默认先从initramfs中加载,只有镜像文件中不存在才会去标准目录下加载,所以编译ko文件,并拷贝到标准目录后,要重新生成镜像文件,命令是。只需要增大虚拟机的内存(我原虚拟机已经给了4G,给到8G后启动正常)。:Ubuntu 编译驱动,替换原驱动。

2023-12-27 17:18:56 445

原创 .png图片文件生成.h c数组文件

默认携带的头文件说是用bin2h.exe生成的,但是没有查到用法,我大概试了下无法生成.h文件;背景是edk2的开发包中背景和图标都是图片,若要修改仅仅替换图片是不行的,必须替换图片生成的.h的头文件;需要注意的是新图片和原图片尽量大小一致,不然若新图片过大,素组就会太大,可能会导致图片无法加载。之前处理文件都是通过base64编码,但在UEFI中的图片文件是通过c数组来表示的。对生成的.h文件修改数组大小的变量名及数组名,即可。重新编译edk2,发现图片已更换。

2023-10-25 09:51:50 219

原创 自编efi文件测试vmware虚拟机如何进入UEFI环境

UEFI的开源框架是edk2,开发环境配置起来还是有些麻烦,完全按照文档编译不过,经人帮助总算编译通过,但如何测试又是问题;网上各种说进入shell uefi、做uefi启动u盘,但是对我这种完全小白来说,操作起来终是困难;2、把编译的efi文件拷在u盘里,efi文件要重命名为 bootx64.efi ,不然会运行报错;四、进入步骤如下,选中u盘,比如我的u盘名称为U-TEST,然后回车进入,找到efi文件运行即可。同事突然让帮忙编一下UEFI,之前完全没有接触过,在此粗鲁记录其过程。

2023-10-24 10:31:38 722

原创 linux进程调度三:继续实时进程

上节我们实现了实时进程,其实非常简单只需要修改进程的调度策略即可。但实时进程被调度在哪个处理器上是未知的,本节主要实现实时进程与指定处理器的绑定。命令:cat /proc/cpuinfo, 我的机器一共有4个处理器,编号从0-3,如下图显示第一个,processor:0。多观察一下就会发现,处理器的编号会发生变化,即进程发生了调度。未完待续.......

2023-10-24 10:14:46 80

原创 ubuntu设置core文件

b)设置core文件生成目录:vi /etc/sysctl.conf ,新增:kernel.core_pattern=core-%p,应该是默认开启了apport服务,ubuntu目前使用这个服务手机错误信息,但会阻止core文件的产生,这个服务用处不大,可以关闭。a)在环境变量中增加开启core文件:vi ~/.bashrc ,新增 ulimit -c unlimited,长久不写代码,突然发现ubuntu当前运行目录下没有生成core文件,记录如下,避免下次重找。这三个参数可加可不加。

2022-12-27 09:19:35 3751 1

原创 linux进程调度二:优先级及实时进程

实时进程实现

2022-07-08 15:43:36 3543

原创 linux进程调度一:初识调度原理

linux进程调度策略

2022-07-07 17:15:00 850

原创 c++万能引用、完美转发

一、万能引用只有两种形式的引用:左值引用和右值引用,万能引用不是一种引用类型,而是代表要么是左值引用要么是右值引用。1、万能引用用在需要推断类型的场合,即以下两种场合:a)用在模板template<typename T>void tempFun(T&& t) {} //模板类型的这种用法 T && 是万能引用最常见的使用场合b)auto推断类型auto&& var2 = var1; //auto这种需要推断类型的

2022-04-19 11:21:40 6229 1

原创 c++函数模板 不定参数

函数模板不定参数,记忆中c++ primer中的例子大概如下,用到包扩展://用于匹配递归结束void func(){ }template<typename T, typename... U> //这里的U可以是不同类型void func(const T& first, const U& ... args){ cout << first << endl; func(args...);//递归调用,最后一次args为空,调用特化func

2022-04-14 11:21:31 2228

原创 c++内存池

此代码可作为商业代码,在使用内存池的场合直接拿来使用,特此记录!// 分配内存池 嵌入式指针class allocatorPool{public: //分配 void *allocator(size_t size) { obj *tmplink; if (m_FreePos == nullptr) { //分配内存池 size_t i_realsize = i_sTrunkCount * size; m_FreePos = (obj*)malloc(i_rea

2022-04-12 15:59:48 1492

原创 c++ this指针

一、this指针引入我们知道类的大小是其普通成员变量(非静态)的大小,函数成员并不计入其中,这是因为,类中的成员函数其实就是全局函数,但缺必须用类对象来调用,这就是this指针的作用。class Base{public: //类成员函数bfun(),编译器会给其进行唯一命名并加入参数,并加入参数 //例如:xxxxBasexxxxbfun(Base* const, int) //其实也就是全局函数 void bfun(int m); int b_i;};//全局函数 编译器也会

2022-04-02 11:39:57 528

原创 c++类内存布局

一、普通继承1、先获取到对象a1的地址,通过地址查看内存,如下:可知内存布局如下:父类成员变量 子类成员变量 二、父类含有虚函数可见内存布局如下:虚函数表指针 父类成员变量 子类成员变量 三、虚基类虚继承的情况下,对象a1的大小为12字节,是因为前四字节是虚基表地址(区别于虚函数地址)。虚基表第二个四字节是虚基表变量的偏移量,即A1的内存地址:也就是说虚基表地址要偏移8个字节才能找打虚基类的变量虚基表地址 A1成员变量 ..

2022-04-01 11:51:06 1186

原创 c++ STL 算法一

以下常用算法,来自经典书籍<<STL源码解析>>。一、数值算法,标准库的仿函数一般用在此处。accumutate()累加、 inner_product()内积、 partial_sum()相加、 adjacent_difference()相差 ,这些算法只能用在数值上,所以头文件是<numeric>.另外还有mismatch().int main(){ //accumulate() inner_product() partial_sum() adja

2022-03-28 11:23:38 1180

原创 c++线程四

线程的知识已经讲解完毕,我们来实现一个线程池,以后工作可以直接拿来用。class threadPool{private: using Task = function<void()>; //自定义任务函数类型 int i_threadNum; //线程数量 vector<thread> threadVec; //线程数组 queue<Task> taskQueur; //任务队列 bool isTas

2022-03-23 16:11:33 850

原创 c++线程三

std::async() 、 std::package_task<> 、std::promise<> 、std::future<>、 std::shared_future<>一、async()可以看做package_task<>和promise<>的更高级应用他们的作用都是获取线程的返回值。我们前面所用的线程函数都是void类型的,但其实线程可以有返回值,当然我们可以用全局变量记录线程处理结果。1、async()函数是最

2022-03-22 10:06:44 1297

原创 c++线程二

接上篇!其实用mutex的lock()、unlock(), 当然更好用lock_guard(),这些基本能满足我们的应用需求,且容易理解。一、unique_lock 相比lock_gaurd有一些更灵活的用法主要体现在unique_lock的参数和成员函数上。如下一目了然,不再举例子。unique_lock<mutex> uniqeLock(mu, std::adopt_lock);//同lock_guard, 指示不加锁,前提是mutex已经加锁unique_lock&lt

2022-03-21 15:28:32 2016

原创 c++线程一

c++标准尚未支持多进程,但c++11后已开始支持多线程,我们终于可以用c++标准写多线程的跨平台程序了。一、线程函数thread.如下示例:这种情况线程入口函数的返回值一般是void,如果需要线程的计算结果可以用全局变量记录,或者参数用引用(但用引用时,线程detach()时特别容易出问题,见代码注释)。void mythread(int m){ cout << "---开始运行子线程:" << endl; cout << "---子线程id:"

2022-03-21 09:54:26 168

原创 c++框架一 :tinyhttpd

写代码从学习优秀的代码开始!开始学习c++的框架,从最小型的开始,tinyhttpd最适合不过了,总共500来行代码。从socket服务建立,到多线程和创建子进程,并在父子进程间通过管道通信,同时又可以了解http的一些基本原理,可以说非常适合学习。代码总体架构如下:代码阅读顺序(为方便阅读,只写关键代码)1、首先是main(),在main中调用startup()函数建立服务端监听,如果传参为0,则会自动选择一个可用端口,并用getsockname()获取服务信息,这里主要是获取监听的端

2021-10-22 15:45:35 463

原创 期货量化交易程序CTP入门指南 三

注:本人开发的期货网格化交易软件,源代码出售,包教包会包功能扩展。有意向留言,或联系qq:610151253 本篇开始介绍我的工程代码。开发之前要按照上篇所讲获取API和接口文档。API截图如下,我们所需的是dll和.h文件。接口文档,截图如下,需要我们从头到尾看一遍,当然因为我们只是作为个人投资者,里面很多内容可以大概浏览即可。一、开发工具VS和Qt都可,我用的Qt,工程目录截图如下:至于SPI和API的作用和功能,开发文档已经讲的非常详细,我这里就不说了。...

2021-08-10 15:16:48 1845 7

原创 期货量化交易程序CTP入门指南 二

先说一下我做的这个软件:网格化交易。网格化交易相信大部分做股票或期货的朋友都不会陌生,非常适合于震荡行情。如果我们观察到行情在某价格区间持续震荡,如下图,我们即可一直盈利1个点。买入 卖出 再买入卖出 3500买入 等到价格3501时卖出 3501卖出后立即再报单3500买入,依次类推... 3499买入 等到价格3500时卖出 3500卖出后立即再报单3499买入,依次类推... 3498买入 价格3499时卖出 卖出后在立即报单34

2021-08-06 15:29:17 2372

原创 期货量化交易程序CTP入门指南 一

本人从对期货一无所知,到完成一套高频量化程序并且实盘,大概用了两个多周!这其中既要感谢CTP接口文档非常完善,也要感谢乐于分享知识的网友们!所以我也再次分享一下自己的开发过程,并随讲解附上源码!...

2021-08-02 11:59:20 6689 21

原创 数据库六 视图和索引

一 、视图 view 创建 create view v_noname as select s_no,s_name from student; 使用 select * from v_noname; select s_name from v_noname; 修改 alter view v_noname as select s_name ,s_classno from student; 删除 drop v

2020-12-28 15:14:56 414

原创 数据库五 数据库函数

一、聚合函数1、count select count(*) from student; //所有 select count(s_name) from student; //NULL 不计数 2、max select max(c_no) from class; 3、min select min(c_no) from class; //不计算空值 4、avg 平均值 select avg(c_no) from class; 5、sum 求和 sele.

2020-12-22 19:02:17 502

原创 数据库四 DQL-select

一、创建数据表drop table if exists student; create table class(c_no int primary key, c_name varchar(20) not null); create table course(cou_no int primary key, cou_name varchar(20) not null unique, cou_score int not null); create table student (s_no int.

2020-12-21 18:26:29 67

原创 数据库三 数据表完整性

数据完整性实体完整性:标识符或者主键的完整性,使其值唯一域完整性:限制类型、格式和取值范围引用完整性:保持原表和引用表数据一致用户自定义完整性:根据用户要求自定义的规则数据完整性实现实体完整性:主键约束、唯一值约束域完整性:检查约束、默认值约束、外键约束引用完整性:外键约束用户自定义完整性:以上所有约束组合————————————————————————————————————————————————————————非空约束:not nullcre..

2020-12-16 18:27:30 197

原创 数据库二 DDL&DML

Navicat连接mysql报错:1251 client does not support ..解决:cmd连接mysql,查看用户信息select host,user,plugin,authentication_string from mysql.user;mysql> select host,user,plugin,authentication_string from mysql.user;+-----------+------------------+----------------.

2020-12-15 16:03:21 81

原创 数据库一 关系型数据库范式

数据库一关系型数据库:表非关系型数据库:树、图第一范式 :每个元素不可再分,如图不满足学号 姓名 年龄 电话 手机 座机 第二范式:每个非主属性要完全依赖主键,如图不满足,需专门的课程表 因为课程名依赖于课程表学号 姓名 课程号 课程名 001 ...

2020-12-15 11:27:15 46

原创 windows下发布安装程序签名_signTool.exe工具使用

问题描述: Qt自制了一款exe安装包,放在互联网上供别人下载,但下载后运行,提示:经查安装包需要进行数字签名。数字证书的目的就是防止软件被篡改,表明软件的签发日期。对于我们来说最重要的防止被当病毒查杀。所以这就需要受信任的机构颁发的证书。主要使用的工具:signTool.exe,命令行运行,但不能cmd,需要“VS开发人员命令提示”,且以管理员运行。步骤:1、创建 X.509 证书工具:Makecert.exe(证书创建工具)证书创建工具生成仅用于测试目的的 X.509

2020-08-11 17:52:41 2344

原创 Qt mode/view全解七

本章我们讲解MV的选择事件,方法是我们构造一个树状结构,并在标题栏显示我们所选的树状结构的内容和层次。选择事件也是通过mode实现的,然而他是独立的mode,叫做:QItemSelectionModel,默认每个view都有这样一个mode,可以通过view的selectionModel()获取!selectionModel的selectionChange()信号就是我们要获取的信号!ma...

2020-03-21 21:28:45 347

原创 Qt mode/view全解六

前面讲解的都是tableView,其实listView和treeView都是一样的,只需要把前面的view换成listView和treeView即可实现列表和树的显示,不必更改mode,只不过mdoe本身没有任何层次结构!本章我们使用标准mode实现数的结构!我们要使用的mode是QStandardItemModel,他是Qt继承QAbstractItemModel已经实现了的。他需要QS...

2020-03-21 20:53:09 315

原创 Qt mode/view全解五

前四章view都是被动的展示数据,本章介绍如何编辑数据。其实编辑功能的启用也是mode控制的,mode实现setdata()和flags()就启用了编辑功能。mymode.h#include <QAbstractTableModel>#include <QString>const int COLS= 3;const int ROWS= 2;cla...

2020-03-20 16:23:59 486

期货网格大师.exe simnow模拟环境中网格化报单工具

配合快期使用,用于simNow模拟环境中网格化报单

2021-08-06

uboot源码分析

短小经换的uboot源码详解,内容浅显易懂又概括全面,描述了uboot的启动过程。

2012-10-16

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

TA关注的人

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