自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 缺页异常处理函数解析(arm64 4.4)

if (IS_ENABLED(CONFIG_ARM64_PAN) && (regs->pstate & PSR_PAN_BIT))//CONFIG_ARM64_PAN表示是否开启pan标志,pan标志开启表示不允许访问被保护的内存。if (mm_flags & FAULT_FLAG_ALLOW_RETRY) { //前面__do_page_fault函数返回值设置了FAULT_FLAG_ALLOW_RETRY标志,这个标志在什么情况下会设置?

2023-04-26 13:38:47 389

原创 dup_task_struct&copy_thread &kernel_thread函数分析(v4.4-rc6)

dup_task_struct&copy_thread &kernel_thread函数分析

2022-11-06 14:08:22 229

原创 linux进程管理-创建进程

/设置了CLONE_FS则增加fs_struct引用计数共享父进程的fs_struct,否则新分配fs_struct然后将值从父进程的fs_struct拷贝过来。clone_flags 创建的标志位,stack_start和stack_size设置新的进程的栈,parent_tidptr和child_tidptr用于存放新进程父进程的pid和新进程本身的pid。

2022-10-16 15:17:13 309

原创 linux 进程管理---硬件上下文切换

/进行正在的切换动作,注意这里返回之后则是运行到了next进程的switch_to函数剩余部分,则是执行next进程,保存的pc地址也就是这里的return指令地址。mov x10, #THREAD_CPU_CONTEXT //从上述定义可以看出是thread.cpu_context相对于task的偏移。tls_thread_switch函数则是保存旧的current->thread.tp_value加载新的next->thread.tp_value。//保存非通用寄存器的值。

2022-10-15 22:44:13 640

原创 linux进程管理-----进程资源限制

define RLIMIT_CORE 4 异常退出进程内存转储文件的大小,当一个进程异常终止时内核在进程的当前目录下创建内存信息转储文件之前检查这个值。# define RLIMIT_AS 9 进程地址空间的最大数,当进程使用malloc等相关函数扩充进程自己的地址空间时,内核检查这个值。#define RLIMIT_STACK 3 栈大小的最大值,内核扩充进程的用户态堆栈之前检查这个值。

2022-10-10 20:02:48 944

原创 linux进程管理-----等待队列函数

#define wake_up(x) __wake_up(x, TASK_NORMAL, 1, NULL)#define wake_up_nr(x, nr) __wake_up(x, TASK_NORMAL, nr, NULL)#define wake_up_all(x) __wake_up(x, TASK_NORMAL, 0, NULL)

2022-09-28 20:20:30 658

原创 linux 进程-----进程之间关系

TASK_RUNNING 运行状态TASK_INTERRUPTIBLE 可被信号唤醒状态TASK_UNINTERRUPTIBLE 不可被信号唤醒状态TASK_STOPPED 进程执行被暂停状态TASK_TRACED 进程执行已由debugger跟踪状态EXIT_ZOMBIE 进程死亡等待父进程回收状态EXIT_DEAD 进程死亡正在被回收状态。

2022-09-27 20:23:01 336

原创 linux-内存管理_申请释放

因为buddy之间的pfn差距肯定都是order的整数倍,所以如果此次释放的pfn的index的order的位是0那么对应的buddy对应的index对应的order位肯定是1,反之如果是1肯定对应的是0。注意__GFP_DMA、__GFP_HIGHMEM、__GFP_DMA32和__GFP_MOVABLE标志可以相互组合使用,如下的GFP_ZONEMASK宏则是提取出这四个标志位,GFP_ZONE_TABLE是合法的组合情况,GFP_ZONE_BAD是由于上述互斥引入的非法的情况。...

2022-07-20 20:07:14 321

原创 arm-paging_init函数分析

4946行则是设置了zone的start_pfn,初始化了zone的free_area变量每个order里的每个链表。5013行calculate_node_totalpages函数会计算整个内存区间的页数保存在pgdat->node_spanned_pages除去缝隙的页数保存在pgdat->node_present_pages,此次说明的条件两者是相等的。zone_sizes_init函数会通过free_area_init_node调用free_area_init_core函数去初始化。...

2022-07-19 18:51:00 188

原创 linux 信号处理

1 linux中的信号Linux中的信号是用来通知进程发生了异步事件。在原理上,一个进程收到一个信号与一个处理器收到一个中断请可以看成一致的。信号是linux进程间通信机制中的唯一的异步通信机制,一个进程不必通过任何操作来等待信号的到达,事实上,进程也无法提前感知信号什么时候到达由谁发送。当然内核也会因为内部事件给进程发送信号。信号机制除了基本通知功能外,还可以传递附加信息。常用的信号发送函数有raise kill等 常用的信号注册函数有signal、sigaction等。2 源码分析2.1 信号发送此处拿

2022-07-13 11:01:19 642

原创 x86-idt初始化

中断描述符寄存器idt存在两个指令lidt和sidt分别是存储到寄存器和加载到内存// 16byte gatestruct gate_struct { u16 offset_low;//函数地址低16位 u16 segment;//段地址//ist表示使用per-cpu中断栈还是ist中断栈,type是何种类型的中断,dpl则是权限位 unsigned ist : 3, zero0 : 5, type : 5, dpl : 2, p : 1;......

2022-05-24 13:49:30 241

原创 io资源记录

针对io端口单独编址的情况(x86),可以使用专用道指令in\out\ins\outs指令访问,针对这样的情况内核会用一些数据结构如resource 管理这些端口。使用struct resource { const char *name; //资源拥有者名称 unsigned long start, end; //资源范围的起止地址 unsigned long flags;//各种标志 struct resource *parent, ......

2022-04-15 10:41:40 109

原创 块设备分析

1、磁盘上的数据时通过其首个扇区号和扇区数目表示的2、扇区是硬件传送数据的基本单位,块是vfs和文件系统传送数据的基本单位3、linux中块大小必须是2的幂且不能超过一页大小4、块设备的块大小不是唯一的创建文件系统时可以指定5、每个块都需要有块设备缓冲区,缓冲区首部是一个buffer_head结构体struct buffer_head { /* First cache line: */ unsigned long b_state; /* ......

2022-04-12 09:49:09 208

原创 BSD网桥函数trace分析

bridge的transmit网卡加入网桥初始化网桥里的网卡接收报文网桥里的网卡发送报文

2022-04-02 13:43:36 92

原创 vfs-文件系统基础

超级块对象super_block->s_inodes 表示所有的inode。super_block->s_dirty 表示脏的inode。super_block->s_io 表示等待被写入磁盘inode。super_block->s_fs_info 指向特定超级块信息的指针super_block->s_op表示超级块的方法inode会复制磁盘索引节点的包含的一些数据inode->i_hash 用于散列链表的指针(索引节点会被存放在一个inode

2022-03-03 13:19:31 549

原创 从mknod看设备驱动操作函数挂接

首先从mknod系统调用看起看mknod命令调用的系统调用执行的命令:mknod /dev/test_char c 128 11可以使用工具看到核心调用如下mknod("/dev/test_char", S_IFCHR|0666, makedev(128, 11)) = 0mknod对应的内核函数为sys_mknodsys_mknodvfs_mknod error = dir->i_op->mknod(dir, dentry, mode, dev);上

2022-03-02 20:08:44 246

原创 ftrace--------------trace points

linux内核打开了ftrace之后,系统启动的时候会自动创建/sys/kernel/tracing录。/sys/kernel/tracing目录有以下文件或者目录:tracing_on:决定是否像ring_buff写入数据,这个跟跟踪是否开启没关系,跟踪即使开启了这个关闭,每次跟踪被触发也不会写入到/sys/kernel/tracing/trace文件里面。trace:显示跟踪信息的文件可以使用cat等数据去读取。trace_pipe:类似trace,每次读取完成之后会继续等待下一次数据到

2021-11-18 15:16:53 779

原创 内存基础小知识(arm)

处理器的cr0寄存器Pcd标志用来启用或者禁用高速缓存电路。pcd标志是访问叶匡中的数据时高速缓存是否开启,pwt表示将数据写到叶匡的时候采用的回写策略是通写还是回写。TLB用于缓存刚刚被访问的物理地址。每个cpu都有一个TLB。常用宏功能:PAGE_SHIFT:指定offset字段的位数,页框大小。PMD_SHIFT指定线性地址的offset字段与table字段的总位数。32位当PAE被禁用的时候是22位offset(12)+table(10),PMD_MAS...

2021-09-09 20:56:16 586

原创 进程exit类函数分析

static inline int signal_group_exit(const struct signal_struct *sig){ return (sig->flags & SIGNAL_GROUP_EXIT) || (sig->group_exit_task != NULL);//group_exit_task是处理退出信号的进程,也就是判断是否存在SIGNAL_GROUP_EXIT或者判断sig->group_exit_task不为空}...

2021-08-16 20:47:44 583

原创 进程相关小常用函数分析(arm)

register unsigned long current_stack_pointer asm ("sp");//表示访问current_stack_pointer 直接使用sp寄存器里的值。static inline struct thread_info *current_thread_info(void){ return (struct thread_info *) (current_stack_pointer & ~(THREAD_SIZE - 1));//将t...

2021-08-16 15:22:00 835

原创 linux 内核信号处理概述(do_signal)

分析do_signal之前我想先要分析下get_signal这个函数。get_signal1 如果信号是SIGNAL_CLD_STOPPED或者SIGNAL_CLD_CONTINUED,则调用do_notify_parent_cldstop发送信息给调试进程2 进程已经处于将要退出状态也就是可能要进入coredump(被设置了SIGNAL_GROUP_EXIT),那么直接设置信号为SIGKILL且进行coredump操作在返回3 循环调用dequeue_signal从tsk->pe..

2021-08-10 11:53:35 1171

原创 linux 内核信号处理概述(send_signal)

惯例分析函数之前先看数据构造信号相关数据结构#define _NSIG 64#define _NSIG_BPW 32#define _NSIG_WORDS (_NSIG / _NSIG_BPW)typedef struct { unsigned long sig[_NSIG_WORDS];//你猜_NSIG_WORDS这个是多少? 每位表示一个信号} sigset_t;struct sigpending { struct list_head list;...

2021-08-09 20:27:58 1606

空空如也

空空如也

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

TA关注的人

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