首页
学习
活动
专区
工具
TVP
发布

Linux内核同步原理学习笔记

a.linux2.0以前的时代 在多年前,linux还没有支持对称多处理器SMP的时候,避免并发数据访问相对简单。...b.linux2.0以后的时代 从2.0开始,linux开始支持SMP. 此时如果不加保护,运行在两个不同处理器上的内核代码完全可能在同一时刻并发访问共享数据。...到2.6时,linux已经发展成抢占式内核, 在不加保护的时候,调度程序可以在任何时刻抢占正在运行的内核代码,重新调度其他的进程运行。...linux内核中最常见的锁是自旋锁(spin lock)。 自旋锁最多只能被一个可执行线程持有,等待锁的进程采用忙循环等待(只针对smp)。 因为忙循环很消耗处理器时间,所以自旋锁不能被长时间持有。...#include struct rw_semaphore; (9)completion机制 在内核编程中常见的一种模式是: 在当前线程之外初始化某个活动,然后等待该活动的结束

1.2K20
您找到你想要的搜索结果了吗?
是的
没有找到

Linux系统内核笔记

一、课程介绍 UNIX/Linux环境C语言,借助学习操作系统的接口的方法来学习、理解操作系统的 运行机制以及一些网络协议 C/C++、数据结构和算法 与平台无关,重点是算法逻辑 Uinx/Linux...,它指的是系统的内核,凡是使用这种内核的操作系统都叫作 Linux系统(发行板),严格意义上讲Linux指的是内核,隶属于GNU工程。...UNIX系统、免费开源,而Linux之父就是在参照这款操作 ,才写出第一个版本的Linux内核代码 GNU工程:是自由软件基金会所创立的一个开源组织,基本原则就是共享,主旨是发展出 一个有别于商业UNIX...目前Linux内核由它进行维 护,所以Linux也叫GNU Linux GPL通用公共许可证:允许对某些成果及派生成果重用、修改、复制,对所有人都是自 由的,但不能声明做了原始工作,或声明由他人所作。...系统接口 mmap/munmap Linux 调用内核 Kmalloc/vmalloc 内核 调用驱动 get_free_page 驱动 … 四、进程映像 程序是保存在磁盘上的可执行文件,加载到内存中被操作系统调用执行的程序叫进程

1.4K20

Linux内核设备驱动之Linux内核基础笔记整理

Linux内核驱动模块机制 静态加载, 把驱动模块编进内核, 在内核启动时加载 动态加载, 把驱动模块编为ko, 在内核启动后,需要用时加载 2....编写内核驱动 #include #include static int __init test_init(void) { return...:make -C 内核源码目录 M=驱动代码所在目录 modules_install INSTALL_MOD_PATH=/文件系统路径 clean:make -C 内核源码目录 M=驱动代码所在目录.../kernel.h #define KERN_EMERG "" /* system is unusable */ #define KERN_ALERT ""...console_loglevel级别时, 则可以输出, 否则不输出 修改级别输出echo 8 > /proc/sys/kernel/printk 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值

1.8K51

Linux内核学习(一)之Linux内核源码目录

我们今天的文章分享不是拿最新的版本来作为学习的,往往在刚开始学习的时候,都会拿比较经典的linux版本来作为入门学习,入门了后,后面版本的学习就好办了。...linux版本下载: 网站网址:http://ftp.sjtu.edu.cn/sites/ftp.kernel.org/pub/linux/kernel/ 然后就可以按照自己的需求来下载学习了,这里我在...这个文件就是linux内核特有的内核编译体系需要用到的文件 MAINTAINERS:这个文件主要是介绍了维护人员列表以及如何提交内核更改 Makefile:这个是linux内核的总makefile,整个内核工程用这个...scripts:脚本,这个目录下全部是脚本文件,这些脚本文件不是linux内核工作时使用的,而是用来辅助对linux内核进行配置编译生产的。...tools:linux中用到的一些有用工具 usr:目录下是initramfs相关的,和linux内核的启动有关 virt:内核虚拟机相关的 小结:大家看了这么文件目录,不要吓到了(要选择性学习),跟我们关系很紧密的就是

10.6K51

Linux内核修炼之道》 之 高效学习Linux内核

在6月份做过一次《高效学习Linux内核》的presentation,下面是前面的一部分内容及讲义,或许对大家有用吧。至于剩余的,因为和之前博客中的部分文章内容差不多,就不贴了。...接下来我就通过自己的一些感悟,抛砖引玉来介绍一下如何比较高效的去学习 linux 内核。这些话并不局限于某个部分的内容,很像一句句的口号,我们也可以将它们看作内核学习的大字报。...意思就是我们在学习内核前首先要会用 linux ,依照一个由上至下循序渐进的过程,在能够熟练的使用 Linux 操作系统之后再去研究内核中的实现。这也是 linus 本人的观点。...对于学习这种复杂的事情来说,无论是我们在学校的课堂学习,还是这里说的内核学习,它的效果好与坏,最主要取决于两个方面:一个是学习的方法,另一个就是学习时的心理。...应该说学习内核就是学习内核的源代码,但是内核代码千千万,又到处像个迷宫一样,不迷路都很难,又怎么去直面它?

9.9K30

Linux内核学习(一)

前言: 大家好,今天给大家分享一下我个人学习Linux内核的总结,由于新的内核版本太过于庞大,说实话,啃不动,然借鉴前人的建议,故开始从早期的Linux0.11版本开始学习。...,所以就变的复杂起来了: 2.6内核版本目录 上面内核版本的源码可以从下面下载: 在线浏览早期内核源码: http://lxr.linux.no/linux-old 0.11版本的内核源码下载: https...://github.com/KrisJiaqiXie/linux_kernel_study 好了,下面我开始大体先讲述linux内核的整体框架图: 一、操作系统的框架: 在我们平时或多或少都接触到不同的操作系统...0.11版本Linux内核的组成: 在0.11版本的Linux,它主要是由五个模块组成: 进程调度模块 进程间通信模块 内存管理模块 文件系统模块 网络接口模块 图片参考Linux内核0.11完全注释...文章资料相关参考: Linux内核0.11完全注释 https://www.bilibili.com/video/BV1tQ4y1d7mo?

1K10

Linux内核设备驱动之内核的调试技术笔记整理

/****************** * 内核的调试技术 ******************/ (1)内核源代码中的一些与调试相关的配置选项 内核的配置选项中包含了一些与内核调试相关的选项,都集中在...通常,发送完oops后,内核会处于一种不稳定状态。...在某些情况下,oops会导致内核混乱,而混乱的结果就是死机,这些情况可能包括: *oops发生在持有锁的代码中 *oops发生在和硬件设备通讯的过程中 *oops在中断上下文中发生 *oops发生在idle...进程(0)或init进程(1),因为内核没有这两个进程没法工作 如果oops在其他进程运行时发生,内核会杀死该进程并尝试着继续运行。...debug_check){ printk(KERNEL_DEBUG "provide some info\n"); dump_stack(); } 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值

2.1K41

我的Linux内核学习之路

刚开始接触Linux的时候, 并没有想学习内核知识, 只是想尝试着使用它。 所以就读了一些基础性的, 偏应用的书籍。 读的第一本书当然是《鸟哥的Linux私房菜》啦。...正是这本书, 促使我继续学习Linux内核。 以我当时的水平(其实现在水平也不高), 看《Android系统源代码情景分析》这本书真是太难了, 很多讲的都是Linux内核相关的东西。...因为看不懂, 所以下定决心好好学习Linux内核。...但是我还会继续学习, 继续读《Linux内核源代码情景分析》, 继续读《深入理解Linux内核》, 继续读《深入Linux内核架构》。...其实关于Linux内核的知识, 早就想写一写了, 无奈腹中空空, 水平有限, 确实写不出来。 写到这里, 我目前所走的Linux学习之路就写完了。

39930

Linux 内核通用链表学习小结

描述 在linux内核中封装了一个通用的双向链表库,这个通用的链表库有很好的扩展性和封装性,它给我们提供了一个固定的指针域结构体,我们在使用的时候,只需要在我们定义的数据域结构体中包含这个指针域结构体就可以了...传统的链表结构 struct node{ int key; int val; node* prev; node* next; } linux 内核通用链表库结构 提供给我们的指针域结构体...反推结构体首地址 举个例子 这个例子包括简单的增、删、遍历 #include #include #include <linux...内核提供的这个通用链表库里面还有很多其他的接口,这里没有详细的一一举例,有兴趣的可以自己去看看,在源码包 include/linux/list.h 文件里面,不过通过阅读一些源代码确实对我们也有很大的提高...以上就是本文的全部内容,希望对大家的学习有所帮助。

1.2K21

Linux内核学习经验总结

开篇 学习内核,每个人都有自己的学习方法,仁者见仁智者见智。以下是我在学习过程中总结出来的东西,对自身来说,我认为比较有效率,拿出来跟大家交流一下。 内核学习,一偏之见;疏漏难免,恳请指正。...根据自己的学习经验,刚开始学习内核的时候,我认为要做的是在自己的脑海中建立起内核的大体框架,理解各个子系统的设计理念和构建思想,这些理念和思想会从宏观上呈献给你清晰的脉络,就像一个去除了枝枝叶叶的大树的主干...《深入理解linux虚拟内存》(2.4内核版本),LDD3,《深入理解linux网络技术内幕》,几乎每一个子系统都需要一本书的容量去讲解,所以说,刚开始学习不宜对某个模块太过深入,等对各个子系统都有所了解了...内核相当复杂,学习起来很不容易,但是当你学习到一定程度,你会发现,如果自己打算写内核代码,到最后要关注的仍然是API接口,只不过这些API绝大部分是跨平台的,满足可移植性。...the Linux Kernel 3rd PLKA          Professional Linux Kernel Architecture UML            User Mode Linux

88820

Linux 内核学习经验总结

来源:Linux爱好者 ID:LinuxHub 开篇 学习内核,每个人都有自己的学习方法,仁者见仁智者见智。以下是我在学习过程中总结出来的东西,对自身来说,我认为比较有效率,拿出来跟大家交流一下。...内核学习,一偏之见;疏漏难免,恳请指正。...根据自己的学习经验,刚开始学习内核的时候,我认为要做的是在自己的脑海中建立起内核的大体框架,理解各个子系统的设计理念和构建思想,这些理念和思想会从宏观上呈献给你清晰的脉络,就像一个去除了枝枝叶叶的大树的主干...《深入理解linux虚拟内存》(2.4内核版本),LDD3,《深入理解linux网络技术内幕》,几乎每一个子系统都需要一本书的容量去讲解,所以说,刚开始学习不宜对某个模块太过深入,等对各个子系统都有所了解了...内核相当复杂,学习起来很不容易,但是当你学习到一定程度,你会发现,如果自己打算写内核代码,到最后要关注的仍然是API接口,只不过这些API绝大部分是跨平台的,满足可移植性。

2K21

Linux内核设备驱动之内核的时间管理笔记整理

/****************** * linux内核的时间管理 ******************/ (1)内核中的时间概念 时间管理在linux内核中占有非常重要的作用。...相对于事件驱动而言,内核中有大量函数是基于时间驱动的。 有些函数是周期执行的,比如每10毫秒刷新一次屏幕; 有些函数是推后一定时间执行的,比如内核在500毫秒后执行某项任务。...为此,内核提供了两个结构体,都定义在: struct timeval { time_t tv_sec; /* seconds */ suseconds_t tv_usec...与前面几种延迟方法不同,内核定时器并不会阻塞当前进程,启动一个内核定时器只是声明了要在未来的某个时刻执行一项任务,当前进程仍然继续执行。...总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对ZaLou.Cn的支持。如果你想了解更多相关内容请查看下面相关链接

2.5K31

Linux 内核Linux 内核源码结构 ( 下载 Linux 内核源码 | 使用 VSCode 阅读 Linux 内核源码 )

文章目录 一、下载 Linux 内核源码 二、使用 VSCode 阅读 Linux 内核源码 一、下载 Linux 内核源码 ---- 参考 【Linux 内核】编译 Linux 内核 ① ( 下载指定版本的...Linux 内核源码 | Linux 内核版本号含义 | 主版本号 | 次版本号 | 小版本号 | 稳定版本 ) 博客 , 下载 Linux 5.6.18 版本的内核源码 ; 5.x 内核源码下载地址...: https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/ Linux 内核 5.6.18 版本 : https://mirrors.edge.kernel.org...参考 【错误记录】解压 Linux 内核报错 ( Can not create symbolic link : 客户端没有所需的特权 | Windows 中配置 7z 命令行执行解压操作 ) 博客 ;...不同版本的 Linux 内核 区别 : 系统调用 : 其系统调用是相同的 , 新的版本可能会增加新的系统调用 ; 设备文件 : 各内核版本的设备文件都是相同的 , 但是 内部接口 可能不同 ; 二、使用

23.1K32

读书笔记|Linux内核设计与实现

这本书属于学习Linux内核原理必读推荐书目之一!...对Linux内核的设计原理进行了细致的说明,也有具体实现部分的介绍,结合源码能很好的理解Linux内核; 在简单翻了一遍之后,带着如下几个疑问,整理了下相关知识点: 1、内核是什么时候加载运行的; 2、...应用程序、内核和硬件的关系; 3、进程管理、内存管理和进程地址空间; 其实书上的知识还是那些,可能不同阶段去理解,原来没什么感觉,现在看来,一切都变得那么明朗起来,所以说对操作系统的理解和学习是打通任督二脉的事情...根据《Linux内核设计与实现》说明,CPU在某个任何特定的时间点上的活动必然概括为下列三种之一: 运行于用户空间,执行用户进程; 运行于内核空间,处于进程上下文,代表某个特定的进程执行; 运行于内核空间...Linux设备驱动作为一个linux内核模块存在,模块都有2个接口函数,模块初始化函数和模块退出函数。 上面提到的驱动程序的注册。一般是由模块初始化函数来实现的。

96320

Linux 内核Linux 内核源码结构 ( 下载 Linux 内核源码 | 使用 VSCode 阅读 Linux 内核源码 )

文章目录 一、下载 Linux 内核源码 二、使用 VSCode 阅读 Linux 内核源码 一、下载 Linux 内核源码 ---- 参考 【Linux 内核】编译 Linux 内核 ① ( 下载指定版本的...Linux 内核源码 | Linux 内核版本号含义 | 主版本号 | 次版本号 | 小版本号 | 稳定版本 ) 博客 , 下载 Linux 5.6.18 版本的内核源码 ; 5.x 内核源码下载地址...: https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/ Linux 内核 5.6.18 版本 : https://mirrors.edge.kernel.org...不同版本的 Linux 内核 区别 : 系统调用 : 其系统调用是相同的 , 新的版本可能会增加新的系统调用 ; 设备文件 : 各内核版本的设备文件都是相同的 , 但是 内部接口 可能不同 ; 二、使用...按钮 , 此时就可以在 VSCode 中阅读 Linux 内核源码 ;

21.2K30

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券