GiraffeOS设计与实现(2)-抢占CPU

(由于之前的blog已经关闭了,所以将此文章迁移至这里,并非转载)

前篇文章已经说了GiraffeOS大体是什么样的一个东西,并且简单的介绍了一下开发的入门环境搭建等,这一次我们将继续说明如何将其实现。

空闲的CPU

之前已经说了GiraffeOS是在单独的一个CPU内核中跑的,这样就引出来一个问题。如何能让Windows给我们让一个CPU内核共GiraffeOS运行(对于这个问题,大家可以开动脑筋考虑,并且不要去考虑如何实现,只是简单的想出来方法就好,不一定要知道到底能不能实现。其实这也是面对问题的时候的思考方式,不一定要知道能不能实现,再去思考。而是应该先思考,然后再考虑能不能实现,这样才能证明自己的想象力没有被抹杀。)。我这边可以考虑出来的可能有如下几种:

  1. 在Windows启动后,关闭一个CPU内核或者抢走一个内核。
  2. 在Windows启动前,不让Windows占用那么多CPU内核

上面的2点就是我考虑到的,然后再考虑实现,第一点,存在一个问题,就是Windows提没提供这个功能,我查了好久,也试了几个办法(抢走中断然后不还了)都没成功,于是放弃了。对于第二点让Windows空出来一个CPU内核,想到的可能有两种,一个是Windows知道电脑中有多少个CPU内核并且故意让出来一个或多个,另外一点是通过BIOS欺骗Windows,少告诉Windows可用的CPU内核数。后来研究了一些代码后发现,Windows获取CPU内核数的方法和CPU引导有关,BIOS也没这个能力。但是前面的方法却有了思路,并且微软也提供了这样的功能,Windows可以主动的让出来一个或多个CPU并且还可以让出来一些内存。

设置Windows空出CPU及内存

这里讲具体的讲如何让Windows空出来一个CPU及一些内存。按如下步骤操作即可,由于本节没讲太多复杂的内容,所以我就多截了些图。切记,下面的操作是在目标机中执行的,不是开发机。

1.点击Win+R键(或者从附件里面找到“运行”),在里面输入“msconfig”然后点击确定。

2.在打开的“系统配置”对话框中,选择第二个“引导标签”,点击“高级选项”按钮。

GiraffeOS设计与实现(2)-抢占CPU_第1张图片

3.在打开的引导高级选项中选择使用的处理器数,以及内存数。我这里的目标机是2个CPU及2G内存,所以我这边使用的是1个CPU及1792M内存。相当于给GiraffeOS留了一个CPU以及256M内存。

GiraffeOS设计与实现(2)-抢占CPU_第2张图片

根据如上的配置,从启电脑后,就可以看到Windows只使用了根据如上设置的资源。(可以通过R/W Everything来查看下内存,大于1792-2048的地方已经可以随意写数据,并且不会引起问题了)。

题外话

有些人的电脑可能差了4G内存,并且按照如上方式给GiraffeOS预留了256M内存,但是发现,这些内存上仍然有数据占着或者都是0xFF。其实这都不是问题。问题出在了Windows,Windows在4G内存的使用上,其实没有使用到4G,因为还存在一些资源映射等,资源映射的位置大约是从4G向下映射,所以,就算你让出来了256M,这256M你也用不了的,因为都被映射到其他设备的寄存器上了。我的ACPI水平不高,只能说略懂皮毛,应该可以做一些设置吧。

未完,待续……

你可能感兴趣的:(windows,cpu,操作系统,X86,GiraffeOS)