自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

大坡3D软件开发

自主操作系统和CPU--用软件来改变世界

原创 reactos操作系统实现(50)

 当运行到内核函数Phase1Initialization里,就是进行内核第一阶段初始化了,这时在这个函数又调用函数Phase1InitializationDiscard进行复杂的处理,在这里有一个重要的步骤,就是打开内核应用程序smss.exe来运行。具体代码如下:#001  /* Update progress bar */#002      InbvUpdateProgressB

2009-07-25 22:56:00 2105

原创 reactos操作系统实现(49)

前面已经介绍怎么样从ISOBOOT里加载SETUPLDR.SYS,下面来分析一下这个程序与一般硬盘引导程序freeldr.sys有什么区别。在文件freeldr.c里是这样这样调用安装函数的:#001  VOID BootMain(LPSTR CmdLine)#002  {#003       CmdLineParse(CmdLine);#004  #005      

2009-07-24 22:40:00 1891

原创 reactos操作系统实现(48)

 每当安装到一个全新的电脑时,都需要使用安装程序来把系统安装到电脑的硬盘里面,这个过程其实是一个极其重要的过程,如果用户不容易安装系统的话,那么这个系统也是很难使用的系统,不利于系统广泛使用和推广。下面就来了解Reactos是怎么实现整个安装过程的。当使用make bootcd的编译命令时,就是编译一个可以启动并安装系统的光盘文件。这个光盘文件,就是使用上面介绍的ISOBOOT的方式实现系

2009-07-23 23:18:00 2721

原创 reactos操作系统实现(47)

当光盘变成记录数据以后,就开始使用光盘来分发操作系统了。毕竟光盘有着储存数据量大,成本便宜的优势。下面就来分析Reactos是怎么样通过光盘的格式来引导操作系统的。现今的计算机BIOS,会在开机时根据El Torito规格,查找光盘上的开机代码。若该光盘具有开机代码,则BIOS会指配一个磁盘驱动器代号给该光驱。磁盘驱动器代号通常为80(模拟硬盘)或是00(模拟软盘)等。借由模拟成硬盘或软盘

2009-07-22 20:14:00 2958

原创 reactos操作系统实现(46)

在线程调度里可以看到,需要调用函数KiSwapContext来进行运行环境切换,由于每个CPU都是只能运行一个线程,而多个线程在运行过程中被中断了,那么就需要保存CPU所有寄存器,以便下一次恢复线程时可以接续运行。现在就来分析这个函数是怎么样实现这些工作的,代码如下:#001  /*++#002   * KiSwapContext #003   *#004   *    T

2009-07-21 21:27:00 2271 4

原创 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 1590

原创 reactos操作系统实现(44)

前面分析了怎么样把一个线程放到延迟就绪队列,接着下来的问题就是这些在就绪队列里的线程什么时候开始运行呢?又是怎么样把就绪队列的线程取出来运行的呢?线程调度的触发事件有以下四种:1) 线程进入就绪状态,如一个刚创建的线程,或者一个刚结束的线程。2) 线程的时间片用完。3) 线程调用系统服务发生等待,或者被系统改变其优先级。4) 线程改变自己运行的处理器。 先来分析第一种情

2009-07-19 12:05:00 2525 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 3196

原创 reactos操作系统实现(42)

接着下来,就需要分析函数KiReadyThread的作用了。根据线程状态来判断是否可以放入延迟队列,还是设置它为转换状态,代码如下:#001  VOID#002  NTAPI#003  KiReadyThread(IN PKTHREAD Thread)#004  { 获取当前线程的进程对象。#005      INPKPROCESS Process = Thre

2009-07-15 21:27:00 4599 2

原创 reactos操作系统实现(41)

当线程初始化成功后,是怎么样放到推迟就绪队列的呢?通过下面这几个函数的分析,就会了解这个问题了。从以前的分析可以知道是调用函数KeReadyThread来执行的,这个函数的代码如下:#001  VOID#002  NTAPI#003  KeReadyThread(IN PKTHREAD Thread)#004  {这里参数Thread就是刚刚创建的线程。 #005 

2009-07-14 22:14:00 2072

原创 reactos操作系统实现(40)

 由于Reactos的调度单位是线程,所以它的状态机就是基于线程的。比如进程A有5个线程,进程B有2个线程,总共就是12个线程来进行调度,也就是把CPU的时间分成12等份。线程总共状态如下:#001  //#002  // Thread States#003  //#004  typedef enum _KTHREAD_STATE#005  {#006      Ini

2009-07-13 22:18:00 2174

原创 谈谈软件开发人员基本要求

美国次贷危机引发的世界金融危机,使全球经济发展面临严峻挑战,对我国就业环境也造成相当程度的冲击。据悉, 2008年10月以后,与金融紧密关联的证劵、保险、投资、理财等服务业大幅萎缩,同时,沿海地区劳动密集型企业、出口导向型企业更是受到了严重影响,社会就业压力高涨。而对2009年应届毕业生来说,就业压力达到历史新高,不少人甚至认为大学生重回知青时代,应该上山下乡。 面对这么困难的环境,有

2009-07-12 12:55:00 9471 27

原创 reactos操作系统实现(39)

到底一个线程是怎么样创建的呢?又是怎么样放到就绪队列呢?#001  NTSTATUS#002  NTAPI#003  PspCreateThread(OUT PHANDLE ThreadHandle,#004                  IN ACCESS_MASK DesiredAccess,#005                  IN POBJECT_

2009-07-12 11:49:00 5214 1

原创 reactos操作系统实现(38)

由于Reactos是以线程为最小的调度单位,如果仅仅创建进程的数据结构,不足以运行进程的任务,每个进程至少需要一个线程才可以运行,下面就来分析系统进程的线程创建,代码如下:#195      /* Setup the systeminitialization thread */#196      Status = PsCreateSystemThread(&SysThreadHan

2009-07-11 00:20:00 1867 1

原创 reactos操作系统实现(37)

下面来继续分析创建进程函数,过程如下:保存工作集数据。#070      /* Save working set data */#071      MinWs = PsMinimumWorkingSet;#072      MaxWs = PsMaximumWorkingSet;#073   创建一个进程对象。#074      /* Create the Ob

2009-07-09 23:46:00 2859 1

原创 reactos操作系统实现(36)

前面分析了进程管理器的初始化工作,主要就是把进程管理器的列表、对象初始化,还有第一和第二阶段的初始化工作。接着下来,我们来分析一下进程创建函数,看看进程在Reactos里是怎么样创建的,需要调用什么函数来创建进程,还有应用程序是怎么样调用API函数来创建进程的。可以从前面分析的代码里,看到创建第二个进程代码如下:#196      Status = PsCreateSystemThread

2009-07-08 23:03:00 1690 1

原创 reactos操作系统实现(35)

初始化活动的进程列表。#076      /* Initialize the ActiveProcess List */#077     InitializeListHead(&PsActiveProcessHead);#078     KeInitializeGuardedMutex(&PspActiveProcessMutex);#079   获取空闲的

2009-07-06 20:54:00 2260

原创 reactos操作系统实现(34)

现在就来分析第一阶段的进程管理器初始化函数PspInitPhase0,如下:#001  BOOLEAN#002  NTAPI#003  PspInitPhase0(INPLOADER_PARAMETER_BLOCK LoaderBlock)#004  {#005      NTSTATUS Status;#006      OBJECT_ATTRIBUTESOb

2009-07-05 14:16:00 2514 2

原创 reactos操作系统实现(33)

当Reactos在系统初始化时,就会调用进程管理初始化函数PsInitSystem来进行初始化。只有把进程管理初始化后,才可以创建进程,这样才可运行各种各样的任务。下面就来分析进程管理器初始化函数:#001  BOOLEAN#002  NTAPI#003  PsInitSystem(IN PLOADER_PARAMETER_BLOCK LoaderBlock)#004  {在参

2009-07-02 20:50:00 1799 1

原创 reactos操作系统实现(32)

这个函数主要功能就是实现访问不存在的页面。#001  NTSTATUS#002  NTAPI#003  MmNotPresentFault(KPROCESSOR_MODE Mode,#004                             ULONG_PTR Address,#005                             BOOLEAN FromMdl

2009-07-01 21:19:00 3178 3

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