博客园  :: 首页  :: 联系 :: 管理

2012年12月16日

摘要: 进程调度三个组件:调度器、调度器类、上下文切换。struct task_struct { ... int prio, static_prio, normal_prio; unsignedintrt_priority; struct list_head run_list; conststruct sched_class *sched_class; struct sched_entity se; //调度器不限于调度进程,可以处理更大的实体(组调度)。因此要求调度器不直接处理进程,而是处理se. unsignedintpolicy; cpumask_t cpus_allowed; //sched_ 阅读全文

posted @ 2012-12-16 19:07 Apprentice89 阅读(1199) 评论(0) 推荐(0) 编辑

2012年12月9日

摘要: 《第二章》进程管理和调度 - 续进程管理之进程复制三个系统调用--- fork, vfork, clone。vfork不创建父进程数据的副本,fork使用了写时复制(copy-on-write)技术后,vfork已无用武之地。clone产生线程,可以对父子进程之间的共享、复制进程进行精确的控制。写时复制(copy-on-write COW)--- 并不复制整个地址空间,只复制页表,即父子进程使用相同的物理内存页。但父子进程都不能对页面写(因为是父子进程共享物理页),当父进程或者子进程需要写入时,CPU向内核报告访问错误(缺页异常),内核检查额外的数据结构,发现这是因为COW造成的,于是创建一个 阅读全文

posted @ 2012-12-09 19:23 Apprentice89 阅读(716) 评论(0) 推荐(0) 编辑

摘要: 《第二章》进程管理和调度主流的Linux内核不支持硬实时,但一些修改版本如RTLinux、Xenomai、RATI。在这些修改方案中,Linux内核作为独立进程运行,实时的工作在内核外部完成,只有当没有实时操作的时候,内核才会运行。2.5内核中引入了O(1)的调度算法,2.6.23时引入完全公平调度器(CFS)。命名空间命名空间建立了系统的不同视图,此前的每一项全局资源都必须包装到容器数据结构中,只有资源和包含该资源的命名空间组成的二元组仍然是全局唯一的。新的命名空间的创建:1. fork或者clone时,可以设定是与父进程共享命名空间还是创建新的命名空间; 2. unshare系统调用将进程 阅读全文

posted @ 2012-12-09 10:55 Apprentice89 阅读(1072) 评论(0) 推荐(0) 编辑

2012年12月8日

摘要: 《第一章》简介和概述实现策略:微内核、宏内核命名空间:全局资源具有不同的分组由于被中断的进程与中断原因没有什么关系,因此内核无权访问被中断进程用户空间的内容。页表虚拟地址的分割:页表的一个特色在于:对虚拟地址空间中不需要的区域,不必创建中间页目录或者页表,与直接使用一级页表数组的方式相比,节省了大量的内存。加速转换:1.MMU硬件支持,2.TLB硬件缓存(有些架构下TLB运转透明,有些需要内核专门处理)内存映射:内存映射是一种重要的抽象手段,可以将任意来源的数据传输到进程的虚拟地址空间,映射到的这部分虚拟地址空间可以像内存一样被操作,其上的修改会被内核自动传输到数据源。这样就可以使用相同的函数 阅读全文

posted @ 2012-12-08 09:55 Apprentice89 阅读(2846) 评论(1) 推荐(0) 编辑

2012年12月2日

摘要: 《Chapter 15 进程地址空间》是否共享地址空间几乎是进程和Linux中的线程间本质上的唯一区别。同一进程的几个线程的tassk_struct中mm域指向同一个struct mm_struct。内核线程的mm域为NULL(没有用户上下文)。VMAstruct vm_area_struct;VMA操作函数:struct vm_area_struct* find_vma(struct vm_area_struct* mm, unsigned long addr);//search in RBTreestruct vm_area_struct* find_vma_prev(struct mm_ 阅读全文

posted @ 2012-12-02 21:53 Apprentice89 阅读(381) 评论(0) 推荐(0) 编辑

2012年11月30日

摘要: 《Chapter 12 内存管理》MMU:内存管理单元,管理内存,地址转换,通常以页为单位管理。从虚存角度看,页是最小单位。struct page { unsigned long flag; //页是否脏,是否被锁定在内存 atomic_t _count; //页引用计数 atomic_t _mapcount; // unsigned long private; struct address_space *mapping; pdoff_t index; ... 阅读全文

posted @ 2012-11-30 21:18 Apprentice89 阅读(331) 评论(0) 推荐(0) 编辑

2012年11月14日

摘要: 感谢phylips@bmy的辛勤工作!Case Study GFS:Evolution on Fast-forward(译)译者:phylips@bmy 2011-8 在Google的早期开发阶段,最初的想法并没有包含一个构建新的文件系统的计划。工作依然是通过公司最早版本的爬虫和索引系统来完成,但是,事情对于核心工程师们很快变得明朗起来,除了构建一个新的系统外他们别无选择,于是GFS(Google File System)就诞生了。首先,由于Google的目标是要通过使用很多廉价的商品化硬件来构建一个大规模存储网络。因此它必须要假设组件失败是一种常态—这就意味着常规性的监控,错误检测,容... 阅读全文

posted @ 2012-11-14 10:49 Apprentice89 阅读(402) 评论(0) 推荐(0) 编辑

2012年10月31日

摘要: 《Chapter 9~10 内核同步》临界区(CS):访问共享资源的代码段。造成并发的原因:中断软中断和tasklet内核抢占睡眠及用户空间的同步对称多处理器锁的使用本身并不是难点,真正的挑战在于辨认出需要共享的数据和相应的临界区。在最开始设计代码的时候就要想到要使用锁,而不是在完成代码后再去加锁。interrupt-safe / SMP-safe / preempt-safe预防死锁的一个比较方便的方法(不能彻底解决):按顺序枷锁。死锁的四个条件:互斥(mutual exclusion),请求与保持(hold and wait),非剥夺(non-preempt),循环等待(circular 阅读全文

posted @ 2012-10-31 22:40 Apprentice89 阅读(253) 评论(0) 推荐(0) 编辑

摘要: 《Chapter 1 & 2》 1 机制与策略分离:机制(mechanism)和策略(policy):a. 机制是指需要提供什么功能,策略是指如何使用这些功能。b. 机制是实现具体功能,策略是组合已有功能。c. 机制是战术,策略是战略。策略与机制是动态与静态的关系。机制意味着固定和自动,像是一个一个的积木块。策略是组合方法,怎样使用已有的积木搭出一个作品。策略往往是在机制的基础上进行具体问题的调整。2 单内核与微内核:Linux是单内核,但吸取了微内核的诸多优点:模块化设计,内核可抢占,支持内核线程,动态装在内核模块。至今,Linux是模块化,多线程,内核本身可调度的OS,实用主义再次 阅读全文

posted @ 2012-10-31 10:05 Apprentice89 阅读(612) 评论(0) 推荐(0) 编辑

2012年9月6日

摘要: 注:之前写过MapReduce程序,所以对Hadoop和MapReduce编程有一些了解,现在正在阅读《Hadoop实战》一书,这里主要是记下对自己有用的一些点,完全不能覆盖书中的全部要点。想要学习MapReduce入门的同学请移尊步,勿浪费时间。这里是我觉得不错的几个入门文章:http://www.cnblogs.com/forfuture1978/category/300670.htmlhttp://blog.csdn.net/aidayei/article/details/6580277http://www.cnblogs.com/mdyang/category/307547.htmlh 阅读全文

posted @ 2012-09-06 21:01 Apprentice89 阅读(280) 评论(0) 推荐(0) 编辑