
内核
文章平均质量分 63
内核
平平无奇的小垃圾
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
linux内核—逻辑地址/线性地址/物理地址 转换
概念1.逻辑地址包含在机器语言指令中用来指定一个操作数或一条指令的地址。每个逻辑地址都由一个段和偏移量组成,偏移量指明了从段开始的地方到实际地址之间的距离2.线性地址即虚拟地址,是一个32位无符号整数,用来表示4G的地址3.物理地址实际内存芯片上的地址在linux中,由于所有的段都是从0x00000000开始,所以逻辑地址和线性地址是相同的,也就是在linux中忽略逻辑地址这个概念即可线性地址转换物理地址linux使用三级页表转换,与二级页表转换原理相似,以下按二级页表说明32位线性地址原创 2021-08-09 16:28:28 · 728 阅读 · 0 评论 -
linux内核—switch_to三个参数
该宏有三个参数:prev, next, last。它们都是局部变量。prev:输入参数,变量值为旧进程描述符的地址。next:输入参数,变量值为新进程描述符的地址。last:输出参数,用来记录该进程是由哪个进程切换而来的,即保存 在当前进程之前 占用cpu的进程的 进程描述符地址。为什么需要last这个局部变量呢?因为:首先,记录前一进程的进程描述符地址,对进程切换是很有用的,具体什么用途,以后再说。其次,switch_to宏由就进程调用,在新进程结束,新进程如果想获取旧进程描述符地址,不能直接转载 2021-08-01 17:41:40 · 1179 阅读 · 0 评论 -
动态内存(堆)与物理内存的关系
偶然发现一个问题,我的板子是32位,1.5G物理内存,但程序有时最多动态申请1G多的内存(即将物理内存耗尽),有时却可以申请超过物理内存很多的动态内存下面测试验证:程序大意为开两个进程,父子进程同时申请动态空间直到申请失败,这时程序不退出,使用free命令和cat /proc/meminfo命令查看内存情况先看测试程序运行前的内存情况,可以看到总物理内存1.5G左右,可用1.3G左右,注意Committed_AS参数的变化:freecat /proc/meminfo测试一:void fork原创 2021-05-21 14:38:55 · 859 阅读 · 1 评论 -
linux内核—进程栈线程栈
进程栈:进程用户空间的管理在task_struct 的mm_struct *mm成员中体现, mm中的成员定义了用户空间的布局情况如图一。 用户空间的栈起始于STACK_TOP, 如果设置了PF_RANDOMIZE,则起始点会减少一个小的随机量,每个体系结构都必须定义STACK_TOP, 大多数都设置为TASK_SIZE, 在32位机上该值为0XC0000000。经过随机处理后,进程栈的起始地址将存放在mm->start_stack中,可以通过cat /proc/xxx/stat 查看。 如图,转载 2021-03-12 09:32:12 · 443 阅读 · 0 评论 -
linux内核—从可执行文件到进程启动
一、概念1.elf文件需要了解一个程序编译生成一个可执行文件是Linux下的一种格式标准,Linux中的ELF格式文件一共有四种:●可重定位文件(Relocatable File):这类文件包含了代码和数据,可被用来链接成可执行文件或者共享目录文件,扩展名为.o●可执行文件(Executable File):这类文件包含了可以直接执行的程序,一般没有扩展名●共享目录文件(Shared Object File):这类文件包含了代码和数据,扩展名为.so。共享目录文件一般可以在以下两种情况下使用:原创 2021-03-11 20:06:06 · 398 阅读 · 0 评论 -
进线程内存优化
1.线程默认栈大小为8M,可调用pthread_attr_setstacksize设置线程栈大小栈大小最小设置为PTHREAD_STACK_MIN,小于此值会设置无效,最好设置为系统页大小的倍数,否则同样报错原创 2021-03-08 16:22:00 · 134 阅读 · 0 评论 -
解读linux的/proc下的statm、maps、memmap内存信息文件解析
几乎看什么内核漏洞分析之类的文章,第一眼都是被 cat /proc/{pid}/maps产生的一堆奇怪的信息唬住了,都不敢往下看居然没有搜到关于它们的详细介绍,旁边也没有表头什么的解释信息那就我来整理一下吧,方便后人。ls /proc 能看到一些数字命名的文件夹,这个就不多说了,什么pid、fd的知识还是容易弄到的拿init开刀,[root@localhost proc]# cat /proc/1/statm487 185 133 31 0 67 0很简单地返回7组数字,每一个的单位都是一页转载 2021-03-08 10:57:25 · 1007 阅读 · 0 评论 -
linux内核—进程上下文/中断上下文/用户态、内核态抢占
1. 定义https://blog.youkuaiyun.com/mw_nice/article/details/89350164转载 2021-03-07 16:55:30 · 303 阅读 · 0 评论 -
linux内核—进程&线程创建
fork调用结束时,在返回点这个想用位置上,父进程恢复执行,子进程开始执行,fork从内核返回两次,一次回到父进程,一次回到子进程。进程调用exit退出,退出后被设置为僵死状态,直到他的父进程调用了wait或waitpid每个进程有自己的地址空间,如果父进程希望和子进程共享地址空间,可以在调用clone()时,设置CLONE_VM标志,我们把这种进程称为线程是否共享地址空间几乎是线程和进程本质上唯一的区别调用fork时,子进程调用allocate_mm()申请mm_struct结构体的空间(即每个进原创 2021-03-05 18:46:37 · 448 阅读 · 0 评论 -
linux内核—进程地址空间
本文借鉴:https://www.cnblogs.com/fengliu-/p/9243004.htmlhttps://blog.youkuaiyun.com/wsq119/article/details/82110757https://www.cnblogs.com/wuchanming/p/4339770.html进程地址空间分布图:早期的内存分配机制在早期的计算机中,要运行一个程序,会把这些程序全都装入内存,程序都是直接运行在内存上的,也就是说程序中访问的内存地址都是实际的物理内存地址。当计算机同时运转载 2021-03-05 09:36:52 · 284 阅读 · 1 评论 -
linux内核—中断下半部
1.中断处理分为两部分的原因下半部实现机制:软中断、tasklets和工作队列2. 软中断机制中断处理程序(也就是中断上半部)在返回前,标记它所对应的软中断,稍后在合适的时刻,软中断就会被执行2.1软中断实现2.2 软中断的使用3. tasklet机制4.ksoftirqd线程对于软中断,内核会选择在几个特殊时机进行处理。而在中断处理程序返回时处理是最常见的。软中断被触发的频率有时可能很高(像在进行大流量的网络通信期间)。更不利的是,处理函数有时还会自行重复触发。也就原创 2021-02-26 15:38:57 · 202 阅读 · 0 评论 -
linux内核—中断
1.中断与异常2. 上半部与下半部概念3. 中断处理程序的重入和共享4. 中断上下文中断上下文不能调用会睡眠的函数,因为内核调度是以进程为单位调度的,中断处理程序一旦睡眠,调度器调度其他进程运行,就无法在重新调度回到这个中断处理程序继续执行当一个中断处理程序正在执行时,该中断线在所有处理器上都被屏蔽,以防止在同一中断线上接收到另一个新的同样的中断。但是这个中断处理程序可能会被其他中断线的中断打断...原创 2021-02-24 17:46:54 · 152 阅读 · 0 评论