![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux kernel
weixin_44260058
这个作者很懒,什么都没留下…
展开
-
linux kernel基础系列之(七)direct io和aio
缓存 I/O 又被称作标准 I/O,大多数文件系统的默认 I/O 操作都是缓存 I/O。在 Linux 的缓存 I/O 机制中,操作系统会将 I/O 的数据缓存在文件系统的页缓存( page cache )中,也就是说,数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。缓存 I/O 有以下这些优点: 缓存 I/O 使用了操作系统内核缓冲区,在...原创 2019-12-26 15:18:11 · 351 阅读 · 0 评论 -
linux kernel基础系列之(六)虚拟内存VM
每个进程都有自己独立的4G内存空间,各个进程的内存空间具有类似的结构。 一个新进程建立的时候,将会建立起自己的内存空间,此进程的数据,代码等从磁盘拷贝到自己的进程空间,哪些数据在哪里,都由进程控制表中的task_struct记录,task_struct中记录中一条链表,记录中内存空间的分配情况,哪些地址有数据,哪些地址无数据,哪些可读,哪些可写,都可以通过这个链表记录。 ...原创 2019-12-26 10:48:44 · 156 阅读 · 0 评论 -
linux kernel基础系列之(五)文件系统FS
Linux 中的各种事物比如像文档、目录(Mac OS X 和 Windows 系统下称之为文件夹)、键盘、监视器、硬盘、可移动媒体设备、打印机、调制解调器、虚拟终端,还有进程间通信(IPC)和网络通信等输入/输出资源都是定义在文件系统空间下的字节流。 一切都可看作是文件,其最显著的好处是对于上面所列出的输入/输出资源,只需要相同的一套 Linux 工具、实用程序和 API。你可以使用同一...原创 2019-12-26 10:29:28 · 581 阅读 · 0 评论 -
linux kernel基础系列之(四)互斥锁mutex
系统中如果存在资源共享,线程间存在竞争,并且没有合理的同步机制的话,会出现数据混乱的现象。为了实现同步机制,Linux中提供了多种方式,其中一种方式为互斥锁mutex(也称之为互斥量)。 Reference: https://www.jianshu.com/p/a7ddb2998b3b https://elixir.bootlin.com/linux/v2.6.18.8/sour...原创 2019-12-26 10:22:49 · 382 阅读 · 0 评论 -
linux kernel 数据结构系列之(四)位图bitmap
位图(bitmap)是一种非常有用的数据结构,在处理系统中的进程数管理、磁盘中的磁盘块管理、以及内存中的内存页的使用情况管理时非常有用。 Reference: linux内核中的位图 https://elixir.bootlin.com/linux/v2.6.28.8/source/lib/bitmap.c https://elixir.bootlin.com/linux/v...原创 2019-12-26 10:14:31 · 385 阅读 · 0 评论 -
linux kernel 数据结构系列之(三)等待队列wait_queue
Linux内核的等待队列是非常重要的数据结构,在内核驱动中广为使用,它是以双循环链表为基础数据结构,与进程的休眠唤醒机制紧密相联,是实现异步事件通知、跨进程通信、同步资源访问等技术的底层技术支撑。 研究等待队列这个内核非常基础的数据结构,对于加深理解Linux非常有帮忙,等待队列有两种数据结构:等待队列头(wait_queue_head_t)和等待队列项(wait_queue_t),两者都有一个...原创 2019-12-25 17:42:50 · 274 阅读 · 0 评论 -
linux kernel 数据结构系列之(二)红黑树rbtree
平衡二叉树(BalancedBinary Tree或Height-Balanced Tree)又称AVL树。它或者是一棵空树,或者是具有下列性质的二叉树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值不超过1。若将二叉树上结点的平衡因子BF(BalanceFactor)定义为该结点的左子树的深度减去它的右子树的深度,则平衡二叉树上所有结点的平衡因子只可能是-1、0和1。(此段...原创 2019-12-25 17:15:58 · 237 阅读 · 0 评论 -
linux kernel 数据结构系列之(一)双向链表list_head
在Linux内核中,提供了一个用来创建双向循环链表的结构 list_head。虽然linux内核是用C语言写的,但是list_head的引入,使得内核数据结构也可以拥有面向对象的特性,通过使用操作list_head 的通用接口很容易实现代码的重用。 下面就是kernel中的list_head结构定义: struct list_head { struct list_head *ne...原创 2019-12-25 17:07:00 · 115 阅读 · 0 评论 -
linux kernel基础系列之(三)计算机底层知识拾遗
楔子: 这个系列会总结计算机,网络相关的一些重要的底层原理。很多底层原理大家上学的时候都学过,但是在学校的时候大部分的同学都是为了应付考试而学习,过几天全忘了。随着工作的时间越久,越体会到这些基础知识的重要性。做技术和练武功一样,当你到了一定的阶段,也会遇到一个瓶颈,突破了你的眼界就会大不同,突破不了,只能困在原地无法成长。我自己深有体会,这些基础知识,底层原理是助你打破瓶颈的灵丹妙药。...转载 2019-12-25 16:46:19 · 149 阅读 · 0 评论 -
linux kernel基础系列之(二)IO复用select与epoll机制
1.select的缺陷 高并发的核心解决方案是1个线程处理所有连接的“等待消息准备好”,这一点上epoll和select是无争议的。但select预估错误了一件事,当数十万并发连接存在时,可能每一毫秒只有数百个活跃的连接,同时其余数十万连接在这一毫秒是非活跃的。select的使用方法是这样的: 返回的活跃连接 ==select(全部待监控的连接)。 什么...原创 2019-12-25 16:32:01 · 101 阅读 · 0 评论 -
linux kernel基础系列之(一)调度原理
1. 数据结构: 优先级队列 struct prio_array { unsigned int nr_active; 表示等待执行的进程总数 unsigned long bitmap[BITMAP_SIZE]; 一个unsigned long在内核中只有32位哈,大家要跟64位OS上的C程序中的long区分开,那个是64位的。那么这个bitmap是干什么的呢?它是用位...原创 2019-12-25 16:01:49 · 93 阅读 · 0 评论