自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

数据挖掘及搜索专栏

点点滴滴,不轻言弃,努力终归大海..

  • 博客(90)
  • 收藏
  • 关注

转载 多核计算中多线程的退出算法

多核基本意味着多线程,那么在多线程处理中有一个比较棘手的问题:当存在一些常驻的线程访问的共享数据时,退出时必须先结束这些常驻线程才能对共享资料进行释放操作。否则,先释放这些共享资源,后面的常驻线程访问这些已经释放了的共享数据时,导致程序异常。比如下面的情况:              分析上述例子可以发现,问题出在当释放掉链表后,访问链表的线程依然存在,怎样才能在释放链表前让其

2012-04-28 09:34:44 562

原创 linux内核分析笔记----页高速缓存和页回写

说句真的,也缓存我听的都少,虽然看了很多。页高速缓存是linux内核实现的一种主要磁盘缓存,它主要用来减少对磁盘的IO操作,具体地讲,是通过把磁盘中的数据缓存到物理内存中,把对磁盘的访问变为对物理内存的访问。为什么要这么做呢?一,速度;二临时局部原理。有关这两个概念,相信熟悉操作系统的我们不会太陌生。页高速缓存是由RAM中的物理页组成的,缓存中的每一页都对应着磁盘中的多个块。每当内核开始执行一个页

2012-12-11 17:47:46 1593

原创 linux内核分析笔记----内核可移植性

关于linux内核的可移植性我不用多说,现在的linux操作系统,你装系统时应该很明白的知道了,很少说(至少我没见到)不兼容不能装的问题。今天就来说说这个问题:      1.字节和数据类型      能够由机器一次就完成处理的数据被称为字,字指位的数目。所以我们常听到机器是多少位的时候,就是指该机的字长。处理器通用寄存器的大小和它的字长是相同的。C语言定义的long类型总对等于机器字长。对于支持

2012-12-11 17:47:43 1413

原创 linux内核分析笔记----进程地址空间

前边我已经说过了内核是如何管理物理内存。但事实是内核是操作系统的核心,不光管理本身的内存,还要管理进程的地址空间。linux操作系统采用虚拟内存技术,所有进程之间以虚拟方式共享内存。进程地址空间由每个进程中的线性地址区组成,而且更为重要的特点是内核允许进程使用该空间中的地址。通常情况况下,每个进程都有唯一的地址空间,而且进程地址空间之间彼此互不相干。但是进程之间也可以选择共享地址空间,这样的进程就

2012-12-11 17:47:41 1473

原创 linux内核分析笔记----块I/O层

如果您记性好的话,应该记得我在linux设备驱动实例帖中说的最多的就是字符设备驱动程序,那么今天的块I/O层是一个和字符设备驱动相对应的设备。两者最根本的区别就是看它们能否被随机访问,换句话说就是看它们能否在访问设备时从一个位置随意地调到另外一个位置,如果可以就是块设备,否则就字符设备。       块设备中最小的可寻址单元是扇区。扇区的大小一般是2的整数倍,最常见的大小是512个字节。扇区的大小

2012-12-11 17:47:38 1813

原创 linux内核分析笔记----虚拟文件系统(下)

接着上次的来,我今天讲虚拟文件系统剩下的一点知识.       3.目录项对象.目录项的概念上节已经说了,我就不多说.目录项中也可包括安装点.在路径/mnt/cdrom/foo中,/,mnt,cdrom都属于目录项对象。目录项由dentry结构体表示,定义在文件linux/dcache.h中,描述如下:struct dentry { atomic_t

2012-12-11 17:47:36 1363

原创 linux内核分析笔记----虚拟文件系统(上)

虚拟文件系统,也不知道大家听过没有,反正我是听过了!我们知道在计算机行业,很多东西都不是一定有个官方说:朋友,我最大,你们做的东西,都要是这个样子,否则是非法的。事实上,很多东西都是靠的一种实力,通过实力来慢慢在人们心中成为既定事实。这个事实同样是没有官方的。好了,问题来了,没有官方,就没有标准,没有标准就没有统一,没有统一那就是三国时代,混战当道也!       怎么办?特别是百花争鸣的文件系统

2012-12-11 17:47:33 1689

原创 linux内核分析笔记----内存管理

内存管理,不用多说,言简意赅。在内核里分配内存还真不是件容易的事情,根本上是因为内核不能想用户空间那样奢侈的使用内存。       先来说说内存管理。内核把物理页作为内存管理的基本单位。尽管处理器的最小可寻址单位通常是字,但是,内存管理单元MMU通常以页为单位进行处理。因此,从虚拟内存的交代来看,页就是最小单位。内核用struct  page(linux/mm.h)结构表示系统中的每个物理页:st

2012-12-11 17:47:31 1380

原创 linux内核分析笔记----定时器和时间管理

在这一次里,主要讲讲和时间相关的东西,这个我们都比较熟悉,我就直接如主题。       首先要明白两个概念:系统定时器和动态定时器。周期性产生的事件都是有系统定时器驱动的,这里的系统定时器是一种可编程硬件芯片,它能以固定频率产生中断。该中断就是定时器中断,它所对应的中断处理程序负责更新系统时间,也负责执行需要周期行运行的任务。系统定时器和时钟中断处理程序是Linux系统内核管理机制中的中枢。动态定

2012-12-11 17:47:28 1245

原创 linux内核分析笔记----内核同步

内核同步讲的比较多了,我也就不太啰嗦了,先说一些概念,然后就是方法。        同步就是避免并发和防止竞争条件。有关临界区的例子我就不举了,随便一本操作系统的书上都有。锁机制的提出也算解决了一些问题,我们待会再说,现在只要知道锁的使用是自愿的,非强制的。linux自身也提供了几种不同的锁机制,区别主要在于当锁被争用时,有些会简单地执行等待,而有些锁会使当前任务睡眠直到锁可用为止,这个后面细说。

2012-12-11 17:47:26 1401

原创 linux内核分析笔记----上半部与下半部(下)

接着上节的来,我们在上节说了软中断和tasklet,那这最后就是工作队列了哦..        工作队列和前面讨论的其他形式都不相同,它可以把工作推后,交由一个内核线程去执行----该工作总是会在进程上下文执行。这样,通过工作队列执行代码能占尽进程上下文的所有优势,最重要的就是工作队列允许重新调度甚至是睡眠。相比较前边两个,这个选择起来就很容易了。我说过,前边两个是不允许休眠的,这个是允许休眠的,

2012-12-11 17:47:23 1361

原创 linux内核分析笔记----上半部与下半部(上)

嗨,嗨,如果您记性好的话,我在上一篇博客中提到过这样一件事:中断处理是分为两个部分:中断处理程序是上半部,它接收到一个中断,就立即执行,但只做有严格时限的工作;而另外被叫做下半部的另外一个部分主要做被允许能稍后完成的工作。这个下半部正是今天的重点。        下半部的任务就是执行与中断处理密切相关但中断处理程序本生身不执行的任务。最好情况当然是中断处理程序把所有的工作都交給下半部执行,而自己啥

2012-12-11 17:47:20 1415

原创 linux内核分析笔记----中断和中断处理程序

中断还是中断,我讲了很多次的中断了,今天还是要讲中断,为啥呢?因为在操作系统中,中断是必须要讲的..       那么什么叫中断呢, 中断还是打断,这样一说你就不明白了。唉,中断还真是有点像打断。我们知道linux管理所有的硬件设备,要做的第一件事先是通信。然后,我们天天在说一句话:处理器的速度跟外围硬件设备的速度往往不在一个数量级上,甚至几个数量级的差别,这时咋办,你总不能让处理器在那里傻等

2012-12-11 17:47:18 1350

原创 linux内核分析笔记----调度

调度?咋这熟悉,我们是不是常在哪里听到。没错,是的,调度我们时常听过,比如交通管制调度啦等。这不,夏天这热, 标语贴的好:相应国电电力调度,做文明市民,好别扭啊!不管了。你要是还是不懂,再啰嗦讲个事,过年回家,和漂亮的GF回家,为了张普通的硬座票还要排老久对,甚至还可能被坑拿到黄牛票,这时你嘴里咧咧的啥:XX,啥火车站,做的啥春运调度啊!唉,这次你说到点上了。        总结一下:调度就是通过

2012-12-11 17:47:15 1380

原创 linux内核分析笔记----进程管理

进程和线程的概念我就不讲了。总之,你记着:内核调度的对象是线程,而不是进程。linux系统中的线程很特别,它对线程和进程并不做特别区分。进程的另外一个名字叫任务(task).我和作者一样,习惯了把用户空间运行的程序叫做进程,把内核中运行的程序叫做任务。      内核把进程存放在叫做任务队列(task list)的双向循环链表中,链表中的每一项都是类型为task_struct,名称叫做进程描述

2012-12-11 17:47:13 1294

原创 linux内核分析笔记----系统调用

在Linux中,系统调用是用户空间访问内核的唯一手段,它们是内核唯一的合法入口。实际上,其他的像设备文件和/proc之类的方式,最终也还是要通过系统调用进行的。       一般情况下,应用程序通过应用编程接口(API)而不是直接通过系统调用来编程,而且这种编程接口实际上并不需要和内核提供的系统调用对应。一个API定义了一组应用程序使用的编程接口。它们可以实现成一个系统调用,也可以通过调用多个

2012-12-11 17:47:10 1162

原创 记住20句话,让自己变快乐

1)说话不要有攻击性,不要有杀伤力,不夸己能,不扬人恶,自然能化敌为友。 2)一个常常看别人缺点的人,自己本身就不够好,因为他没有时间检讨他自己。 3)是非天天有,不听自然无,是非天天有,不听还是有,是非天天有,看你怎么办。 4)如果你真的爱他,那么你必须容忍他部分的缺点。 5)要克服对死亡的恐惧,你必须要接受世上所有的人都会死去的观念。 6)虽然你讨厌一个人,但却又能发觉他的优点好处,像这样子有

2012-12-11 17:47:08 1280

原创 想象之中

想象之中 雨过一道彩虹抬起了头 瑟瑟灰色天空想象之中 付出会有结果毫无保留 信奉你的承诺想象之中 这次要爱很久我领略过 你眼里的温柔热恋以后 你忽然的冰冻判若两人 丢给我去承受想象中 很不同想象中一切都和后来不同我承认曾经那么心动你没想象中那么恋旧回忆换不回你的温柔最后也不是故作冷漠转过头我怎么有一滴泪落 我没想象中那么脆弱分开后形容

2012-12-11 17:47:05 1150

原创 今天你要嫁给我

春暖的花开带走冬天的感伤微风吹来浪漫的气息每一首情歌忽然充满意义我就在此刻突然见到你春暖的花香带走冬天的饥寒微风吹来意外的爱情鸟儿的高歌拉近我们距离我就在此刻突然爱上你听我说手牵手跟我一起走创造幸福的生活昨天你来不及明天就会可惜今天嫁给我好吗jolin in the housedt(david tao) in the house

2012-12-11 17:47:02 1335

原创 工作了?人与人之间的艺术

1、去别人家做客,当主人的话可多可少,甚至经常劝你喝茶或提建议看看电视时,你就该告辞了。人总是在感到无话可说时,才提醒别人做一些无关紧要的事。再待下去,你可能就不受欢迎了。2、正在对上司汇报工作,他的眼睛没有专注地看着你,或者他的手指不经意的在桌子上扣几下,很可能他已对你的汇报不满意了。如果你进去时,他脚正在桌子下无聊地晃动,你说话间,他的脚忽然间停止了晃动,那他已经对你的话产生了浓厚的兴趣。 3

2012-12-11 17:47:00 1235

原创 有理想的程序员必须知道的15件事

作为程序员,要取得非凡成就需要记住的15件事。 1.走一条不一样的路 在有利于自己的市场中竞争,如果你满足于“泯然众人矣”,那恐怕就得跟那些低工资国家的程序员们同场竞技了。 2.了解自己的公司 以我在医院、咨询公司、物流企业以及大技术公司工作的经验来看,这一点所言不虚。 不同公司的运营模式差异极大。如果你理解企业的运营模式,那你就不一样了!在这家公司中(或者对客户而言),你是参与业务运营

2012-12-11 17:46:56 1200

原创 星月神话

我的一生最美好的场景就是遇见你在人海茫茫中静静凝望着你陌生又熟悉尽管呼吸着同一天空的气息却无法拥抱到你如果转换了时空身份和姓名但愿认得你眼睛千年之后的你会在哪里身边有怎样风景我们的故事并不算美丽却如此难以忘记尽管呼吸着同一天空的气息却无法拥抱到你如果转换了时空身份和姓名但愿认得你眼睛千年之后的你会在哪里身边有怎样风景

2012-12-11 17:46:54 335

原创 Linux内核开发之内存与I/O访问(六)

“小王,再告诉你一个好消息,今天是咱们设备驱动程序核心基础理论的最后一节课了,战斗就已经到了最后一刻了,开心不”我眉飞色舞的对小王说。 “嗯,开心,我挣扎许久了,终于结束了,只是..”小王伤感的说“只是我觉得怎么能一下就没了呢, 心里空荡荡的”. “没关系的…”看着小王噘着嘴调皮而又可爱的样子,我也心软了”核心的理论是讲完了,但你不是没动过手吗,还有很多路要走呢..我还舍…”我一把蒙住自己的嘴.

2012-12-11 17:46:52 289

原创 Linux内核开发之内存与I/O访问(五)

“小王,告诉你一个好消息,最难理解的部分不知不觉中已经讲完了,今天的课程就简单多了,而且最重要的是咱们的Linux设备驱动核心理论课也差不多了…” “最难的部分?已经讲完了?我咋没感觉呢..你讲的真是太好了,太通俗易懂了,太..”小王调皮的说。 “切,就你嘴甜,我还不知道你啊,小脑筋..”我白了小王一样。    那么今天呢?今天就讲讲IO内存静态映射。在将Linux移植到目标电路板中,通常会建立外

2012-12-11 17:46:49 308

原创 Linux内核开发之内存与I/O访问(四)

时间:晚上7点 地点:寝室中.. “小王,今天就不多话了,接着昨天没讲完的,不然连不起来了,都..”我催促着。   上节讲到kmalloc()申请的内存若要被映射到用户空间可以通过mem_map_reserve()设置为保留后进行。具体怎么操作呢,给你一个模版吧: // 内核模块加载函数int __init kmalloc_map_init(void){ ../申请设备号,添加c

2012-12-11 17:46:47 278

原创 Linux内核开发之内存与I/O访问(三)

“小王,不瞒你说,我现在是悲喜交加啊,悲的是:这最后一章,我讲的是胆颤心惊(以前自己都没学好,现在也算还账了),喜的是每讲一张,我知道离结束就近了一点,赶快把这个东西过掉,进入下一环节,那又是我牛皮吹破天的时代了”看着小王期盼和怀疑的眼神,我,昔日的风采也不见了。 “没事的,小涛哥,其实说真的,不是我安慰你哈,从开始我什么都不懂,到现在我也算个入门级的高手了,都是你一手带过来的,我已经对你推崇备至

2012-12-11 17:46:44 305

原创 Linux内核开发之内存与I/O访问(二)

“小涛哥,咱们说Linux设备驱动程序说了那么久,怎么从来不说实际设备呢,顶多就说了下内存,总感觉驱动程序是和设备分离的,怎么关联起来..”小王思索着。 “不错,这也正是这次讲课的内容,设备I/O端口与I/O内存的访问”我啊,禁不住拍拍她的头。   对于一块实际的设备而言,通常会提供一组寄存器来用于控制设备,读写设备和获取设备状态,也就是我们常说的控制寄存器,数据寄存器和状态寄存器。这些寄存器可能

2012-12-11 17:46:42 306

原创 Linux内核开发之内存与I/O访问(一)

“小王,今天咱们开始讲有关内存和I/O访问的内容,心里先要有点低,这部分内容还是有点烦,有点难的哦”说着话,我心里都没底,怕吓着小王,不瞒你说,当时看这部分,我可是没少费劲。 “哦,那咋办,不能不学是不?没事,有小涛哥在,俺就不怕”小王信心十足的说。 “哦!看不出来,还让你来安慰我了”看着小王这充满信心的样子,我也没啥顾虑了。好了,深吸一口气,开始今天的课程。    我们知道,在X86中,有I/O

2012-12-11 17:46:39 287

原创 Linux内核开发之中断与时钟(四)

“小王,小王,今天可是这一章节最后一节了,知识点咱们前边都讲过了,今天主要是给你用前边的东西讲一个实际例子---秒字符设备驱动程序”   这个驱动程序会在被打开的时候初始化一个定时器并将其添加到内核定时器链表中,每秒输出一次当前的jiffies,这意味着,定时器处理函数中每次都要修改新的expires。不多说了,看代码分析:#include …//必要的系统头文件#define SECOND_MA

2012-12-11 17:46:37 260

原创 美妙的诗文语句(不断更新中…)

1.天下之物,莫柔弱于水,然而大不可及,深不可测 2.人像一个容器,装下这个就盛不下那个,人又像一台机器干了这个就干不了那个。人的一生时间和精力都是有限的,想了做了好的就没有精力和时间去想去做坏的,想了做了善的就不会有恶的,用在正的地方就不会有错的,因为一心不能二用,人也不可能有分身术。 3.遇到你真正爱的人时:要努力争取和他相伴一生的机会,因为当他离去时,一切都来不及了;遇到可相信的朋友时:要好

2012-12-11 17:46:34 324

原创 Linux内核开发之中断与时钟(三)

晚上7点10分.. “小涛哥,这章不是叫Linux设备驱动程序之中断与时钟,前边你讲了中断,还给了我很多模版,我都看懂了,这次是不是要开始讲时钟了..” “真聪明,越来越喜欢你这聪明的样子了,说的不错,今天就要开始一个新的模块--内核时钟”我很少夸人,为啥今天夸她呢了,呵呵.   定时器,意思大家都明白,我就不说了,要是不明白,把它想成个闹钟总可以吧..   定时器分为硬件和软件定时器,软件定时器

2012-12-11 17:46:32 280

原创 Linux内核开发之中断与时钟(二)

“小涛哥,快醒醒,快醒醒..”小王使劲推着睡梦中的我,“你不是说今天要讲昨天有关的典型模板实例吗…” “啊?小姐啊,现在才早上8点,还让人睡觉不,别吵”我一头钻进被子里说。 “不管,谁让你昨天不说完,还卖个小关子,害我昨天晚上都没睡好,想了一晚上…” 我揉揉蒙蒙的眼说:“行,权当看在你渴求的心情上,但只此一次,下不为例,我还想好好睡懒觉呢..” 昨天我们讲了有关中断方面的东西,鉴于小王你不太懂,我

2012-12-11 17:46:29 245

原创 Linux内核开发之中断与时钟(一)

“小王,醒醒,开始上课了,今天咱们开始讲中断,这可是高级东西,错过不补哈”我使劲推着睡梦中的小王。 “嗯?感情好啊,快点,快点”小王一听有新东西讲,像打了鸡血似的兴奋,连我都怀疑起她是不是性格中喜新厌旧。 不管那么多了,我讲我的,她厌她的…   啥叫中断?就是指cpu在执行过程中,出现了某些突发事件时CPU必须暂停执行当前的程序,转去处理突发事件,处理完毕后CPU有返回原程序被中断的位置并继续执行

2012-12-11 17:46:27 270

原创 Linux内核开发之异步通知与异步I/O(五)

“小王呢,今天开始讲AIO与设备驱动,这也是设备驱动通知与异步IO的最后一节了,下次咱们就要开始讲更高级的东西,比如中断啦,时钟等”   在Linux内核中,每个IO请求都对应一个kiocb结构体,其ki_filp成员指向对应的file指针,通过is_sync_kiocb可以判断某Kiocb时候为同步IO请求,如果非真,表示是异步IO请求。   块设备和网络设备本身就是异步的。只有字符设备驱动必须

2012-12-11 17:46:24 359

原创 Linux内核开发之异步通知与异步I/O(四)

“小王,接着昨天的来,你知道吗?在异步IO中,什么可以用来做为AIO的通知呢?”我用渴求的眼神望着她. "啊?那我咋知道,你说的我能记住就不错了,让我发明创造,我可是不会."小王委屈道。 “笨死了,我前边花了那么多的时间来讲信号之类的东西,联想一下信号作为异步通知的信号,也想的出来啊,告诉你,我当年用脚肢头都能想到,可你..真让我失望”我叹气到,“算了,也不怪你了,咱们开始继续学习吧“。   先上

2012-12-11 17:46:22 262

原创 Linux内核开发之异步通知与异步I/O(三)

小王,听说过AIO没?外国人,就这样,总是爱简写,简写的结果是咱们都不认识了。所谓AIO就是Asynchronous Input/Output异步输入/输出,基本思想是允许进程发起很多的I/O操作,而不用阻塞或等待任何操作的完成,稍后或在接收到I/O操作完成的通知时,进程就可以检索I/O操作的结果。 “得得,你咋又跟我上起课来了呢,不是说好,今天CS吗?是不是跟我讲课特自信啊“小王抱怨到。 “啊?

2012-12-11 17:46:19 292

原创 Linux内核开发之异步通知与异步I/O(二)

“曾经有一份真挚的爱情摆在面前,我却不懂珍惜;曾经有一个承诺,我却倍感珍惜,今天一定要好好讲讲..” 讲讲啥,讲讲上节说的那个异步通知的例子呗,大家喜欢看代码,咋们就先上代码:struct globalfifo_dev {

2012-12-11 17:46:17 326

原创 Linux内核开发之异步通知与异步I/O(一)

“小王,听说过锦上添花吧..”我拍拍下王的头说。“还锦上添花你,为你上次提的几个东东,我是头上长包..”小王气愤地瞪着我。“啊,为啥这样呢,本来还特意拒绝了MM的月份,抽出时间打算给你说点高级的东东,看来现在是不行了”我吃惊道,“这样吧,这次就给你讲些和前边有关的东西,也不失为锦上添花不是?”。“好,我也是这么打算的,就是没好意思说,今天讲些啥呢?”小王暗淡的眼光总算闪了闪。(为啥这么

2012-12-11 17:46:14 361

原创 Linux内核开发之阻塞非阻塞IO----轮询操作

“小王,来聊聊,今天面试的情况怎么样,应该挺顺利的吧..”看着小王平淡的眉头,我问道。 “唉,别提了,你说,我的运气咋这差呢,面试前你不是给我讲了有关阻塞的问题吗,我见了面试官是吧,还跟他好好的用今天排队的例子说了有关阻塞的问题,但是..”小王哀声叹气地说到。 “别但是了,怎么啦..” “可问题是面试官压根就没打算问我有关阻塞的问题及解决方案,但是问我说:这样吧,你给我说说在Linux设备驱动中有

2012-12-11 17:46:12 232

原创 Linux内核开发之阻塞/非阻塞IO----等待对列

十一过后.. 小王也刚好即将大学毕业,现在要开始写简历,投简历,找工作了。 到了家工作单位,小王欣喜若狂,可再一看,心都凉了半截.. “咋了,小王,看你找工作,我都来了帮你大气,怕什么,不就人多点吗..”看着排到电梯口的长龙,我说(其实,我心里也害怕,可也不能说出来不是)。 “不是,你不知道,我并不怕面试上有问题,有你在,技术上还是问题吗,不相信自己还不相信你啊,我主要是怕连面试的机会都没有,你看

2012-12-11 17:46:09 338

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除