戒傲戒惰

2013年8月30日

windows核心编程---第六章 线程的调度

摘要: 每个线程都有一个CONTEXT结构,保存在线程内核对象中。大约每隔20mswindows就会查看所有当前存在的线程内核对象。并在可调度的线程内核对象中选择一个,将其保存在CONTEXT结构的值载入cpu寄存器。这被称为上下文切换。大约又过20mswindows将当前cpu寄存器存回内核对象,线程被挂起。Windows再次检查内核对象,并在可调度的内核对象中选择一个进行调度。此过程不断重复直到系统关闭。Windows被称为抢占式多线程系统,系统可以在任何时刻停止一个线程而另行调度另外一个线程。我们对此可以有一些控制,但是权限很小。我们无法保证线程总在运行或者获得整个处理器。由于windows并. 阅读全文

posted @ 2013-08-30 15:30 戒傲戒惰 阅读(269) 评论(0) 推荐(0)
windows核心编程---第五章 线程的基础

摘要: 与前面介绍的进程一样,线程也有两部分组成。一个是线程内核对象。它是一个数据结构,操作系统用它来管理线程以及用它来存储线程的一些统计信息。另一个是线程栈,用于维护线程执行时所需的所有函数参数和局部变量。位于同一个进程的线程共享进程的地址空间且它们共享进程句柄表。因为句柄表是针对进程的。进程需要很多的系统资源,而线程仅仅需要一个线程内核对象和线程栈就可以了,因此线程比进程的开销要小得多。采用多线程来处理问题也是理所当然的了。采用多线程可以提高程序的执行效率,但是多线程也存在很多问题。在尝试使用多线程时如果处理不当还可能会引入新的问题。如同步问题。每个线程都需要一个入口点函数。这是线程执行的起点.. 阅读全文

posted @ 2013-08-30 15:25 戒傲戒惰 阅读(168) 评论(0) 推荐(0)
windows核心编程---第四章 进程

摘要: 上一章介绍了内核对象,这一节开始就要不断接触各种内核对象了。首先要给大家介绍的是进程内核对象。进程大家都不陌生,它是资源和分配的基本单位,而进程内核对象就是与进程相关联的一个数据结构。操作系统内核通过它管理进程,也就是操作系统原理上介绍的进程控制块(PCB)。举个例子,它就相当于每个学生都有的学籍,学校管理我们都是通过学籍,什么记过了,处分了,开除学籍了,都是在学籍上做文章。进程一般被定义为一个正在运行的程序的一个实例,它由两部分组成:1:内核对象,操作系统用它来管理进程。内核对象也是系统保存进程统计信息的地方。2:一个地址空间,其中包含所有可执行文件或DLL模块的代码和数据。Windows支 阅读全文

posted @ 2013-08-30 15:24 戒傲戒惰 阅读(218) 评论(0) 推荐(0)
windows核心编程---第三章 内核对象及句柄本质

摘要: 本章讨论的是相对抽象的概念,不涉及任何具体的内核对象的细节而是讨论所有内核对象的共有特性。首先让我们来了解一下什么是内核对象。内核对象通过API来创建,每个内核对象是一个数据结构,它对应一块内存,由操作系统内核分配,并且只能由操作系统内核访问。在此数据结构中少数成员如安全描述符和使用计数是所有对象都有的,但其他大多数成员都是不同类型的对象特有的。内核对象的数据结构只能由操作系统提供的API访问,应用程序在内存中不能访问。调用创建内核对象的函数后,该函数会返回一个句柄,它标识了所创建的对象。它可以由进程的任何线程使用。在32位系统中,句柄是一个32位值。64位系统中则是64位值。很多人对句柄到. 阅读全文

posted @ 2013-08-30 15:23 戒傲戒惰 阅读(230) 评论(0) 推荐(0)
windows核心编程---第二章 字符和字符串处理

摘要: 使用vc编程时项目--》属性--》常规栏下我们可以设置项目字符集合,它可以是ANSI(多字节)字符集,也可以是unicode字符集。一般情况下说Unicode都是指UTF-16。也就是说每个字符编码为两个字节。65535个字符可以表示世界上大部分的语言。为了软件使国际化大家再编程时应该使用unicode字符集。由于原来学过c语言,不习惯使用Unicode,为了省事而直接在配置属性里调为多字节字符集,这是个不好的习惯。C语言的字符串,以及对这些字符串操作的函数都是不安全的。很容易导致缓冲区溢出错误,有时这会导致很严重的后果。所以极力建议大家要使用Unicode字符串,对它们进行的操作要使用接.. 阅读全文

posted @ 2013-08-30 15:18 戒傲戒惰 阅读(208) 评论(0) 推荐(0)
windows核心编程---第一章 谈谈windows中的错误处理机制

摘要: 我们写的函数会用返回值表示程序执行的正确与否,使用void,就意味着程序一定不会出错。Bool类型标识true时为真,false时为假。其他类型根据需要可以定义成不同意义。 Windows除了使用返回值标识函数执行情况,外还引入了错误代码机制。返回值指出函数已发生一个错误。要查看具体是什么错误,就应该使用错误代码。如当我们调用函数打开一个文件,如果打开失败,可能出现多种原因。一是:文件不存在,另一种是该文件被其他程序互斥使用。在这两种情况下都导致文件打开失败,返回值仅仅标识打开失败,但我们不知道原因。这时错误代码就派上用场了。 Windows将错误代码存储于独立于线程的,线程局部存储区中... 阅读全文

posted @ 2013-08-30 15:17 戒傲戒惰 阅读(165) 评论(0) 推荐(0)