自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 资源 (2)
  • 收藏
  • 关注

原创 4.4 Mutex互斥体

Mutex互斥体的实现类似于Semaphore信号量,但在锁争用激烈的测试场景中,Mutex比信号量执行速度更快,可扩展性更好。struct mutex {____/* 1: unlocked, 0: locked, negative: locked, possible waiters */____atomic_t________count;____spinlock_t______wait_lock; /*spinlock锁,用于保护wait_list睡眠等待队列*/____struct

2020-08-11 22:56:37 189 1

原创 4.3 信号量

信号量的数据结构struct semaphore {____raw_spinlock_t______lock;____unsigned int________count;____struct list_head____wait_list;};1、信号量的初始化#define __SEMAPHORE_INITIALIZER(name, n)________________\{___________________________________\____.lock_______=

2020-08-11 07:30:48 108

原创 4.2 spinlock

spinlock要解决的问题:保证临界区代码执行过程的原子性。1、spinlock特性:1.1、忙等待锁机制。1.2、同一时刻只能有一个内核代码路径可以获得该锁。1.3、要求spinlock锁持有者尽快完成临界区的执行任务。1.4、spinlock锁可以在中断上下文中使用。2、spinlock的实现...

2020-08-10 23:05:18 327

原创 4.1 原子操作

#define ATOMIC_INIT(i)__{ (i) }#define atomic_set(v, i) (((v)->counter) = (i))#ifndef atomic_read #define atomic_read(v)__ACCESS_ONCE((v)->counter)#endif#define atomic_inc(atomic_t *v) /*原子操作v + 1*/#define ato.

2020-08-10 07:58:42 132

原创 5.3 workqueue工作队列

工作队列的优点:利用进程上下文来执行中断下半部操作。因此工作队列允许重新调度和睡眠,是异步执行的进程上下文,另外它还能解决软中断和tasklet执行时间过长导致的系统实时性下降等问题。workqueue的组成:struct work_struct { ____atomic_long_t data;____struct list_head entry;____work_func_t func;#ifdef CONFIG_LOCKDEP____struct l

2020-08-03 21:56:56 263

原创 2.8 malloc

malloc()函数是c函数库封装的函数。主要通过brk系统调用来实现。1、brk分配地址空间在内存中的位置。2、如果brk分配的地址小于mm->brk,则说明brk使用的是之前的内存。3、以mm_brk为地址去查找系统中有没有一块已经存在的vma。如果找到了,说明mm_brk地址对应的vma已经在使用了。4、do_brk()。5、如果设置VM_LOCKED标志,则与物理地址空间建立映射关系。SYSCALL_DEFINE1(brk, unsigned long, brk)

2020-06-30 05:50:38 107

原创 2.7 VMA操作

目录1、查找VMA。find_vma()/find_vma_prev()1.1 在current->vmacache的cache中查找匹配的vma。1.2 遍历进程的rb_node tree找匹配的vma。find_vma_pre()与1,2类似,只不过找prev的vma。2、插入VMA。insert_vm_struct()2.1 找到vma要插入位置相关的:父结点(rb_parent),要插入位置的地址(rb_link),前一个vma(prev)。2.2 将vma加入到对

2020-06-29 13:06:06 333

原创 2.4 物理页面的分配

页面分配和释放函数页面核心分配函数:#define alloc_pages(gfp_mask, order) \ __________alloc_pages_node(numa_node_id(), gfp_mask, order)unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order);unsigned long __get_free_pages(gfp_t gfp_mas...

2020-06-27 18:57:37 218

原创 minicom脚本

#minicom -S a.sha.sh的内容:timeout 86400Flag:expect { "Shell>" break}send "reset"gosub Flagexit

2020-06-22 10:00:55 1658

原创 第二章 描述物理内存(Describing Physical Memory)

This chapter describes the structrures used to keep account of memory banks(nodes), pages and flags that affect VM behavior.Node:typedef struct pglist_data {____zone_t node_zones[MAX_NR_ZONES];...

2020-06-01 06:10:59 211

原创 mlock函数的2.4内核实现

Linux可以通过系统调用mlock()锁住给定地址范围的内存。由sys_mlock()=>do_mlock()函数实现。1、创建VMA.2、设置VM_LOCKED.3、make_pages_present()函数保证所有的页都在内存中。与之相对应的解锁函数:munlock()由sys_munlock实现。与之类似的一对函数:mlockall()和munlockall()。只不过mlockall()实现对线程内所有的vma的锁定。...

2020-05-22 06:36:51 676

原创 第11章 通用块层和scsi层

通用块层和scsi层在内核中位置:上接VFS层,下接硬盘驱动。

2020-04-27 21:52:36 417

原创 mini2440中断处理

中断:以读取按键为例。单片机的处理方式:1、按键按下2、cpu发生中断,跳到异常向量入口执行3、b function function处理过程: 3.1 保存被中断的现场 3.2 执行中断处理函数 3.3 恢复现场、清中断所以代码中必须先设置异常向量入口。Linux中的中断处理方式:...

2020-04-19 17:31:11 242

原创 mini2440驱动之LCD

struct fb_fix_screeninfo {____char id[16];____________/* identification string eg "TT Builtin" */____unsigned long smem_start;___/* Start of frame buffer mem */ ____________________/* (phys...

2020-04-18 16:19:54 149

原创 第9章 块设备

9.1 块设备的架构9.1.1 块设备、磁盘对象和队列磁盘对象是具体物理块设备在内核中的表示形式。所有对通用磁盘对象的I/O操作都要进入磁盘对象的I/O队列,然后再由内核处理。块设备使用的队列包括:块设备自身的队列和块设备电梯对象的队列。blk_register_region()->kobj_map()把设备号注册到系统的管理链表;kobj_lookup()通过设备号找...

2020-04-08 22:11:36 124

原创 第10章文件系统读写--3

当要读的页在page cache中数据不是最新的或者在页在page cache不存在时,则需要从磁盘读数据。通过接下来的readpage函数来实现从磁盘读文件。

2020-03-25 22:06:47 180

原创 第10章 文件系统读写--2

10.2 文件预读10.3 文件锁10.4 文件读asmlinkage ssize_t sys_read(unsigned int fd, char __user * buf, size_t count){____struct file *file;____ssize_t ret = -EBADF;____int fput_needed;/* 通过current指针获得当...

2020-03-24 22:07:25 107

原创 sys文件系统----打开过程

这个文件系统主要作用是:在用户态展示设备的信息。4.1 文件和目录的创建4.1.1 文件系统的初始化。sysfs_init()4.1.2 sys文件系统目录的创建。int sysfs_create_dir->create_dir->lookup_one_len -&...

2020-03-13 12:06:50 1637

原创 4.kobject结构

kobject结构和sys文件系统联系紧密,在sysfs创建文件时,传递的输入参数就是一个kobject。实际上可以认为kobject代表sysfs文件系统的一个目录。4.1.1 kobject和kset的关系struct kobject { ____const char______* k_name; ____char...

2020-03-12 21:57:36 179

原创 文件的打开过程分析

系统调用:sys_open->do_sys_open->do_filp_open->open_namei->path_lookup_open->__path_lookup_intent_open /* 文件存在直接打开*/...

2020-03-08 14:14:15 451

原创 最小文件系统分析(aufs.c)

参考:https://blog.csdn.net/qq_31505483/article/details/608334511、文件系统的目的是用来管理文件的。2、文件系统管理文件的方式: struct super_block, struct vfsmount。3、文件的组织方式:struct inode,struct dentry。4、文件系统加入(登记)到内核的方式:...

2020-03-07 14:23:59 189

原创 platform虚拟总线

以内核源码:drivers/input/serio/q40kbd.c为例说明。bus(bus_type): platform_bus_type;device_driver(2-8):platform_driver_register->driver_register->bus_add_driver->driver_attach->bus_for_each_dev-&g...

2020-02-29 15:46:39 113

原创 字符设备

1、文件系统和设备的关系 设备是特殊的文件,文件inode的操作函数通过init_special_inode赋值。 ext2_read_inode ->init_special_inode(适合ext2文件系统)void init_special_inode(struct inode *inode, umode_t mode, dev_t rdev){____inode-...

2020-02-26 07:20:00 79

原创 ext2文件系统布局

file和dentry之存在与内存中,在物理上不存在。Boot Block: 1字节,存储分区信息。SuperBlock:包括文件系统的信息。比如每个块组的块数目,每个块组的inode数目。GDT(Group Descriptor Table):块组描述符表由多个块组描述符组成。ext2的每个块组描述符为32bytes。 整个文件系统有多少个块组,就有多少个块组描述符。...

2020-02-24 20:25:05 324

原创 第10章 文件系统读写---1

Page Cache: Linux系统内核为文件的读写设置的一个缓存.。10.1 page cache机制page cache中存储的数据在I/O执行完成后并不回收,而是一直保留在内存中,除非内存紧张才会回收。10.1.1 buffer I/O 和 direct I/Obuffer I/O:使用page cache的I/O为buffer I/O。(内核默认,在内核空间分配)d...

2020-02-18 12:25:25 201

原创 第四章 进程地址空间(Process Address Space)

第四章主要讨论如下问题:1、线性地址空间的构成及其各个部分的用途。(4.1)2、与进程相关的结构mm_struct以及mm_struct的配置、初始化和释放。(4.2,4.3)3、如何创建进程地址空间中的私有区域以及与之相关的函数,同时涉及到与进程相关的异常处理、缺页中断等。4、介绍内核与用户空间之间如何相互正确地拷贝数据。4.1 Linear Address Space...

2020-02-08 22:38:36 551

原创 第三章 页表管理(Page Table Management)

3.7 地址和struct page之间的映射Linux使用mem_map全局数组,实现快速虚拟地址到物理地址的映射(或者struct page 映射到他们的物理地址)。在x86中,Linux把从0开始的物理地址直接映射成从PAGE_OFFSET(3G)开始的虚拟地址。#define __PAGE_OFFSET_______(0xC0000000)#define __pa(x)__...

2020-02-07 16:22:43 1116

原创 c 代码嵌入汇编

__asm__(    汇编语句模板:    输出部分:    输入部分:    破坏描述部分);eg:#include <stdio.h>#include <time.h>int main(){time_t tt;struct tm *t;#if 0tt = time(NULL);printf("tt:%x\n",tt);#e...

2018-11-18 08:47:35 377

原创 linux likely unlikely

likely与unlikely配合gcc使用,能“预测性”的添加cache命中率,但对最后的结果无影响,只是提高系统效率。err = do_anything();if (likely(err)){    //非常可能被执行到的。}err = do_something();if (unlikely(err)){    //不太可能会被执行到。}...

2018-07-15 19:01:38 132

转载 asmlinkage 初识

origin: http://blog.csdn.net/skyflying2012/article/details/9748133"asmlinkage" 是在 i386 system call 实作中相当重要的一个 gcc 标签(tag)。当 system call handler 要调用相对应的 system call routine 时,便将一般用途缓存器的值 push 到 s

2018-02-07 16:20:11 302

vim+ctag+cscope快速生成ctags cscope等索引文件shell脚本

代码阅读,vim插件使用,根据自己指定的目录生成ctags cscope等索引文件,shell脚本,仅供参考。

2020-05-20

/linux/include/linux/list.h

linux 2.6kernel 内常见数据结构精简操作方法。/linux/include/linux/list.h

2014-04-01

空空如也

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

TA关注的人

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