340 likes | 544 Views
KLinux 操作系统概述. 成都研究所操作系统团队. KLinux 简介 KLinux 实时性改造 KLinux 的安装 KShell 介绍. 目录. KLinux 简介 — 由来. 当前实时嵌入式 Linux 分析 RT-Linux 在普通 Linux 内核上增加一个小的实时内核,实现了强实时性 缺点是破坏了 Linux 内核的完整性,并使得很多应用不能在上面运行 Montavista Linux 在普通 Linux 上加实时补丁,使得响应速度提高, 缺点是整个系统开销没有降下来,称之为低延时 Linux 内核更恰当. KLinux 简介 — 由来.
E N D
KLinux操作系统概述 成都研究所操作系统团队
KLinux简介 KLinux实时性改造 KLinux的安装 KShell介绍 目录
KLinux简介—由来 • 当前实时嵌入式Linux分析 • RT-Linux • 在普通Linux内核上增加一个小的实时内核,实现了强实时性 • 缺点是破坏了Linux内核的完整性,并使得很多应用不能在上面运行 • Montavista Linux • 在普通Linux上加实时补丁,使得响应速度提高, • 缺点是整个系统开销没有降下来,称之为低延时 Linux内核更恰当
KLinux简介—由来 • Linux性能瓶颈 • 内核空间与用户空间的频繁切换 • 调度算法采用就绪队列遍历搜索 • 其它如:消息队列、信号量
KLinux简介—解决方案 • 内核修改要点 • 内核线程库,提供内核线程的操作手段。 • 内核库函数修改,包括输入/输出、Socket、文件系统等。 • 调度算法修改,支持O(1)的优先级调度机制。 • 对多种CPU的适应修改,主要包括对 X86、PPC、 ARM的支持。 • 支持在内核线程上的移植、包括消息队列、进程通讯、定时器、内存块管理等。
上层应用 调 试 器 调 试 代 理 OSS支撑 VxWorks适配 KLibc、KCplus库 KTH库 Linux修改内核 X86 PPC ARM MIPS KLinux简介—解决方案 • Linux强实时内核解决方案 内核态
KLibc、KCplus KLinux简介—体系结构 • Linux强实时内核体系结构 • KLibc、KCplus:提供基本的C、C++库函数支持 • KTH:提供强实时操作系统所需的基本功能管理 • Linux内核:在标准内核基础上改造的支持KTH的新内核
KLibc,KCplus KLinux简介—体系结构 • 模块间的调用关系 • KTH库模块和KLibc、KCplus模块直接调用修改后的Linux内核提供的调用接口(通过KAL的封装), • Linux内核则使用回调函数与KTH和KLibc模块联系 • KTH和KLibc、KCplus模块以可加载模块形式加入内核运行
KLinux简介—关键特性 • KLinux关键特性 • 强实时性 • 支持在内核线程上的移植 • 支持多种硬件体系 • X86体系(支持所有IA32的CPU、虚拟机) • PPC体系(8240/8241/8245、860、852、8260、755) • ARM-NOMMU(ARM7 TDMI) • ARM(ARM9 TDMI、IXP 1200) • MIPS(R4000)
KLinux简介—版本状况 • KLinux2.0 • 基于Linux2.4的内核 • KTH、KLibc、KShell • KLinux2.2 • 完善KTH、KLibc、Shell,增加了KCplus模块 • 增加了调试器功能 • LSP,KBoot的开发 • 完整的用户文档 • KLinux3.0 • 基于Linux2.6的内核 • 设计中
KLinux简介—应用现状 • 成研所Linux产品应用历史回顾 • 2005年10月开始在网络事业部A10和DSL产品线进行应用 • 2006年3月DSL A8000 core板泉州试验局测试通过 • 2006年4月在中心研究院MSCe所有单板上进行内核替换验证成功 • 2007 本部北研 • 数据事业部
KLinux简介 KLinux实时性改造 KLinux的安装 KShell介绍 目录
内核堆栈修改 内核抢占修改 内核调度修改 内核调试修改 内核线程删除修改 线程状态机修改 t t y 修 改 KLinux实时性改造—内核修改 内核修改
KLinux实时性改造—KTH库修改 • KTH库修改 • 增强对内核线程的管理工作,提供‘标准’的接口 • 提供较完备的同步手段(仿造VxWorks的机制) • 提供一定的调试排错手段
KLinux实时性改造—KLibc库修改 • KLibc库修改 • 提供内核的c库 • 由VxWorks的Libc和kLibc(一个专为嵌入式应用的精简版用户态libc库)修改而得。 • 新增了KCplus库,支持c++
内核修改—调度 • 内核调度修改 • 增加新的调度方式: KTH_SCHED • 采用bitMap的调度算法 • 256级优先级(越大越优先),kth使用0-200, • 255由主线程使用 • 254由2号线程使用,进行软中断操作。
内核修改—抢占 • 内核抢占修改 • 进程切换的时机 • 1)主动放弃 • 2)抢占 • 内核的抢占点:中断、提供调用、异常的返回 • 中断,异常只有在返回到用户态时才进行抢占 • 可抢占机制 • 分两种方式进行抢占,对原Linux内核执行代码,不进行抢占,只对KTH及以上支持的代码,进行抢占
内核修改—状态机 • 线程状态机修改 • 线程退出方式的增加 • 线程处于非运行状态时,也能被其他线程强行终止 • 增加了对STP的转换途径 • STP状态可以与其它状态自由转换
KTH修改—线程管理 • KTH线程管理 • 采用主线程和工作线程的方式 • 工作线程的创建和删除由主线程完成 • 增加接口函数 • 线程创建与删除 • Kthread_create(),kthread_spawn() • Kthread_cancel(),kthread_join() • 线程挂起与唤醒 • kthread_suspend_np(), kthread_suspend_np() • 开调度与关调度 • kthread_switch_lock(), kthread_switch_unlock() • 优先级的设置与获取 • kthread_setschedparam(), kthread_getschedparam()
KTH修改—信号量管理 • KTH信号量管理 • 同步原语采用VxWorks的实现机制,提供与其相似的接口。
KLibc修改 • KLibc修改 • 在内核态运行 • 只支持标准c库的一个子集 • string • stdio • stdlib • math • socket • files • error
5 4.59 4.5 4 3.5 3 2.5 1.73 1.66 2 1.5 1 0.5 0 VxWorks KLinux 标准Linux2.6 KLinux强实时性能对比 • 任务调度时间对比(微秒)
2660 3000 2500 1735 2000 1500 826 1000 500 0 VxWorks KLinux 标准Linux2.6 KLinux强实时性能对比 • 上下文切换时间对比(tick)
160 140.5 140.6 140 121.8 112.7 120 109.4 100 Binary 80 Count 60 40 20 0 VxWorks Klinux 标准Linux2.6 KLinux强实时性能对比 • 获取信号量时间对比(纳秒)
KLinux简介 KLinux实时性改造 KLinux的安装 KShell介绍 目录
KLinux安装 • 下载源代码 • KLinux提供的单独源代码包,KLinux-2.2.tar.gz,将这些源代码下载到目标机器的\usr\src目录下, • 解包 • 输入命令 “tar xzvf KLinux-2.0.tar.gz ”
线程管理库 c++库支持 c库支持 改进的内核代码 工程目录 调试代理代码 用户应用程序代码 KLinux目录结构
硬件结构相关代码 配置文件 参考文档 KLinux目录结构 设备驱动 文件系统 头文件 启动代码 进程通讯代码 核心代码 库代码 内存管理代码 无mmu的内存管理代码 网络部分代码 配置脚本
KLinux简介 KLinux实时性改造 KLinux的安装 KShell介绍 目录
KShell简介 • 类似于MS-DOS的命令行操作界面 • KShell提供两部分功能 • 提供丰富的Shell命令(如i、tt、ts等),方便用户查看KLinux系统信息; • 提供简单的C语言语法解析机制(c语法分析器)。
KShell命令简介 • 任务及信号量相关 • checkStack、i、msgQShow、objshow • 文件及文件系统相关 • cat、cd、df、du、ls、rm • 网络设备相关 • ifShow、ipstatShow、ping • 设备及驱动相关 • tcpstatShow
KShell命令简介 • 调试相关 • bdall、c 、cret • 内存管理 • d、 m 、memShow • 日志管理 • closelog 、disablelog 、enablelog • 其他 • help、IkAddr、moduleShow、printErrno
KShell支持文件脚本功能,脚本的编写遵循KShell语法,具体的KShell编程请参考“KLinux编程指南”。 KShell支持文件脚本功能,脚本的编写遵循KShell语法,具体的KShell编程请参考“KLinux编程指南”。 KShell语法简介 • 是标准C语法的一个子集 • KShell不支持下列c语法 • 逗号运算符“,”以及“++”和“--”运算符; • 结构定义和enum、typedef,也不支持 ->和 .(结构成员运算符); • 宏定义和预处理语法,如#include、ifdef等; • 函数原型定义,变量类型定义; • 类型转换操作