自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

fengpsky

向往自由的天空

  • 博客(100)
  • 资源 (4)
  • 收藏
  • 关注

原创 linux tcp/ip 分析---1

linux 内核网络部分分析;1. linux内核ipv4网络部分分层结构:BSD socket层: 这一部分处理BSD socket相关操作,每个socket在内核中以struct socket结构体现。这一部分的文件主要有:/net/socket.c /net/protocols.c etc INET socket层:BSD socket是个可以用于各种网络协议的接口,

2017-05-07 21:44:33 658

原创 虚拟文件系统VFS---2

/* * Flags is a 32-bit value that allows up to 31 non-fs dependent flags to * be given to the mount() call (ie: read-only, no-dev, no-suid etc). * * data is a (void *) that can point to any struct

2016-05-26 16:22:45 467

原创 虚拟文件系统VFS

虚拟文件系统用来处理与linux标准文件系统相关的所有系统调用,他能为各种文件提供一种接口。

2016-05-24 16:12:05 936

转载 typedef struct 用法详解和用法小结 及 在C和C++中的区别

typedef struct 用法详解和用法小结 及 在C和C++中的区别标签: structtypedefcc++区别2015-04-29 15:29 843人阅读 评论(0) 收藏 举报 分类: C/C++(105) 一. 基本解释typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(

2016-05-12 16:40:04 511

转载 select(poll)系统调用实现解析(一)

copy from  http://blog.csdn.net/lizhiguo0532/article/details/6568964#comments上层要能使用select()和poll()系统调用来监测某个设备文件描述符,那么就必须实现这个设备驱动程序中struct file_operation结构体的poll函数,为什么?因为这两个系统调用最终都会调用驱动程序中的poll函数来初

2016-05-11 17:43:13 396

转载 epoll源码分析(三)

epoll源码分析(三) http://blog.chinaunix.net/uid-20687780-id-2105159.html分类: LINUXepoll_wait系统实现如下:asmlinkage long sys_epoll_wait(int epfd,struct epoll_event __user *events

2016-05-11 17:26:05 267

转载 epoll源码分析----2

来自:http://blog.chinaunix.net/uid-20687780-id-2105157.html上面的原型是epoll的fd所维护的主结构,下面是每一个具体的fd结构.以后每一个fd加入到epoll中,就会创建一个struct epitem结构,并插入至红黑树中。接着是epoll_ctl函数原型:asmlinkage lon

2016-05-11 17:25:11 265

转载 epoll源码分析---1

当系统启动时,epoll进行初始化:static int __init eventpoll_init(void){    mutex_init(&pmutex);    ep_poll_safewake_init(&psw);    epi_cache = kmem_cache_create(“eventpoll_epi”,sizeof(st

2016-05-11 17:23:49 295

转载 select---3

select是什么 select是UNIX下一种IO多路转接(IO Multiplexing)的技术。select系统调用是用来让我们的程序监视多个文件描述符的状态变化的。程序会停在select这里等待,直到被监视的文件描述符有一个或多个发生了状态改变。 l  select用法 int select(int maxfdp,fd_set *readfds,fd_set *

2016-05-11 16:52:18 376

转载 select----2

elect 实现分析 –2 【整理】来自  http://www.cnblogs.com/apprentice89/archive/2013/05/09/3070051.html l  select相关的结构体比较重要的结构体由四个:struct poll_wqueues、struct poll_table_page、struct poll_table_entry、structpo

2016-05-11 16:50:25 255

转载 epoll-4

epoll用法回顾先简单回顾下如何使用C库封装的3个epoll相关的系统调用。更详细的用法参见http://www.cnblogs.com/apprentice89/archive/2013/05/06/3063039.htmlint epoll_create(int size);int epoll_ctl(int epfd, int op, int fd, struct epoll_

2016-05-11 16:48:20 334

转载 select----1

select源码结构图:       源码分析: #undef __NFDBITS#define __NFDBITS    (8 * sizeof(unsigned long)) #undef __FD_SETSIZE#define __FD_SETSIZE    1024 #undef __FDSET_LONGS#defin

2016-05-11 16:46:47 265

转载 epoll ---2

copy from  http://blog.csdn.net/chen19870707/article/details/42525887epoll是当前在Linux下开发大规模并发网络程序的热门人选,epoll 在Linux2.6内核中正式引入,和select相似,都是I/O多路复用(IO multiplexing)技术,按照man手册的说法:是为处理大批量句柄而作了改进的poll。

2016-05-11 16:46:04 393

转载 epoll 分析----2

copy from http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=28541347&id=4285054分析了ET和LT的实现方式,那么分析他们的触发方式就容易多了。我们通过实现分析知道LT模式下epoll_wait被唤醒可以通过两种方式(图中红线和蓝线),而ET模式只能通过一种方式(图中红线)。所以ET模式下能被唤醒的情况

2016-05-11 16:43:58 206

转载 linkly seqlock rcu

likely或unlikely用于优化条件语句,其一般用法为:3725884266736043497.jpg条件判断之后会有两个出口,一个是真,一个是假。然而编译生成的目标代码是扁平的,其中的一个出口必须通过跳转来实现。考虑下面一个场景:1、判断条件;2、条件为真跳转到4;3、进行条件为假时的处理;4、进行条件为真时的处理;可见,如果条件为真,多了一次JMP

2016-05-10 20:04:31 315

转载 由mmap引发的SIGBUS

一直以来都觉得使用mmap读文件是非常高效、非常优雅的做法(参见《从"read"看系统调用的耗时》)。mmap之后,就可以通过内存访问的方式访问到文件里的内容,省去了read这样的系统调用。却不曾想过,mmap以后,如果读文件出错会发生什么……今晚看到一篇介绍apache bug的文章,里面说到,apache使用mmap来实现对静态文件的访问。在读文件之前,apache使用stat系统

2016-05-10 19:46:01 516

转载 linux 内存管理qqq

本文以32位机器为准,串讲一些内存管理的知识点。 来自http://www.cnblogs.com/zhaoyl/p/3695517.html1. 虚拟地址、物理地址、逻辑地址、线性地址 虚拟地址又叫线性地址。linux没有采用分段机制,所以逻辑地址和虚拟地址(线性地址)(在用户态,内核态逻辑地址专指下文说的线性偏移前的地址)是一个概念。物理地址自不必提。内核的虚拟地址和物

2016-05-10 19:45:11 346

原创 linux camera ---1

linux 摄像头驱动 :/** * struct fimc_dev - abstraction for FIMC entity * @slock: the spinlock protecting this data structure * @lock: the mutex protecting this data structure * @pdev: pointer to the F

2016-05-10 12:50:09 1013

转载 idr 机制 radix tree

来自:http://blog.csdn.net/orz415678659/article/details/8539794一.结构体1.idr结构体[cpp] view plain copystruct idr {      struct idr_layer __rcu *top;    //idr_layer顶层,32叉树的根

2016-05-09 21:08:45 940

转载 线程 进程区别

线程私有数据(Thread-specific data,TSD):存储和查询与某个线程相关数据的一种机制。来自http://blog.csdn.net/ctthuangcheng/article/details/9357917在进程内的所有线程都共享相同的地址空间,即意味着任何声明为静态或外部变量,或在进程堆声明的变量,都可以被进程内所有的线程读写。一个线程真正拥有的唯一私有存储是处理

2016-05-09 17:47:43 484

原创 内存管理---slab机制 销毁对象

Linux内核中将对象释放到slab中上层所用函数为kfree()或kmem_cache_free()。两个函数都会调用__cache_free()函数。缓存回收对象基于以下原则1.本地高速缓存的空间还可以容纳空闲对象,则直接将对象放回本地高速缓存2.本地高速缓存的空间已满,则按batchcount的值将对象从本地高速缓存转移到slab中,转移是基于先进先出的原则的

2016-05-08 14:51:17 502

原创 内存管理 ---slab机制 分配对象

从一个缓存中分配对象总是遵循下面的原则:1.本地高速缓存中是否有空闲对象,如果有的话则从其中获取对象,2.如果本地高速缓存中没有对象,则从kmem_list3中的slab链表中寻找空闲对象并填充到本地高速缓存再分配;3.如果所有的slab中都没有空闲对象了,那么就要创建新的slab,再分配 。 来自:http://blog.csdn.net/vanbreaker/a

2016-05-08 14:31:47 758

原创 内存管理---创建 销毁slab

创建slab主要由函数cache_grow()实现,满足以下两个条件时,slab分配器将为高速缓存创建新的slab1.请求分配对象,但本地高速缓存没有空闲对象可以分配,需要填充2.kmem_list3维护的链表中没有slab或者所有的slab都处于FULL链表中

2016-05-08 12:13:01 518

原创 slab_--2 创建 销毁 cache

创建新的缓存必须通过kmem_cache_create()函数来完成,流程如下:1,从全局cache_cache中获得cache结构,因为全局cache_cache初始化对象的大小就是kmem_cache结构的大小,所以返回的指针正好可以转换为cache结构;调用 kmem_cache_zalloc(&cache_cache, gfp);2,获得slab中碎片大小,由函数cal

2016-05-08 12:08:53 559

原创 slab----1

内核启动早期初始化start_kernel()->mm_init()->kmem_cache_init()1,初始化静态initkmem_list3三链;2,初始化cache_cache的nodelists字段为1中的三链;3,根据内存情况初始化每个slab占用的页面数变量slab_break_gfp_order;4,将cache_cache加入ca

2016-05-08 09:28:26 381

原创 内存管理---内存释放

Linux内存释放函数之间的调用关系如下图所示         hi/*用虚拟地址进行释放*/void free_pages(unsigned long addr, unsigned int order){ if (addr != 0) { VM_BUG_ON(!virt_addr_valid((void *)addr)); __free_pages(virt

2016-05-08 00:18:57 1424

原创 内存管理-----伙伴系统---2

伙伴系统分配器大体上分为两类。__get_free_pages()类函数返回分配的第一个页面的线性地址;alloc_pages()类函数返回页面描述符地址。不管以哪种函数进行分配,最终会调用alloc_pages()进行分配页面;alloc_page最后调用统一接口;__alloc_pages_nodemask * This is the 'hear

2016-05-07 23:53:37 1273

原创 内存管理---伙伴系统---

内核使用伙伴系统来解决内存分配引起的外部碎片问题。一、数据结构描述struct zone {…… struct free_area free_area[MAX_ORDER];……};

2016-05-07 21:15:16 688

原创 high_memeory 映射---3

非连续内存管理区:非连续内存分配是指将物理地址不连续的页框映射到线性地址连续的线性地址空间,主要应用于大容量的内存分配。采用这种方式分配内存的主要优点是避免了外部碎片,而缺点是必须打乱内核页表,而且访问速度较连续分配的物理页框慢。   非连续内存分配的线性地址空间是从VMALLOC_START到VMALLOC_END,每当内核要用vmalloc类的函数进行非连续内存分配,就会申请一个v

2016-05-07 20:36:26 590

原创 high memory 映射 ----2

临时内核映射:

2016-05-07 16:09:11 333

原创 linux high memory 映射-1

书籍:深入理解linux内核;linux source code

2016-05-07 13:52:30 510

原创 内存管理--页表机制

建立永久的分页机制    在前面的内存映射介绍中,init_memory_mapping()只是构建了内核页表,作为临时的分页映射。例如只对高端内存固定映射区创建了页表结构,并没有对高端内存区永久映射区进行初始化。setup_arch()在执行完init_memory_mapping()和initmem_init()后,就会调用arch/x86/mm/init_32.c:paging_init

2016-05-07 00:10:34 1929

原创 内存管理---页表机制1

Linux简化了分段机制,使得虚拟地址与线性地址总是一致,因此Linux的虚拟地址空间也为0~4G。Linux内核将这4G字节的空间分为两部分。将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF)供内核使用,称为“内核空间”。而将较低的3G字节(从虚拟地址0x00000000到0xBFFFFFFF)供各个进程使用,称为“用户空间“。因为每个进程可以通过系统调用进入内核,因此Li

2016-05-06 21:50:34 3044

原创 内存管理--检测内存

linux kernel被bootloader加载到内存后,cpu首先执行head.s中的start_of_setup函数等函数,然后跳转到main.c,main中首先执行detect_memory函数探测内存;int detect_memory(void){ int err = -1; if (detect_memory_e820() > 0) err = 0; if (!d

2016-05-06 17:54:22 1172

原创 内存管理-1

linux 内存管理基于分段、分页把逻辑地址转换为物理地址,同时有些RAM永久的分配给了内核使用用来存放内核代码以及静态数据。其余的RAM为动态内存。linux中采用了很多有效的管理方法,包括页表管理、高端内存(临时映射区、固定映射区、永久映射区、非连续内存区)管理、为减小外部碎片的伙伴系统、为减小内部碎片的slab机制、伙伴系统未建立之前的页面分配制度以及紧急内存管理等等。。

2016-05-06 11:33:59 501

转载 inside the c++ object

第一章 关于对象C语言中,“数据”和“处理数据的操作”十分开来的。由一组“分布在各个一功能味道想得函数中”的算法所驱动,他们处理的是共同的外部数据。而在C++中,则使用的是独立的“抽象数据类型abstract data type(ADT)”所驱动。从软件工程的角度看“一个ADT或CLASS hierar5chy的数据封装”比"在C程序中程序迎的使用全局数据好"。加上封装后的布局成本

2016-05-06 10:30:56 281

原创 内存管理-2

伙伴算法

2016-05-05 16:07:18 100

原创 内存管理-1

页框

2016-05-05 16:06:53 91

原创 进程调度--load balance

现在计算机为多核处理器,操作系统会把任务分配到处理器上运行工作,但是如何均匀的分配任务?以及怎样调整何时调整任务的分配策略?   在linux系统中运用软中断来调整各个处理器的负载;__init void init_sched_fair_class(void){#ifdef CONFIG_SMP open_softirq(SCHED_SOFTIRQ, run_rebala

2016-05-05 11:08:43 1211

原创 进程调度 以及softirq中定时器会调用的进程调度过程分析

实时进程:

2016-05-04 20:08:18 944

ipv6初始化和处理流程分析.pdf

linux ipv6

2021-03-15

调试 debug 方法

程序员调试bug的方法

2018-10-14

usb开发文档

USB开发技术文档,主要讲usb协议以及基于usb协议的开发

2014-11-27

空空如也

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

TA关注的人

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