`
frenchmay
  • 浏览: 232978 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

阅读更多
进程
进程是一大堆对象的所有权的集合,进程拥有对象,进程可以拥有内存(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),同属同一进程,则将共享所有的内存。
分享到:
评论

相关推荐

    Win32多线程程序设计_侯捷_部门截图

    在“Win32多线程程序设计”这一主题中,我们主要会涉及以下几个关键知识点: 1. **线程基础**:线程是操作系统分配CPU时间的基本单元,一个进程可以包含一个或多个线程。多线程允许程序并行执行不同的任务,提高...

    win32 汇编笔记精华

    本文将深入探讨win32汇编语言程序设计的核心概念、关键知识点以及在实际应用中的重要性。 **一、基础概念** 1. **指令集架构(ISA)**:Win32汇编基于Intel x86架构,这是最常见的个人计算机处理器架构之一,包括...

    c# WIN32控制台应用程序 个人助手

    Win32 API是Windows操作系统的核心组件,提供了大量的函数供开发者调用,涵盖了窗口管理、内存管理、线程与进程、网络通信等多个方面。虽然C#有.NET Framework提供的丰富的类库,但直接调用Win32 API可以让开发者...

    VC学习笔记及项目代码1

    4. **多线程程序设计**:在现代计算环境中,多线程是提高程序效率的重要手段。VC++支持多线程编程,允许程序同时执行多个任务。学习多线程编程,你需要理解线程同步机制,如临界区、互斥量、事件、信号量,以及如何...

    VC++深入学习笔记

    - **消息队列**:Windows程序设计基于消息传递模型。消息队列存储了发送给窗口的所有消息,这些消息包括键盘输入、鼠标点击等用户动作,以及系统产生的其他事件。应用程序通过一个消息循环不断地从消息队列中获取...

    C++深入详解笔记

    - 进一步探讨多线程环境下的数据共享问题,以及在网络编程中使用异步套接字提高效率的方法。 #### 进程间通信 - 学习不同进程之间交换数据的技术,包括管道、共享内存、命名管道等。 #### ActiveX控件 - 探索如何...

    vc学习笔记

    12. **多线程编程**:讨论如何在VC++中实现并发和多线程,以及线程同步和互斥锁的概念。 13. **文件操作**:讲解如何读写文件,包括文本文件和二进制文件,以及高级的文件流操作。 由于文件列表只给出了"vc学习...

    Filter驱动开发笔记

    - **应用场景**:网络编程、多线程编程等。 #### 38. Windows系统编程之异步I/O和完成端口 - **异步I/O**:允许程序在等待I/O操作完成的同时继续执行其他任务。 - **完成端口**:Windows操作系统提供的一种机制,...

Global site tag (gtag.js) - Google Analytics