REACTOS
caimouse
在IT行业有20多年的经验。拥有20多年的C和C++开发经验,5年以上Python开发经验,资深数据库开发、上百G数据库优化经验。曾经任职嵌入式工程师、P2P开发工程师、银行信用卡交易系统工程师、全自动化电池测试部门经理。
展开
-
五笔和拼音输入法开发
我的五笔介绍我的五笔由蔡军生开发,不但可以输入五笔,如果五笔打不开来时,可以输入拼音.2008-08-30 发布第一个版本.如果有什么建议或才问题请通过QQ: 9073204 ,或者向EMAIL: 9073204@qq.com 发EMAIL.或者通过http://blog.csdn.net/caimouse来给我留言. 下载地址:http://www.91file原创 2008-08-30 23:02:00 · 4741 阅读 · 2 评论 -
reactos操作系统实现(17)
<span style="font-family:宋体;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-fareast-language:ZH-CN">从上面分析可以看到,主要调用函数KiInitializeKernel<span style="font-family:宋体;mso-ascii-font-family:Ar原创 2009-01-01 12:24:00 · 3111 阅读 · 0 评论 -
reactos操作系统实现(16)
下面仔细分析这个函数的代码:#001 /* Switch to new kernel stack and startkernel bootstrapping */#002 KiSetupStackAndInitializeKernel(&KiInitialProcess.Pcb,#003原创 2008-12-30 21:55:00 · 3142 阅读 · 0 评论 -
reactos操作系统实现(18)
<span style="font-family:宋体;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-fareast-language:ZH-CN">在X86<span style="font-family:宋体;mso-ascii-font-family:Arial;mso-hansi-font-family:Ar原创 2009-01-04 00:00:00 · 3428 阅读 · 0 评论 -
reactos操作系统实现(1)
reactos是什么操作系统呢?它是一个开源的操作系统,并且是兼容Windows XP的应用程序和驱动程序的操作系统。意思就是说,直接安装一个reactos之后,把第三方的驱动程序安装好后,就可以运行第三方的Windows应用程序了。这样达到替换微软的windows操作系统的目的,也就打破Windows的应用程序垄断的地位,让Windows开发的所有应用程序都可以平滑地移到reactos上运行。原创 2008-11-13 13:40:00 · 10169 阅读 · 12 评论 -
reactos操作系统实现(19)
<span style="font-family:宋体;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-fareast-language:ZH-CN">由于CPU<span style="font-family:宋体;mso-ascii-font-family:Arial;mso-hansi-font-family:A原创 2009-01-07 22:53:00 · 3292 阅读 · 0 评论 -
reactos操作系统实现(2)
对于开发一个操作系统是一个漫长的过程,并不像一个Hello world程序那么快捷,那么明了。因此对开发OS的基本知识,基本技能也需要比较高深一些,特别对一些名词和概念,更需要深入地了解。由于操作系统大部份需要与硬件打交道,所以硬件的知识需要了解,特别CPU的工作方式需要更加明确一些。 目前reactos是基于C来开发的,那么对于C的语法是要了解的,并且熟练地使用C来开发软件。由于在一堆原创 2008-11-14 13:42:00 · 8419 阅读 · 4 评论 -
reactos操作系统实现(20)
下面来了解内核执行体的处理,它是在初始化内核线程后运行的,代码如下:#001 /* Setup the Idle Thread */#002 KeInitializeThread(InitProcess,#003 InitThread,#004 NULL,原创 2009-01-12 00:14:00 · 3119 阅读 · 2 评论 -
reactos操作系统实现(3)
有人说,reactos不是实时操作系统,不能做嵌入式系统,难道真的不能做嵌入式系统吗?其实不是这样的,嵌入式系统本来就包括有两类系统,一种是要求实时性强,一种是要求实时性弱的。这两种都是嵌入式系统。因此,ReactOS做嵌入式系统是没有问题的,有问题的是拿它来做什么样的产品,才是比较合适的。比如可以使用它来做GPS系统,可以拿它来做MP4系统,也可以拿它来开发照相机系统,也可以拿它来做车载系统。当原创 2008-11-21 13:17:00 · 7338 阅读 · 3 评论 -
reactos操作系统实现(21)
初始化NLS代码表。#124 /* Initialize the NLS Tables */#125 RtlInitNlsTables((PVOID)((ULONG_PTR)ExpNlsTableBase +#126 ExpAnsiCodePageDataOffset),#127原创 2009-01-14 21:50:00 · 3912 阅读 · 0 评论 -
reactos操作系统实现(22)
从Boot.S文件里初始化系统基本组件后,就跳到空闲函数处理,就成为一个空闲处理的线程,其实也是一个管理系统的任务。下面就来分析KiIdleLoop函数的代码,如下:#001 .globl @KiIdleLoop@0#002 .func @KiIdleLoop@0, @KiIdleLoop@0#003 @KiIdleLoop@0:#004 获取KPCR的指针地址原创 2009-01-18 22:02:00 · 5220 阅读 · 0 评论 -
reactos操作系统实现(23)
下面来仔细查看Windows系统结构图: 由于ReactOS是兼容Windows为目标的,那么它的体系结构跟Windows越像,就具有兼容性。这里先来了解Windows的体系结构。最低层是硬件抽象层HAL;接着是内核层,设备驱动程序和文件系统,I/O管理器,文件系统缓存管理器,对象管理器,即插即用管理器,电源管理器,安全监视管理器,虚拟内存管理器,进程和线程管理器,注册表和配置管理器,原创 2009-01-20 21:15:00 · 5683 阅读 · 0 评论 -
reactos操作系统实现(24)
在很早的电脑里,就带有一个小喇叭,可以发出不同频率的声音。主要用来判断系统是否有问题使用,比如BIOS检查硬有问题时,就会发出不同的声音,提醒用户是那里出问题了。在操作系统里,也经常使用这个小喇叭来提醒用户是什么问题,比如输入非法的按键时,就响一声。在早期的五笔输入法时,输入的字不对,就会用这个小喇叭提醒,让忘打的操作人员回到屏幕上选择所需要的字。那么这个小喇叭的驱动是怎么样进行的呢?这里就来研原创 2009-01-22 22:55:00 · 4231 阅读 · 0 评论 -
reactos操作系统实现(25)
在操作系统里,有时候需要从保护模式转换为实模式来调用BIOS一些功能。因此在硬件抽象层里,就需要提供这样的函数支持,这个函数代码如下:#001 BOOLEAN#002 NTAPI#003 HalpBiosDisplayReset(VOID)#004 {#005 ULONG Flags = 0;#006 保存CPU所有状态寄存器,然后关闭中断。原创 2009-02-02 22:38:00 · 4118 阅读 · 0 评论 -
reactos操作系统实现(26)
在ReactOS内存管理里,有一块内存区是非分页内存,也就是这块内存始终保持在系统物理内存里面,不会换到磁盘上。那为什么需要这样做呢?全部使用分页内存不是更简单,更方便吗?肯定不行的,因为IA86的内存管理就决定它不能这样做了,当CPU缺页中断时,就需要操作系统把分页内存换到磁盘上,再把加载数据从磁盘读取回来。如果操作系统使用的内存都是分页内存,那么操作系统就没有办法运行了,因为所需要运行的代码原创 2009-02-04 23:22:00 · 4484 阅读 · 1 评论 -
reactos操作系统实现(27)
下面接着来分析EiAllocatePool函数,这个函数要传入使用者内存类型、内存大小、内存标记和调用者地址。#001 static PVOID NTAPI#002 EiAllocatePool(POOL_TYPE PoolType,#003 ULONG NumberOfBytes,#004 ULONG Tag,原创 2009-02-15 17:24:00 · 4032 阅读 · 0 评论 -
reactos操作系统实现(4)
由于近来家里的电脑坏了,老是上网就死机,也上不了网发贴。近来也是经济危机到来的时候,事情还是比较多。本来不太打算更换电脑的,等到明年电脑降价了,再去买的。但这台电脑也用了四年了,又急着想上网,就下定决心去买了一台电脑回来。当然,这次配置的电脑,就不能太差了,以往都最便宜的就买。主机至少也配置4000元的,有了这个预算之后,就开始选择配置。是选择双核,还是四核呢?比较了一下,发现我往往是编译程序比较原创 2008-12-05 13:30:00 · 5901 阅读 · 1 评论 -
reactos操作系统实现(28)
在内存管理里,绝大部份内存都是分页内存。分页内存就是把内存分成4K页大小的内存块,这些内存块不但可以在物理内存里,也可以切换时保存到硬盘里。这些内存管理里是通过下面的代码进行的,如下:#001 VOID#002 INIT_FUNCTION#003 NTAPI#004 MmInitializePagedPool(VOID)#005 {#006 /*原创 2009-02-19 22:14:00 · 4080 阅读 · 0 评论 -
reactos操作系统实现(29)
内存大小好像永远追不上人们的需求,以前以为512K就很大了,到现在内存已经是4G,8G内存了,但还是不能满足人们的需求。因为目前的系统都是多进程运行,每个进程都需要占用4G的内存,那么10个进程,就占用相当可观的内存了。这时就需要把进程不经常使用的内存数据切换到硬盘里,需要时再换回来。如果一个进程的内存已经换到硬盘上,而这个进程又想访问那些在硬盘的内存数据时,就会产生一个缺页中断。这个中断是CP原创 2009-02-25 21:32:00 · 4236 阅读 · 2 评论 -
reactos操作系统实现(5)
<span style="font-family:宋体;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-fareast-language:ZH-CN">一般的电脑都是使用硬盘来引导操作系统,由于硬盘是电脑的最常用的存储媒介,在ReactOS<span style="font-family:宋体;mso-ascii-font原创 2008-12-11 00:30:00 · 6315 阅读 · 0 评论 -
reactos操作系统实现(9)
在reactos初始化代码里,经常看到ACPI的缩写,那么它是表示什么意思呢?现在就来解决这个问题,它就是电源管理方面的。具体内容如下:Advanced Configuration and Power Management Interface ACPI表示高级配置和电源管理接口(Advanced Configuration and Power Management Interface)。对于Wi原创 2008-12-16 13:03:00 · 4836 阅读 · 3 评论 -
reactos操作系统实现(6)
硬盘引导的流程与相应源码文件名称:<table class="MsoTableGrid" border="1" cellspacing="0" cellpadding="0" style="margin-left:36.0pt;border-collapse:collapse;border:none;mso-border-alt: solid windowtext .5pt;mso-y原创 2008-12-11 22:52:00 · 7118 阅读 · 2 评论 -
reactos操作系统实现(7)
<span lang="EN-US" style="font-family:Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:Wingdings;mso-fareast-language:ZH-CN">l <span lang="EN-US" style="mso-fareast-language原创 2008-12-13 22:24:00 · 4870 阅读 · 0 评论 -
reactos操作系统实现(30)
对无效页面的一次访问称为“缺页错误”。对于这类错误都会导致中断处理函数MmAccessFault。那么什么样的情况才叫做无效页面呢?主要有下面几种情况:l 所有访问的页面不存内存里,而是磁盘里。l 访问的页面在后备列表里。l 访问的页面没有提交写操作。l 从用户态访问核心态的页面。l 对原创 2009-03-01 10:12:00 · 3503 阅读 · 0 评论 -
reactos操作系统实现(8)
<span style="font-family:宋体;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-fareast-language:ZH-CN">通过上面引导程序初始化后,引导程序就把控制权交给ntoskrnl.exe<span style="font-family:宋体;mso-ascii-font-family:原创 2008-12-15 00:06:00 · 4101 阅读 · 1 评论 -
reactos操作系统实现(10)
看到下面的语句,你能看得懂吗?/*Load the GDT and IDT */ Ke386SetGlobalDescriptorTable(*(PKDESCRIPTOR)&KiGdtDescriptor.Limit);<span style="font-family:宋体;mso-ascii-font-family:Arial;mso-hansi-font-原创 2008-12-17 23:30:00 · 7385 阅读 · 3 评论 -
reactos操作系统实现(11)
<span style="font-family:宋体;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-fareast-language:ZH-CN">中断机制发明以来,就一直成为CPU<span style="font-family:宋体;mso-ascii-font-family:Arial;mso-hansi-f原创 2008-12-18 22:53:00 · 4714 阅读 · 5 评论 -
reactos操作系统实现(12)
<span style="font-family:宋体;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-fareast-language:ZH-CN">有了上面的知识,就来分析ReactOS<span style="font-family:宋体;mso-ascii-font-family:Arial;mso-hansi-f原创 2008-12-21 10:32:00 · 3453 阅读 · 1 评论 -
reactos操作系统实现(13)
<span style="font-family:宋体;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-fareast-language:ZH-CN">从ReactOS<span style="font-family:宋体;mso-ascii-font-family:Arial;mso-hansi-font-family:原创 2008-12-22 22:34:00 · 3517 阅读 · 4 评论 -
reactos操作系统实现(14)
下面来分析一下系统任务是怎么样初始化的,先来看这行代码:/*Setup the TSS descriptors and entries */ Ki386InitializeTss(Tss, Idt, Gdt);<span style="font-family:宋体;mso-ascii-font-family:Arial;mso-hansi-font-famil原创 2008-12-24 00:11:00 · 3663 阅读 · 1 评论 -
reactos操作系统实现(15)
<span style="font-family:宋体;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-fareast-language:ZH-CN">在ReactOS<span style="font-family:宋体;mso-ascii-font-family:Arial;mso-hansi-font-family:原创 2008-12-27 23:40:00 · 3591 阅读 · 2 评论 -
reactos操作系统实现(42)
接着下来,就需要分析函数KiReadyThread的作用了。根据线程状态来判断是否可以放入延迟队列,还是设置它为转换状态,代码如下:#001 VOID#002 NTAPI#003 KiReadyThread(IN PKTHREAD Thread)#004 { 获取当前线程的进程对象。#005 INPKPROCESS Process = Thre原创 2009-07-15 21:27:00 · 4822 阅读 · 2 评论 -
reactos操作系统实现(41)
当线程初始化成功后,是怎么样放到推迟就绪队列的呢?通过下面这几个函数的分析,就会了解这个问题了。从以前的分析可以知道是调用函数KeReadyThread来执行的,这个函数的代码如下:#001 VOID#002 NTAPI#003 KeReadyThread(IN PKTHREAD Thread)#004 {这里参数Thread就是刚刚创建的线程。 #005原创 2009-07-14 22:14:00 · 2289 阅读 · 0 评论 -
reactos操作系统实现(44)
前面分析了怎么样把一个线程放到延迟就绪队列,接着下来的问题就是这些在就绪队列里的线程什么时候开始运行呢?又是怎么样把就绪队列的线程取出来运行的呢?线程调度的触发事件有以下四种:1) 线程进入就绪状态,如一个刚创建的线程,或者一个刚结束的线程。2) 线程的时间片用完。3) 线程调用系统服务发生等待,或者被系统改变其优先级。4) 线程改变自己运行的处理器。 先来分析第一种情原创 2009-07-19 12:05:00 · 2809 阅读 · 1 评论 -
reactos操作系统实现(43)
前面介绍放到延迟队列是单核的版本,下面来学习多核的版本,代码如下:#001 //#002 // This routine makes the thread deferredready on the boot CPU.#003 //#004 FORCEINLINE#005 VOID#006 KiInsertDeferredReadyList(IN PKTH原创 2009-07-19 00:43:00 · 3524 阅读 · 0 评论 -
reactos操作系统实现(45)
怎么样从一个延迟就绪队列里选择合适的线程运行呢?下面就来分析这段代码,如下:#001 //#002 // This routine scans for an appropriateready thread to select at the#003 // given priority and for the given CPU.#004 //#005 FORCE原创 2009-07-20 21:46:00 · 1942 阅读 · 0 评论 -
reactos操作系统实现(46)
在线程调度里可以看到,需要调用函数KiSwapContext来进行运行环境切换,由于每个CPU都是只能运行一个线程,而多个线程在运行过程中被中断了,那么就需要保存CPU所有寄存器,以便下一次恢复线程时可以接续运行。现在就来分析这个函数是怎么样实现这些工作的,代码如下:#001 /*++#002 * KiSwapContext #003 *#004 * T原创 2009-07-21 21:27:00 · 2491 阅读 · 4 评论 -
reactos操作系统实现(48)
每当安装到一个全新的电脑时,都需要使用安装程序来把系统安装到电脑的硬盘里面,这个过程其实是一个极其重要的过程,如果用户不容易安装系统的话,那么这个系统也是很难使用的系统,不利于系统广泛使用和推广。下面就来了解Reactos是怎么实现整个安装过程的。当使用make bootcd的编译命令时,就是编译一个可以启动并安装系统的光盘文件。这个光盘文件,就是使用上面介绍的ISOBOOT的方式实现系原创 2009-07-23 23:18:00 · 3066 阅读 · 0 评论 -
reactos操作系统实现(47)
当光盘变成记录数据以后,就开始使用光盘来分发操作系统了。毕竟光盘有着储存数据量大,成本便宜的优势。下面就来分析Reactos是怎么样通过光盘的格式来引导操作系统的。现今的计算机BIOS,会在开机时根据El Torito规格,查找光盘上的开机代码。若该光盘具有开机代码,则BIOS会指配一个磁盘驱动器代号给该光驱。磁盘驱动器代号通常为80(模拟硬盘)或是00(模拟软盘)等。借由模拟成硬盘或软盘原创 2009-07-22 20:14:00 · 3392 阅读 · 0 评论 -
reactos操作系统实现(50)
当运行到内核函数Phase1Initialization里,就是进行内核第一阶段初始化了,这时在这个函数又调用函数Phase1InitializationDiscard进行复杂的处理,在这里有一个重要的步骤,就是打开内核应用程序smss.exe来运行。具体代码如下:#001 /* Update progress bar */#002 InbvUpdateProgressB原创 2009-07-25 22:56:00 · 2419 阅读 · 0 评论