Windows编程的黄山真面目

2、内核空间和用户空间:

    好了,现在知道在爱护情势下编写程序访问的是4GB的虚拟内存,不过这4GB空间也不是一切给应用程序用的,操作系统也要使用,所以Windows规定把4GB空间分成两半,低2GB(0—0x7fffffff)空间用户可以动用,而高2GB空间(0x80000000—0xffffffff)用户不可以动用,留给操作系统。所以这就有了用户空间和基本空间的区别。而以此确定实际也是用了CPU的特权级的功能:内核空间是0环,用户空间在3环,所以这就在CPU级别把基本和用户程序分割开了,目标就是确保用户程序无法骚扰内核,从而保证系统稳定。

既然Windows API编程是与Windows操作系统举办交互,所以就不可能不对Windows操作系统怎样运作应用程序的原理搞驾驭。

  
但现在题材又来了,内核空间用户不可能访问,那么操作系统的各类功效大家怎么调用呢?比如往屏幕上画一条线,在实格局下很粗略,就是在显存里面写一排01010101就足以了,可是在实形式下我们只能访问2GB用户空间,显存在什么地方都不了然,这怎么写啊?很容易想到的就是操作系统帮我们找显存的职位,大家只要调用操作系统的有关函数就足以了。不过操作系统在高2GB的基础空间中,大家仍然不可以直接行使。现在操作系统既要给大家用,又不可能让大家一贯用,那肿么办呢,微软的工程师想出的一个方法就是给我们一个数码,也就是句柄(HANDLE),让我们要用内核什么遵从就用句柄来用,这样就无须让大家领悟具体的基础地址了。从而内核对象也就自然发出,Windows对硬件的拥有操作都做成一个一个根本对象,咱们要用的时候就报名这么些目的,然后Windows给大家一个句柄,Windows内部计数器加1,我们毫不了就倒闭句柄,Windows内部计数器减1,当计数器为0的时候,Windows知道那么些基本对象已经毫无了,所以从真正物理内存中销毁。对于大家使用程序员来说,大家要做的作业就是报名基本对象,得到句柄,操作句柄,销毁句柄。而这些流程也就是和Windows交互的流程,也就是所谓Windows编程的本来面目。

3、内核对象:

     操作系统是专属于cpu硬件的,所以操作系统所持有的听从也是cpu所赋予的。Intel的32位CPU有两种重点的情势:实形式和珍爱情势。Dos操作系统就是运行在实形式下,而当代的操作系统都是充足利用了体贴格局,从而使系统大大的安全稳定性了诸多。现代总计机都是用的冯诺依曼体系,其主干就是内存。所以CPU内部有寄存器,外部有内存,所以所谓的实格局和爱惜形式其本质就是对内存的走访格局不同。实格局就是对内存的一贯访问,比如要在屏幕上显示一个数字就平素往显存中写就可以了,dos下编程就是这样的。但这有一个最大的问题就是不安全,任何程序可以擅自走访内存,很容易就和操作系统的地址争持,所以玩过dos的人都精晓电脑是很容易死机的。为了解决这多少个题目,AMD在386随后的CPU都提供了体贴格局。这种形式最重大的一个利用就是虚拟内存地址,大家都清楚32位的CPU可以寻址的限定是4GB,在虚拟内存中给每一个经过都分配了4GB的虚拟地址。假使同时运行10个经过就要有10个4GB的虚拟内存,这问题来了,哪有那样多的内存呢?呵呵,所以这是虚构内存嘛,不是实在的情理内存。只是面对经过,让程序员可以接纳的内存地址,比如 int * p=new int 这句话是向电脑要一个4字节的内存,地址存在p里面,假诺在实形式下p里面就是真的的大体地址,不过在保护形式下,p里面存的只是一个虚拟地址,至于真的的情理地址是稍微是不容许程序员知道的,当windows拿到p后会把p里面的虚拟地址映射到一个物理地址中去的,而那些进程是黑箱操作,普通的应用程序是不容许知道的。

1、敬重格局

相关文章