自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小吕的博客

记录个人学习中的遇到的问题和收获

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

原创 CFS----------------完全公平调度算法

1、调度器是一个操作系统的核心部分。可以比作是CPU时间的管理员。调度器主要负责选择某些就绪的进程来执行。不同的调度器根据不同的方法挑选出最适合运行的进程。目前Linux支持的调度器就有RT scheduler、Deadline scheduler、CFS scheduler及Idle scheduler等。普通进程的优先级CFS是Completely Fair Scheduler简称,即完全公平调度器。CFS的设计理念是在真实硬件上实现理想的、精确的多任务CPU。CFS调度器和以往的调度器不同

2020-08-26 10:08:31 3458 1

原创 类实例化记录

【代码】类实例化记录。

2023-02-05 22:39:00 175 1

原创 内存虚拟化

1、实地址是没有内存保护的,一个程序可以访问整个1M的地址空间2、最开始的8086地址线有20根数据总线最大宽度是16,正常只能寻址2^16,后面的实模式下的逻辑地址的计算都是基地址加偏移地址来算,深度探索linux系统虚拟化这本书里写了最开始是搞了四个段寄存器 cs ds es ss,个人理解就是最开始你可以选哪个段,物理地址被分成了几段,然后每一段你都可以去寻1M的地址。不过后续都是平坦内存模型了已经不用上面这个了什么是平坦内存模型呢?郭健: Linux内存模型——平坦、非连续与稀疏_L

2022-03-20 22:46:42 559

原创 KASLR内核地址随机化

1、内核启动时进入实模式,实模式下初始化一些内核需要的环境然后进入到start开始进入保护模式,保护模式这边才会涉及到kaslr,也就是对于vmlinux的一个随机化,vmlinux是真正的内核elf文件2、实模式寻址方式是段寄存16位段地址和偏移地址的一个计算。保护模式是上面的段寄存器到GDT的一个操作,然后GDT通过mmm到实际的一个物理地址。...

2021-11-13 17:56:16 787

转载 KSPP内核自防护

什么是内核自防护?就是要解决linux内核自身的安全缺陷,你可以提交一整个类型的bug,阻止漏洞利用、检测攻击。内核自防护是针对 Linux 内核对抗自身的安全缺陷的设计与实现。这个领域涉足广泛的问题,包括干掉一整个类型的 bug,阻止漏洞利用的方法和积极的检测攻击行为。这篇文档不讨论所有的议题,但这篇文档是整个内核自防护项目的一个起点和回答一些常见的问题。(欢迎提交补丁)在最糟糕的场景下,我们假设一名没有权限的本地攻击者拥有对内核内存任意读写访问的能力。在很多情况下,被利用的 bug 不会提供

2021-09-12 21:57:12 799

转载 Linux 安全缓解机制总结

Linux 安全缓解机制总结_panhewu9919的博客-CSDN博客学习资料: kernel-security-learning linux-kernel-defence-map A Decade of Linux Kernel Vulnerabilities, their Mitigation and Open Problems-2017 The State of Kernel Self Protection-2018 PaX/Grsecurity...

2021-09-12 16:40:24 1670

原创 Learn Git Branching 答案

https://learngitbranching.js.org/?locale=zh_CN自己总结一下明天上班今天搞不完一、主要基础篇git commitgit commitgit commitgit branchgit branch bugFixgit checkout bugFixgit mergegit checkout -b bugFixgit commitgit checkout mastergit commitgit merge .

2021-09-06 00:33:17 1125

原创 安卓启动流程

安卓启动名词缩写笔记:QRD(QualcommReferenceDesign):高通参考设计AOP(Alwaysonprocessor):实时响应处理器SP(SecureProcessor):安全处理器AVB(AndroidVerifiedBoot):安卓开机检验启动SHRM(SystemHardwareResourceManager):系统硬件资源管理器PBL(PrimaryBootLoader):主引导加载程序XBL(eXtensiblebootloader/Secondarybootlo

2021-08-26 00:05:09 739

转载 Hypervisor

Hypervisor,又称虚拟机监视器(英语:virtual machine monitor,缩写为 VMM)一种运行在基础物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享硬件。也可叫做VMM( virtual machine monitor ),即虚拟机监视器。Hypervisors是一种在虚拟环境中的“元”操作系统。他们可以访问服务器上包括磁盘和内存在内的所有物理设备。Hypervisors不但协调着这些硬件资源的访问,也同时在各个虚拟机之间施加防护。当服务器启动并执行

2021-08-24 08:09:16 1467

原创 力扣刷题457环形数组知识点之C++11lambda

今天在做力扣457环形数组的时候发现别人这样写autonext=[&](intcur){return((cur+nums[cur])%n+n)%n;//保证返回值在[0,n)中};[&]C++11新特性一直没好好总结:lambda的理解是:如果一个函数只在某一小块地方被调用,其它地方不用的话,用lambda表达式会增加可读性以及减少代码量吧。lambda的形式是:[captures]...

2021-08-08 15:38:06 225

原创 linux内核调度学习——负载均衡

SMP:对称多处理器Symmetric Multi Processing),对称多处理系统内有许多紧耦合多处理器,在这样的系统中,所有的CPU共享全部资源,如总线,内存和I/O系统等,操作系统或管理数据库的复本只有一个,这种系统有一个最大的特点就是共享所有资源。多个CPU之间没有区别,平等地访问内存、外设、一个操作系统。操作系统管理着一个队列,每个处理器依次处理队列中的进程。如果两个处理器同时请求访问一个资源(例如同一段内存地址),由硬件、软件的锁机制去解决资源争用问题NUMA:非一致存储访问结构

2021-07-21 22:40:57 224

原创 手撕红黑树一变化规则

1、二叉搜索树查找时间复杂度O(logn)如果二叉查找树是平衡的也就是AVL平衡二叉搜索树n个节点的话高度就是Olog2(n+1),查找效率就是Olog2n近似于折半查找,如果二叉搜索树完全不平衡退化为查找效率On,所以对于二叉查找树其时间复杂度为ON-OLOG2N之间。红黑树是一种特化的AVL树,必须满足二叉搜索树,根节点叶子节点必须为黑色,红黑树的平衡是一种相对平衡也就是维持黑色结点的平衡。2、AVL插入删除比较麻烦?红黑树怎么解决的呢?左旋右旋:https://blog.csdn.

2021-07-08 11:50:42 157

原创 平衡二叉查找树——红黑树

平衡二叉查找树——红黑树二叉查找树具有以下性质:左子树的键值小于根的键值,右子树的键值大于根的键值(键值不重复)。平衡二叉树(AVL树):在符合二叉查找树的条件下,还满足任何节点的两个子树的高度最大差为1。...

2021-07-07 11:28:38 171

转载 进程与CPU之间的绑定关系

1、多核CPU结构中每个核心都有各自的L1、L2缓存,而L3缓存是共用的2、CPU缓存是什么?缓存就是数据交换的缓冲区(称作Cache)。缓存往往都是RAM(断电即掉的非永久储存),它们的作用就是帮助硬件更快地响应。CPU缓存的定义为CPU与内存之间的临时数据交换器,它的出现是为了解决CPU运行处理速度与内存读写速度不匹配的矛盾——缓存的速度比内存的速度快多了。CPU缓存一般直接跟CPU芯片集成或位于主板总线互连的独立芯片上。(现阶段的CPU缓存一般直接集成在CPU上)CPU往往需要重复处理相同

2021-06-16 21:58:32 1282

原创 远程过程调用(RPC)学习

分布式框架:IPC进程间通信,RPC就是远程的进程之间的通信RPC(Remote Procedure Call)远程过程调用,简单的理解是一个节点请求另一个节点提供的服务本地过程调用:如果需要将本地student对象的age+1,可以实现一个addAge()方法,将student对象传入,对年龄进行更新之后返回即可,本地方法调用的函数体通过函数指针来指定。远程过程调用:上述操作的过程中,如果addAge()这个方法在服务端,执行函数的函数体在远程机器上,如何告诉机器需要调用这个方法呢?首

2021-06-15 23:31:52 272

原创 IO多路复用——epoll

1. select 调用需要传入 fd 数组,需要拷贝一份到内核,高并发场景下这样的拷贝消耗的资源是惊人的。(可优化为不复制)2. select 在内核层仍然是通过遍历的方式检查文件描述符的就绪状态,是个同步过程,只不过无系统调用切换上下文的开销。(内核层可优化为异步事件通知)3. select 仅仅返回可读文件描述符的个数,具体哪个可读还是要用户自己遍历。(可优化为只返回给用户就绪的文件描述符,无需用户做无效的遍历)所以 epoll 主要就是针对这三点进行了改进。1. 内核中保存一份文件描

2021-06-13 22:24:48 203

原创 IO多路复用

1、阻塞IO服务器端:bind listen创建套接字bind绑定文件描述符和服务器的ip和端口号listen监听

2021-06-13 15:04:54 118

原创 前缀和力扣(6月)

1、525. 连续数组给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组,并返回该子数组的长度。示例 1:输入: nums = [0,1]输出: 2说明: [0, 1] 是具有相同数量 0 和 1 的最长连续子数组。示例 2:输入: nums = [0,1,0]输出: 2说明: [0, 1] (或 [1, 0]) 是具有相同数量0和1的最长连续子数组。提示:1 <= nums.length <= 105 num..

2021-06-04 23:09:04 175

原创 力扣1190. 反转每对括号间的子串(栈的翻转)

给出一个字符串 s(仅含有小写英文字母和括号)。请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。注意,您的结果中 不应 包含任何括号。示例 1:输入:s = "(abcd)"输出:"dcba"示例 2:输入:s = "(u(love)i)"输出:"iloveu"方法一:模拟遍历(栈的使用,把(之前的字符串放到栈里面,同时用一个字符串来记录(这后面的东西遇到)就翻转之前的字符串,翻转完前面要加上之前的栈保存的(前的东西)class So.

2021-05-28 19:08:34 132

原创 力扣 1011. 在 D 天内送达包裹的能力(二分)

https://leetcode-cn.com/problems/capacity-to-ship-packages-within-d-days/传送带上的包裹必须在 D 天内从一个港口运送到另一个港口。传送带上的第 i 个包裹的重量为 weights[i]。每一天,我们都会按给出重量的顺序往传送带上装载包裹。我们装载的重量不会超过船的最大运载重量。返回能在 D 天内将传送带上的所有包裹送达的船的最低运载能力。示例 1:输入:weights = [1,2,3,4,5,6,7,8,9.

2021-05-10 14:25:03 167

原创 力扣1482.制作 m 束花所需的最少天数(二分)

https://leetcode-cn.com/problems/minimum-number-of-days-to-make-m-bouquets/给你一个整数数组 bloomDay,以及两个整数 m 和 k 。现需要制作 m 束花。制作花束时,需要使用花园中 相邻的 k 朵花 。花园中有 n 朵花,第 i 朵花会在 bloomDay[i] 时盛开,恰好 可以用于 一束 花中。请你返回从花园中摘 m 束花需要等待的最少的天数。如果不能摘到 m 束花则返回 -1 。示例 1:输.

2021-05-10 10:35:17 138

原创 安卓开发学习记事本项目一

内容:安卓实现跳转新的页面的操作1、新建一个basic项目再新建一个activity2、生成加号的矢量图打开activity_main 把floatingactionBUTTON拖到布局里面生成对应代码3、主函数里面对两个界面进行连接操作package com.example.notebook;import androidx.appcompat.app.AppCompatActivity;import android.content.Intent;im

2021-05-07 21:19:12 293

原创 力扣7. 整数反转(指针引用形参、指针常量与长指针区别)

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。示例 1:输入:x = 123输出:321示例 2:输入:x = -123输出:-321class Solution {public: int reverse(int x) { int ans = 0; wh..

2021-05-06 16:09:21 121

原创 超级块

每一种文件系统都对应自己的超级块 Inode 数据块这三种块inode块(读写权限、数据块的位置)数据块(数据)除了上面这两个数据块,还有一个超级块。超级块指的是文件系统的第一个块,存放文件系统本身的结构信息。超级块的对象除了提供文件系统的关键信息(块长度、最大文件长度等),超级块还包含了读、写操作inode的函数指针。内核建立了一个链表包含所有活动文件系统的超级块实例,之所以使用活动这个术语替代已装载,是因为在某些环境中,有可能使用一个超级块对应几个装载点。(块设备上的一个文件系.

2021-04-20 22:13:14 4824

原创 力扣 220 存在重复元素III (滑动窗口)

220. 存在重复元素 III给你一个整数数组 nums 和两个整数k 和 t 。请你判断是否存在 两个不同下标 i 和 j,使得abs(nums[i] - nums[j]) <= t ,同时又满足 abs(i - j) <= k 。如果存在则返回 true,不存在返回 false。示例1:输入:nums = [1,2,3,1], k = 3, t = 0输出:true示例 2:输入:nums = [1,0,1,1], k = 1, t = 2输出:t...

2021-04-17 10:26:03 113

原创 虚拟文件系统——(sys)

虚拟文件系统概念虚拟文件系统:为了支持各种本机文件系统,且在同时允许访问其它操作系统文件,Linux内核在用户进程(或者说C标准库)和文件系统之间引入了一个抽象层,也就是虚拟文件系统VFS虚拟文件系统类型1、基于磁盘的文件系统ext2/3 FAT所有文件系统都使用面向块的介质,这里对底层块设备通信方法不感兴趣,内核中的驱动程序对此提供了统一的接口。从文件系统角度看,底层设备无非是存储块组成的一个列表,文件系统相当于对该列表实施一个适当的组织方案。2、虚拟文件系统(一种伪文件系统)pr

2021-04-15 15:47:37 1266 1

原创 深入linux内核架构1.3.14——Kernel设备模型基础框架kobject

内核中很多地方都需要跟踪记录C语言中结构的实例(借鉴C++对象,内核里面有许多的结构体实例化),尽管这些对象的用法大不相同,但各个不同子系统的某些操作非常相似,例如引用计数,这导致了代码复制。在内核版本2.5开发期间,内核采用了一般性的内核方法来管理内核对象,所引入的框架并不只是为了防止代码复制,同时也为内核不同部分管理的对象提供了一致的视图,在内核的许多部分可以有效地使用相关信息,如电源管理。一般性内核对象机制可用于执行下列对象操作:引用计数 管理对象链表(集合) 集合加锁 将对象属性导

2021-04-08 22:30:47 311

原创 块设备驱动之——block_device、gendisk以及hd_struct之间的关系(一)

1、block_device、gendisk以及hd_struct之间的关系2、对于块设备上已经打开的每个分区,都对应一个block_device的实例。对应于分区的block_device示例通过bd_contains关联到对应于整个块设备的block_device示例。所用的block_device通过bd_disk,指向其对应的通用磁盘数据结构gendisk,这里切记对于一个块设备,多个分区但是只有一个gendisk实例。gendisk实例中part成员指向hd_struct指针的

2021-04-08 21:24:33 1528 2

原创 深入linux内核架构块设备驱动之——磁盘分区描述hd_struct(三)

对于每个分区来说,都有一个hd_struct实例,用于描述该分区在设备内的键。也就是说hd_struct用于描述一个具体的磁盘分区。位置:include/linux/genhd.h struct hd_struct { sector_t start_sect; /* 该分区的起始扇区号 */ sector_t nr_sects; /* 该分区的扇区个数,也就是分区容量 */ sector_t alignment_offset;

2021-04-08 20:33:15 606

原创 深入linux内核架构块设备驱动之——块设备的核心属性、块设备的上层抽象 struct block_device(三)

从代码的角度来看,访问一个文件的过程变得尤其的漫长……整个路径包含的过程基本可以概括为虚拟文件系统-->块设备实际文件系统-->通用块层-->I/O scheduler-->块设备驱动程序描述块设备的数据结构有两个,一个是struct block_device,用来描述一个块设备或者块设备的一个分区;另一个是struct gendisk,用来描述整个块设备的特性。对于一个包含多个分区的块设备,struct block_device结构有多个,而struct gendi

2021-04-08 17:29:17 650 1

原创 块设备驱动之——request_queue, request, bio(二)

bio 代表一个IO 请求request 是bio 提交给IO调度器产生的数据,一个request 中放着顺序排列的bio当设备提交bio 给IO调度器时,IO调度器可能会插入bio,或者生成新的requestrequest_queue代表着一个物理设备,顺序的放着request1、请求处理每个块设备驱动程序的核心是它的请求函数。实际的工作如设备的启动都是在这个函数里完成的。request函数:void request(request_queue_t *queue);req.

2021-04-08 12:21:43 836

原创 块设备驱动之——block_device_operations以及gendisk(一)

1、块设备驱动往往为磁盘设备的驱动,但是由于磁盘设备的IO性能与CPU相比很差,因此,块设备的数据流往往会引入文件系统的Cache机制。2、实现角度:Linux为块设备和字符设备提供了两套机制。字符设备的实现:内核例程和用户态API一一对应,用户层的Read函数直接对应内核中的read例程,这种映射关系由file_operation维护。块设备:read、write API没有直接到块设备层,而是直接到文件系统层,再由文件系统层发起读写请求。3、blok_device_operations结构体

2021-04-08 10:04:26 1529

原创 力扣 80. 删除有序数组中的重复项 II(双指针)

1、https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array-ii/2、80. 删除有序数组中的重复项 II3、给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用.

2021-04-06 22:05:12 118

原创 数组地址与指针(二维数组*test.begin()->begin())

对于数组来说数组名字本身就是一个指针,它是一个指针常量,指向的地址不变。比如你定义了一个数组变量,编译器就会在内存中划分了一块地址空间给它,数组名这个指针常量就指向了这块内存空间的首地址,而数组首元素就存在这段内存空间的首地址处,即这段内存空间的首地址跟数组首元素的内存地址是一样的。#include<stdio.h>#include<iostream>#include<algorithm>#include <vector>using na

2021-03-30 11:09:25 356

转载 Linux--IO总结

1.IO概述分析一下写操作:char *buf = malloc(MAX_BUF_SIZE);strncpy(buf, src, , MAX_BUF_SIZE);fwrite(buf, MAX_BUF_SIZE, 1, fp);fclose(fp);以下图为例:分析数据流写入硬盘的过程malloc的buf对于图层中的application buffer,即应用程序的buffer;调用fwrite后,把数据从application buffer 拷贝到了 CLib buff

2021-03-25 19:28:33 244

原创 力扣542 01矩阵(广度优先搜索)

1、https://leetcode-cn.com/problems/01-matrix/2、给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。两个相邻元素间的距离为 1 。3、输入:[[0,0,0], [0,1,0], [0,0,0]]输出:[[0,0,0],[0,1,0],[0,0,0]]class Solution {private: static constexpr int dirs[4][2] = {{-1, 0...

2021-03-24 19:51:59 208

原创 力扣115不同的子序列2(记忆化搜索-DFS)

直接递归DFS超时class Solution {public: int dfs(string s,int idx, string t,int tmp) { if(tmp == t.size()) { return 1; } if(idx == s.size()) { return 0; } if(s[idx] == t[tm

2021-03-24 10:23:00 141

原创 力扣115不同的子序列1(动态规划)

1、https://leetcode-cn.com/problems/distinct-subsequences/2、给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。字符串的一个 子序列 是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,"ACE" 是 "ABCDE" 的一个子序列,而 "AEC" 不是)3、输入:s = "rabbbit", t = "rabbit"输出:3解释:如下图所示, 有 3 种可以从 s

2021-03-23 21:18:33 212

原创 力扣73置零矩阵(常量空间解决方法)

1、https://leetcode-cn.com/problems/set-matrix-zeroes/2、题目给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。进阶: 一个直观的解决方案是使用 O(mn) 的额外空间,但这并不是一个好的解决方案。 一个简单的改进方案是使用 O(m + n) 的额外空间,但这仍然不是最好的解决方案。 你能想出一个仅使用常量空间的解决方案吗?3、示例示例 1:...

2021-03-23 15:50:39 183

转载 构造函数与初始化列表2

https://blog.csdn.net/qq_33757398/article/details/813319180.初始化与赋值的区别意义上:1)初始化:一个变量或者一个对象在产生的时候就赋予一个值,属于伴随性质2)赋值:在一个变量或者一个对象在产生之后的任意时刻赋予一个值,属于任意性质宏观代码上:1)两者作用相同2)对于数组和结构体来说,初始化和赋值的的形式不同。对于数组,可以使用花括号一起初始化,如果赋值的话,就只能单个元素就行;对于结构体,可以使用花括号初始..

2021-03-17 14:22:12 147

BiBi_study.zip

BiBi_study.zip

2021-02-21

win下使用gvim编译C/C++安装包

下使用gvim编译C/C++安装包

2020-11-27

ESP 8266系列开发板arduino 教程.rar

ESP8266 arduino开发资料。

2020-11-02

arduino-1.8.13-windows.zip

arduion安装包

2020-10-31

Android Studio.zip

安卓安装包。

2020-09-11

64位-java-Window电脑系统.zip

很简单的安装包,很简单很简单。

2020-09-07

mysql-5.6.43-linux-glibc2.12-x86_64.tar.gz

linux 上的mysql安装包.

2020-07-14

web practice.zip

搭建一个简单的web服务器,linux条件下。简单实用,11111111111111111111111111111111111111111111111

2020-03-06

thread.zip

QT线程主线程再创建两个,线程的相关知识入门总结看的,2019.12.5,

2019-12-05

server.zip

TCP 服务器与客户端学习的代码资料,适合新手学习使用。

2019-09-23

QT的文件的读取,QFile的使用

QT的文件的读取,QFile的使用。

2019-09-19

mouse_event.7z

QT学习资源简单代码,学习键盘和鼠标事件时的学习代码。

2019-09-10

空空如也

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

TA关注的人

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