reactos操作系统实现(50)

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

reactos操作系统实现(49)

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

reactos操作系统实现(48)

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

reactos操作系统实现(47)

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

reactos操作系统实现(46)

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

reactos操作系统实现(44)

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

reactos操作系统实现(43)

前面介绍放到延迟队列是单核的版本,下面来学习多核的版本,代码如下:#001  //#002  // This routine makes the thread deferredready on the boot CPU.#003  //#004  FORCEINLINE#005  VOID#006  KiInsertDeferredReadyList(IN PKTH...
阅读(2885) 评论(0)

reactos操作系统实现(42)

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

reactos操作系统实现(41)

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

reactos操作系统实现(40)

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

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

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

reactos操作系统实现(39)

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

reactos操作系统实现(38)

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

reactos操作系统实现(37)

下面来继续分析创建进程函数,过程如下:保存工作集数据。#070      /* Save working set data */#071      MinWs = PsMinimumWorkingSet;#072      MaxWs = PsMaximumWorkingSet;#073   创建一个进程对象。#074      /* Create the Ob...
阅读(2548) 评论(1)
20条 共2页1 2 下一页 尾页
    个人资料
    • 访问:5594068次
    • 积分:73134
    • 等级:
    • 排名:第25名
    • 原创:1587篇
    • 转载:61篇
    • 译文:11篇
    • 评论:2086条
    文章存档
    最新评论