2018年2月22日

内核同步机制

摘要: 内核中用于临界区保护下的互斥机制,它包括自旋锁、原子操作和信号量,三者保证了对临界资源访问的互斥型。 1.1 内核中的互斥机制 1.1.1 自旋锁 自旋锁用在多个CPU系统中。当一个线程在一个CPU上正使用资源,而另一个线程在另一个CPU上正忙等待这个资源的时候,就会用到自旋锁来保护临界资源。在单处 阅读全文

posted @ 2018-02-22 19:33 AlanTu 阅读(430) 评论(0) 推荐(0)

进程及进程调度

摘要: 1 .1 进程结构 每个进程都具有自己的属性,用一个task_struct数据结构来表示,它包含了进程的详细信息,主要有进程标识符(PID)、进程所占的内存区域、相关文件描述符、安全信息、进程环境、信号处理、资源安排、同步处理状态几个方面。 数组task包含指向系统中所有task_struct结构的 阅读全文

posted @ 2018-02-22 19:32 AlanTu 阅读(476) 评论(0) 推荐(0)

系统级I/O

摘要: 一、UNIX I/O 在UNIX系统中有一个说法,一切皆文件。所有的I/O设备,如网络、磁盘都被模型化为文件,而所有的输入和输出都被当做对相应文件的读和写来执行。这种将设备映射为文件的方式,允许UNIX内核引出一个简单、低级的应用接口,称为UNIX I/O,这使得所有的输入和输出都能以一种统一且一致 阅读全文

posted @ 2018-02-22 16:44 AlanTu 阅读(332) 评论(0) 推荐(0)

初探Linux进程管理机制

摘要: 一 、进程的概念和分类1.进程的概念 Linux是一个多用户多任务的操作系统。多用户是指多个用户可以在同一时间使用同一个linux系统;多任务是指在Linux下可以同时执行多个任务,更详细的说,linux采用了分时管理的方法,所有的任务都放在一个队列中,操作系统根据每个任务的优先级为每个任务分配合适 阅读全文

posted @ 2018-02-22 16:40 AlanTu 阅读(1512) 评论(0) 推荐(0)

浅谈Linux的内存管理机制

摘要: 一 物理内存和虚拟内存 我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概念。物理内存就是系统硬件提供的内存大小,是真正的内存,相对于物理内存,在linux下还有一个虚拟内存的概念,虚拟内存就 阅读全文

posted @ 2018-02-22 16:40 AlanTu 阅读(12371) 评论(0) 推荐(1)

如何恢复 Linux删除的文件

摘要: 原理及普通文件的恢复 要想恢复误删除的文件,必须清楚数据在磁盘上究竟是如何存储的,以及如何定位并恢复数据。本文从数据恢复的角度,着重介绍了 ext2 文件系统中使用的一些基本概念和重要数据结构,并通过几个实例介绍了如何手工恢复已经删除的文件。最后针对 ext2 现有实现存在的大文件无法正常恢复的问题 阅读全文

posted @ 2018-02-22 16:39 AlanTu 阅读(40496) 评论(0) 推荐(0)

Linux内核中锁机制之RCU、大内核锁

摘要: 在上篇博文中笔者分析了关于完成量和互斥量的使用以及一些经典的问题,下面笔者将在本篇博文中重点分析有关RCU机制的相关内容以及介绍目前已被淘汰出内核的大内核锁(BKL)。文章的最后对《大话Linux内核中锁机制》系列博文进行了总结,并提出关于目前Linux内核中提供的锁机制的一些基本使用观点。 十、R 阅读全文

posted @ 2018-02-22 16:37 AlanTu 阅读(4591) 评论(0) 推荐(0)

Linux内核中锁机制之完成量、互斥量

摘要: 在上一篇博文中笔者分析了关于信号量、读写信号量的使用及源码实现,接下来本篇博文将讨论有关完成量和互斥量的使用和一些经典问题。 八、完成量 下面讨论完成量的内容,首先需明确完成量表示为一个执行单元需要等待另一个执行单元完成某事后方可执行,它是一种轻量级机制。事实上,它即是为了完成进程间的同步而设计的, 阅读全文

posted @ 2018-02-22 16:36 AlanTu 阅读(1333) 评论(0) 推荐(0)

Linux内核中锁机制之内存屏障、读写自旋锁及顺序锁

摘要: 在上一篇博文中笔者讨论了关于原子操作和自旋锁的相关内容,本篇博文将继续锁机制的讨论,包括内存屏障、读写自旋锁以及顺序锁的相关内容。下面首先讨论内存屏障的相关内容。 三、内存屏障 不知读者是是否记得在笔者讨论自旋锁的禁止或使能的时候,提到过一个内存屏障函数。OK,接下来,笔者将讨论内存屏障的具体细节内 阅读全文

posted @ 2018-02-22 16:35 AlanTu 阅读(2491) 评论(0) 推荐(0)

Linux内核中锁机制之信号量、读写信号量

摘要: 在上一篇博文中笔者分析了关于内存屏障、读写自旋锁以及顺序锁的相关内容,本篇博文将着重讨论有关信号量、读写信号量的内容。 六、信号量 关于信号量的内容,实际上它是与自旋锁类似的概念,只有得到信号量的进程才能执行临界区的代码;不同的是获取不到信号量时,进程不会原地打转而是进入休眠等待状态。它的定义是in 阅读全文

posted @ 2018-02-22 16:35 AlanTu 阅读(629) 评论(0) 推荐(0)

Linux内核中锁机制之原子操作、自旋锁

摘要: 很多人会问这样的问题,Linux内核中提供了各式各样的同步锁机制到底有何作用?追根到底其实是由于操作系统中存在多进程对共享资源的并发访问,从而引起了进程间的竞态。这其中包括了我们所熟知的SMP系统,多核间的相互竞争资源,单CPU之间的相互竞争,中断和进程间的相互抢占等诸多问题。 通常情况下,如图1所 阅读全文

posted @ 2018-02-22 16:34 AlanTu 阅读(2530) 评论(0) 推荐(0)

page_address()函数分析

摘要: 由于X86平台上面,内存是划分为低端内存和高端内存的,所以在两个区域内的page查找对应的虚拟地址是不一样的。一. x86上关于page_address()函数的定义在include/linux/mm.h里面,有对page_address()函数的三种宏定义,主要依赖于不同的平台:首先来看看几个宏的 阅读全文

posted @ 2018-02-22 16:33 AlanTu 阅读(3491) 评论(0) 推荐(0)

Linux内核jiffies简介

摘要: 在LINUX的时钟中断中涉及至二个全局变量一个是xtime,它是timeval数据结构变量,另一个则是jiffies,首先看timeval结构struct timeval{time_t tv_sec; /***second***/susecond_t tv_usec;/***microsecond* 阅读全文

posted @ 2018-02-22 16:31 AlanTu 阅读(3391) 评论(0) 推荐(0)

pdflush机制

摘要: 在做进程安全监控的时候,拍脑袋决定的,如果发现一个进程在D状态时,即TASK_UNINTERRUPTIBLE(不可中断的睡眠状态),时间超过了8min,就将系统panic掉。恰好DB组做日志时,将整个log缓存到内存中,最后刷磁盘,结果系统就D状态了很长时间,自然panic了,中间涉及到Linux的 阅读全文

posted @ 2018-02-22 16:27 AlanTu 阅读(938) 评论(0) 推荐(0)

从ext2文件系统上读出超级块

摘要: 概述 本篇博客中,我们将仔细分析如何从格式化为ext2文件系统的磁盘中读取超级块并填充内存超级块结构,每次将一个格式化了ext2文件系统的磁盘(分区)挂载到挂载点的时候会调用该方法,该方法在操作系统中的实现主要是函数ext2_fill_super。 实现 在ext2系列之前的博客中我们描述了ext2 阅读全文

posted @ 2018-02-22 16:25 AlanTu 阅读(1043) 评论(0) 推荐(0)

ext2文件系统

摘要: 2.1. 总体存储布局 我们知道,一个磁盘可以划分成多个分区,每个分区必须先用格式化工具(例如某种mkfs命令)格式化成某种格式的文件系统,然后才能存储文件,格式化的过程会在磁盘上写一些管理存储布局的信息。下图是一个磁盘分区格式化成ext2文件系统后的存储布局。 图 29.2. ext2文件系统的总 阅读全文

posted @ 2018-02-22 16:25 AlanTu 阅读(418) 评论(0) 推荐(0)

ext2磁盘布局

摘要: 概述 本篇博客主要关注ext2文件系统的磁盘布局,即ext2会在格式化时将磁盘划分成什么样子。 ext2磁盘布局 任何Ext2分区中的第一个块从不受Ext2文件系统的管理,因为这一块是为分区的引导扇区所保留的。Ext2分区的其余部分被分割成块组(block group),每个块组的分布图如下图1所示 阅读全文

posted @ 2018-02-22 16:24 AlanTu 阅读(1482) 评论(0) 推荐(0)

c++拷贝构造函数详解

摘要: 一、什么是拷贝构造函数 首先对于普通类型的对象来说,它们之间的复制是很简单的,例如: int a=100; int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。 下面看一个类对象拷贝的简单例子。 #include<iostream> using namespace 阅读全文

posted @ 2018-02-22 16:14 AlanTu 阅读(169306) 评论(10) 推荐(25)

C++构造函数

摘要: 构造函数 每个类分别定义了它的对象被初始化的方式,类通过一个或几个特殊的成员函数来控制其对象的初始化过程,这些函数叫做构造函数。构造函数的任务是初始化类对象的数据成员,无论何时只要类的对象被创建,就会执行构造函数。 构造函数的名字和类名相同。和其他函数不一样的是,构造函数没有返回类型;除此之外类似于 阅读全文

posted @ 2018-02-22 15:59 AlanTu 阅读(647) 评论(0) 推荐(0)

复制构造函数与赋值函数

摘要: 构造函数、析构函数、赋值函数是每个类最基本的的函数。每个类只有一个析构函数和一个赋值函数。但是有很多构造函数(一个为复制构造函数,其他为普通构造函数。对于一个类A,如果不编写上述四个函数,c++编译器将自动为A产生四个默认的函数,即: A(void) //默认无参数构造函数 A(const A &a 阅读全文

posted @ 2018-02-22 15:55 AlanTu 阅读(2208) 评论(0) 推荐(0)

2018年2月21日

计算机科学基础知识(六)理解栈帧

摘要: 一、前言 本文以一个简单的例子来描述ARM linux下的stack frame。 本文也是对tigger网友问题的回复。 二、源代码 #include <stdio.h> static int static_interface_leaf( int x, int y ) { int tmp0 = 0 阅读全文

posted @ 2018-02-21 22:15 AlanTu 阅读(1927) 评论(0) 推荐(0)

傅立叶级数(Fourier Series)和周期现象

摘要: 一、前言 如果你仔细观察,工作和生活中充满了周期现象:旁边linux driver工程师在调试audio driver的时候播放的1kHz的正弦信号,周末去公园游玩,游船推开水面的波纹,硬件工程师调试硬件电路的时候,示波器显示出来的晶振方波信号…… 所谓周期现象具体包括时间上的周期现象和空间上的周期 阅读全文

posted @ 2018-02-21 22:07 AlanTu 阅读(2515) 评论(0) 推荐(0)

计算机科学基础知识(一)The Memory Hierarchy

摘要: 一、前言 最近一个问题经常萦绕在我的脑海:一个学习电子工程的机械师如何称为优秀的程序员?(注:本文作者本科学习机械设计,研究生转到电子工程系学习,毕业后却选择了系统程序员这样的职业)。经过思考,我认为阻挡我称为一个优秀程序员的障碍是计算机科学的理论知识。自然辩证法告诉我们:理论源于实践,又指导实践, 阅读全文

posted @ 2018-02-21 22:06 AlanTu 阅读(962) 评论(0) 推荐(0)

基本电路概念(二)什么是电容?

摘要: 一、前言 我儿子对电路板有一种近乎疯狂的痴迷,每次周末加班的时候,他总是恳求我带他一起到公司,就是为了能够看一看电路板、看一看电路焊接过程。为了不影响工作,我只能是找一些废旧的电路板,加上从蜗窝同学那里搜刮来的电烙铁给小朋友进行电路焊接演示。废旧电路板上有不少的器件,于是问题少年的问题就来了,芯片里 阅读全文

posted @ 2018-02-21 22:05 AlanTu 阅读(3562) 评论(0) 推荐(0)

基本电路概念(一)什么是电压?

摘要: 基本电路概念之(一):什么是电压? 作者:linuxer 发布于:2014-5-16 10:40 分类:基础学科 一、前言 我有一个奇葩儿子(4岁),经常问一些奇葩的问题。比如:为什么电子带负电?什么是电压?电路板是怎么生产的?发动机的内部结构是什么?……总之,各种问题层出不穷。有一天回家,他正和他 阅读全文

posted @ 2018-02-21 22:04 AlanTu 阅读(1364) 评论(0) 推荐(0)

Concurrency Managed Workqueue(四)workqueue如何处理work

摘要: 一、前言 本文主要讲述下面两部分的内容: 1、将work挂入workqueue的处理过程 2、如何处理挂入workqueue的work 二、用户将一个work挂入workqueue 1、queue_work_on函数 使用workqueue机制的模块可以调用queue_work_on(有其他变种的接 阅读全文

posted @ 2018-02-21 21:57 AlanTu 阅读(718) 评论(0) 推荐(0)

Concurrency Managed Workqueue(三)创建workqueue代码分析

摘要: 一、前言 本文主要以__alloc_workqueue_key函数为主线,描述CMWQ中的创建一个workqueue实例的代码过程。 二、WQ_POWER_EFFICIENT的处理 __alloc_workqueue_key函数的一开始有如下的代码: if ((flags & WQ_POWER_EF 阅读全文

posted @ 2018-02-21 21:56 AlanTu 阅读(855) 评论(0) 推荐(0)

Concurrency Managed Workqueue(二)CMWQ概述

摘要: 一、前言 一种新的机制出现的原因往往是为了解决实际的问题,虽然linux kernel中已经提供了workqueue的机制,那么为何还要引入cmwq呢?也就是说:旧的workqueue机制存在什么样的问题?在新的cmwq又是如何解决这些问题的呢?它接口是如何呈现的呢(驱动工程师最关心这个了)?如何兼 阅读全文

posted @ 2018-02-21 21:55 AlanTu 阅读(641) 评论(0) 推荐(0)

Concurrency Managed Workqueue(一)workqueue基本概念

摘要: 一、前言 workqueue是一个驱动工程师常用的工具,在旧的内核中(指2.6.36之前的内核版本)workqueue代码比较简单(大概800行),在2.6.36内核版本中引入了CMWQ(Concurrency Managed Workqueue),workqueue.c的代码膨胀到5000多行,为 阅读全文

posted @ 2018-02-21 21:54 AlanTu 阅读(654) 评论(0) 推荐(0)

Linux调度器 - deadline调度器

摘要: 一、概述 实时系统是这样的一种计算系统:当事件发生后,它必须在确定的时间范围内做出响应。在实时系统中,产生正确的结果不仅依赖于系统正确的逻辑动作,而且依赖于逻辑动作的时序。换句话说,当系统收到某个请求,会做出相应的动作以响应该请求,想要保证正确地响应该请求,一方面逻辑结果要正确,更重要的是需要在最后 阅读全文

posted @ 2018-02-21 21:42 AlanTu 阅读(4580) 评论(0) 推荐(0)

CFS调度器

摘要: 一、前言 随着内核版本的演进,其源代码的膨胀速度也在递增,这让Linux的学习曲线变得越来越陡峭了。这对初识内核的同学而言当然不是什么好事情,满腔热情很容易被当头浇灭。我有一个循序渐进的方法,那就是先不要看最新的内核,首先找到一个古老版本的内核(一般都会比较简单),将其吃透,然后一点点的迭代,理解每 阅读全文

posted @ 2018-02-21 21:40 AlanTu 阅读(1094) 评论(0) 推荐(0)

进程管理和终端驱动基本概念

摘要: 一、前言 对于任何一种OS,终端部分的内容总是令人非常的痛苦和沮丧,GNU/linux也是如此。究其原因主要有两个,一是终端驱动和终端相关的系统软件承载了太多的内容:各种虚拟终端、 伪终端、串口通信、modem、printer等。其次可能是终端和信号处理、进程关系等耦合在一起加大了理解终端驱动的难度 阅读全文

posted @ 2018-02-21 21:33 AlanTu 阅读(845) 评论(0) 推荐(0)

Linux进程概述

摘要: 一、介绍 当linux系统中的一个进程运行起来的时候,总是要访问系统的资源,访问文件或者向其他的进程发送信号。系统是否允许其进行这些操作?系统是根据什么来判断该进程的权限?这些问题是和进程信任状(process credentials)相关。 process credentials包括一系列的ID, 阅读全文

posted @ 2018-02-21 21:27 AlanTu 阅读(806) 评论(0) 推荐(0)

KASAN实现原理

摘要: 1. 前言 KASAN是一个动态检测内存错误的工具。KASAN可以检测全局变量、栈、堆分配的内存发生越界访问等问题。功能比SLUB DEBUG功能齐全并且支持实时检测。越界访问的严重性和危害性通过我之前的文章(SLUB DEBUG技术)应该有所了解。正是由于SLUB DEBUG缺陷,因此我们需要一种 阅读全文

posted @ 2018-02-21 21:09 AlanTu 阅读(8596) 评论(0) 推荐(1)

Linux内核scatterlist API介绍

摘要: 1. 前言 我们在那些需要和用户空间交互大量数据的子系统(例如MMC[1]、Video、Audio等)中,经常看到scatterlist的影子。对我们这些“非英语母语”的人来说,初见这个词汇,脑袋瞬间就蒙圈了。scatter可翻译成“散开、分散”,list是“列表”的意思,因而scatterlist 阅读全文

posted @ 2018-02-21 21:08 AlanTu 阅读(11941) 评论(0) 推荐(1)

CMA概述

摘要: 前言 本文是近期学习CMA模块的一个学习笔记,方便日后遗忘的时候,回来查询以便迅速恢复上下文。 学习的基本方法是这样的:一开始,我自己先提出了若干的问题,然后带着这些问题查看网上的资料,代码,最后整理形成这样以问题为导向的index,顺便也向笨叔叔致敬。笨叔叔写了一本书叫做《奔跑吧Linux内核》, 阅读全文

posted @ 2018-02-21 21:07 AlanTu 阅读(3628) 评论(0) 推荐(1)

2018年2月14日

Linux内核(17) - 高效学习Linux驱动开发

摘要: 这本《Linux内核修炼之道》已经开卖(网上的链接为: 卓越、当当、china-pub ),虽然是严肃文学,但为了保证流畅性,大部分文字我还都是斟词灼句,反复的念几遍才写上去的,尽量考虑到写上去的每段话能够让读者产生什么疑惑,然后也都会紧接着尽量的去进行解释清楚,中间的很多概念也有反复纠结过怎么解释 阅读全文

posted @ 2018-02-14 20:28 AlanTu 阅读(1222) 评论(0) 推荐(0)

Linux内核(16) - 高效学习Linux内核

摘要: 世界悲结束了,章鱼哥也退役了,连非诚勿扰中的拜金女也突然的少了很多。这本《Linux内核修炼之道》在卓越、当当、china-pub上也已经开卖了,虽然是严肃文学,但为了保证流畅性,大部分文字我还都是斟词灼句,反复的念几遍才写上去的,尽量考虑到写上去的每段话能够让读者产生什么疑惑,然后也都会紧接着尽量 阅读全文

posted @ 2018-02-14 20:26 AlanTu 阅读(480) 评论(0) 推荐(0)

Linux内核(15) - 方法论

摘要: 什么是方法论 方法论给人的第一感觉就是它是一个玄之又玄的很朦胧的东西,显然,学习本身就是一件很玄乎的事情,有些人整天潇潇洒洒没见怎么用心就能够获得很好的成绩,而有些人则相反,投悬梁锥刺骨也还是成绩平平收获平平。这里面很大一部分的原因就是方法论。 当然因为每个人的情况并不相同,也就没有这样一个标准的方 阅读全文

posted @ 2018-02-14 20:23 AlanTu 阅读(232) 评论(0) 推荐(0)

Linux内核(14) - 二分法与printk

摘要: 人生就是一个茶几,上面摆满了杯具。内核也是一个大茶几,不过它上面的杯具是一个个的bug。确定bug什么时候被引入是一个很关键的步骤,在这个定位bug的过程中,不论有意或无意,都会很自然地用到二分查找的方法。 二分查找法的基本原理 对于二分查找法,我们不会也不应该会感到陌生。作为一种高效的查找算法,它 阅读全文

posted @ 2018-02-14 20:22 AlanTu 阅读(448) 评论(0) 推荐(0)

导航