自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Jiajun Zhu

Goal + Plan + Execution + Diligence

  • 博客(171)
  • 收藏
  • 关注

原创 计算机引导过程四(vmlinuz保护模式vmlinux.bin)

vmlinux.lds.S定义了vmlinux.bin的结构。

2025-02-23 21:52:02 748

原创 计算机引导过程三(vmlinuz实模式setup.bin)

vmlinuz(Virtual Memory LINUx gZip)是一个使用gzip压缩的linux kernelvmlinuz是由bzImage cp而来,也就是说两者完全一样bzImage是由build将setup.bin和vmlinux.bin合并而来,其中setup.bin是bzImage的实模式部分,vmlinux.bin是bzImage的保护模式部分。

2025-02-19 02:22:11 758

原创 计算机引导过程二(core.img)

core.img包含4个部分:diskboot.img、lzma_decompress.img、kernel.img、modules & others。

2025-02-14 22:56:01 897

原创 计算机引导过程一(从BIOS到MBR)

SeaBIOS是一个开源的x86 BIOS,这里以SeaBIOS为例分析,对应的代码为seabios/src/romlayout.S。

2025-01-22 21:14:09 928

原创 计算机硬件基础

8086可以产生的最大地址是0xFFFF:0xFFFF = 0x10FFEF,超过了1MB内存空间,在这种情况下,地址会回卷到0xFFEF,80286及以后的CPU可以寻址超过1MB内存空间,为了兼容8086,IBM在CPU与地址总线之间插入了一个逻辑门(称为A20地址线),专门用来转换地址总线的第21位(从A0开始,第21位是A20)。8086只有一种工作模式,一开始没有专门的名称,80286及以后的CPU在8086的基础上引入了保护模式,为了区分两种模式,将8086工作模式称为实模式。

2025-01-04 17:16:15 1405

原创 Linux函数栈帧

不同颜色代表不同函数的栈帧,从上到下依次是__libc_start_main、main、f、g的栈帧。前6个参数使用rdi、rsi、rdx、rcx、r8、r9,第7个及以后参数使用栈。通过x(%rbp)可以访问函数参数(x为正数)和局部变量(x为负数)下一级函数的rbp指向上一级函数的rbp。

2024-12-16 16:43:46 544

原创 Linux内存布局

按地址从小到大,一个C程序一般包含以下几个内存区域:text、data、bss、heap、mmap、stack。

2024-10-30 09:48:26 345 1

原创 动态规划(斜率优化)

【代码】动态规划(斜率优化)

2024-07-15 01:13:59 257

原创 ELF文件解析

ELF(Executable and Linkable Format,可执行与可链接格式)

2024-03-22 20:25:20 1021

原创 动态规划(四边形不等式优化)

【代码】动态规划(四边形不等式优化)

2023-03-08 04:28:51 343

原创 LeetCode(Regular Expression Matching & Wildcard Matching)

【代码】LeetCode(Regular Expression Matching & Wildcard Matching)

2023-03-04 23:17:25 211

原创 LeetCode(Maximal Rectangle)

思路:动态规划,dp[i][j]表示以matrix[i][j]为右下角的矩阵的最大长度,以matrix[i][j]为右下角的矩阵的最大面积为高度从i到0的最大面积的最大值。

2022-11-22 02:51:35 273

原创 LeetCode(Largest Rectangle in Histogram)

思路二:考虑一种递增的图形,如下图的5、6、7、8、3,对于这种图形,很容易算出以5、6、7、8为高度的最大面积,使用一个栈维护这种图形,时间复杂度为O(n)思路一:遍历每个立柱,以其高度左右扩展,找到左右第一个低于它的立柱,即为以它为高度的最大面积,时间复杂度是O(n^2)

2022-11-22 02:20:26 247

原创 DPDK总结(makefile)

dpdk版本17.11configconfig/defconfig_x86_64-native-linuxapp-gccconfig/common_linuxappconfig/common_base修改以上文件,make config T=$(RTE_TARGET) O=$(RTE_OUTPUT),生成新的$(RTE_OUTPUT)/.config注意$(RTE_TARGET)和$(RTE_OUTPUT)最好保持一致make configmake config,进入GNUmakefile:

2021-12-05 18:08:22 1678

原创 Linux系统调用

glibc版本2.34,kernel版本4.20以read为例,声明在/usr/include/unistd.h中,定义在glibc/sysdeps/unix/sysv/linux/read.c中。

2021-09-12 14:05:18 1180

原创 Linux内核启动

u32 ro_end;u64 start;u64 efer;u32 cr4;u32 flags;

2021-09-05 19:58:58 792 1

原创 DPDK总结(mbuf)

mbuf图解mbuf分为4部分:mbuf + priv + headroom + data(1)mbuf长度为sizeof(struct rte_mbuf) = 128(2)priv长度在创建pool时指定(priv_size)(3)headroom长度为RTE_PKTMBUF_HEADROOM(CONFIG_RTE_PKTMBUF_HEADROOM)(4)data长度在创建pool时指定(data_room_size - RTE_PKTMBUF_HEADROOM)data根据实际情况又分为

2021-01-17 15:08:09 2883

原创 KGDB调试Linux内核

调试环境宿主机(Mac OS X)安装VirtualBox,创建2台虚拟机(CentOS-7-x86_64-Minimal-1804.iso),2台虚拟机通过串口相连目标机:开发机:下载源码wget http://vault.centos.org/7.5.1804/os/Source/SPackages/kernel-3.10.0-862.el7.src.rpmrpm -i ker...

2019-08-18 22:58:54 654

原创 Linux杂项

官方文档https://www.gnu.org/software/make/manual跟我一起写 Makefilehttps://blog.youkuaiyun.com/haoel/article/details/2886https://blog.youkuaiyun.com/haoel/article/details/2899GNUmakefile > makefile > Makefilehttps://www.gnu.org/software/make/manual/html_node/Makefile-Names

2019-04-13 21:46:19 891 1

原创 DPDK总结(网卡收发包)

1、网卡使用DMA写Rx FIFO中的Frame到Rx Ring Buffer中的mbuf,设置desc的DD为1。1、挂载每个包的最后一个分段时,若当前使用的desc数大于上限(默认为32),设置RS。2、网卡驱动取走mbuf后,设置desc的DD为0,更新RDT。2、burst发包的最后一个包的最后一个分段,设置RS。

2019-03-10 18:05:21 6107 3

原创 DPDK总结(网卡初始化)

DPDK定义了一个rte_eth_devices数组,数组元素类型为struct rte_eth_dev,一个数组元素表示一块网卡。struct rte_eth_dev有四个重要的成员:rx/tx_pkt_burst、dev_ops、data,其中前两者分别是网卡的burst收/发包函数;rte_eth_dev_configure()的主要工作是分配接收/发送队列数组,数组元素类型是void *,一个数组元素表示一个接收/发送队列。

2019-03-09 16:10:41 12937 1

原创 DPDK总结(基本转发)

将DPDK的helloworld和skeleton例子组合起来可以得到一个基本转发程序,整个程序只有100多行,包含了最基本的转发(从一个网卡收包,从另一个网卡发包)执行./basicfwd -c 3 -n 2启动程序,1个MASTER lcore和1个SLAVE lcore分别绑定到CPU0和CPU1,SLAVE lcore使用1个RX/TX队列收发包pktegn-dpdk得到的测试结果(单...

2019-03-02 19:56:59 3291 2

原创 Linux网卡总结

线速万兆网卡小包线速:64B + 7B(Preamble) + 1B(SFD) + 12B(IFG) = 84B10*10^9/84/8 = 14880952 pps万兆网卡大包线速:1518B + 7B(Preamble) + 1B(SFD) + 12B(IFG) = 1538B10*10^9/1538/8 = 812743 pps查看网卡信息# 查看网卡信息[root@localhost ~]# ethtool enp7s0f0Settings for enp7s0f0: ...

2019-02-12 23:15:53 4363

原创 strongSwan配置

测试环境使用两台VMware Fusion虚拟机,网络模式为NAT模式,虚拟机主要配置:一个单核CPU、一块网卡、操作系统为CentOS 7执行dhclient ens33 &后,vm1的ip为192.168.153.128,vm2的ip为192.168.153.130创建vtivm1:ip tunnel add ipsec1 local 192.168.153.128 remot...

2018-12-03 20:44:51 4374

原创 Linux内核模块

安装完成后,源码放在rpmbuild/BUILD/kernel-3.10.0-862.el7/linux-3.10.0-862.el7.centos.x86_64/目录下。6、使用新的xz文件替换/lib/modules/3.10.0-862.el7.x86_64/kernel/drivers/net/usb/目录下旧的xz文件。安装完成后,在/usr/src/kernels/目录下出现3.10.0-862.el7.x86_64/目录,其中包含重要的Module.symvers文件。

2018-11-11 01:30:54 997 1

原创 制作自安装CentOS ISO

测试环境使用VMware Fusion虚拟机,虚拟机主要配置:一个单核CPU、一块网卡、操作系统为CentOS 71、挂载和复制原isomkdir /mnt/cdrommount -o loop /root/CentOS-7-x86_64-DVD-1804.iso /mnt/cdrommkdir /tmp/isoyum install rsync -yrsync -a /mnt/cd...

2018-11-03 13:54:26 1011

原创 协议栈(Bridge)

bridge是一个二层虚拟网络设备,通过brctl命令创建,提供了二层的ebtables,类似于三层的iptableshttp://blog.chinaunix.net/uid-28315531-id-3572529.htmlhttps://www.cnblogs.com/morphling/p/3458546.html注册module_init(br_init)static int ...

2018-10-28 18:10:36 1571

原创 Linux虚拟网络设备

Linux使用tun模块实现tun/tap,tun工作在L3,tap工作在L2。

2018-10-27 14:40:40 943 1

原创 Nginx源码阅读(ngx_http_process_request)

ngx_http_process_request()执行流程ngx_http_process_request() { ... ngx_http_handler() { ... ngx_http_core_run_phases() } ngx_http_run_posted_requests() // 处理post请求}ngx...

2018-07-15 17:51:37 771

原创 Nginx源码阅读(ngx_http_process_request_line)

ngx_http_process_request_line()static voidngx_http_process_request_line(ngx_event_t *rev){ ssize_t n; ngx_int_t rc, rv; ngx_str_t host; ngx_con...

2018-07-15 17:45:34 1089

原创 Nginx源码阅读(ngx_http_init_connection)

ngx_http_init_connection()voidngx_http_init_connection(ngx_connection_t *c){ ngx_uint_t i; ngx_event_t *rev; struct sockaddr_in *sin; ngx_http_port_t ...

2018-07-15 17:43:21 1188

原创 Nginx源码阅读(事件/连接/请求)

在nginx中,ngx_connection_t是对TCP连接的封装,包括已连接套接字、读事件、写事件表示一个事件的数据结构struct ngx_event_s { void *data; // 通常指向ngx_connection_t unsigned write:1; // 位域,表示事件可写 unsigned ...

2018-07-15 17:27:05 583

原创 Linux内核中断

异常分为4类:中断(interrupt),陷阱(trap)、故障(fault)、终止(abort)第1个是异步的,后3个是同步的。

2018-07-06 17:26:56 927

原创 Linux内核丢包

收发包各个queuehttps://www.cnblogs.com/zengkefu/p/5583618.htmlhttps://zhensheng.im/2017/08/11/2997/MIAO_LE_GE_MIhttps://www.sdnlab.com/17530.html统计数[root@localhost ~]# ethtool -S eth0NIC statistics: rx_packets: 3331177214 tx_packets: 3582794017

2018-07-05 12:34:17 2910

原创 Linux CPU总结

CPUsocket表示CPU插槽,1个CPU插槽安装1个物理CPUcore表示核,1个物理CPU包含多个coreThread表示线程(逻辑CPU),1个core包含1(关闭HT)或2(打开HT)个Thread双路十六核表示2个物理CPU,1个物理CPU包含16个核,打开HT后一共包含2 * 16 * 2 = 64核,如下所示: Socket 0 Socket 1Core...

2018-07-05 12:19:13 864

原创 TCP协议总结

MSS(maximum segment size)只能出现在SYN包中,通信双方在SYN包和SYN+ACK包中互相通告各自能接收的MSSSYN包不能携带data,占用seqACK包能携带data,携带data时占用seq,不携带data时不占用seqFIN包能携带data,不论是否携带data都占用seq即使窗口为0,也必须接收零窗口探测包、ACK包、URG包七个定时器...

2018-07-05 11:56:22 543

原创 协议栈(LVS)

ip_vs_in()static unsigned intip_vs_in(unsigned int hooknum, struct sk_buff *skb, const struct net_device *in, const struct net_device *out, int (*okfn) (struct sk_buff *)){ struct ip_...

2018-06-19 11:45:05 757

原创 协议栈(Internet协议族)

net_proto_family// net_families数组,NPROTO为37,表示最多支持37种协议族static const struct net_proto_family *net_families[NPROTO] __read_mostly;// Internet协议族#define AF_INET 2 /* Internet IP Protocol ...

2018-06-10 21:43:46 1673

原创 协议栈(套接口层)

SYSCALL_DEFINEx()#define SYSCALL_DEFINE0(name) asmlinkage long sys_##name(void)// __VA_ARGS__是一个可变参数宏,替换...#define SYSCALL_DEFINE1(name, ...) SYSCALL_DEFINEx(1, _##name, __VA_ARGS__)#defi...

2018-06-10 21:38:07 554

原创 协议栈(TCP主动连接三次握手)

第一次握手(发送SYN包)tcp_v4_connect() -> tcp_connect() -> tcp_transmit_skb() -> ip_queue_xmit()tcp_v4_connect()state从TCP_CLOSE变成TCP_SYN_SENTint tcp_v4_connect(struct sock *sk, struct so

2018-06-10 21:30:32 1464

空空如也

空空如也

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

TA关注的人

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