新闻中心

EEPW首页>嵌入式系统>设计应用> 单片机实时操作系统中进程与乡程

单片机实时操作系统中进程与乡程

作者: 时间:2016-11-24 来源:网络 收藏
注意:在单片机中一般没有MMU,最多cortex-3也只能实现MPU功能,所以它不能转换虚拟地址空间。所以只有一个进程。因此基于单片机实现的多任务都是线程。

本文引用地址://m.amcfsurvey.com/article/201611/321059.htm

在32位的Windows系统中,术语多任务是指系统可以同时运行多个进程,而每个进程也可以同时执行多个线程。

----------------------------------------------------------------------------------------------------------------------

进程能开多少个?
进程表不可以无限开。每个进程在系统内核的进程表中都有记录,以便于系统的调度,在进程表中应该会给每个进程一个固定长度的编号,比如说8位或16位的二进制号码,编号的长度决定了系统最多可以调度的进程数。一般XP开200个进程没问题的,只要配置高一点。


1、那么一个进程能开多少线程?

默认情况下,一个线程的栈要预留1M的内存空间,而一个进程中可用的内存空间只有2G,所以理论上一个进程中最多可以开2048个线程,但是内存当然不可能完全拿来作线程的栈,所以实际数目要比这个值要小。

能开多少进程是根据内存限制的。

2.如何突破2000个限制?
你也可以通过连接时修改默认栈大小,将其改的比较小,这样就可以多开一些线程。如将默认栈的大小改成512K,这样理论上最多就可以开4096个线程。
即使物理内存再大,一个进程中可以起的线程总要受到2GB这个内存空间的限制。比方说你的机器装了64GB物理内存,但每个进程的内存空间还是4GB,其中用户态可用的还是2GB。

如果是同一台机器内的话,能起多少线程也是受内存限制的。每个线程对象都要站用非页面内存,而非页面内存也是有限的,当非页面内存被耗尽时,也就无法创建线程了。

如果物理内存非常大,同一台机器内可以跑的线程数目的限制值会越来越大。

可以通过修改CreateThread参数来缩小线程栈StackSize,

----------------------------------------------------------------------------------------------------------------------
进程就是应用程序的运行实例。每个进程都有自己私有的虚拟地址空间。每个进程都有一个主线程,但可以建立另外的线程。进程中的线程是并行执行的,每个线程占用CPU的时间由系统来划分。


可以把线程看成是操作系统分配CPU时间的基本实体。系统不停地在各个线程之间切换,它对线程的中断是汇编语言级的。系统为每一个线程分配一个CPU时间片,某个线程只有在分配的时间片内才有对CPU的控制权。实际上,在PC机中,同一时间只有一个线程在运行。由于系统为每个线程划分的时间片很小(20毫秒左右),所以看上去好象是多个线程在同时运行。

进程中的所有线程共享进程的虚拟地址空间,这意味着所有线程都可以访问进程的全局变量和资源。这一方面为编程带来了方便,但另一方面也容易造成冲突。

虽然在进程中进行费时的工作不会导致系统的挂起,但这会导致进程本身的挂起。所以,如果进程既要进行长期的工作,又要响应用户的输入,那么它可以启动一个线程来专门负责费时的工作,而主线程仍然可以与用户进行交互。

简单的说,你每启动一个程序,就启动了一个进程。在Windows 3.x下,进程是最小运行单位。在Windows 95/NT下,每个进程还可以启动几个线程,比如每下载一个文件可以单独开一个线程。在Windows 95/NT下,线程是最小单位。WINDOWS的多任务特性使得线程之间独立运行,但是它们彼此共享虚拟空间,也就是共用变量,线程有可能会同时操作一片内存。

所谓进程,本身不能执行,它只是一个资源的集合体,拥有地址空间,模块,内存,...
线程是真正的执行单元,一个进程如果没有线程,那么就没有存在的意义,因为不可能执行



评论


技术专区

关闭