自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(474)
  • 资源 (4)
  • 问答 (2)
  • 收藏
  • 关注

原创 ENVI图像处理(6):NDVI和植被指数

NDVINDVI植被指数ENVI操作NDVIband mathquick stat统计图NDVI定义:NDVI(Normalized Difference Vegetation Index,归一化差分植被指数,标准差异植被指数),也称为生物量指标变化,可使植被从水和土中分离出来。NDVI基本原理:植物叶片组织对蓝光(470nm)和红光(650nm)有强烈吸收,而对绿光和红外光强烈反射。叶片中心的海绵组织和叶片背面组织对近红外辐射(NIR, 700-1000nm)反射较强。从红光(Red)到红外光

2021-05-17 01:41:50 46072 9

原创 C/C++学习笔记(2020.11---2021.5)

CPP旅途C/C++语言的诞生CCPlusPlus非标准库程序运行过程GNU编译器集合和LLVM项目gcc和g++标准库在计算机位置Linux/UNIXWindows命名空间定义命名空间using指令using关键字的其他作用不连续的命名空间嵌套的命名空间C预处理器define在define中使用参数##运算符变参宏#undef指令条件编译#ifdef、#else、#endif指令#ifndef指令#if和#elif指令#error#line#pragma基本数据类型和表达式基本数据类型输出数据大小整形无符

2021-05-08 20:21:39 3369 19

原创 剖析硬盘分区方案和NTFS文件系统结构

一个NTFS分区的数据结构如下VBR,存储跟引导相关的数据,大小为16个扇区File Area:一切皆为文件,包括元数据文件、常规文件、目录,一切的一切都是文件BBS,分区的第一个扇区是分区引导记录,是能否引导系统的关键,所以用分区的最后一个扇区备份第一个扇区,用于修复损坏的第一个扇区卷中第一个扇区存放和的数据偏移长度含义00-02H3跳转指令EB 52 9003-0AH8NTFS0B-0CH2每个扇区的字节总数,一般是5120DH1簇大小0E-0FH2保留扇区10-12H3。

2024-03-28 23:25:54 965

原创 C++11特性:std::lock_guard是否会引起死锁?

今天在评审代码的时候,因为位于两个不同的线程中(一个是周期性事件线程,一个是触发式事件线程),需要对一个资源类的某些属性进行互斥的访问,因此采用lock_guard互斥量包装器,但是在升级的过程中,因为整个系统太大,所以在询问了某位同事后,得到的答案是在两个不同的地方加上lock_guard有一定的可能性会导致死锁,但是后面在测试的过程中又没有问题,真的如此吗?本文针对lock_guard来做阐述和延申。

2024-03-24 11:07:12 745

原创 Autosar的前世今生:E2E通信校验

E2E保护概念的核心是针对安全相关的数据交换,需要在运行时进行保护,以消除通信链路中可能的失效带来的影响。时有各自的机制、参数、数据格式,具有非常强的灵活性,用户可以根据实际需要选择配置。规范里规定的一种用于保证数据传输正确的概念,属于功能安全范畴。细节处可查询文档,此处不做概述。通信来举例,两个节点通过。(配置)每种配置在计算。

2024-03-22 00:15:02 471

原创 软件测试:LLVM中的Fuzz模糊测试框架——libFuzzer

是LLVM生态系统中的一个模糊测试工具,用于自动化地发现软件程序中的漏洞和错误。它通过生成大量的随机输入数据并观察程序的行为来进行模糊测试。libFuzzer是一个基于内存的模糊测试引擎,使用LLVM的插桩技术和代码优化功能来提高测试效率和覆盖率以下是 libFuzzer 的一些功能特点:libFuzzer提供了一种自动化的模糊测试方法,可以生成大量的随机输入数据,并在每个输入上运行目标函数进行测试。它通过观察程序的崩溃、断言失败、未定义行为等反馈来发现潜在的问题。libFuzzer通过使用和。

2024-03-21 00:00:00 278 1

原创 软件测试:C++ Google Test单元测试框架GTest

最近在写项目的时候,学到了许多关于软件测试的知识,也不断的使用新的测试框架和测试工具,每次总是机械式的拼接其他人的代码,代码发生错误也不知道怎么解决,因此我打算直接将其学一遍

2024-03-19 22:53:52 612

原创 RAM/ROM/Flash区别

直接交换数据的内部存储器,也叫内存。它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介, 当电源关闭时。协会所订立的、主要是针对手机或平板电脑等产品的内嵌式存储器标准规格。的一个明显优势是在封装中集成了一个控制器,它提供标准接口并管理闪存,固态硬盘的存储介质分为两种,一种是采用闪存()的性能,还不会断电丢失数据同时可以快速读取数据(为内部存储器,非内存和外存的关系,从本质上来说,闪存,它属于内存器件的一种,是一种不挥发性(用来存储和保存数据。分为很多种,常见的主要有。

2023-11-10 18:09:39 237

原创 我的创作纪念日

创作纪念日

2023-08-05 10:17:01 245

原创 IA-32体系结构下的高端内存的理解

第一遍看。

2023-08-03 00:05:59 381

原创 我的创作纪念日

都快毕业了,没啥好写的了,祝大家都有光明的未来!

2023-05-30 14:25:23 166

原创 OpenSBI知识结构整理

OpenSBI

2023-04-06 00:49:48 701 1

原创 扒一扒bin文件和elf文件的联系

Bin文件是最纯粹的二进制机器代码, 或者说是"顺序格式"。按照assembly code顺序翻译成binary machine code,内部没有地址标记。Bin是直接的内存映象表示,二进制文件大小即为文件所包含的数据的实际大小。BIN文件就是直接的二进制文件,一般用编程器烧写时从00开始,而如果下载运行,则下载到编译时的地址即可。可以直接在裸机上运行。文件中还是有一些有用的信息,不过不知道为何关于动态链接的。感觉以下句子还是有些模糊不清,特别是。那么来扒一扒具体文件内容。中,稍等再研究一下吧。

2023-04-01 02:13:38 397

原创 Linux CFS调度器:原理和实现

集合,它的工作量应当由内核保持平衡,其组成类似于基数树,每个调度域被依次划分为一个或多个组,每个组待办调度域的一个。而某一调度实体由于某些原因导致进入阻塞或睡眠态,此时便会主动将时间片让出去,导致其。增加,此时便会形成不对等,这是不公平的,因此需要在下一进程切换时调度。是一样的,因此在这种情况下优先级较低的实际上是时钟有了更高的衰减率。子集,工作量的平衡总是在调度域的组之间来完成。当进程从一个CPU的运行队列中出来时,它的。为什么让优先级高的和优先级低的分配不同的。的周围,换句话来说就是,只比较相对大小。

2023-02-28 13:13:32 558

原创 C++模板编程高级技巧

因此,模板的实现也应该放在头文件内,此时在其他代码文件中可以直接将模板的实现也包含进来,当需要生成模板实例时,编译器可根据已知模板实现当场生成,从而无需依赖在别的目标文件中生成的模板实例。标记,并且在函数及类模板的实现中,模板参数是用于指代具体类型,因此,这两个关键字标记类型的模板参数被称为类型模板参数,除此之外,还有以下四种类型。以上四种参数统称为非类型模板参数,其在模板参数列表中的声明方式与对应类型的变量声明一致,此外模板参数还可以是一个模板,称为模板模板参数。或者给定一个迭代器类型,求出其标签类型)

2023-01-24 22:32:24 536

原创 SPDK技术浅析

命令本身描述了操作,还描述了主机内存中包含与命令关联的主机内存数据的位置,也就是我们要写入数据的位置,或将读取的数据放置到内存中的位置。实例都是一个些由大页内存组成的内存池,并且以特定的数据结构进行组织,其中支持的每个分配和使用的单元可以用于存储调用者的数据。不断轮询的方式,一旦查询到操作完成,则立马触发回调函数,给到上层用户程序,这样用户程序可以按需发送多个请求,以此提升性能。不是常规意义下的线程,实际是个逻辑上的概念,它没有具体的执行函数,其所有相关的操作均在。在针对网络存储解决方案中,当前主要有。

2023-01-12 06:43:26 1144

原创 Linux内存管理:内存分配和内存回收原理

BootmemSlab这是的第三篇文章主要分成四大模块来剖析:内存管理、设备管理、系统启动和其他部分其中内存管理分为Bootmem、和Slab三部分来阐述,当然,除了内存初始化,还必然有内存分配和内存回收有些todo后续会补上。

2022-12-13 21:37:59 981

原创 Linux内存管理:Slab Allocator闪亮登场

BootmemSlab这是的第三篇文章主要分成四大模块来剖析:内存管理、设备管理、系统启动和其他部分其中内存管理分为Bootmem、和Slab三部分来阐述,本文主要阐述的是Slab启动流程。

2022-12-11 22:32:41 531

原创 Linux内存管理:Buddy System姗姗来迟

这是的第二篇文章主要分成四大模块来剖析:内存管理、设备管理、系统启动和其他部分其中内存管理分为Bootmem、和Slab三部分来阐述,本文主要阐述的是启动流程。

2022-12-09 14:17:45 610

原创 Linux内存管理:Bootmem的率先登场

这是的第一篇文章主要分成四大模块来剖析:内存管理、设备管理、系统启动和其他部分其中内存管理分为Bootmem、和Slab三部分来阐述,本文主要阐述的是Bootmem启动流程Bootmem分配器是阶段管理物理内存,并提供物理内存分配和回收的分配器。其作为内核初始化过程中第一个真正意义上的内存分配器,为内核早期的初始化活动提供了物理内存的分配和回收,以及为Buddy分配器的创建提供了基础,Bootmem分配器将自己管理的物理内存移交给Buddy分配器之后,其使命已经完成,内核正式启用Buddy。

2022-12-09 01:27:36 389

原创 并行多核体系结构基础知识

然而,在多节点情况下。每个节点拥有自己的处理器和内存,节点间互连形成一个共享存储系统,这时需要硬件支持来实现一种映像,即所有节点的内存构成一个可被所有处理器寻址的单一处理器。写直达每次写触发总线写从而占用总线带宽,在写回缓存机制下,如果同一缓存块中的一个或多个字或字节被多次写入,只需占用一次总线带宽来失效其他缓存拷贝即可,带宽会很快被耗尽。与缓存一致性协议分开,缓存一致性协议仅能解决对单个存储器块地址的访问之间如何排序的问题,而对于不同地址的访问并不是缓存一致性协议所要参考的问题。共享缓存和主存储器。

2022-11-24 12:22:01 676

原创 ARM体系结构与编程(更)

ARM汇编语言源程序中,语句由指令、伪操作和宏指令组成,主要分为:符号定义、数据定义、汇编控制、数据帧描述、信息报告和其他伪操作符号定义符号定义伪操作用于定义ARM汇编程序中的变量,对变量进行赋值以及寄存器名称GBLA、GBLL及GBLS:声明全局变量LCLA、LCLL及LCLS:声明局部变量SETA、SETL及SETS:给变量赋值RLIST:为通用寄存器列表定义名称CN:为协处理器的寄存器定义名称CP:为协处理器定义名称DN 及SN:为VFP的寄存器定义名称FN。

2022-11-23 21:35:59 532

原创 2021年的一封情书:指针

无意间翻到了一年前的情书。

2022-11-13 22:14:32 406

原创 Linux内核虚拟化技术KVM总结以及Docker容器技术的浅析(以x86架构为例)

虚拟中断芯片是在用户空间实现的,但是中断芯片密集地参与了整个计算机系统的运转过程,因此,为了减少内核空间与用户空间之间的上下文切换带来的开销,后来,中断芯片的虚拟是在了内核空间。)技术是一种更加轻量级的操作系统虚拟化技术,它将应用程序,依赖包,库文件等允许依赖环境打包到标准化的镜像中,通过容器引擎提供进程隔离,资源可限制的允许环境,实现应用与。,在这种方式下,虚拟机的非特权级治疗直接运行在处理器上,当运行特权级指令时,将触发处理器异常,陷入VMM中,由。虚拟化,内存虚拟化,中断虚拟化和设备虚拟化。

2022-11-07 19:57:47 2158

原创 Intel® 64 and IA-32 Architectures Software Developer’s Manual 读后感

4834页,虽然有点多,但是还是希望大家能看完。前些时候训练了一段的的芯片构造,主要实现的是mips和risc-v指令集,后来自己有时间看了看arm,受益匪浅,不得不说,要想一个更好的os,底层离不开高效的硬件支持,所谓“软件不行,硬件出手”正是此道理。主要分为四层,第一册是基本架构,第二册是指令集参考,第三册上系统编程手册,第四册上MSR寄存器查阅手册。第一册讲述的偏重硬件架构,第三册偏重软件特性,2和4我在此不列出了,纯纯使用字典。

2022-11-03 19:23:02 782

原创 虚拟文件系统(无持久存储的文件系统),以proc和sysfs为例

对于现代操作系统,虚拟文件系统是一个几乎无处不见的功能,因此,要探究现代操作系统的运行机制,对其进行讨论是必然的。本文使用的是`Linux 2.6.x.x`,这是一个变革性的版本,无论是内存管理,进程管理,文件管理还是设备管理都出现了开天辟地的变化,因此,以这个版本进行探究是很有必要的。

2022-10-16 17:12:20 1727

原创 现代操作系统的内存管理原理:以Linux2.6.x.x为例

不谈老掉牙的内存管理方式了。本文使用的内核是版本。内存管理?内存管理!不管是在老版本的操作系统各个子系统中,亦或是现代版本操作系统中,都是极其复杂和庞大的。当然,万变不离其宗,但是,看源码可以让你找不到方向。本文在上一篇的基础上来解释,当然要把源码完完全全的列出来不太现实,大家对照自己的前置理解即可,如果有时间和精力去完完全全看懂源码才是最好!。动态链接算是把Glibc、vir addr和用到了极致!对照之前的Linux 0.11和0.99版本,2.6.x.x。

2022-10-16 02:01:32 549

原创 什么是虚拟地址空间?从架构视角来解释

引言:小白,虚无,飘渺,渐实,真实,进阶,深化,投入,高阶,系统,架构……操作系统学习之路道阻且长。为何要从源码的角度来探究?抽象层实在太过抽象!操作系统五大功能,可能学完一学期的课程也难以把它们联系起来,因此从源码角度来解剖,很有必要。本文操作系统以Linux为例此篇也主要是解惑文章的,毕竟之前觉得操作系统很多东西实在存在的莫名其妙,时至今日,仍有许多疑点。但是对于现代操作系统,特别是Linux,越来越佩服了。

2022-10-12 22:32:48 1307

原创 记录QEMU上模拟ARM运行环境(内核 2.6.30)

我们使用ramfs的方式来为内核提供根文件系统,内核默认的配置没有支持ramfs设备,我们需要添加对应的支持(CONFIG_BLK_DEV_RAM=y)此处有两种方法可以生成最小根文件系统,一种是使用虚拟内存文件系统,一种是直接新建物理节点(可见参考链接部分),下面 主要介绍使用虚拟内存文件系统。制作根文件系统镜像 根文件系统镜像就相当于一个硬盘,就是把上面rootfs根目录中的所有文件复制到这个硬盘中。把busybox-1.20.2中的文件复制到rootfs根目录下,主要是一些基本的命令。

2022-09-14 06:20:37 1081 2

原创 Linux 2.6.4.30 Arm Architecture源码深度剖析---基于《ARM Linux内核源码剖析》

以下均是如此,内存管理和文件目录架构均没有太大的变化,而市面上唯一找到的便属这本《ARM Linux内核源码剖析》了,在它的基础上,我在本篇对该版本的。内存类型:根据内存使用目的的不同,内存类型对是否使用缓存、是否使用写缓冲、是否共享、域等信息的定义了不同设置,通过。由于嵌入式系统具有的资源十分有限,为了提高这种环境下内核内存的负载率和执行效率,使用压缩后的内核二进制文件。是 编译内核指定的,且都是虚拟地址,因此,只有将这些虚拟地址变更为物理地址,才能访问具有处理器信息的。架构代码进行词词解析,对!

2022-09-08 00:05:26 1119

原创 嵌入式知识总结:交叉编译、ARM汇编、驱动开发

引言:嵌入式系统开始上课了,我要寄了!所以写下这篇文章作为我嵌入式系统开发和单片机开发的先导知识点

2022-09-07 04:42:02 651

原创 Linux 0.11源码的内存管理和进程创建&&Linux0.99改进方法简述

`Linux`内核源码剖析,在前面的一篇文章中有对其整体框架大致说清楚了,所以我也没有太在意其内在细节,在看完xv6源码之后,我对0.11版本还是有一些执念,感觉有一些不兼容。果然,让我发现了一些端倪,后来在网上查资料,才知道现在`Linux`操作系统的内存管理基本都是在0.99版本之后进行改进的,原始的0.11版本背负了太多历史包袱,导致其繁杂冗余,但是也没办法,当初能写出该系统也是在资源有限的前提下的。......

2022-08-18 04:29:53 467

原创 我的创作纪念日

#### 初心提高项目效率分享技术成果大家共同进步

2022-08-03 23:03:07 81

原创 深度操作系统DeepinOS安装步骤和MySQL安装测试

深度操作系统是基于Linux内核,以桌面应用为主的开源GNU/Linux操作系统,支持笔记本、台式机和一体机。深度操作系统(deepin)包含深度桌面环境(DDE)和近30款深度原创应用,及数款来自开源社区的应用软件,支撑广大用户日常的学习和工作。另外,通过深度商店还能够获得近千款应用软件的支持,满足您对操作系统的扩展需求。深度操作系统由专业的操作系统研发团队和深度技术社区共同打造,其名称来自深度技术社区名称“deepin”一词,意思是对人生和未来深刻的追求和探索。---摘自百度百科...

2022-07-28 17:25:28 978

原创 RISC-V架构学习笔记

历史先行:`RISC-V`架构主要由美国加州大学伯克利分校的Krste Asanovic教授、Andrew Waterman和Yunsup Lee等开发人员于2010年发明,并且得到了计算机体系结构领袖的泰斗David Patterson的大力支持。基于对于先前架构的种种问题,`RISC-V`架构横空出世。2016年,`RISC-V`基金会正式成立开始运作,其是一个非营利性组织,负责维护标准的`RISC-V`指令集手册与架构文档,并推动`RISC-V`架构的发展。.........

2022-07-19 09:55:48 371

原创 uni-app框架学习笔记

uni-app是一套可以适用多端的开源框架,一套代码可以同时生成ios,Android,H5,微信小程序,支付宝小程序,百度小程序等

2022-06-19 23:19:15 1171

原创 探索一下PyScript的妙用

简而言之,就是Scratch、JSFiddle和其他“易于使用”的编程框架的python替代品,其目标是使web成为一个友好的、可hack的地方,任何人都可以在这里编写有趣的、交互式的应用程序。

2022-06-18 18:44:04 1219

原创 编程中的程序编码问题

ASCII码表链接ASCII是美国标准,所以它不能良好满足其它国家的需要。ANSI编码表示英文字符时用一个字节,表示中文时用两个或四个字节。Unicode编码但是问题在于,原本可以用一个字节存储的英文字母在Unicode里面必须存两个字节,这就产生了浪费。那么有没有一种既能消除乱码,又能避免浪费的编码方式呢?答案就是UTF-8!在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符

2022-06-07 18:49:49 301 1

原创 “五月的尾巴,炽烈的热情”,来自一名计算机热爱者三年的计算机旅途小记

加入CSDN时间:2020-06-02不知不觉,写博客这个习惯保持了三年了,大学的这三年生活不知为何比高中快很多,时间一周一周的流逝,人流也在不断的更新,陪伴在自己身边的,只有对计算机地热爱。第一年,32篇文章,是对计算机世界懵懂的生涩。我初入计算机是一个同学带我入坑的,本着对于[爬虫来钱快]的诱惑和大一[Python]的基础,我便开始了[网络爬虫]的学习,那时候甚至不知道什么是[HTTP],什么是[请求和响应,更别说一些[GET和POST请求],果然,在学习一两个月之后便遇到了瓶颈。[数据分.

2022-05-30 10:48:50 300 3

原创 xv6多核系统进程调度流程及自旋锁的疑点

目录进程调度器在干吗?自旋锁的实现机制及其疑点xv6进程的睡眠和唤醒机制浅浅梳理一下进程切换的原理进程调度器在干吗?在main.c、proc.c和spinlock.c中初始化了进程描述符表和调度器// main.cint main(void) { // 初始化进程描述符表PCB pinit(); // 开始进程调度 mpmain();}static void mpmain(void) { scheduler(); // start running processes}

2022-05-07 18:42:35 701

QEMU仿真Linux5.19内核(rootfs利用busybox)

要用的同志直接私戳我即可,不用下载

2022-09-15

Outline-Client.exe

Outline-Client.exe

2022-08-25

Reverse Engineering for Beginners(反汇编)

(反汇编)

2021-06-22

ArcEngine的OMD图.zip

OMD模型图

2021-06-06

Google编码规范C++

Google编码规范C++

2021-05-24

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

TA关注的人

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