我很好奇嵌入式固件设计中使用的术语。我目前正在开发一个使用WinCE 7的项目。研究现有代码,我经历了多个高级和低级文档,讨论模块,进程和线程。我决定做一些研究,以便能够将定义与现有的代码架构联系起来。
我理解(或者我认为理解)是线程是进程的子进程,即进程由线程或轻量级进程组成。进程的功能是单击Microsoft Word图标,并根据需要执行相应的线程以执行该过程。线程是一个小的,集中的过程,负责主要过程的特定部分。如果我对线程和流程的理解错了,请纠正我。
我迷失的地方是流程和模块之间的区别。如果进程是执行任务所需的线程的执行,例如单击MS Word图标,那么什么是模块?
他们描述固件的方式是通过以下方式说:"系统架构将包含7个模块。每个模块负责某些功能,如数据存储,数据处理,用户界面等......"。从那以后,我收集到这些"模块"我的visual studio项目的Subprojects文件夹下列出的是高级系统设计,每个都包含构成进程的子文件(.cpp / .h),这些进程内部是线程(函数/类等等)。 。我的理解是否正确?
提前致谢并对这个长期问题感到抱歉。
答案 0 :(得分:1)
模块可以有多种含义,一般意味着某种类型的软件组件,在某些情况下只是一个文件,可以是源文件或可执行文件,也可以是文件集合,也许是文件的所有文件。夹。术语模块的另一种用法是指" modular"编程,其中模块是函数或函数集合,它们似乎适合于由7个模块组成的设备示例。
对于Windows,一般来说,每个进程都拥有自己的(虚拟)内存空间,而线程共享进程的公共(虚拟)内存空间。对于仅具有扁平物理地址空间(无虚拟内存)的嵌入式系统,主要区别在于启动进程,反过来这些进程启动线程。对于某些嵌入式系统,旧版多任务有时用于描述软件,尤其是在硬盘驱动器等设备中,其中多任务软件的主要部分在启动时启动(某些诊断软件可以从保护区域的硬盘驱动器,并根据需要运行。)
答案 1 :(得分:1)
Windows CE(以及一般的Windows)中的进程是应用程序的专用地址空间。 线程是执行流程。您可能在进程中有多个线程,主线程确定进程生命周期。如果退出它(WinMain函数),则关闭该进程并释放分配给它的所有资源。 模块是包含当前加载到内存中的代码的二进制文件。它可能是exe文件(用于启动进程)或动态链接库(dll)。
答案 2 :(得分:0)
您似乎试图根据特定用法描述进程和线程。例如。 "进程的功能是点击微软word图标"和#34;线程是一个小的,集中的过程,负责主要过程的特定部分。"
流程基本上是执行代码所需的资源集合。进程将具有诸如内存,包含要执行的代码的文件的句柄以及“线程”等内容。线程是实际执行的东西,使用进程拥有的其他资源。
当您运行程序时,操作系统会创建一个包含线程和其他资源的进程,并启动该线程在代码中的特定入口点执行所需的代码。从那时起,程序就它所调用的函数或它创建的对象的作用负责。它甚至可以将消息发送回操作系统,要求操作系统使用原始代码指定的参数启动更多线程,甚至完全分离进程。
有关详细信息,您可以看到wikipedia,或者您可能只想抓取操作系统上的教科书。
当您使用它时,术语“模块”并没有特别严格的定义。它只是程序组织的一个单元。该程序的架构师或开发人员负责根据他们希望项目的组织方式以及他们希望组件如何互操作来决定对他们的程序意味着什么。将模块看作是一个类似于帮助组织代码的函数或类,比其他组织特性更高一步,并且不一定内置于类或函数等语言语法中。
项目的组织单位(模块,类,函数等),流程和线程之间也没有任何固定的关系。程序可以设法使用它认为最适合的任何流程和线程来执行它喜欢的任何代码。
例如,可能会设计程序,以便为每个模块启动一个线程,并使每个线程运行一个特定的“主要”线程。该模块的功能。然后,模块被设计为通过在线程之间传递消息来进行互操作。或者另一个示例,程序可以为所有模块设置共享线程池,以便根据需要访问和使用。
模块如何共享执行资源(进程和线程)并相互通信完全取决于项目的设计者。应该记录细节,尽管文档可能是在假设读者熟悉常见模式的情况下编写的。由于您不熟悉这些模式,您可能需要从其他开发者那里获得帮助。