论坛首页 编程语言技术论坛

Win32的进程-win32多线程程序设计读书笔记

浏览 1884 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (7) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-12-31   最后修改:2009-12-31
进程
进程是一大堆对象的所有权的集合,进程拥有对象,进程可以拥有内存(memory context,理论上可以高达2GB),可以拥有file handles,可以拥有线程,可以拥有一大串DLL模块(被载入这一进程的地址空间中),可以拥有GDI资源(如Device Context和brushes)。

内存
内存可以大致分为三种类型:
Code:readonly,CPU唯一允许执行的内存

Data:程序中的所有变量(不包括函数中的局部变量),可区分为全局变量和静态变量两种,线程也可以使用malloc或者new动态配置内存。

Stack 调用函数时所用的堆栈空间,其中有局部变量,每个线程产生时配有一个堆栈。

CPU通过寄存器EAX,EBX,ECX,EDX,堆栈指针ESP, 指令指针E了解线程在任何时刻的工作状态。

Context Switching
在一个抢先式多任务系统中,操作系统小心地确保每个线程都有机会执行,它会依赖硬件的协助以及许多的记录工作。当硬件计时器认为某个线程已经执行够久了,就会发出一个中断,于是CPU取得目前这个线程的当前状态,也就是把所有寄存器内容拷贝到堆栈中,再把它从堆栈拷贝到一个context结构(这样便储存了线程的状态)中,以便以后再用。
切换不同的线程,操作系统应先切换该线程所隶属之进程的内存,然后恢复该线程放在context结构中的寄存器值。这个过程称为context switch。也就是换一套memory context-page directory和page tables

如果两个线程隶属不同进程,则这两个进程没有办法共享任何内存。即使两个进程以为它们在相同的地址上运行,实际上两个进程的指针事实上指向不同的实际内存。如果两个线程需要通信需要使之拥有共享内存(shared memory),同属同一进程,则将共享所有的内存。
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics