linux中进程处理和嵌入式linux中的进程处理有什么区别?

linux中进程处理和嵌入式linux中的进程处理有什么区别?,第1张

根据我的经验:

嵌入式Linux中的进程是经过修改的Linux进程。

主要区别在嵌入式Linux依据特定的要求,修改了进程的调度方法,使之更具备实时性。

例如在通用Linux *** 作系统中,进程调度的时间片是10毫秒,而在嵌入式Linux中有可能根据实际要求将进程调度时间修改为5毫秒。

下面是一个场景。

可以想象,如果在一个医疗设备中使用嵌入式Linux,由于医疗设备测量精度要求(或许每5毫秒采样一次然后进行数据处理),那么就应该减小每个进程占用的时间片,使得进程能够在更短的时间内被调度而得到运行(首先采样进程运行、然后数据处理进程运行、再然后采样进程运行、……)。

gettimeofday(取得目前的时间)

相关函数

time,ctime,ftime,settimeofday

表头文件

#include <sys/time.h>

#include <unistd.h>

定义函数

int gettimeofday ( struct timeval * tv , struct timezone * tz )

函数说明

gettimeofday()会把目前的时间有tv所指的结构返回,当地时区的信息则放到tz所指的结构中。

timeval结构定义为:

struct timeval{

long tv_sec/*秒*/

long tv_usec/*微秒*/

}

timezone 结构定义为:

struct timezone{

int tz_minuteswest/*和Greenwich 时间差了多少分钟*/

int tz_dsttime/*日光节约时间的状态*/

}

上述两个结构都定义在/usr/include/sys/time.h。tz_dsttime 所代表的状态如下

DST_NONE /*不使用*/

DST_USA /*美国*/

DST_AUST /*澳洲*/

DST_WET /*西欧*/

DST_MET /*中欧*/

DST_EET /*东欧*/

DST_CAN /*加拿大*/

DST_GB /*大不列颠*/

DST_RUM /*罗马尼亚*/

DST_TUR /*土耳其*/

DST_AUSTALT /*澳洲(1986年以后)*/

返回值

成功则返回0,失败返回-1,错误代码存于errno。附加说明EFAULT指针tv和tz所指的内存空间超出存取权限。

范例

#include<sys/time.h>

#include<unistd.h>

main(){

struct timeval tv

struct timezone tz

gettimeofday (&tv , &tz)

printf(“tv_sec%d\n”, tv,.tv_sec)

printf(“tv_usec%d\n”,tv.tv_usec)

printf(“tz_minuteswest%d\n”, tz.tz_minuteswest)

printf(“tz_dsttime, %d\n”,tz.tz_dsttime)

}

执行

tv_sec: 974857339

tv_usec:136996

tz_minuteswest:-540

tz_dsttime:0

交替输出,这正是并发的特征。并发就是要在极短的时间内 将CPU的时间片轮流分配给不同的进程,使得宏观上看起来每一个进程都在同时运行。

至于进程的上下文切换,一般情况下都不需要考虑它的性能消耗。不过在进程上下文切换次数较多的情况下(比如IO密集型系统),确实会对系统性能产生一定的影响。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7124108.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-01
下一篇2023-04-01

发表评论

登录后才能评论

评论列表(0条)

    保存