zl程序教程

reactos操作系统实现(13)

  • reactos操作系统实现(20)

    reactos操作系统实现(20)

    下面来了解内核执行体的处理,它是在初始化内核线程后运行的,代码如下: #001   /* Setup the Idle Thread */ #002      KeInitializeThread(InitProcess, #003                         InitTh

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

    reactos操作系统实现(28)

     在内存管理里,绝大部份内存都是分页内存。分页内存就是把内存分成4K页大小的内存块,这些内存块不但可以在物理内存里,也可以切换时保存到硬盘里。这些内存管理里是通过下面的代码进行的,如下: #001  VOID #002  INIT_FUNCTION #003  NTAPI #00

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

    reactos操作系统实现(5)

    一般的电脑都是使用硬盘来引导操作系统,由于硬盘是电脑的最常用的存储媒介,在 ReactOS 里,它会把一个硬盘划分成如下的形式:   通过安装程序把扇区引导程序写到硬盘分区引导记录扇区,然后当BIOS加电后,

    日期 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操作系统实现(54)

    reactos操作系统实现(54)

    从函数RunUSetup的循环处理里,可以看到第一个应处理,就是启动页面,也就是调用函数SetupStartPage,它的代码如下: #001  /* #002   * Start page #003   * RETURNS #004   *   Number of the

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

    reactos操作系统实现(56)

      在Reactos安装过程里,会出现下面的界面,如下:   上面的界面就是创建磁盘分区显示的内容,那么这个界面下面主要做了那些工作呢?磁盘又是怎么样分区的呢?分区后的数据怎么样保存到磁盘里的呢?接着下来,就分析创建磁盘分区的代码&#x

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

    reactos操作系统实现(59)

      当用户安装ReactOS系统时,需要选择合适的安装目录,因为同一个类型的操作系统,可以安装多次,可以选择不同的目录来安装,以便在同一台电脑,同一个磁盘分区里安装不同的系统。如下图: 选择系统目录的实现代码如下: #001  stat

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

    reactos操作系统实现(63)

      前面把注册表初始化完成之后,就开始进行安装引导程序了。这里安装的引导程序是分区引导程序,或者安装到软盘引导程序。当然也可以选择跳过不安装它,界面如下:     这个函数的代码如下: #001  static PAGE_NUMBER #002  BootLoaderPage

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

    reactos操作系统实现(71)

    I/O管理器是管理着整个计算机的输入和输出的操作,因此它是一个基本的组成部份。I/O管理器的初始化调用是在文件reactos/ntoskrnl/ex/init.c里,它主要调用I/O管理器的函数IoInitSystem()来实现,这个函数在文件reactos/ntoskrnl/io/iomgr/iomgr.c

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

    reactos操作系统实现(74)

    很多驱动程序,都是通过硬件检测时写到注册表里保存起来的,因此读取注册表里键值列表,就知道有多少设备需要需要加载了。下面就从注册表里创建一组驱动程序列表,实现的代码如下: #001  NTSTATUS INIT_FUNCTION #002  IoCreateDriverList(

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

    reactos操作系统实现(76)

    当键盘类驱动程序或鼠标类驱动程序枚举时,会找到很多设备,这些设备需要使用回调的方式来进行初始化。下面的函数,就是实现回调初始化驱动程序,如下: #001  VOID #002  NTAPI #003  IopReinitializeBootDrivers(VOID) #00

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

    reactos操作系统实现(32)

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

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

    reactos操作系统实现(33)

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

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

    reactos操作系统实现(77)

    因为PC里一条总线上可以连接很多设备,就像一棵树一样,需要遍历所有总线上所有子设备,并且为每一个子设备安装相应的驱动程序,下面这个函数,实现枚举所有子设备,实现代码如下: #001  NTSTATUS #002  IopEnumerateDevice

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

    reactos操作系统实现(79)

    下面这个函数实现标记引导分区,代码如下: #001  BOOLEAN #002  INIT_FUNCTION #003  NTAPI #004  IopMarkBootPartition(IN PLOADER_PARAMETER_BLOCK LoaderBlock) #005  { #006      OBJE

    日期 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操作系统实现(37)

    reactos操作系统实现(37)

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

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

    reactos操作系统实现(38)

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

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

    reactos操作系统实现(40)

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

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

    reactos操作系统实现(93)

    现在来分析一下键盘驱动程序里主要使用的IRP主功能代码,由于每一个IRP都在首部包括有一个主功能代码码,并且还可能有次功能代码。大体有下面几种主功能代码: IRP_MJ_CREATE                    创建或打开设备文件。 IRP_MJ_CREATE_NAMED_PIPE       

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

    reactos操作系统实现(95)

    在PNP管理器里,最重要的处理,就是即插即用消息。下面来分析键盘的即插即用消息处理函数,实现的代码如下: #001  NTSTATUS NTAPI #002  i8042Pnp( #003     IN PDEVICE_OBJECT DeviceObject, #004     IN P

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

    reactos操作系统实现(102)

    ATAPI驱动程序的源码在目录drivers/storage/ide/atapi里,其实ATAPI是一个IDE的小端口驱动程序,主要初始化不同总线上的ATAPI设备,其中最重要的就是从PCI总线里查找到IDE控制器。下面来分析这个驱动程序的入口函数: #001  ULONG #002  NT

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

    reactos操作系统实现(106)

    FindDevices函数主要用来查找ATAPI控制器,并且获取磁盘的参数。如果找到IDE的设备就返回TRUE,否则返回FALSE。其实是通过ATAPI的标志和IssueIdentify命令来判断IDE设备。 #001  BOOLEAN #002  NTAPI #003  FindDevices( #004    

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

    reactos操作系统实现(110)

    AtapiStartIo函数主要处理同步的IO请求包。具代的实现代码如下: #001  BOOLEAN #002  NTAPI #003  AtapiStartIo( #004      IN PVOID HwDeviceExtension, #005      IN PSCSI_REQUEST_BLOCK Srb #006

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

    reactos操作系统实现(114)

    PciIdeXAddDevice函数是用来添加PCIIDEX的设备,设置一个功能设备,并读取PCI总线的配置参数。具体实现代码如下: #001  NTSTATUS NTAPI #002  PciIdeXAddDevice( #003     IN PDRIVER_OBJECT DriverObject,

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

    reactos操作系统实现(126)

     VfatCreateFile函数主要用来创建或者打开一个文件,具体实现如下: #001  static NTSTATUS #002  VfatCreateFile ( PDEVICE_OBJECT DeviceObject, PIRP Irp ) #003  /* #004   * FUNCTION: Create o

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

    reactos操作系统实现(122)

     IoReadPartitionTable函数是读取磁盘分区表数据。它的实现代码如下: #001  NTSTATUS #002  FASTCALL #003  IoReadPartitionTable(IN PDEVICE_OBJECT DeviceObject, #004                       IN ULONG

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

    reactos操作系统实现(130)

     vfatMakeRootFCB函数是用来创建FAT文件系统的根目录,实现代码如下: #001  PVFATFCB #002  vfatMakeRootFCB(PDEVICE_EXTENSION  pVCB) #003  { #004     PVFATFCB  FCB; #005     ULONG FirstClu

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

    reactos操作系统实现(123)

     目前,Reactos主要使用FAT的文件系统,因此下面就先来分析这个文件系统,以便了解这个文件系统的功能。这个文件系统的实现是在驱动程序FASTFAT.SYS里实现的,所以来分析这个驱动程序的源码,就可以了解FAT文件系统了。   6.2.1 FAT文件系统驱动程序入口函数 FA

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

    reactos操作系统实现(133)

     VfatReadDiskPartial函数主要用来构造一个IRP给底层驱动程序去读取数据返回。具体实现代码如下: #001  NTSTATUS #002  VfatReadDiskPartial (IN PVFAT_IRP_CONTEXT IrpContext, #003              IN PLARGE_INTEGER

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