⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 15.1.1 进程.txt

📁 网上第一本以TXT格式的VC++深入详解孙鑫的书.全文全以TXT格式,并每一章节都分了目录,清晰易读
💻 TXT
字号:
第15章  多线程
本章将介绍多线程程序的编写,井利用多线程技术创建一个图形界面的网络聊天室程序。 
15.1:基本概念 
15.1.1 进程 
. 
1.程序和进程
初学者经常混淆程序和进程的概念。程序是计算机指令的集合,官以文件的形式存储
而进程通常被定义为一个正在运行的程序的实例,是一个程序在其自身的地址空间中的一次执行活
动。我们编写的程序在编译后生成的后缀为 .exe的可执行程序,是以文件的形式存储在磁盘上的,
当运行这个可执行程序时,就启动了该程序的一个实例,我们把它称之为进程。一个程序可以对应
多个进程,例如可以同时打开多个记事本程序的进程,同时,在一个进程中也可以同时访问多个程
序。
进程是资源申请、调度和独立运行的单位,因此,它使用系统中的运行资源:而程序不能申请系统资
源,不能被系统调度,也不能作为独立运行的单位,因此,它不占用系统的运行资源。 
2.进程组成
进程由两个部分组成:
(1)操作系统用来管理进程的内核对象
内核对象也是系统用来存放关于进程的统计信息的地方。内核对象是操作系统内部分配的一个内存
块,该内存块是一种数据结构,其成员负责维护该对象的各种信息。由于内核对象的数据结构只能
被内核访问使用,因此应用程序在内存中无法找到该数据结构,并直接改变其内容,只能通过 
Windows提供的一些函数来对内核对象进行操作。 
, (2)地址空间它包含所有可执行模块或 DLL模块的代码和数据。另外,它也包含动态内存分配的空间,
例如线程的战 Cstacks)和堆 Cheap)分配空间。
进程从来不执行任何东西,它只是线程的容器。若要使进程完成某项操作,它必须拥有一个在它的
环境中运行的线程,此线程负责执行包含在进程的地址空间中的代码。也就是说,真正完成代码执
行的是线程,而进程只是线程的容器,或者说是线程的执行环境。
单个进程可能包含若干个线程,这些线程都"同时"执行进程地址空间中的代码。每个进程至少拥有
一个线程,来执行进程的地址空间中的代码。当创建一个进程时,操作系统会自动创建这个进程的
第一个线程,称为主线程,也就是执行main函数或WinMain函数的线程,可以把main函数或WinMain
函数看作是主线程的进入点函数。此后,主线程可以创建其他线程。 
3.进程地址空间
系统赋予每个进程独立的虚拟地址空间。对于 32位进程来说,这个地址空间是4GB。因为对32位指
针来说,它能寻址的范围是232,即4GB。
每个进程都有它自己的私有地址空间。进程 A可能有一个存放在它的地址空间中的数据结构,地址
是 Oxl 2345678 ,而进程 B则有一个完全不同的数据结构存放在它的地址空间中,地址也是
Ox12345678o当进程A中运行的线程访问地址为Ox12345678的内存时,这些线程访问的是进程A的数据
结构。当进程B中运行的线程访问地址为Ox12345678的内存时,这些线程访问的是进程B的数据结构。
进程A中运行的线程不能访问进程B的地址空间中的数据结构,反之亦然。 
4GB是虚拟的地址空间,只是内存地址的一个范围。在你能成功地访问数据而不会出现非法访问之前,
必须赋予物理存储器,或者将物理存储器映射到各个部分的地址空间。这里所说的物理存储器包括
内存和页文件的大小,读者可以同时按下键盘上的【Ctrl+Alt+Del】键,然后在弹出的对话框上单
击【任务管理器】按钮,在随后显示的Windows任务管理器对话框的右下方就可以看到当前内存的使
用情况,如图 15.1所示。 
图 15.1 系统当前内存使用情况
由图 15.1可知,笔者机器上的内存大小为942856K,它实际上包括了物理内存和页文件的大小。本
机物理内存是384M,页文件大小是576M。我们可以在资源管理器中选中系统安装所在的盘符,接着
选择【工具\文件夹选项. ..】菜单项,然后打开查看选项	卡,取消"隐藏受保护的操作系统文件 (推
荐)"选项的复选状态,如图 15.2所示。然后在该驱动器下就可以看到有一个名为: pagefile.sys
的文件,在笔者的机器上,该文件的大小是576M,这个文件就是页文件。页文件透明地为应用程序
增加了可以使用的内存。它通过在磁盘上划分出一块空间当作内存使用,从而增加了应用程序可以
使用的内存,我们把这块内存称为虚拟内存。 
图 15.2文件夹选项对话框

如果想要修改页文件的大小,可以在桌面上用鼠标右键单击"我的电脑"图标,然后从弹出的快捷菜
单中选择【属性】命令,即可打开系统特性对话框,打开高级选项卡,可以看到该页上有一个【性
能选项】按钮,单击该按钮,即可弹出如图 15.3所示的对话框。

图 15.3性能选项对话框

可以看到,笔者机器上当前虚拟内存的大小为576MB。如果想要修改其大小的话,可以单击【更改】
按钮,即可弹出虚拟内存设置对话框,如图 15.4所示。利用这个对话框,连可以在其他驱动器下设
置页文件的初始人小和最大值。应用程序在运行时,如果使用的内存超过了页文件的初始大小,页
文件会自动增长。一旦超过设定的页文件的最大值时,系统有可能会崩溃。在这里,如果修改了页
文件的大小,需要单击【设置】按钮,然后更改才会生效。
图 15 .4虚拟内存设置对话框

实际上, 4GB虚拟地址空间中, 2GB是内核方式分区,供内核代码、设备驱动程序、设备 1/0高速
缓冲、非页面内存池的分配和进程页面表等使用,而用户方式分区使用的地址空间约为 2GB,这个
分区是进程的私有地址空间所在的地方,其中还有一部分地址空间是作为 NULL指针分区。一个进程
不能读取、写入、或者以任何方式访问驻留在该分区中的另一个进程的数据。对于所有应用程序来
说,该分区是维护进程的大部分数据的地方。 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -