
C/C++
文章平均质量分 77
itecwwj
这个作者很懒,什么都没留下…
展开
-
windows via C/C++ Read Notes (1) ——Kernel Object (1)
Windows内核对象由内核管理,对象句柄依赖于进程。进程调用函数获取内核对象句柄,并对其操作。进程内内核句柄表书中假设了一种Windows的进程内核句柄表的实现:创建进程的时候,表会初始化为空。如果创建了一个内核对象,操作系统在该表内寻找一个没有使用过的槽(内存块,类似数组的一个单元),填入地址信息和句柄属性信息。如果释放一个内核对象,操作系统会对该内核对象引用计数减一,如原创 2009-05-17 08:07:00 · 842 阅读 · 0 评论 -
Windows Via C/C++ 读书笔记 12 Heap(堆)
Windows Via C/C++ 读书笔记 12 Heap(堆)1. Overview堆是除了Reserve-Commit和Memory-Mapped Files外的第三种也是最后一种内存管理方式。它适合用来保存数量很多的小块,优点是不需要做复杂的reserve-commit操作,缺点是不能commit-decommit最大化利用内存。堆实际上是在进程地址空间中reserve原创 2009-06-18 00:19:00 · 1098 阅读 · 0 评论 -
Windows Via C/C++ 读书笔记 11
Windows Via C/C++ 读书笔记 11 Memory-Mapped Files(内存映射文件)1. OverviewMemroy-Mapped Files(MMFs)是提供一种像访问内存一样访问文件的方案。Memroy-Mapped Files(MMFs)的作用有3个:1. 系统用MMFs读取exe和dll文件。还记得前面讲的物理内存和磁盘内存(page fil原创 2009-06-15 21:10:00 · 1170 阅读 · 0 评论 -
Windows Via C/C++ 读书笔记 9 Windows Memory Architecture
这章讲进程内存与操作系统物理内存之间的关系,操作系统如何管理。关键字:虚拟地址空间,reserve commit free三步。Windows Via C/C++ 读书笔记 9 Windows Memory Architecture 1. 进程的虚拟地址空间每个进程都有自己的虚地址空间,32bit系统的地址空间是4GB(0x00000000~0xFFFFFFFF),64bit系原创 2009-06-13 17:55:00 · 1324 阅读 · 0 评论 -
Windows Via C/C++ 读书笔记 10
Windows Via C/C++ 读书笔记 10 Windows 内存架构(2)1. 线程的栈当一个线程被创建的时候,操作系统会给它的栈reserve一块区域,通常大小为1M,然后立刻在栈顶commit 2个pages。(见图1)第一个Page是供线程立刻可以使用,第二个page是守护页面(guard page),当线程用完第一个页面的时候,需要更多栈内存会访问到守护页面,操原创 2009-06-14 09:51:00 · 693 阅读 · 0 评论 -
Windows Via C/C++ 读书笔记 8 Fiber(纤程)
Windows Via C/C++ 读书笔记 8 Fiber(纤程)1. Overview本章讲UNIX多线程和Windows线程区别,和Fibers的相似。Unix部分是我查资料加个人理解写的,可能有些错误,请达人指正。UNIX操作系统的多线程实现。这章比较短,查了下UNIX线程的实现。以前知道UNIX只有进程的概念,后来工作又接触了pthreads多线程编程,一直没搞明白。原创 2009-06-10 09:58:00 · 3059 阅读 · 1 评论 -
Windows Via C/C++ 读书笔记 7 异步IO, 完成端口模式
Windows Via C/C++ 读书笔记 7 1. 异步IO异步IO简单来讲就是把读写IO操作调用后交给操作系统处理,调用线程可以继续干其它的事情。当操作系统完成IO操作后,通知调用线程。调用线程得到通知后,再处理。后面会讲如何设置IO模式为异步模式,如何获取通知。 操作顺序未知文件的异步IO操作会提交给操作系统的队列,驱动程序不会严格按提交顺序执行。比如有的操作离原创 2009-06-08 21:19:00 · 2509 阅读 · 0 评论 -
Windows Via C/C++ 读书笔记 6
Windows Via C/C++ 读书笔记 6 1. 用内核对象做线程同步1.1. OverviewWhy use kernel object?内核对象做同步操作要进入系统模式,比用户模式更消耗CPU,为什么还要用呢?内核对象同步操作功能更多,比如跨进程的同步,非阻塞同步等待。内核对象同步的关键内核对象有两个状态:"signaled", "nonsignale原创 2009-06-05 16:55:00 · 974 阅读 · 0 评论 -
Windows Via C/C++ 读书笔记 5 用户模式的线程同步
Windows Via C/C++ 读书笔记 5 1. 用户模式的线程同步1.1. 原子操作函数Windows提供几个原子操作函数://给变量做加减操作InterlockedExchangeAddInterlockedExchangeAdd64//修改变量值,返回变量原先值InterlockedExchangeInterlockedExchange64原创 2009-06-02 20:34:00 · 1467 阅读 · 0 评论 -
Windows Via C/C++ 读书笔记 3
Windows Via C/C++ 读书笔记 3 1. JobJOB,翻译成工作或者任务。JOB是管理多个进程的集合体。如果你需要一次关闭多个进程,并且要在所有进程退出后得到通知,那么可以使用JOB这种对象。1.1. Job的使用流程1. 创建JOB或查找一个已有的JOB2. 把进程加入到JOB中3. 关闭JOB4. 等待JOB结束(JOB结束后会处于Signale原创 2009-05-25 20:37:00 · 1088 阅读 · 0 评论 -
Windows Via C/C++ 读书笔记 4 线程调度 优先级
Windows Via C/C++ 读书笔记 4 1. Thread Scheduling, Priorities, and Affinities1.1. 暂停和恢复线程线程内核对象有一个Suspending计数,每对线程做Suspending操作,该计数加一。如果该计数不为0,线程不会被执行。因此要Resume一个线程,必须调用相同次数的Resume操作。1.2.原创 2009-05-27 08:44:00 · 3651 阅读 · 0 评论 -
Windows Via C/C++ 读书笔记 2
Windows Via C/C++ 读书笔记 21. 进程概念进程是一个运行程序的实例。包含2个东东:一个让操作系统管理进程的内核对象。一个地址空间(包含执行代码和数据),也包含动态内存分配的空间。 一个进程必须靠线程运行,它至少含有一个线程,即主线程。主线程再来创建更多线程。 2. 进程启动Windows有一个启动函数 "XXmianCRTStartu原创 2009-05-21 20:04:00 · 737 阅读 · 0 评论 -
Windows Via C/C++ 读书笔记 13 动态链接库基础DLL Basics
Windows Via C/C++ 读书笔记 13 动态链接库基础DLL Basics1. Overview本章讲DLL概念(比一些教程仔细得多),实现方式,并给一个简单的DLL例子说明代码如何构建。废话少说,先上图。这张图说明了一个DLL由编写到链接、被调用的全部过程。看这篇文章前,你至少要知道什么是compile,什么是link,都干了些啥。左边的树是DLL文件原创 2009-06-21 15:51:00 · 870 阅读 · 0 评论