Linux学习
文章平均质量分 93
Rachelint
不切实际的愉悦犯。
展开
-
【INT的内核笔记】tcp接收端相关实现
1. file_operations在epoll_ctl(add)中有这样的调用链:主要涉及了file->f_op和private_data中的socket结构tfile->f_op->poll(tfile, &epq.pt) |->sock_poll |->sock->ops->poll |->tcp_poll(应该也是类似sk->sk_prot->recvmsg??原创 2021-03-08 11:30:32 · 367 阅读 · 0 评论 -
【INT的内核笔记】Linux信号递达过程详解
1. 什么时候执行信号处理一般在从中断或系统调用返回到用户态前,会执行一段逻辑检查TIF_SIGPENDING位,如果被置位了的话则会经由:–> do_notify_resume --> do_signal,进入到do_signal执行信号处理。中断/系统调用返回的大致情况,可以参考下图:中断返回用户态的相关代码:/** *返回用户空间,只需要检查need_resched * *可能从中断返回,也可能从系统调用返回。 */ENTRY(resume_userspace) #原创 2020-11-25 15:10:15 · 533 阅读 · 1 评论 -
【内核资料】stackoverflow上关于内核为何偏爱kmalloc(),而很少用vmalloc()的讨论
1. 问题What is the difference between vmalloc and kmalloc?2. 大致观点涉及到DMA的话,需要物理上连续的内存;内核之所以偏好分配物理上连续内存,并不是必须的,而主要是考虑性能:kmalloc()和vmalloc()效率高;kmalloc()对TLB更友好;内核的页面不会被swapped,而是常驻内存中,无论kmalloc()分配还是vmalloc()分配;...转载 2020-07-14 16:00:50 · 245 阅读 · 0 评论 -
【INT的内核笔记】Linux内核内存空间布局研究
1.Linux内核映射从上面的页表设置可以看出:内核对内核虚拟地址和物理地址之间的转换,是会有需求的。很容易可以想到最简单的解决方法:将内核虚拟空间地址,和实际物理空间逐一对应进行线性映射。在很早期的时候,确实就是这样做的。但是在32位时代,内核的虚拟空间只有1G,也就是说全部都进行线性映射的话,内核只能使用1G物理内存,但是我们也知道就是32位时代,其实物理内存很多也不止4G了,而且CPU后面也相应支持。但是,虚拟地址空间还是只有4G,内核还是只有1G,如果还是进行直接线性映射的原创 2020-07-11 21:38:34 · 523 阅读 · 0 评论 -
转stackoverflow一个问题,关于内核是如何管理页表(pgd,pud,pmd,pte)本身所占的内存
碎碎念我今天莫名开始纠结起,关于linux页表方面的问题。然后就想到,【页表本身也是要占有一部分内存的,所以内核又是如何管理页表本身所占有的这部分内存的呢?】找了很久,没太满意的答案。甚至都没有具体方向,所以也不太有希望从源码中找到答案。暂时就以在stackoverflow上找到的这个提问,作为这次疑惑的收尾吧,可能要很久很久之后才能得到圆满的解答了。回复的大致意思是:【根据linux内核相关wiki,页表就是常驻在内存中的,不会换出。】也不知道实际是如何的,还是希望有从动态层面上研究过内核的转载 2020-07-09 01:24:56 · 579 阅读 · 0 评论 -
【INT的内核笔记】梳理sleep_avg,prio,activated,timestamp,last_ran等重要调度变量
1. sleep_avg1.1 sleep_avg简介sleep_avg处在task_struct数据结构中,sleep其实和平均没有什么关系,是一个睡眠时间评估值,命名可能有历史原因。直接关系到进程动态优先级prio的计算:动态优先级prio = 静态优先级static_prio - CURRENT_BONUS(p) + 5CURRENT_BONUS(p)和p->sleep_avg是正相关的,prio越小越好,因此:sleep_avg越大,调用effective_prio(p)重新计算原创 2020-07-02 08:58:11 · 543 阅读 · 0 评论 -
【INT的内核笔记】调度时机与抢占
1. 调度时机调度时机一般可以分成两类:主动调度和强制调度。1.1 主动调度在形式上一般是这样的:内核在等待资源的时候,将当前进程移到等待队列,并主动调用schedule()放弃CPU;主动调度的例子:read()系统调用,会调用到wait_on_sync_kiocb(),其中有这么一段 while (iocb->ki_users) { set_current_state(TASK_UNINTERRUPTIBLE); if (!iocb->ki_users)原创 2020-07-01 16:26:15 · 479 阅读 · 0 评论 -
【INT的内核笔记】scheduler_tick()源码分析
1. 调用时机一般会在时钟中断时被调用,作用有:剥夺时间片耗完的进程的CPU使用权,当然具体细节上没这么简单;进行定时的CPU间负载均衡处理;2. 大致流程idle进程(swapper进程)的处理。idle进程没有时间片可言,主要思路是如果当前逻辑CPU的可执行队里已有进程,应该尽快调度。这里所指的调度还是延时调度,也就是设置TIF_NEED_RESCHED,还会有些强制调度之类的处理,细节暂未研究;实时进程的处理。在这版本的源码中,没有调度类的概念,实时进程和普通进程是放在原创 2020-06-30 22:40:33 · 413 阅读 · 0 评论 -
【内核资料】小知识点,likely与unlikely
看内核源码看见好几次likely和unlikely了,于是就查了一下具体的意义,之前发现了这篇文章,很短,小小地涨了一下姿势2333。作者:不详,看的那篇文章,作者也是转的别人转自:https://blog.csdn.net/tigerjibo/article/details/8279183###likely()与unlikely()在2.6内核中,随处可见,那为什么要用它们?它们之间有什么区别呢?首先明确:if (likely(value)) //等价于if (value)if (likel转载 2020-06-27 15:09:59 · 218 阅读 · 0 评论 -
【INT的内核笔记】关于pthread_cond_wait()虚假唤醒,在不同unix系内核的实验结果
1.博主的实验这两天把ULK的信号机制和相应的内核源码大致看了一遍,了解到pthread_cond_wait()的底层futex()属于慢系统调用,可以被信号中断,这是导致虚假唤醒的系统层面原因(另一个是逻辑层面)。所以我就写了一个小demo来进行验证,就是主线程给子线程发信号而已,很简单。结果当然是失败的,不然就不会纠结,也没有这篇记录了。所以我就很懵逼了,原理上不应该的啊?我直接去看pthread_cond_wait()的源码,了解到底是怎么回事的… 但是一来不好找对应OS版本的源码,二来是网上原创 2020-06-15 03:19:04 · 426 阅读 · 0 评论 -
【内核资料】Linux进程的睡眠和唤醒
1. Linux进程的睡眠和唤醒在Linux中,仅等待CPU时间的进程称为就绪进程,它们被放置在一个运行队列中,一个就绪进程的状 态标志位为TASK_RUNNING。一旦一个运行中的进程时间片用完, Linux 内核的调度器会剥夺这个进程对CPU的控制权,并且从运行队列中选择一个合适的进程投入运行。当然,一个进程也可以主动释放CPU的控制权。函数 schedule()是一个调度函数,它可以被一个进程主动调用,从而调度其它进程占用CPU。一旦这个主动放弃CPU的进程被重新调度占用 CPU,那么它将从上次停转载 2020-06-13 01:06:04 · 376 阅读 · 0 评论 -
【INT的内核笔记】调度研究(一)
未完待续…研究的源码主要是2.6版本。1. 调度策略概述1.1 调度调度时机和调度是不同的,什么时候阻塞进程,什么时候唤醒进行,什么时候执行调度,这属于调度时机;阻塞和唤醒进程时候相应调度变量如何改变,应该从可执行队列中挑选哪个进程运行,这属于调度;调度大致提供这些主要功能:从可执行队列中,选出合适进程执行;阻塞和唤醒进程;多CPU间等方面的负载平衡;1.2 进程类型类型批处理进程一般为后台进程,不需要和用户交互,处理上受慢待。例如编译程序,数据库搜索引擎,科学计算原创 2020-06-12 22:39:41 · 282 阅读 · 0 评论 -
【内核资料】进程切换 switch_to 与 __switch_to
这是我觉得在网上介绍switch_to函数的众多文章中,讲得算最明白的一篇。只要有耐心一路看下来,基本上都能把这个比较奇葩的函数看明白。其实难点在于:需要有一点汇编知识,因为涉及到一点汇编层面的hack技巧;本身很晦涩,这边文章通过逐行讲解并且尽量转换的形式,很好地解决了一点;作者:visayafan文章链接#define switch_to(prev, next, last) \do { \/* \ * Context-switching cl转载 2020-06-11 22:59:29 · 1035 阅读 · 0 评论 -
【内核资料】fork写时拷贝实现原理
作者:Leosocy链接:https://blog.leosocy.top/深入了解Linux-COW写时拷贝实现原理/为了节约物理内存,减少进程创建时资源和时间的消耗,父进程在调用 fork() 生成子进程时,子进程与父进程会共享同一内存区。只有当其中一进程进行写操作时,系统才会为其另外分配内存页面。这就是写时复制机制 (copy on write) 的意思。那么 Linux 内核是如何实现这种机制的呢,今天我们来简要的分析一下。fork 系统调用流程sys_fork -> _do_fork转载 2020-06-08 22:35:03 · 519 阅读 · 0 评论 -
【INT的内核笔记】文件系统浅析
1. 磁盘中的文件系统理想组织形式| 引导块 | 超级块 | 空闲空间管理 | i节点表 | 逻辑块(根目录+文件和目录) |满足了文件系统几个需求:存储和读取信息、空闲管理、文件属性(基本信息+权限)职责分配:引导块,和系统启动有关,不讨论;超级块,保存整个文件系统的属性,可以类比到文件的属性,就是大小、时间之类。摘录:超级块中会存储整个文件系统的类型、大小,文件系统中索引节点的总数量,当前文件系统的空间占用量、空闲块数量,存储块的大小,文件系统的最近一次检查时间等信息。原创 2020-05-09 20:02:40 · 208 阅读 · 0 评论 -
zsh安装和配置
1.zsh安装与切换sudo apt-get install -y zshsudo chsh -s /bin/zsh2.oh-my-zsh安装无论什么渠道都可以,把oh-my-zsh项目先拉下来,再运行其中的install.sh脚本就行:git clone https://gitee.com/roclyp/oh-my-zshcd /home/lyp/oh-my-zsh/tools....原创 2020-03-17 22:43:57 · 439 阅读 · 0 评论 -
ubuntu 18.04安装NVIDIA驱动失败经历 --- 不能进入图形界面
1.安装方法网上很找到,就不详述了。总结起来有三种:**从ubuntu标准仓安装。**使用ubuntu-drives autoinstall,其实就是apt-get install nvidia-drivers-xxx,不过版本不需要自行指定,直接安装系统推荐的而已。这种方法不需要手动禁止nouveau,不需要退出图形界面;**从PPA源安装。**添加PPA源,然后apt-get inst...原创 2020-02-04 19:36:49 · 7297 阅读 · 3 评论 -
ubuntu18.0下VSCode配置C++环境
1.三个比较主要的json文件c_cpp_properties.json,用于指定各个头文件的路径,ubuntu18.0下不需要改动;launch.json,用于指定调试方面的信息,比如用什么调试器(如gdb),相应的调试信息对应于哪个task(就是下面的tasks.json描述的task,采用preLaunchTask参数指定);tasks.json,用于指定任务,不只最常见的build...原创 2020-01-24 18:56:14 · 865 阅读 · 0 评论 -
关于关掉ubuntu 18系统音的问题
这个系统音真的非常烦,鬼才设计。上次改配置文件关掉了终端的,最近在学习mysql,在mysql命令行里又来了,吐血。总结一下如何去关掉,列举一下网上找到的两种关法:第一种只能关掉终端的,可能下个命令行工具,又冒出来了;第二种很简单,而且彻底静音了。1.修改/etc/inputrc文件sudo打开该文件,找到这一段# do not bell on tab-completion#set be...原创 2020-01-19 20:27:48 · 489 阅读 · 0 评论 -
关于修改/etc/inputrc引起的,终端不能输入字符d的问题
ubuntu 18那个破系统音实在太烦了,于是想关掉,找到这篇博客。https://blog.csdn.net/xuezhimeng2010/article/details/8192921博客本身说的也没什么问题,正确操作之后确实关掉了。关键在于,我非常的手贱和眼瞎。文中是说:执行命令:#sudo vi /etc/inputrc找到21行,把#set bell-style no...原创 2019-12-28 14:44:54 · 679 阅读 · 2 评论 -
ubuntu 16.0升级18.0的一点小问题
最后卡在installing snap gnome xxx上了。卡了两小时,估计凉了,于是直接结束掉。但是之后并没有什么错误,可以正常使用,毕竟真正的系统更新已经完事了。反正很迷吧,推测那条未完成指令的意思是,用snap来安装gnome全家桶,为防有什么错误,我特意用apt-get又装了一遍gnome全家桶,感觉应该没问题了吧?特意记下来,以后真炸了能知道这个事,就这样。...原创 2019-12-27 21:40:02 · 2386 阅读 · 10 评论 -
sublime插件配置
用了很久的sublime,确实感觉很多时候操作不便,还是多装点插件吧。package control基本中的基本,暂时主要用来intall其他插件,很方便。ctrl + shift + p然后输入install点击确定,再输入想安装插件的名字再选择+确定就能安装。BracketHighlighter让括号高亮。把default的内容复制到user中,然后搜索【“default”...原创 2019-12-27 15:40:06 · 135 阅读 · 0 评论 -
ubuntu系统文件夹作用
/opt/文件夹用户级的程序目录,可以理解为D:/Software,opt有可选的意思,这里可以用于放置第三方大型软件(或游戏),当你不需要时,直接rm -rf掉即可。在硬盘容量不够时,也可将/opt单独挂载到其他磁盘上使用。我个人的理解,/opt/适合用来放置那些集成、由多个模块组成的软件。例如sublime,虽然并不大,但其本身并不是只有一个单独的可执行文件,而是有各个模块和配置文件...原创 2019-12-03 01:10:52 · 794 阅读 · 0 评论 -
在centos7.7安装搜狗输入法踩坑日记
1.踩过的坑直接卸载了ibus卸载原创 2019-11-03 23:25:44 · 2171 阅读 · 0 评论