- 博客(23)
- 收藏
- 关注
转载 protobuf实用教程[C++]
protobuf也叫protocol buffer是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现:java、c#、c++、go 和 python 等,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 、json进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。
2024-06-29 20:34:35
583
原创 Triton学习笔记
b站链接:合集·Triton 从入门到精通在大模型部署中,“batching” 是指将多个输入样本一起发送到模型进行推理的过程,而不是逐个样本进行推理。这个过程通常发生在推理阶段,也就是在模型实例接收到推理请求后,对输入数据进行处理的阶段。作用:例子:4. Practice : WeNetRate Limiter原理当客户端发送了很多request,server接收了request之后,只要我们的model instance有空闲的,scheduler就会把request调度到空闲
2024-06-09 23:05:50
2164
原创 真象还原操作系统_第十二章_进一步完善内核
- CPU执行指令int 0x80来触发系统调用。在系统调用之前,linux向“/home/lily/OS/boot/lib/user/syscall.h”“/home/lily/OS/boot/kernel/kernel.S”“/home/lily/OS/boot/userprog/syscall_init.c”“/home/lily/OS/boot/userprog/syscall_init.h”“/home/lily/OS/boot/thread/thread.
2024-03-15 16:39:30
932
1
原创 真象还原操作系统_第十一章_用户进程
任务切换步骤如下:CPU忽略偏移量0x1234,拿选择子0x0018在GDT中索引到第3个描述符。检查描述符中的P位,看其在不在内存中,若为0则异常。同时检查S和TYPE位,判断其类型,如果是TSS描述符,检查其B位看其是否在运行,若为1则抛出GP异常。进行特权级检查,CPL和TSS选择子中的RPL的特权都有>TSS描述符的DPL,否则抛出GP异常。将当前任务的状态保存到寄存器TR指向的TSS中。加载新任务TSS选择子到TR寄存器的选择器部分,同时将TSS描述符中的起始地址和偏移量等属性加载到T
2024-03-08 20:35:45
1021
1
原创 真象还原操作系统_第十章_输入输出系统
这种行为是由于编译器的链接过程所决定的。当编译器处理一个源文件时,它会将其中定义的函数和变量与其他源文件的函数和变量进行链接。而带有static关键字的函数具有内部链接(internal linkage),只能在定义它的源文件中使用。当static用于函数时,它会使函数的作用域限定在当前源文件中,也就是说,该函数只能在定义它的源文件中使用,无法被其他源文件调用。输入缓冲区寄存器:8位宽寄存器,键盘驱动程序通过out指令向此寄存器写入对8048的控制命令、参数等,对于8042本身的控制命令也是写入此寄存器。
2024-02-18 22:45:20
1063
原创 真象还原操作系统_第九章_线程
pthread_create的函数原型:参数名称作用__newthread用于存储新线程的id,即uid__attr用于指定线程的类型,默认类型为NULL__start_routine函数指针,用于指向线程中所调用的函数的地址__arg给在线程中运行的函数__start_routine的参数,如果有2个及以上的参数,则封装为一个结构体若pthread_create函数返回值为0,则线程创建成功。线程的实际功能:调用函数。线程和函数调用的区别:
2024-02-14 00:57:44
1016
1
原创 真象还原操作系统_第八章_内存管理系统
make和makefile:依赖关系定义在makefile文件中,make程序通过解析makefile文件自动找出变更的文件以及依赖此变更文件的相关文件,然后对所有受影响的相关文件执行事先定义好的命令规则。make和makefile并不编译文件。关系类似于脚本解析器和脚本语言文件。makefile相当于脚本语言文件,其中所写的内容必须遵循make所定义的语法;make程序是文件makefile的解析器,它定义了各种关键字、语法结构、函数、变量等。
2024-01-29 19:46:33
989
原创 真象还原操作系统_第七章_中断
中断代理:负责对中断仲裁,决定哪个中断优先被CPU受理。Intel 8259A芯片就是一种可编程的中断代理。8259A的功能:用于管理和控制可屏蔽中断,它表现为屏蔽外设中断,对它们实行优先级判决,向CPU提供中断向量号等。每个独立运行的外设都是一个中断源,它们发出的中断只有接在中断请求(IRQ:Interrupt ReQuest)信号线上才能被CPU知晓。主片与从片:Intel处理器共支持256个中断,而8259A可管理8个中断,一个8259A被称为一片。
2024-01-15 20:50:58
1015
1
原创 真象还原操作系统_第六章_完善内核
定义:gcc支持在C代码中直接嵌入汇编代码,所以内联汇编又称为gcc assembly code。分类:最简单的基本内联汇编复杂一些的扩展内联汇编机器模式是用来在机器层面上指定数据的大小和格式的。我们需要了解的几个操作码操作码输出例如h输出寄存器中8位(1字节)部分b输出寄存器中低8位(1字节)部分w输出低16位(2字节)对应的部分k输出寄存器的32位(4字节)部分。
2024-01-09 17:35:20
858
原创 真象还原操作系统_第五章_保护模式进阶,向内核迈进
e:指定文件的入口地址,编译器默认把名为_start的函数作为程序的入口地址。平时我们写的代码都是main函数,但链接器还是用到了_start,它不是我们提供的代码,是运行库提供的。这说明main函数不是第一个执行的代码,是被其他代码调用的,main函数在运行库代码初始化完环境后才被调用。页目录表和页表的物理地址:页目录表放在物理内存0x10_0000处,为了让页表紧挨着页目录表,第一个页表的物理地址为0x10_1000。p_align:指明本段在文件和内存中的对齐方式。-o:指定输出的文件名。
2024-01-04 15:05:17
1160
1
原创 程序员的自我修养_链接、装载与库_第二部分
正常情况下两个地址是一样的,但在有些嵌入式系统中是不同的,我们只关注VMA即可。因为.bss段内数据都是0,因此把它们存放在.data中并分配空间是没有意义的。.bss段不给该段的数据分配空间,只是记录数据所需空间的大小。.rel.text是针对.text段的重定位,因为.text段至少有一个绝对地址的引用(printf函数的调用)rel.text和Section Table都因为对齐的原因,与前面的段之间分别有一个字节和两个字节的间隔。模板函数可能在不同编译单元被实例化成相同的类型;
2023-12-08 16:45:22
209
原创 真象还原操作系统_第四章_保护模式入门
保护模式下CPU寻址过程 : 段基址在段描述符中,用选择子索引出段描述符,CPU自动从段描述符中取出段基址,再加上段内偏移地址去寻址。由于保护模式是32位寄存器,所以不需要"段基址左移4位+段内偏移地址"来寻址,直接用"段基址+段内偏移地址"就是要访问的内存。变址寻址与基址寻址的不同,就在于偏移地址的计算更复杂了点。GDT : 描述符的数组,数组中的每个元素是一个8字节的描述符。GDT中第0个段描述符不可用,要用于表示未初始化的段描述符。操作数大小反转前缀0x66(编译时显示)
2023-11-15 17:45:42
194
原创 真象还原操作系统_第三章_完善MBR
因为指令都在内存中,所以CPU也要访问内存才能拿到要执行的代码。IP寄存器是不可见寄存器,不可以直接赋值。无条件转移:call、ret、jmp指令在原理上都是通过修改cs和ip寄存器的值,将CPU导向新的位置。jmp:一去不复返地执行新代码,使用环境——交接call:执行一段代码,通过ret返回,不跨段,近调用的call在栈中留下段内偏移地址。call far:远调用,通过retf返回,跨段,远调用的call far在栈中留下了段基址和段内偏移地址。
2023-11-01 21:56:42
164
原创 真象还原操作系统_第二章_编写MBR
程序被加载器(软件/硬件)加载到内存的某个区域CPU的cs:ip寄存器被指向这个程序的起始地址。加载器:本质上是一堆函数组成的模块BIOS的最后一项工作是校验启动盘中位于0盘0道1扇区(或0扇区,表示最开始的扇区)【MBR所在的扇区】的内容。如果此扇区末尾的两个字节分别是魔数0x55和0xaa,BIOS便认为该扇区中确实存在可执行程序(即主引导程序MBR),便加载到物理内存0x7c00处,随后跳转到此程序,继续执行。为什么是0盘0道1扇区的内容?
2023-10-25 19:56:45
130
1
原创 李宏毅04_nlp
根据输出不同nlp可以分为三类:每个vector生成一个label :每一个节点有什么样的特性整个sequence生成一个label :将留言分类为好或不好seq2seq:语言翻译。
2023-10-14 20:14:42
69
1
原创 真像还原操作系统_第0章 一些你可能感到困惑的东西
我们需要做的就是知道如何通过计算机指令来控制硬件。因为寻址方式是段基址+段内偏移地址,所以0xC00:3和0xC02:1都是访问同一个内存块。内存像是重叠在一起,就是段重叠。平坦模型就是指一个段,段大小是地址总线能够达到的范围。定义:(对于数字而言的,因为指令不需要拆分)小端字节序:低字节放低地址,高字节放高地址大端字节序:低字节放高地址,高字节放低地址优点:小端:因为低位在低地址,强制类型转换时不需要调整字节大端:有符号数,其字节最高位不仅表示数值本身,还起到符号的作用。
2023-10-12 09:11:05
132
原创 李宏毅02_类神经网络训练不起来怎么办
这对于很多机器学习算法是很重要的,因为不同的特征可能具有不同的尺度和分布,如果不进行缩放,可能会导致某些特征对模型的影响过大,从而影响模型的性能。更具体地说,对于一个实对称矩阵 A,如果对于任意非零向量 x,都有 x^T A x < 0(其中 x^T 表示向量 x 的转置),那么矩阵 A 被称为负定矩阵。类似地,对于一个二次型 Q(x) = x^T A x,如果对于任意非零向量 x,都有 Q(x) < 0,则二次型 Q(x) 被称为负定二次型。
2023-10-05 18:15:13
206
原创 黑马程序员-小程序
黑马程序员-小程序一、快捷键1.alt + shift:多行同时打字2.ctrl + D :匹配相同的文本3.shift + end : 选中光标所在位置后的所有文本4.shift + alt + “↓”/“↑” : 向下/上复制二、模块语法1.数据绑定<!-- 1.text相当于以前web中的span标签 行内元素 不会换行 2.view相当于web的div标签 块级元素 会换行 3.checkbox 以前的复选框标签--><!--1.字符串-->
2020-12-08 14:23:08
539
1
原创 L1-049 天梯赛座位分配 (20分) (C++)
L1-049 天梯赛座位分配 (20分)(C++) *这是我人生中的第一个优快云博客,目前大三。因为看别人的解法看不懂所以自己琢磨了几个小时,终于在23:58全对了!题目详情:L1-049 天梯赛座位分配 (20分)天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情。为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i 所学校有 M[i] 支队伍,每队 10 位参赛选手。令每校选手排成一列纵队,第 i+1 队的选手排在第 i 队选手之后。从第 1
2020-11-26 00:30:20
288
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人