- 博客(20)
- 资源 (44)
- 收藏
- 关注
原创 reactos操作系统实现(50)
当运行到内核函数Phase1Initialization里,就是进行内核第一阶段初始化了,这时在这个函数又调用函数Phase1InitializationDiscard进行复杂的处理,在这里有一个重要的步骤,就是打开内核应用程序smss.exe来运行。具体代码如下:#001 /* Update progress bar */#002 InbvUpdateProgressB
2009-07-25 22:56:00 2407
原创 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 2185
原创 reactos操作系统实现(48)
每当安装到一个全新的电脑时,都需要使用安装程序来把系统安装到电脑的硬盘里面,这个过程其实是一个极其重要的过程,如果用户不容易安装系统的话,那么这个系统也是很难使用的系统,不利于系统广泛使用和推广。下面就来了解Reactos是怎么实现整个安装过程的。当使用make bootcd的编译命令时,就是编译一个可以启动并安装系统的光盘文件。这个光盘文件,就是使用上面介绍的ISOBOOT的方式实现系
2009-07-23 23:18:00 3056
原创 reactos操作系统实现(47)
当光盘变成记录数据以后,就开始使用光盘来分发操作系统了。毕竟光盘有着储存数据量大,成本便宜的优势。下面就来分析Reactos是怎么样通过光盘的格式来引导操作系统的。现今的计算机BIOS,会在开机时根据El Torito规格,查找光盘上的开机代码。若该光盘具有开机代码,则BIOS会指配一个磁盘驱动器代号给该光驱。磁盘驱动器代号通常为80(模拟硬盘)或是00(模拟软盘)等。借由模拟成硬盘或软盘
2009-07-22 20:14:00 3382
原创 reactos操作系统实现(46)
在线程调度里可以看到,需要调用函数KiSwapContext来进行运行环境切换,由于每个CPU都是只能运行一个线程,而多个线程在运行过程中被中断了,那么就需要保存CPU所有寄存器,以便下一次恢复线程时可以接续运行。现在就来分析这个函数是怎么样实现这些工作的,代码如下:#001 /*++#002 * KiSwapContext #003 *#004 * T
2009-07-21 21:27:00 2479 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 1935
原创 reactos操作系统实现(44)
前面分析了怎么样把一个线程放到延迟就绪队列,接着下来的问题就是这些在就绪队列里的线程什么时候开始运行呢?又是怎么样把就绪队列的线程取出来运行的呢?线程调度的触发事件有以下四种:1) 线程进入就绪状态,如一个刚创建的线程,或者一个刚结束的线程。2) 线程的时间片用完。3) 线程调用系统服务发生等待,或者被系统改变其优先级。4) 线程改变自己运行的处理器。 先来分析第一种情
2009-07-19 12:05:00 2798 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 3514
原创 reactos操作系统实现(42)
接着下来,就需要分析函数KiReadyThread的作用了。根据线程状态来判断是否可以放入延迟队列,还是设置它为转换状态,代码如下:#001 VOID#002 NTAPI#003 KiReadyThread(IN PKTHREAD Thread)#004 { 获取当前线程的进程对象。#005 INPKPROCESS Process = Thre
2009-07-15 21:27:00 4811 2
原创 reactos操作系统实现(41)
当线程初始化成功后,是怎么样放到推迟就绪队列的呢?通过下面这几个函数的分析,就会了解这个问题了。从以前的分析可以知道是调用函数KeReadyThread来执行的,这个函数的代码如下:#001 VOID#002 NTAPI#003 KeReadyThread(IN PKTHREAD Thread)#004 {这里参数Thread就是刚刚创建的线程。 #005
2009-07-14 22:14:00 2280
原创 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 2376
原创 谈谈软件开发人员基本要求
美国次贷危机引发的世界金融危机,使全球经济发展面临严峻挑战,对我国就业环境也造成相当程度的冲击。据悉, 2008年10月以后,与金融紧密关联的证劵、保险、投资、理财等服务业大幅萎缩,同时,沿海地区劳动密集型企业、出口导向型企业更是受到了严重影响,社会就业压力高涨。而对2009年应届毕业生来说,就业压力达到历史新高,不少人甚至认为大学生重回知青时代,应该上山下乡。 面对这么困难的环境,有
2009-07-12 12:55:00 10137 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 5453 1
原创 reactos操作系统实现(38)
由于Reactos是以线程为最小的调度单位,如果仅仅创建进程的数据结构,不足以运行进程的任务,每个进程至少需要一个线程才可以运行,下面就来分析系统进程的线程创建,代码如下:#195 /* Setup the systeminitialization thread */#196 Status = PsCreateSystemThread(&SysThreadHan
2009-07-11 00:20:00 2041 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 3050 1
原创 reactos操作系统实现(36)
前面分析了进程管理器的初始化工作,主要就是把进程管理器的列表、对象初始化,还有第一和第二阶段的初始化工作。接着下来,我们来分析一下进程创建函数,看看进程在Reactos里是怎么样创建的,需要调用什么函数来创建进程,还有应用程序是怎么样调用API函数来创建进程的。可以从前面分析的代码里,看到创建第二个进程代码如下:#196 Status = PsCreateSystemThread
2009-07-08 23:03:00 1897 1
原创 reactos操作系统实现(35)
初始化活动的进程列表。#076 /* Initialize the ActiveProcess List */#077 InitializeListHead(&PsActiveProcessHead);#078 KeInitializeGuardedMutex(&PspActiveProcessMutex);#079 获取空闲的
2009-07-06 20:54:00 2480
原创 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 2745 2
原创 reactos操作系统实现(33)
当Reactos在系统初始化时,就会调用进程管理初始化函数PsInitSystem来进行初始化。只有把进程管理初始化后,才可以创建进程,这样才可运行各种各样的任务。下面就来分析进程管理器初始化函数:#001 BOOLEAN#002 NTAPI#003 PsInitSystem(IN PLOADER_PARAMETER_BLOCK LoaderBlock)#004 {在参
2009-07-02 20:50:00 2009 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 3375 3
python抓取天气并分析 实例源码
2017-08-28
书《深度学习》
2017-03-13
国产8051模拟器
2016-09-10
tinyxml2配套源码
2016-06-27
selenium的浏览器驱动
2016-06-14
开源鸿蒙4.0不能进入桌面的补丁
2024-03-17
开源鸿蒙 4.0 RK3566开发板配置
2024-03-17
svm_hog_data.rar
2020-03-02
实现numpy的C++库扩展
2019-11-24
python web py入门配套源代码
2018-02-23
webpy演示例子1
2018-02-21
胶囊模型的代码
2018-02-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人