zl程序教程

reactos操作系统实现(7)

  • reactos操作系统实现(1)

    reactos操作系统实现(1)

     reactos是什么操作系统呢?它是一个开源的操作系统,并且是兼容Windows XP的应用程序和驱动程序的操作系统。意思就是说,直接安装一个reactos之后,把第三方的驱动程序安装好后,就可以运行第三方的Windows应用程序了。这样达到替换微软的windows操作系统的目的&#x

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(21)

    reactos操作系统实现(21)

     初始化NLS代码表。 #124      /* Initialize the NLS Tables */ #125      RtlInitNlsTables((PVOID)((ULONG_PTR)ExpNlsTableBase + #126                               ExpAnsiCodePageData

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(22)

    reactos操作系统实现(22)

     从Boot.S文件里初始化系统基本组件后,就跳到空闲函数处理,就成为一个空闲处理的线程,其实也是一个管理系统的任务。下面就来分析KiIdleLoop函数的代码,如下: #001  .globl @KiIdleLoop@0 #002  .func @KiIdl

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(24)

    reactos操作系统实现(24)

     在很早的电脑里,就带有一个小喇叭,可以发出不同频率的声音。主要用来判断系统是否有问题使用,比如BIOS检查硬有问题时,就会发出不同的声音,提醒用户是那里出问题了。在操作系统里,也经常使用这个小喇叭来提醒用户是什么问题,比如输入非法的按键时,就响

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(26)

    reactos操作系统实现(26)

     在ReactOS内存管理里,有一块内存区是非分页内存,也就是这块内存始终保持在系统物理内存里面,不会换到磁盘上。那为什么需要这样做呢?全部使用分页内存不是更简单,更方便吗?肯定不行的,因为IA86的内存管理就决定它不能这样做了,当CPU缺页中断

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(12)

    reactos操作系统实现(12)

    有了上面的知识,就来分析 ReactOS 里引导任务是怎么样设置全局描述符表。其工作过程如下图所示: 由于CPU初始化运行后,就当作为一个任务在运行。这里主要设置这个任务的运行保存环境,以便CPU可以交给其它任务运行,否则切换到其它任务运行后,就再也回不到

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(14)

    reactos操作系统实现(14)

    下面来分析一下系统任务是怎么样初始化的,先来看这行代码: /* Setup the TSS descriptors and entries */     Ki386InitializeTss(Tss, Idt, Gdt); 在这个Ki386InitializeTss函数里就是进行初始化系统任务的工作

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(44)

    reactos操作系统实现(44)

    前面分析了怎么样把一个线程放到延迟就绪队列,接着下来的问题就是这些在就绪队列里的线程什么时候开始运行呢?又是怎么样把就绪队列的线程取出来运行的呢?线程调度的触发事件有以下四种: 1) 线程进入就绪状态,如一个刚创建的线程,或者一个刚结束的线程。 2&

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(45)

    reactos操作系统实现(45)

    怎么样从一个延迟就绪队列里选择合适的线程运行呢?下面就来分析这段代码,如下: #001  // #002  // This routine scans for an appropriate ready thread to select at the #003  // given priority and

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(46)

    reactos操作系统实现(46)

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

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(50)

    reactos操作系统实现(50)

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

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(49)

    reactos操作系统实现(49)

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

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(58)

    reactos操作系统实现(58)

    格式化磁盘主要做什么样的工作呢?根据用户选择的文件系统,把格式化的数据和分区表写到磁盘,然后判断引导分区,写入引导代码到引导分区。具代实现代码如下: #001  static ULONG #002  FormatPartitionPage (PINPUT_RECORD Ir)

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(62)

    reactos操作系统实现(62)

    当文件拷贝完成后,主要就是把已经拷贝的文件进行注册表登记,还需要把用户在安装过程里选择的配置保存到注册表,同时也需要把检查到的硬件保存到注册表里。其实注册表,就是保存一些配置信息,这样下一次启动时,就可以直接把这些信息加载到内存就行了,不需要用户重新选择

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(73)

    reactos操作系统实现(73)

    即插即用(Plug and Play,PnP)是计算机系统I/O设备与部件配置的应用技术。PnP就是指插入就可以使用,不需要进行任何的硬件配置。其实还是需要安装相应的驱动程序才可以使用的。随着人们对计算机使用多样化,不断地需要添加各种各样的硬件卡到计算机的主板上,这样就需要配置硬件

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(78)

    reactos操作系统实现(78)

    ARC命名是Windows NT系统用来定位其引导分区所在的路径,也就是利用它指明引导分区在哪一个磁盘控制器,哪一个硬盘,哪一个分区内。ARC命名可分为两大类,以scsi为首或以multi为首,现分别说明如下: scsi(x)disk(y)rdisk(0)partit

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(34)

    reactos操作系统实现(34)

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

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(82)

    reactos操作系统实现(82)

    在I/O管理最后阶段,就是加载系统所有动态连接库,比如加载NTDLL动态连接库,具体实现代码如下: #001  NTSTATUS #002  NTAPI #003  PsLocateSystemDll(VOID) #004  { #005      OBJECT_ATTRIBUTES

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(35)

    reactos操作系统实现(35)

    初始化活动的进程列表。 #076      /* Initialize the Active Process List */ #077      InitializeListHead(&PsActiveProcessHead); #078      KeInitializeGuardedMutex(&PspActiveProce

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(87)

    reactos操作系统实现(87)

    应用程序对设备I/O进行Win32调用,这个调用由I/O系统服务接收,然后I/O管理器从这个请求构造一个合适的I/O请求包(IRP)。那么I/O管理器是怎么样创建这个I/O请求包(IRP)的呢?又是怎么样传送给驱动程序的呢?我们带着这两个问

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(38)

    reactos操作系统实现(38)

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

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(86)

    reactos操作系统实现(86)

    创建完成端口需要调用Windows API CreateIoCompletionPort: HANDLE CreateIoCompletionPort(     HANDLE FileHandle,     HANDLE ExistingCompletionPort,     DWORD CompletionKey,     DWOR

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(96)

    reactos操作系统实现(96)

    调用函数IoConnectInterrupt来设置键中断处理函数。 #028     Status = IoConnectInterrupt( #029         &PortDeviceExtension->KeyboardInterrupt.Object, #030         i8042KbdInterrup

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(107)

    reactos操作系统实现(107)

    IssueIdentify函数主要是发送IDENTIFY命令给一个ATAPI设备,并且获取这个设备相关信息,比如磁头的个数。 #001  BOOLEAN #002  NTAPI #003  IssueIdentify( #004      IN PVOID HwDeviceExtension, #005     

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(109)

    reactos操作系统实现(109)

    AtapiInterrupt函数是实现ATAPI的中断功能,主要根据SRB来判断是读取数据还是写入数据,然后对IDE设备读取或写入数据,还需要处理很多出错的情况。具体实现代码如下: #001  BOOLEAN #002  NTAPI #003  AtapiInterrupt( #004 

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(111)

    reactos操作系统实现(111)

    IdeSendSmartCommand函数主要发送IDE的命令。具体实现代码如下: #001  ULONG #002  NTAPI #003  IdeSendSmartCommand( #004      IN PVOID HwDeviceExtension, #005      IN PSCSI_REQUEST_BLOCK

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(112)

    reactos操作系统实现(112)

    IdeReadWrite函数主要实现了IDE设备的读和写命令发送。具体实现函数如下: #001  ULONG #002  NTAPI #003  IdeReadWrite( #004      IN PVOID HwDeviceExtension, #005      IN PSCSI_REQUEST_BLOCK Srb #

    日期 2023-06-12 10:48:40     
  •  reactos操作系统实现(116)

    reactos操作系统实现(116)

    PciIdeXFdoStartDevice函数是用来处理即插即用的启动设备消息,主要设置了DMA操作和保存设备端口的基地址,这里就是启动PCIIDE的物理设备,具体实现代码如下: #001  static NTSTATUS #002  PciIdeXFdoStartDevice( #003

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(118)

    reactos操作系统实现(118)

     ScsiClassInitialize函数初始化驱动程序对象,主要是找到合适的端口驱动程序,并设置它来处理磁盘的命令,具体实现代码如下: #001  ULONG #002  NTAPI #003  ScsiClassInitialize( #004      IN  PVOID       

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(121)

    reactos操作系统实现(121)

     CreatePartitionDeviceObjects函数是通过分析MBR扇区的数据,然后来创建所有分区对象。具体实现代码如下: #001  NTSTATUS #002  NTAPI #003  CreatePartitionDeviceObjects( #004      IN PDEVICE_OBJECT Phy

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(120)

    reactos操作系统实现(120)

     CreateDiskDeviceObject函数主要就是为了物理设备创建磁盘对象,并且查找磁盘上每个分区和创建相应的对象。具体实现代码如下: #001  NTSTATUS #002  NTAPI #003  CreateDiskDeviceObject( #004      IN PDRIVER_OBJECT Driv

    日期 2023-06-12 10:48:40