1.什么是实时性操作系统?

实时性是指调度的时候,任务响应时间。windows一般是15ms,最大的问题是不能保证。比如平均值是1ms,但是随着系统负载的变化,有时甚至达到100ms,在这工业上是无法使用的。工业上一些应用要求必须有更高的时间精度,比如,一个电力监测系统必须在10ms内运行一次任务对电力运行状况进行监测,一旦时间不准,调度不到该程序运行,则无法保证对电力故障的及时响应。

2.怎么实现实时性系统?

3.PREEMPT_RT

PREEMPT_RT是Linux内核的一个实时补丁。得到Linus的高度评价:

Controlling a laser with Linux is crazy, but everyone in this room is crazy in his own way. So if you want to use Linux to control an industrial welding laser, I have no problem with your using PREEMPT_RT." -- Linus Torvalds

具体怎么用可以参考:https://wiki.linuxfoundation.org/realtime/documentation/howto/applications/preemptrt_setup  ,这是官方的说明。

4.使用方法

4.1 下载linux内核源码

这两个国内的可以看一下,速度比较快。

4.2下载RT patch

patch在https://rt.wiki.kernel.org/index.php/Main_Page 下载,与linux内核的版本号一定要一样。

4.3 使用方法

1.解压内核源码

2.打patch

3.编译linux内核并安装

tar xzvf  linux-4.4.138.tar.gz

cd linux-4.4.138

patch -p1 < ../patch-4.4.138-rt65.patch

make menuconfig需要安装这个libncurses-dev模块

编译内核需要libssl-dev模块

sudo apt-get install libncurses-dev

sudo apt-get install libssl-dev

配置linux内核

make menuconfig

选择Processor type and feature   —>   Fully Preemptible Kernel (RT)这个选项,具体路径如下图。保存。

编译内核,再安装,更新grub.

编译时加上 INSTALL_MOD_STRIP=1 可以生成没有调试信息的模块,大大减小内核的大小。

make -j2

#sudo make modules_install -j2

#这一条命令生成的内核含有调试信息非常大,因此要使用INSTALL_MOD_STRIP选项

sudo make INSTALL_MOD_STRIP=1 modules_install

sudo make install -j2

sudo update-grub2

重启后会多一个  linux-4.4.138-rt  的启动选项。

5.测试

可参考以下网页:

sudo apt-get install rt-tests

安装这个工具,运行cyclictest程序进行实时性测试:

sudo cyclictest -t 5 -p 80 -n

注释: 运行五个线程,线程优先级为80,无限循环

cyclictest运行结果详解:

T: 0 序号为0的线程

P: 0 线程优先级为0

C: 9397 计数器。线程的时间间隔每达到一次,计数器加1

I: 1000 时间间隔为1000微秒(us)

Min: 最小延时(us)

Act: 最近一次的延时(us)

Avg:平均延时(us)

Max: 最大延时(us)

测试结果示例:

1.实体机测试结果

# /dev/cpu_dma_latency set to 0us

policy: fifo: loadavg: 0.13 0.06 0.02 1/244 19255

T: 0 (18989) P:80 I:1000 C: 155947 Min:      1 Act:    1 Avg:    1 Max:      17

T: 1 (18990) P:80 I:1500 C: 103964 Min:      1 Act:    1 Avg:    1 Max:      15

T: 2 (18991) P:80 I:2000 C:  77973 Min:      1 Act:    1 Avg:    1 Max:       7

T: 3 (18992) P:80 I:2500 C:  62378 Min:      1 Act:    1 Avg:    1 Max:      10

T: 4 (18993) P:80 I:3000 C:  51982 Min:      1 Act:    1 Avg:    1 Max:       7

2.虚拟机测试结果

在虚拟机中效果一般,受主机的限制太大。

my@ubuntu:~/rt/linux-4.4.138$ sudo cyclictest -p 80 -t5 -n

# /dev/cpu_dma_latency set to 0us

policy: fifo: loadavg: 0.69 0.19 0.07 1/726 5825

T: 0 ( 5821) P:80 I:1000 C:   8168 Min:      7 Act:  445 Avg:  327 Max:    7005

T: 1 ( 5822) P:80 I:1500 C:   5455 Min:      7 Act:  411 Avg:  319 Max:    7516

T: 2 ( 5823) P:80 I:2000 C:   4098 Min:     14 Act:  174 Avg:  320 Max:    2362

T: 3 ( 5824) P:80 I:2500 C:   3275 Min:      5 Act:   52 Avg:  319 Max:    6940

T: 4 ( 5825) P:80 I:3000 C:   2732 Min:      8 Act:  214 Avg:  299 Max:    5198

3.也可以进行多次运行并统计结果

sudo  cyclictest -l10000000 -m -n -t1 -p99 -i2 -h100

-l10000000 :指定1千万循环,

-m :锁定当前和将来的内存分配,

-n :指定使用 clock_nanosleep,

-t1 :指定开一个线程进行测试,

-p99 :指定最高优先级,

-i2 :指定基本线程间隔,单位是us,此处是2us,

-h100 :指定统计结果的分布情况。

程序20秒执行结束,输出显示平均延时1 us,最大延时15 us,通过直方分布图察看,大多集中在1-7 us以内。

# /dev/cpu_dma_latency set to 0us

policy: fifo: loadavg: 0.36 0.33 0.28 1/246 32690

T: 0 (32688) P:99 I:2 C:10000000 Min:      0 Act:    2 Avg:    1 Max:       15

# Histogram

000000 000051

000001 6635143

000002 3352561

000003 008966

000004 002414

000005 000648

000006 000180

000007 000025

000008 000002

000009 000001

000010 000000

000011 000000

000012 000001

000013 000001

000014 000006

000015 000001

…………(中间都是0,省略)

000097 000000

000098 000000

000099 000000

# Total: 010000000

# Min Latencies: 00000

# Avg Latencies: 00001

# Max Latencies: 00009

# Histogram Overflows: 00000

# Histogram Overflow at cycle number:

# Thread 0:

6.总结

实时性补丁能够较好地满足我们的需求(1ms),实现较强的实时性。

7.别的方法

ubuntu 和centos 都提供了预编译的prempt 内核, 只是ubuntu的是lowlatency 低延时内核,centos的是rt kernel最高级实时

7.1 ubuntu 安装低延时内核

参考https://linuxmusicians.com/viewtopic.php?t=18536

apt-get install linux-lowlatency

7.2 centos  安装预编译的实时内核

参考https://unix.stackexchange.com/questions/341933/install-a-real-time-kernel-on-centos

sudo tee /etc/yum.repos.d/CentOS-rt.repo >/dev/null <

# CentOS-rt.repo

[rt]

name=CentOS-7 - rt

baseurl=http://mirror.centos.org/centos/\$releasever/rt/\$basearch/

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

EOF

sudo yum update -y

sudo yum install -y kernel-rt rt-tests tuned-profiles-realtime

sudo reboot

用到的命令行

mkdir -p /usr/src/kernels

cd /usr/src/kernels

wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.9.47.tar.xz

wget https://cdn.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patch-4.9.47-rt37.patch.xz

tar xf linux-4.9.47.tar.xz

mv linux-4.9.47 linux-4.9.47-rt37

cd linux-4.9.47-rt37

xz -d ../patch-4.9.47-rt37.patch.xz

patch -p1 <..>

cp /boot/config-4.9.0-4-amd64 .config

In the last step, before the kernel can be compiled, the new kernel has to be configured so that the functionality imported with the RT patch is also used. The command make menuconfig is called and we select Processor type and features -> Preemption Model -> Fully Preemptible Kernel (RT).

make -j4

make modules_install

make install

————————————————

版权声明:本文为CSDN博主「阿龙哥哥」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/v6543210/java/article/details/80941906

实时操作系统linux,让linux变为实时操作系统相关推荐

  1. 什么叫实时操作系统,什么叫非实时操作系统,两者有什么区别?

    嵌入式实时系统中采用的操作系统我们称为嵌入式实时操作系统,它既是嵌入式操作系统,又是实时操作系统.作为一种嵌入式操作系统,它具有嵌入式软件共有的 可裁剪.低资源占用.低功耗等特点:而作为一种实时操作系 ...

  2. 【实时操作系统】实时操作系统和非实时操作系统

    实时操作系统的特征: 当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统做出快速响应. 实时操作系统是抢占式操作系统,如果你的进程优先 ...

  3. 嵌入式linux实时化技术,嵌入式Linux实时化技术

    引言 Linux支持PowerPC.MIPS.ARM.DSP等多种嵌入式处理器,逐渐被用于多种关键性场合.其中实时多媒体处理.工业控制.汽车电子等特定应用对Linux提出了强实时性需求.Linux提供 ...

  4. 实时流媒体编程基于Linux环境开发

    一.流媒体简介 随着Internet的日益普及,在网络上传输的数据已经不再局限于文字和图形,而是逐渐向声音和视频等多媒体格式过渡.目前在网络上传输音频/视频(Audio/Video,简称A/V)等多媒 ...

  5. linux是实时系统还是分时操作系统

    实时操作系统 实时操作系统 英文称Real Time Operating System,简称RTOS. 1.实时操作系统定义 实时操作系统(RTOS)是指当外界事件或数据产生时,能够接受并以足够快的速 ...

  6. 操作系统原理与Linux实践教程【第一章 操作系统概论】

    文章目录 1.1 操作系统的资源管理功能和目标 一.操作系统的定义 二.操作系统的组成 三.部分流行操作系统 四.操作系统在计算机系统中的位置 五.操作系统的资源管理技术 六.Linux操作系统实验环 ...

  7. 【计算机架构】什么是实时操作系统、什么是非实时操作系统;实时操作系统和非实时操作系统的区别

    一.实时操作系统 实时操作系统(RTOS)是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统做出快速响应,调度一切可利用的资源完成 ...

  8. linux系统管理设计ppt,操作系统原理与Linux实例设计--第二章.ppt

    操作系统原理与Linux实例设计--第二章.ppt 2.5.4 实时系统与实时任务调度 实时系统与实时任务 实时系统:能及时响应外部请求,并作出反应的系统. 是一个相对的概念. 是否周期执行来划分: ...

  9. linux 进程状态显示dl,Linux系统中的实时调度器DL调度器的原理是什么?详细概述...

    一.概述 实时系统是这样的一种计算系统:当事件发生后,它必须在确定的时间范围内做出响应.在实时系统中,产生正确的结果不仅依赖于系统正确的逻辑动作,而且依赖于逻辑动作的时序.换句话说,当系统收到某个请求 ...

最新文章

  1. 保证同一个账号同时只能在一个设备上登录
  2. Python中的lambda是什么?
  3. 微信小程序购物车 数量加减功能
  4. linux mysql UNSIGNED,关于mysql:MySqlint10-与-int-unsigned-之前的区别
  5. 桌面在计算机哪个文件夹,windows的桌面文件夹是哪个?
  6. Engagement Center Communication timer实现逻辑
  7. 北大青鸟java y2_Struts-2 北大青鸟 Y2学年 项目案例使用 2框架开发租房网站 Java Develop 249万源代码下载- www.pudn.com...
  8. mapbox矢量切片标准_Cesium 加载矢量切片(MapBox Vector Tile)
  9. asmx迷10分钟升级成wcf熟手指南
  10. 开课吧里的python学习是真的吗-明星为开课吧直播带货:人人都要学,人人都可以学的Python...
  11. mac怎么看cpu温度?教你不装软件查看 Mac CPU芯片温度
  12. 老妈~老妈~我爱你~~~~~~~阿弥陀佛保佑你~~~~~~~
  13. C#中数据库备份还原
  14. 计算机北大核心期刊排名2020,2017年版北京大学核心期刊目录4(第八版,2018~2020适用)...
  15. 高等代数——大学高等代数课程创新教材(丘维声)——3.4笔记+习题
  16. 关于ColorPicker颜色拾取器的使用方法
  17. kuangbin专题五并查集总结
  18. 一个迷你Excel查看编辑器,仅3.4M大小
  19. C语言全局变量和局部变量同名时的使用
  20. 【吐血推荐】什么是领域驱动设计?DDD?

热门文章

  1. keyshot导入失败错误代码7_keyshot7的一些问题
  2. 金蝶用友2011年度财报对比
  3. STM32H7 ADC 过采样对精度的影响效果
  4. 风格迁移综述Neural Style Transfer: A Review
  5. 智能水电表:远程抄表系统原理
  6. iPhone手机无法锁屏无法关机问题
  7. LC: 面试题 01.02. 判定是否互为字符重排
  8. linux文件属性及 ls -l 命令输出结果详解
  9. 【软件工程】十大模型
  10. Windows关机过程分析与快速关机