- 博客(142)
- 资源 (12)
- 收藏
- 关注
原创 Sparrow操作系统的回顾与总结
到今天为止,Sparrow操作系统的设计文档已经全部发布,代码也不准备继续更新了。在“自己写操作系统”这事儿完成之前,做一个总结。
2013-12-30 11:56:46
2515
6
原创 [Sparrow OS 设计文档连载(十二)] Programming Guide
Sparrow操作系统设计文档连载之十二:Programming Guide
2013-12-27 18:05:46
1411
2
原创 [Sparrow OS 设计文档连载(十)] Interrupt Handling
Sparrow操作系统设计文档连载之十:Interrupt Handling
2013-12-26 23:19:15
1239
原创 [Sparrow OS 设计文档连载(七)] Slab Memory Allocator
Sparrow操作系统设计文档连载之七 Slab Memory Allocator
2013-12-23 18:32:02
1068
原创 [Sparrow OS 设计文档连载(六)] Page Memory Allocator
Sparrow操作系统设计文档连载之六 Page Memory Allocator
2013-12-23 18:27:52
1010
原创 [Sparrow OS 设计文档连载(五)] Boot Memory Allocator
Sparrow操作系统设计文档连载之五 Boot Memory Allocator
2013-12-23 18:22:03
1061
原创 [Sparrow OS 设计文档连载(二)] User Guide - Demo
在写完User Guide这一章之后,我觉得还不够。User Guide主要是命令的介绍,但是这个内容比较枯燥,并不能形象地解释每一个命令可以做什么,这与“图解Sparrow”的初衷不符合;而且估计会动手去搭建环境并尝试运行Sparrow的读者会比较少。所以,不如我截一些图,让每个人都能对Sparrow的功能有个直观的认识。于是有了这篇demo作为User Guide的补充。
2013-12-21 11:54:31
1827
2
原创 schedule()函数的调用时机(周期性调度)
纠正一个由来已久的认识错误:一个进程的时间片用完之后,当再次发生时钟中断时内核会调用schedule()来进行调度,把当前的进程上下文切出CPU,并把选定的下一个进程切换进来运行。我一直以为schedule()函数是在时钟中断处理函数中被调用的。其实不是,如果真是这样的话,那么在第一次这样的调度完成之后,时钟中断可能就要被mute掉了,系统从此失去“心跳”。
2013-09-04 22:44:50
2890
原创 Linux内核线程
本文以ARM架构为例,讲解linux的内核线程是如何创建的。Linux内核在完成初始之后,会把控制权交给应用程序。只有当硬件中断、软中断、异常等发生时,CPU才会从用户空间切换到内核空间来执行相应的处理,完成后又回来用户空间。如果内核需要周期性地做一些事情(比如页面的换入换出,磁盘高速缓存的刷新等),又该怎么办呢?内核线程(内核进程)可以解决这个问题。
2013-08-27 12:00:54
1352
原创 ARM-LINUX的进程切换
本文主要记录S3C6410/ARM1176JZF-S架构下Linux(kernel 2.6.35)内核如何进行进程切换。进程切换是操作系统进程调度的基础,首先要能够实现切换,接下来才谈得上“多进程”、“多线程”以及调度算法等更高级的话题。(这里在说“进程切换”的时候提到多线程,并不是把概念搞混淆了。在内核里谈切换的时候,Linux并不区分进程与线程,因为这里只有task,一个进程里如果有多个线
2013-08-27 12:00:52
1955
原创 迭代器模式/Iterator
迭代器模式/Iterator意图/适用场景:迭代器模式的应用在Java语言中司空见惯。迭代器(Iterator)与聚集(Aggregate)的概念密不可分。聚集是能够包容一组对象的容器对象,不同种类的聚集组织这些对象的方式是不同的,即拥有不同的结构。Java语言对聚集有良好的支持,Java聚集对象是实现了共同的java.util.Collection接口的对象,包括Vector、A
2013-08-27 12:00:49
788
原创 模版方法模式/Template Method
模版方法模式/TemplateMethod意图/适用场景:模版方法模式其实是一种应用很广泛的模式,特别是在使用抽象类的时候。模版方法模式中必然有一个核心的抽象类,不能是接口。声明一些抽象方法,这些方法由子类来做各不相同的实现;也可以是一些非抽象的方法,这些方法只是做为默认的实现,子类应该覆盖它们。此外,还要定义一个或多少具体的方法,它们实现一些逻辑,调用前面提到的抽象或非抽象方法
2013-08-27 12:00:47
685
原创 中介者模式/Mediator
中介者模式/Mediator意图/适用场景:中介模式的用意是用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。面向对象设计鼓励将行为分布到各个对象中。这种分布可能会导致对象间有许多连接。在最坏的情况下,每一个对象都知道其他所有对象。虽然将一个系统分割成许多对象通常可以增强可复用性,但是对象间相互连接的激增又会
2013-08-27 12:00:45
688
原创 解释器模式/Interpret
解释器模式/Interpret意图/适用场景:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。解释器模式并不是一种应用很广泛的模式,因为它特别适合用来解释语言,而在一般的软件系统中,内嵌一种语方的成本显然太高。但这种模式的出发点值得借鉴:如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。
2013-08-27 12:00:43
833
原创 访问者模式/Visitor
访问者模式/Visitor意图/适用场景:访问者模式适用于数据结构相对稳定的系统,它把数据结构和作用于结构上的操作之间的耦合解脱开来,使得操作集合可以相对自由地演化。数据结构的每一个节点者可以接受一个访问者的调用,此节点向访问者对象传入节点对象,而访问者对象而反过来执行节点对象的操作。这样的过程叫做“双重分派”。访问者模式的功能在于,你可以在不改变各元素的类的前提下定义作用于这些元
2013-08-27 12:00:40
896
原创 状态模式/State
状态模式/State意图/适用场景:状态模式允许一个对象在其内部状态改变的时候改变其行为,这个对象看上去就像是改变了它的类一样。在两种情况下均可以使用状态模式:一个对象的行为取决于它的状态, 并且它必须在运行时刻根据状态改变它的行为。一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态。状态模式将每一个条件分支放入一个独立的类中。这使得你可以根据对象自身的情况将
2013-08-27 12:00:38
824
原创 备忘录模式/Memento
备忘录模式/Memento意图/适用场景:备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉住,并存储起来。在将来合适的时候把这个对象还原到存储时的状态。UML:参与者:发起人(Originator):需要保存自身状态的对象。它有两个功能,一是创建新的备忘录,一是恢复到已有的备忘录。管理者(Car
2013-08-27 12:00:36
785
原创 命令模式/Command
命令模式/Command意图/适用场景:命令模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。每一个命令都是一个操作:请求的一方发出请求要求执行一个操作;接收的一方收到请求,并执行操作。命令模式允许请求的一方和接收的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是被谁处理、是否被处理、何时处理以及怎么处理。命令模式有以下
2013-08-27 12:00:34
745
原创 责任链模式/Chain Of Re…
责任链模式/ChainOf Responsibility意图/适用场景:在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理了这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织链和分配责任。UML:Of Responsibility" TIT
2013-08-27 12:00:32
642
原创 观察者模式/Observer
观察者模式/Observer意图/适用场景:观察者模式的目的在地,当某一个对象(被观察者)的状态发生变化的时候,其它想要知晓这一改变的对象(观察者)能够得到通知。能够实现这一点的设计方案有很多,但是为了使系统易于复用,应该选择低耦合度的设计方案。UML:参与者:抽象观察者(Observer):所有观察者的公共接口。定义一个更新方法(即update()方法),当所观察的
2013-08-27 12:00:30
1034
原创 策略模式/Strategy
策略模式/Strategy意图/适用场景:策略模式是针对一组算法,将每一个算法封装到具有共同接口的独立类中,从而使得它们可以互换。这样做的好处是,客户端可以以插件的方式更换算法。电子商务网站的购物车系统是一个策略模式非常适用的场景:比如,在优惠方式上,某一类商品是每件优惠一元,另一类商品是折扣5%,还有一类商品也是打折,但折扣幅度是10%。所以需要应用不同的优惠算法来计算最终的价格。
2013-08-27 12:00:28
715
原创 不变模式/Immutable
不变模式/Immutable意图/适用场景:“不变类”是这样一个类,它的内部状态创建后,在整个生命期间都不会发生变化。使用不变类的做法叫做不变模式。不变类允许被多个对象共享,降低了对该对象进行并发访问时的同步化开销。如果需要修改一个不变对象的状态,那么就需要建立一个新的同类型对象,并在创建时将这个新的状态存储在新的对象里。不变模式有两种形式:弱不变模式,以及强不变模式。弱不变
2013-08-27 12:00:25
807
原创 桥梁模式/Bridge
桥梁模式/Bridge意图/适用场景:桥梁模式的意图在于把“抽象”与“实现”解耦合,把强关联转变为弱关联。所谓强关联,就是在编译时期已经确定的,无法在运行时期改变的关联;所谓弱关联,就是可以动态地确定并且可以在运行时期动态地改变的关联。显然,在Java语言中,继承关系是强关联,而聚合关系是弱关联。将两个角色之间的继承关系改为聚合关系,就是将它们之间的强关联改为弱关联。因此,桥梁模式
2013-08-27 12:00:23
857
原创 门面模式/Facade
门面模式/Facade意图/适用场景:设计师处理很杂系统的一个常见方法是“分而治之”,把一个系统划分为几个较小的子系统,每个子系统提供一种单一的服务。这样做之后,可能会出现大量的子系统,客户端往往要同时与很多子系统打交道之后才能达到目的。门面模式创造出一个门面对象,将客户端所涉及的具体子系统数目减至最小,使用客户端与众多了系统的相互作用被门面对象所取代。显然,门面模式是实现代码重构以
2013-08-27 12:00:21
864
原创 享元模式/Flyweight
享元模式/Flyweight意图/适用场景:享元模式也叫轻量模式(flyweight pattern),因应用大量轻量级对象而得名。Flyweight模式对那些通常因为数量太大而难以用对象来表示的概念或实体进行建模。例如,文档编辑器可以为字母表中的每一个字母创建一个flyweight。每个flyweight存储一个字符代码,但它在文档中的位置和排版风格可以在字符出现时由正文排版算法和使
2013-08-27 12:00:19
642
原创 装饰模式/Decorator
装饰模式/Decorator意图/适用场景:装饰模式将更多的功能动态地附加到一个对象上。对功能扩展而言,装饰模式提供了一个灵活的、可以替代“继承”的选择。装饰模式通过被装饰类的一个子类的实例,把客户端的调用委派到被装饰类。在以下情况下应当使用装饰模式:需要扩展一个类的功能,或给一个类增加责任。需要动态地给一个对象增加功能,这些功能可以再动态地撤销。需要增加同一些基本功
2013-08-27 12:00:14
705
原创 合成模式/Composite
合成模式/Composite意图/适用场景:合成模式又叫做部分-整体模式。它将对象组织到树结构中,可以用来描述整体与部分的关系。最显著的特点就是把整体与部分都抽象出统一的接口,这样客户端就可以把单纯元素与复合元素同等看待。看下图所示的树状结构图。图中有两种节点,一种是树枝节点,一种是树叶节点。树根也是一种树枝节点,只不过它比较特殊,它没有父节点。在构建这样的一种树状结构里,合成模式
2013-08-27 12:00:12
814
原创 缺省适配模式/Default Adapter
缺省适配模式/DefaultAdapter意图/适用场景:缺省适配模式为一个接口提供缺省实现,这样了类型可以从这个缺省实现进行扩展,而不必从原有接口进行扩展。当原接口中定义的方法太多,而其中大部分又不被需要时,这种模式非常实用。由缺省适配器类直接实现接口,并为所有方法提供缺省的空实现。用户类就只需要继承适配器类,只实现感兴趣的方法就行了。Java的WindowAdapter就是一
2013-08-27 12:00:10
896
原创 适配器模式/Adapter
适配器模式/Adapter意图/适用场景:适配器模式用于对已有代码的重用。如果客户端需要某一种接口(Target)的实现类,但系统中并没有一模一样的类。系统中已有的某种接口或者类(Adaptee)与所要求的接口(Target)有相同或相近的功能,只需要改变接口名或稍做一些修改就可以重用。适配器模式正适合做这种重用。适配器模式分为“类适配模式”和“对象适配模式”两种,下面分别描述
2013-08-27 12:00:08
752
原创 原型模式/Prototype
原型模式/Prototype意图/适用场景:原型模式即是由一个已有的对象复制出一个相同的对象。这是一种对象的创建模式,即由已存在的对象动态构造新的对象。这种方法在面向对象的语言中已经应用得非常普遍,比如Java中的clone()方法以及C 中的拷贝初始化等等。不再详细描述。
2013-08-27 12:00:06
755
原创 建造模式/Builder
建造模式/Builder意图/适用场景:如果一个产品由很多的配件组成,缺少了其中某一个配件,产品都不能工作。产品只有在所有配件都装配完成的情况下才能正常工作。对于这样的产品,不希望外界干预它的生产过程,在外界看来,生产者只提供完整的产品,而不提供任何的中间过程信息。这就是一个建造模式的应用场景。建造模式的另一个方面在于,系统还提供不同的生产者,它们生产不两只的产品,但同样都不提供内部信
2013-08-27 12:00:04
650
原创 单例模式/Singleton
单例模式/Singleton意图/适用场景:在很多情况下,希望某个类在整个系统中只有一个实例。比如像Windows系统的控制面板,还有Ubuntu系统里的软件管理器。这样的实例往往控制了某种唯一的资源,如果有多个实例同时工作的话,会造成混乱。当然,实例的使用者可以提醒自己不要构造多个实例,但这并不是一个好办法,实例的唯一性不能得到保障。最好的办法是由这个类自己来保障实例的唯一性,即使使
2013-08-27 12:00:02
529
原创 抽象工厂模式/Abstract Factory
抽象工厂模式/AbstractFactory意图/适用场景:抽象工厂模式适用于这样一种场景:产品是成系列的,每一个系列的产品由多个不同的产品组成,这些产品有一些相似的特性,比如属于同一色系。每一种产品又有很多种类,这些不同的产品可用一个产品继承树来表示。系统中存在多个产品系列,但每次只需要产生一个系列出来工作,其它则不用。总结以上的需求,产品类有这样的一种结构:每一
2013-08-27 12:00:00
609
Sparrow OS 设计文档连载十:Interrupt Handling
2014-05-29
Sparrow OS 设计文档连载十一:Tracing
2014-05-29
Sparrow OS 设计文档连载十二:Programming Guide
2014-05-29
Sparrow OS设计文档连载一:Introduction
2014-05-29
Sparrow OS设计文档连载二:User Guide - Demo
2014-05-29
Sparrow OS设计文档连载四:Memory Management
2014-05-29
Sparrow OS设计文档连载五:Boot Memory Allocator
2014-05-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人