自定义博客皮肤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)
  • 收藏
  • 关注

原创 Linux delay相关函数实现

这里讨论基于 ARM 处理器架构的实现,udelay 实现在arch/arm/include/asm/delay.h中。gcc 的内建函数 __builtin_constant_p 用于判断 n 是否为编译时常数,如果 n 是常数,返回 1,否则返回 0。当然,从注释中我们可以看到,include/linux/delay.h 目录下只是通用的实现,可以被架构相关的实现覆盖掉。至此,loops_per_jiffy 变量就已经计算完毕,后面的 udelay 、BogoMIPS 计算都会用到该变量。

2024-01-28 14:45:50 697

原创 X86_64 栈和函数调用

Intel 系列处理器通常称为x86,目前常用的笔记本或台式机都是 64 位的处理器,这些处理器使用的机器语言一般都是 x86_64,我记得以前学习微机原理课的时候,学习的还是 8086 处理器上的汇编。8086 是Intel的第一代16位的处理器,只有8个16位的寄存器,而现在的 64 位处理器对其进行了扩展,共有16个64位的寄存器。需要注意这里的栈是倒着画的,栈顶在下面,栈顶的内存地址是更小的,换句话说栈增长的方向是内存地址减小的方向。寄存器,这个寄存器中存储着栈顶的地址。到这里,函数栈情况如下图。

2023-10-15 11:34:17 315

原创 可执行文件 elf 和 bin

在 Embedded(嵌入式)中,如果上电开始运行,没有 OS 系统,如果将 ELF 格式的文件烧写进去, 包含一些 ELF 文件的符号表字符表之类的section,运行碰到这些,就会导致失败,如果用 objcopy 生成纯粹的二进制文件,去除掉符号表之类的 section,只将代码段数据段保留下来,程序就可以一步一步运行。在Linux OS上,为了运行可执行文件,他们是遵循 ELF 格式的,通常 gcc -o test test.c,生成的 test 文件就是 ELF 格式的。ELF 文件并执行。

2023-10-05 13:41:58 519

原创 关于内存对齐你需要了解的事

这篇文章的目的是带你了解什么是内存对齐,具体的内存对齐的细节、处理方式、不同架构则不会去详细讲解,只做科普文用。内存对齐和数据在内存中的位置有关。内存对齐以字节为单位进行,一个变量的内存地址如果正好等于它的长度的整数倍,则称为自然对齐。比如在32位 cpu 下,一个 u32 的内存地址为0x00000004 ,则属于自然对齐。内存空间按照字节进行划分,理论上可以从任意地址开始读取,实际上会要求读取数据的首地址是某一个值的整数倍。

2023-10-05 13:26:46 744

原创 动态链接那些事

动态链接那些事

2023-10-03 22:28:01 1052

原创 可执行文件的装载与进程

当我们在Linux系统的bash下输入一个命令执行某个ELF程序时,Linux系统是怎样装载这个ELF文件并且执行它的呢?首先在用户层面,bash进程会调用fork()系统调用创建一个新的进程,然后新的进程调用execve()系统调用执行指定的ELF文件,原先的bash进程继续返回等待刚才启动的新进程结束,然后继续等待用户输入命令。它的三个参数分别是被执行的程序文件名、执行参数和环境变量。在进入execve()系统调用之后,Linux内核就开始进行真正的装载工作。

2023-09-04 11:09:59 163

原创 静态链接过程

1、空间与地址的分配  现在的链接器空间分配的策略基本上都采用 “相似段合并” 的方式。通过将所有相同类型的 section 合并到一起,例如将所有输入目标文件的 .text 合并(按顺序合并)到输出文件的 .text 节中;然后,链接器根据运行平台中进程虚拟地址空间的划分规则,为所有输入目标文件中定义的节和符号分配运行时内存地址;完成之后,程序中的每条指令和符号都有唯一的运行时内存地址了。链接器的空间分配示意如下:  使用这种方法的链接器都采用两步链接的方法。  第一步,空间与地址分配。扫描所有的

2023-07-26 22:34:24 352

原创 ELF文件结构描述

经过上面的描述,我们了解到了强符号,弱符号,强引用,弱引用的概念。强符号可以替换弱符号。弱引用可以避免函数未定义的错误。强符号替换弱符号一些库中对外接口可以声明为弱符号。比如:实现一个 myadd(int num1,int num2) 接口,之后再将项目中的所有 add 替换为 myadd。这种方式可行,但是存在缺点:修改量大,并且后续人员不清楚背景,很有可能继续使用熟悉的 add 接口。更新 math 库,从更本解决此问题。这种方式比较推荐。

2023-07-22 16:57:08 157

原创 目标文件里有什么

1、目标文件  目标文件编译源代码后生成的文件叫做目标文件。

2023-07-21 23:40:47 120 2

原创 关于网络命令 ping 你了解多少

网络 ping 命令详解

2023-05-15 23:05:32 2234

原创 lwip - 链路层收发以太网数据帧

以太网帧中的数据长度规定最小46字节,最大1500字节,ARP和RARP数据包的长度不够46字节,要在后面补填充位。最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU,如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片(fragmentation)。注意,MTU这个概念指数据帧中有效载荷的最大长度,不包括帧首部的长度。封装后的数据包称为数据帧,数据帧的封装的信息决定了数据如何传输。

2023-04-22 23:14:37 1058

原创 Linux内核之文件描述符、文件表、i-node table

前言文件描述符在unix系统中几乎无处不在网络接口 select、poll、epoll 涉及到文件描述符IO接口 read、write 也涉及到文件描述符从形式上来看文件描述就是一个整数,那么我们可不可以更进一步去了解一下呢?1、文件描述符是一个int型整数2、文件描述符创建是有一定的规则。在创建文件描述符的时候系统会在files_struct数组中,去找到一个当前没有被使用的一个最小下标,作为一个新的文件描述符。3、程序开始运行时,有三个文件被自动打开了,打开时分别使用了这三个文件描述符

2021-04-27 16:44:30 748

原创 操作系统中的锁——信号量(同步信号量、互斥信号量)、P/V操作、自旋锁

面试中常会问及操作系统中锁的概念,这里就来讲解一下。

2021-03-23 15:31:41 2605 1

原创 C语言关键字、函数杂谈(1)

1、static关键字static关键的,是用来声明静态变量的。主要作用有两个:隐藏与隔离的作用(当同时编译多个文件)保持变量内容的持久性下面就这两个功能进行详解:(1)隐藏与隔离的作用(当同时编译多个文件):​  上面已经阐述过,全局变量虽然属于静态存储方式,但并不是静态变量。全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,全局变量在各个源文件中都是有效的。​​  如果我们希望全局变量仅限于在本源文件中使用,在其他源文件中不能引用,也就是说限制其作用域只在定义该变量的源文件

2021-03-22 21:20:48 632

原创 C/C++ 之 内存管理

C/C++中的内存管理到底是什么样的呢? 网上的说法很多,分区、分段。这里将为大家详细讲解一下。

2021-03-22 20:51:58 169

原创 C 函数指针

C语言的函数指针?C语言、C++的结构体有哪些区别?C++的类与结构体有哪些区别?

2021-03-07 15:00:42 239 1

原创 C++何时调用构造函数,何时调用析构函数

前言

2021-03-05 20:01:37 8796 1

原创 网络中的数据包到底是如何转发的

IP地址、子网掩码、网关、DNS、NAT、端口映射

2020-08-23 16:58:00 5190 1

原创 看似没有深度问题?——C/S架构&&B/S架构?

浅谈C/S架构与B/S架构的区别~

2020-05-27 17:02:47 485

原创 云计算入门文章——这一篇就够了

现在这个云时代,云计算渗入我们生活的方方面面。也许你正在使用云服务。但只是你不知道而已。

2020-05-26 21:21:18 1883 1

原创 C/C++中*和&的用法详解

  C/C++中&和∗*∗的用法一直是非常让人头疼的难点,课本、博客上讲这些知识点一般都是分开讲其用法的,没有详细的总结,导致我在这方面的知识结构格外混乱。以下这篇文章系统、全面的讲解C/C++中的&和∗*∗。供大家参考~1. C语言中 1.1 ∗*∗乘法运算:x=y∗*∗z;乘法赋值运算:x∗*∗=y;相当于x=x∗*∗y注释:/∗*∗这里是你的注释∗*∗/指针的声...

2020-05-06 21:39:31 3016

原创 看完这篇区块链的文章,就有东西和别人扯皮了,而且扯的还很好

网上有很多关于区块链的文章,要么过于深奥,对于初学者很难弄懂,要么过于浅显,也很难想通。这篇文章从底层讲起,由浅入深,从密码学算法讲起,不断深入,算是一遍比较完备的区块链——比特币的文章。文章以比特币为例,来讲解区块链。因为区块链最初就是因为比特币被人们熟知的。坚持把这篇文章看完,比特币的知识就基本了解了。在辅以区块链的一些其他应用,就会真正在区块链这个方面上一个台阶。

2020-04-22 11:43:08 2214 2

原创 汇编与技术接口——指令系统漫谈

1.数据寻址方式2.数据运算指令3.程序控制指令4.处理机控制指令5.块操作指令

2020-04-21 11:22:15 1362

原创 Shell基础——Bash的运算符

Bash 常见运算符

2020-04-06 17:38:50 297

原创 Linux入门基础——常用命令(四)

6.进程控制类命令ps功能:用来显示系统当下进程信息格式:ps [参数]-l:长格式输出-u:按用户名和启动时间的顺序来显示进程-j:用任务格式来显示进程-f:用树形格式来显示进程-a:显示所有用户的所有进程(包括其他用户)-x:显示无控制终端的进程-r:显示运行中的进程top功能:动态监视系统任务的工具,输出结果是连续的格式:top [参数]-b:以批量模式运行,但不...

2020-04-06 17:23:55 250

原创 Linux入门基础——常用命令(三)

文章总结了常见的文件权限管理命令、文件搜索命令、帮助命令、用户管理命令

2020-04-05 20:15:58 356 1

原创 最全的TCP/UDP 协议知识点整理

文章总结了常见的UDP/TCP的面试问题,都是一些概念性的东西。TCP协议本身也会有不足,例如:粘包和拆包现象。这因为这些不足,所以针对性的在TCP协议之上发展出了其他的一些专用协议。

2020-03-28 15:51:06 1793 1

原创 Linux 简单的聊天室

文章是关于Linux下聊天室的,很简单的一个代码。但是这样简单的一个代码段,却体现出来很多问题。包括对函数的理解、Socket缓冲区的概念、以及TCP/UDP协议的要求等。

2020-03-27 09:46:48 6279 13

原创 Linux Socket编程——多线程并发

1.引言  线程类似于进程。如同进程,线程由内核按时间分片进行管理。在单处理器系统中,内核使用时间分片来模拟线程的并发执行,这种方式和进程的相同。而在多处理器系统中,如同多个进程,线程实际上一样可以并发执行。2.多线程概述  那么为什么对于大多数合作性任务,多线程比多个独立的进程更优越呢?这是因为,线程共享相同的内存空间。不同的线程可以存取内存中的同一个变量。所以,程序中的所有线程都可以读...

2020-03-24 13:12:42 1023

原创 Linux Socket编程——多进程并发

文章从进程的概念开始讲解,到创建子进程,再到创建子进程经常会出现的僵尸进程、如何解决僵尸进程、以及accept()函数的返回值处理。

2020-03-23 15:18:30 1308 3

原创 Linux Socket编程入门——浅显易懂

Linux基础编程,文章很浅显,讲的不深,后面会一点一点的,由浅入深的讲解。

2020-03-22 18:04:12 1369

原创 微处理器管理模式(上)

了解微处理器管理模式是进行内核编程的前提。微处理器可运行在不同模式下,支持存储的分段管理机制与分页管理机制。

2020-03-21 14:01:13 595

原创 Shell编程——条件判断

1.条件判断1.按照文件类型进行判断测试选项作用-b 文件判断该文件是否存在,并且是否为块设备文件(是块设备文件为真)-c 文件判断该文件是否存在,并且是否为字符设备文件(是字符设备文件为真)-d 文件判断该文件是否存在,并且是否为目录文件-e 文件判断该文件是否存在(存在为真)-f 文件判断该文件是否存在,并且是否为普通文件(是普通文件为...

2020-03-11 19:28:03 253

原创 Shell编程基础——流程控制

1. 多分支if条件语句2.多分支 case条件语句3.for循环4.while循环和until循环

2020-03-11 17:03:38 216

原创 Shell基础——Bash变量

文章总结了一些常见的Linux中的变量。用户自定义变量、环境变量、位置参数变量、预定义变量。通过一些实例来讲解这些变量的含义,以及变量的使用与限定条件。

2020-03-05 22:11:01 811

原创 Linux 文本编辑器Vim

文章介绍了Linux下面的Vim文本编辑器的使用,简单讲解了一些常用命令。这些常用命令对初级程序员已经足够用了。如果你做的是高级的Linux工程师之类的,你可能还需要深入了解vim。

2020-03-03 17:02:26 271

原创 Linux Shell概述和Bash基本功能

文章简单介绍了Shell的概念以及一些常见的用法。原理+实例,让读者能更容易理解,更容易记住。本篇文章只是Shell的起步文章,后面会接着更新Shell编程和其他的一些Shell基础性内容。

2020-03-03 16:41:05 370

原创 Linux 入门基础——常用命令(二)

文章总结了一些常见的文件管理命令。和昨天写的常用命令(一),都是对文件管理的一些常用命令。比较重要的是链接文件,这个在Linux中还是很重要的。强烈建议初学者,要一点一点的敲代码,将每个命令都要敲两遍。学Linux,命令是最枯燥乏味、但也是最重要的,还是要勤加练习~~

2020-02-28 21:36:00 533

原创 Linux 入门基础——常用命令(一)

初识Linux,刚刚上手,希望可以学到更多的Linux知识。

2020-02-28 10:31:22 7652 1

原创 Re(正则表达式)库入门

Python中Re库的入门学习。正则表达式很重要,在很多方面都有应用。文章举了很多的例子,生动形象。更容易理解。

2020-02-25 20:59:54 1415

空空如也

空空如也

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

TA关注的人

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