7 奇小葩

尚未进行身份认证

我要认证

爱生活,爱运动,爱技术

等级
TA的排名 10w+

以太网基础-MAC和PHY

网卡(Network Interface Card,简称NIC),也称网络适配器,是电脑与局域网相互连接的设备。无论是普通电脑还是高端服务器,只要连接到局域网,就都需要安装一块网卡。如果有必要,一台电脑也可以同时安装两块或多块网卡。电脑之间在进行相互通讯时,数据不是以流而是以帧的方式进行传输的。我们可以把帧看做是一种数据包,在数据包中不仅包含有数据信息,而且还包含有数据的发送地、接收地信息和数据的校验信息。一个网卡主要包括OSI的最下面的两层,物理层和数据链路层物理层定义了数据传送与接收所需要的电与

2020-09-21 21:42:40

linux内存管理笔记(二十九)----vmalloc

前面我们学习了linux内核中对于物理上连续的分配方式,采用伙伴系统和slub分配器分配内存,但是我们知道物理上连续的映射是最好的分配方式,但并不总能成功地使用。在分配一大块内存时,可能竭尽全力也无法找到连续的内存块。针对这种情况内核提供了一种申请一片连续的虚拟地址空间,但不保证物理空间连续,也就是vmalloc接口。vmalloc的工作方式类似于kmalloc,只不过前者分配的内存虚拟地址连续,而物理地址则无需连续,因此不能用于dma缓冲区通过vmalloc获得的页必须一个一个地进行映射,效率不高,

2020-08-30 23:38:28

linux内存管理笔记(二十八)----内存管理 slub算法

内核管理页面使用了2个算法:伙伴算法和slub算法,伙伴算法以页为单位管理内存,但在大多数情况下,程序需要的并不是一整页,而是几个、几十个字节的小内存。于是需要另外一套系统来完成对小内存的管理,这就是slub系统。slub系统运行在伙伴系统之上,为内核提供小内存管理的功能。​ slub把内存分组管理,每个组分别包含23、24、…211个字节,在4K页大小的默认情况下,另外还有两个特殊的组,分别是96B和192B,共11组。之所以这样分配是因为如果申请212B大小的内存,就可以使用伙伴系统提供的接.

2020-08-23 20:57:06

linux内存管理笔记(二十七)----slub分配器概述

在linux的内核运行需要动态分配内存的时候,其中有两种分配方案:第一种是以页为单位分配内存,即一次分配内存的大小必须是页的整数倍第二种是按需分配,一次分配的内存大小是随机的​ 对于第一种方案是通过伙伴系统实现,以页为单位管理和分配内存,但是这个单位确实也太大了。对于第二种方案,在现实的需求中,如果我们要为一个10个字符的字符串分配空间,如果按照伙伴系统采用分配一个4KB或者更多空间的完整页面,不仅浪费而且完全不可接受。显然的解决方案是需要将页拆分为更小的单位,可以容纳大量的小对象。同时

2020-08-12 22:51:52

Breakpad(跨平台crash工具)

1. 编译Breakpad下载源码,具体的编译过程请参考breakpadgit clone https://chromium.googlesource.com/breakpad/breakpad编译方法./configure && make编译出错mv -f $depbase.Tpo $depbase.Posrc/client/linux/crash_generation/crash_generation_client.cc:40:10: fatal error: thir

2020-08-10 22:38:24

深入浅出DDR系列(二)--DDR工作原理

学习完了DDR的基本组成和硬件结构原理之后,从整体上了解了DDR的特性和静态图,包括原理、管脚图等。那么本章就要从动态的角度来分析时序结构,包括read/write的整个过程到数据返回发生了什么,其中包括以下内容DDR是如何完成Read、Write 等的操作DDR的基本命令DDR的时序参数DDR的性能分析1. DRAM基本组成对于DRAM,其主要由行和列组成,每一个bit中都是由类似右下图的类晶体管的结构组成,对于sdram的数据,可以通过控制column和row就可以访问sd

2020-08-02 20:52:58

深入浅出DDR系列(一)--DDR原理篇

内存是我们平常嵌入式系统中接触的比较频繁的硬件之一,但是我们对这个器件的了解却知之甚少。主要的原因是作为嵌入式工程师的我们,这部分主要是配置参数,而这些参数都是由芯片厂商已经提供好了,硬件工程师都会基于厂商认证的DDR选型,减少开发周期。其实对于内存,有很多的细节和知识点可以深挖,本章的内容包括如下内容:通过由浅入深的学习内存的基本原理通过由浅入深的学习内存的软硬件特性从软件的角度来学习下,我们该如何尝试去配置一块处理器上的DDR。1. 情景小张有一定的计算机背景知识,最近他在京东上买了两条D

2020-08-01 18:04:46

linux内存管理笔记(二十六)----伙伴系统页面释放

对于内存释放函数也可以归纳到一个主要的函数(__free_pages),只是用不同的参数调用而已,前者是通过page,后者是通过虚拟地址addr,其定义如下extern void __free_pages(struct page *page, unsigned int order);extern void free_pages(unsigned long addr, unsigned int order);对于free_pages和__free_pages之间的关系,首先需要将虚拟地址转换成指向st

2020-07-16 23:17:22

linux内存管理笔记(二十四)----伙伴系统页面分配

上一章学习了伙伴系统的设计思路和其申请和释放API的使用方式,本章主要是梳理下伙伴系统分配是如何分配出连续的物理页面的。内核中常用的分配物理内存页面的接口是alloc_pages,用于分配一个或者多个连续的物理页面,分配的页面个数只能是2^n。相对于多次离散的物理页面,分配连续的物理页面有利于提高系统内存的碎片化。1. 页的分配​ 对于所有的内存分配接口,最后都会调用alloc_pages_node,这个是伙伴系统最重要的接口,其定义如下:static inline struct page *all

2020-07-13 00:06:35

linux内存管理笔记(二十三)----伙伴系统Linux概述

在内核初始化完成后,内存管理的责任由伙伴系统承担,本章正式开始伙伴系统的学习,本章主要是原理性的梳理一些流程,其主要包括linux对于伙伴系统的设计思路内存碎片的问题和分配器如何处理碎片伙伴系统的分配器API1. 设计思路前面章节中学习了伙伴系统原理,我们重新梳理伙伴系统的核心思路:内核将系统的空闲页面分成11个块链表,每个块链表分别管理着1,2,4,8,16,32,64,128,256,512和1024个物理页帧号,每个页面大小为4K bytes,那么对于伙伴系统管理的块大小范围从4K by

2020-07-06 22:56:08

软件工程之美--需求分析

我们知道在瀑布模型中,第二个阶段就是需求分析阶段,同时需求分析的结果也决定了后续的系统设计、开发、测试等阶段能否顺利如期进行。需求是整个产品的源头,所以需求分析的结果往往决定了产品的成败。软件项目中很多问题都和需求相关,比如说需求不明确,需求变更。这些问题轻则导致返工造成浪费,重则导致项目失败带来巨大损失。对于我们程序员来说,就是没日没夜的加班,同时也很少得到成就感,所以在软件工程中,搞明白需求是一件至关重要的事。需求分析到底要分析什么?我们怎么样才能做好需求分析,抓住用户的真实需求,做出来客户想要的

2020-07-05 17:38:58

linux内存管理笔记(二十一)----启动伙伴系统

众所周知,Linux内存管理的核心是伙伴系统(buddy system)。其实在linux启动的那一刻,内存管理就已经开始了,只不过不是buddy在管理。在内核中,实现物理内存管理的allocator包括:连续物理内存管理buddy allocator非连续物理内存管理vmalloc allocator小块物理内存管理slab allocator高端物理内存管理kmapper初始化阶段物理内存管理memblock在系统初始化阶段会先启用一个bootmem分配器和membloc

2020-06-16 22:27:29

linux内存管理笔记(二十)--------zonelist初始化

在bootmem_init初始化的时候,已经初始化了内存节点的zone成员,该成员是struct zone数组,存放该内存节点的zone信息。在linux的内存管理中,分几个阶段进行抽象,用数据结构来管理。先用结点集合管理内存,然后用zone管理结点,再用页的管理zone。此时使用的数据结构分别为pglist_data、zone、page结构体,本章的主要是来分析内核是如何完成zonelist的初始化。1. 数据结构在结点的pglist_data数据结构中有一个node_zone_list[]类型的st

2020-06-13 11:43:03

linux内存管理笔记(二十二)----伙伴系统原理

在内核初始化完成后,内存管理将成为一项重要的工作。如何频繁的申请释放内存的情况下,如何避免碎片的产生,这就要求内核采取灵活而恰当的分配策略。通常,内存分配一般有以下两种情况大对象(大的连续空间分配)小对象(小的空间分配)针对不同的需求,Linux采取了不同的方式来解决这两种问题导致的内存碎片问题。本章主要是从原理上分析内核如何通过伙伴系统算法,如何解决了内存碎片问题。1. 内存碎片问题在前面的章节中,我们知道在内存管理中,存在两种碎片情况内部碎片:是指已经分配出去的内存空间,却不能被利用

2020-06-10 22:00:19

linux内存管理笔记(十九)----内存组织

通过linux内存管理笔记(十七)----linux内存模型,我们知道了linux的内存模型,通过上bootm,我们梳理了Node, Zone, Page Frame的整个流程,本章就来整理其关系和数据结构之间的关系。1. 基本概念NUMA(Non-Uniform Memory Access,非统一内存访问)和UMA(Uniform Memory Access,统一内存访问):NUMA是从处理器对内存访问速度不同的结构UMA是处理器与所有内存的访问速度相同的结构结点Node:从1个CPU访

2020-06-07 22:20:55

linux内存管理笔记(十八)----bootmem内存分配器

前面章节我们介绍了memblock,其作用内核启动初期,常用的内存分配器还未被初始化而不能使用,在此期间memblock是一种用于内存管理区域的方法。然后调用page_init来完成系统分页机制的初始化工作,建立页表,从而内核可以完成虚拟地址到物理地址的映射关系,本章主要是分析bootmem_init的流程。1. bootm初始化arm架构下, 在setup_arch中通过paging_init函数初始化内核分页机制之后, 内核通过bootmem_init()开始完成内存结点和内存区域的初始化工作,其函

2020-06-06 10:46:28

linux内存管理笔记(十七)----linux内存模型

前面已经分析把物理内存添加到memblock以及给物理内存建立页表映射,这里我们分析sparse内存模型。在Linux内核中支持3种内存模型,分别为flat memory modelDiscontiguous memory modelsparse memory model所谓memory model,其实就是从cpu的角度看,其物理内存的分布情况,在linux kernel中,使用什么的方式来管理这些物理内存。某些体系架构支持多种内存模型,但在内核编译构建时只能选择使用一种内存模型。1. 基

2020-05-24 22:53:34

如何更好的进行技术面试

最近公司组织对于招聘的培训,指导我们如何在面试过程中快速的发现人才,在面试之前应该准备些什么,碰到的问题如何解决等。这次培训主要包含以下几个方面面试之前需要做哪些准备工作,工作这么多年,也偶尔被安排面试他人,总是根据简历匆忙的一阵乱问,毫无策略而言,可能认为总会有人进行再次把关,所以也就没有想太多。如何才能了解到最真实的东西,面试者真实和自然,才能得到最真实的东西最重要的不是知识,从what -> how -> why层层递进,对于面试者,主要是从这个问题知识层面是什么,解决这个问题的思

2020-05-24 10:05:05

海思开发感悟

​ 最近新开一个海思的项目,本周主要海思熟悉海思的一些开发文档,文档之多,内容之全,文档之好,确实值得很多厂商去好好学习,同时也得到很多的感悟和困惑。​ 对于技术更新如此之快的IC产业,对于现在平台的百花齐放,技术更新日新月异,单独如现在的ARM的技术,就已经从armv7架构已经发展到armv8架构,还有现在基于低功耗的M系列,基于实时处理的R系列,每个系列里面有越来越多的平台在每日...

2020-01-10 14:23:01

linux内存管理笔记(十六)----ARM32内存空间分配

Linux内核一般将处理器的虚拟地址空间分成两部分,在32系统上,地址空间在用户进程和内核之间划分的典型比例为3:1,在给出的4GB的虚拟地址空间中,0 ~ 3GB将用于用户空间而3GB ~ 4GB将用于内核空间,内核提供了相关的配置项来修改该比例,也就是说Kernel最多寻址1GB的虚拟地址空间。当CPU启动MMU后,CPU访问的时虚拟地址空间,然后由MMU根据页表转换成物理地址,页表是由Kernel维护的,所以Kernel可以决定1GB的虚拟地址空间具体映射到什么物理地址。但是不管Kernel怎么映射

2020-05-13 23:12:19

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 学习力
    学习力
    《原力计划【第二季】》第一期主题勋章 ,第一期活动已经结束啦,小伙伴们可以去参加第二期打卡挑战活动获取更多勋章哦。
  • 原力新人
    原力新人
    在《原力计划【第二季】》打卡挑战活动中,成功参与本活动并发布一篇原创文章的博主,即可获得此勋章。