系统内核

2024-10-26

系统内核(精选12篇)

系统内核 篇1

0 引言

随着网络技术的发展, 计算机在人民生活中的地位越来越重要。计算机在给人民的生活和工作带来极大便利的同时, 也带来了信息安全问题。Windows操作系统是当今应用最广泛的个人计算机操作系统, 针对这一操作系统的病毒和木马层出不穷。[1]而且更为严重的是内核级Rootkit的诞生, 给系统安全带来了极大的破坏性。内核是操作系统的核心, 内核的完整性保护对维护操作系统至关重要。[2]所以本系统旨在从内核出发, 全方位的利用多种综合检测技术维护系统内核的安全性以及完整性。

1 系统设计

1.1 系统整体设计方案

本系统主要分为用户层和内核层, [3]用户层利用VC++ 6.0 开发, 采用C++语言实现, [3,4,5]内核层利用WDK开发, 采用C语言实现。用户层是与用户交互的界面, 用户层通过调用Device Io Control函数, 实现3 环与0 环的通信。[6]内核层实现系统各个模块的具体功能, 从内核维护监测系统安全。如图1 系统架构设计图所示。

本系统主要包括七个功能模块, 分别为内核监测模块, 系统钩子检测模块, 隐藏进程检测模块, 隐藏端口检测模块, 系统服务描述符表监测模块, IDT监测模块, 过滤驱动枚举模块。通过这些模块从而实现系统内核的实时监测, 隐藏进程、端口、钩子的检测等功能。

1.2 系统流程设计

系统启动后, 先将内核模块加载到操作系统中, 呈现程序主界面, 等待用户点击主界面, 发送指令, 再调用各功能模块完成相应的操作。若所需完成的操作需要调用内核函数才能完成, 则通过相关处理将指令发送至内核模块, 调用相应的分发函数, 获取信息或完成相应的操作, 并将执行结果反馈给用户层应用程序。软件的运行流程图如图2 所示:

2 系统的实现

2.1 内核监测模块

内核模块 (“软件驱动”) 是运行在系统核心层, 恶意软件为了获取更强的系统权限, 往往会利用驱动加载技术向操作系统中加载自己的模块, 因此监测系统中内核模块, 有利于发现恶意软件的踪迹。

该模块能够从用户层寻找保存内核模块信息的对象, 完成对其获取和分析, 从其中找到需要的信息, 包括模块名、内核模块基址、内核模块大小、内核模块标志、内核模块加载顺序、内核模块加载次数, 模块路径等, 并将信息呈现给用户。虽然内核模块运行在内核层, 但是监测内核模块却可以在用户层利用Windows API实现。[7]点击主界面上工具栏的第二个按钮开始检测操作系统中内核模块。在系统上列举的内核模块加载情况如图3 所示。

2.2 系统钩子检测模块

系统钩子可以拦截事件消息, 在窗口响应前完成对消息的处理, 也可以拦截应用层Windows API对内核函数的调用, 因此恶意软件很有可能对系统关键进程安装钩子, 以期获取更高的权限和更好的隐蔽效果。本模块就是要从用户层进入系统核心层, 将系统中的所有钩子检测出来, 明确每个钩子的句柄, 钩子相应的处理, 以及钩子的类型, 还有每个钩子“挂钩”的进程, 线程。

点击主界面上工具栏的第二个按钮开始检测操作系统中系统钩子。在系统上列举的系统钩子情况如图4 所示:

2.3 隐藏进程检测模块

在隐藏进程检测模块中, 首先采用在用户态, 调用Windows API, 获取进程信息, 然后在内核态枚举高端内存, 获取进程信息, 其后比较两次信息, 确定隐藏进程。[8]用户态通过调用API Zw QuerySystem Information方法, 内核态通过遍历Psp Cid Table句柄表、遍历csrss.exe进程的Handle Table表等两种方法获取到系统所有进程信息。

点击主界面上工具栏的第三个按钮开始检测操作系统中所有进程。在系统上检测到所有进程图5 所示:

从图5 中, 可以看到, 当前系统中的所有进程的PID, 进程名和EPROCESS, 系统中没有隐藏进程, 和任务管理器中的获取的进程信息是一致的。

2.4 隐藏端口检测模块

在内核态获取端口信息, 主要是通过直接获取设备对象/device/tcp和/device/udp, 继而获取文件操作对象, 随后构造IRP请求信息获取端口信息。该模块绕过中间步骤, 直接调用内核, 获取内核中设备对象, 获取端口信息, 从而使隐藏端口无处藏身。[2]

点击主界面上工具栏的第四个按钮开始检测操作系统中所有正在通信进程。在系统上检测到所有端口如图6 所示:

2.5 系统服务描述符表监测模块

系统服务描述符表SSDT不仅是一个地址索引表, 还包含很多其他信息, 比如地址索引的基地址、服务函数个数。[2]点击主界面上工具栏的第五个按纽开始检测操作系统中所有SSDT表项。在系统上检测到SSDT信息如图7 所示:

2.6 IDT监测模块

IDT (Interrupt Descriptor Table中断服务表) 是一个有256 入口函数线形表, 每个IDT的入口是8个字节说明符, 所以整个IDT表字节数是8*256=2048 bytes。检测IDT钩子同样可以使用对比函数原始地址和函数内存地址的方法。[2]IDT在内存中的地址可以通过sidt指令IDTR寄存器内容, IDTR中存放着IDT中断服务入口信息, 从而在其中获取IDT服务函数的内存地址。

IDT服务函数的原始地址可以在ntoskrnl.exe中获取, 通过获取ntoskrnl.exe PE文件在内存中的基地址, 然后获取镜像文件的INIT段, 读取该段内容后, 匹配特征“x B9x00x08x00x00x C1x E9x02x F3x A5”, 特征后就是IDT服务函数的原始地址。

点击主界面上工具栏的第八个按纽开始检测操作系统中所有IDT表项。在系统上检测到IDT如图8 所示:

2.7 过滤驱动枚举模块

所谓过滤就是在本来已有的设备栈中加入一个自己的设备。在这里把插入设备栈的用户设备叫做过滤设备, 建立这个设备并使其具有特殊功能的驱动叫做过滤驱动。[6]本模块所实现的功能就是枚举操作系统中所有已加载的过滤驱动, 并将驱动路径、驱动对象名、类型设备宿主驱动对象名等信息显示在列表框中。点击主界面上工具栏的第九个按纽开始检测操作系统中所有已加载过滤驱动。在系统上检测到过滤驱动如图9 所示:

3 结语

本系统在充分研究病毒、木马原理和Windows内核编程的基础上, 设计实现了一个界面友好, 使用方便, 高效便捷的内核级手动杀毒系统。主要实现了监视内核模块、监视系统钩子、检测隐藏进程、检测隐藏端口、监视SSDT、IDT监视、过滤驱动枚举等功能。本系统从手动杀毒角度出发, 变被动防御为主动查杀, 更有效的查杀计算机感染的病毒及木马, 特别是Rootkit保护的内核级木马, 通过检测相应的被挂钩函数, 内核中被修改的地址, 找到相应的进程, 从而实现了木马进程的强杀、相应内核内容的恢复等功能, 保护了计算机操作系统的安全。在经济利益的驱使下, 木马编写者也在不断研究新型的隐藏技术, 逃避传统的检测技术, 本系统也可以与时俱进, 研究新的隐藏技术, 并将对应的检测技术加入到系统中。

摘要:Windows操作系统是当今应用最广泛的个人计算机操作系统, 针对这一操作系统的病毒和木马层出不穷。大多数杀毒软件主要依赖特征码识别技术、校验和技术、软件模拟技术检测病毒。本系统从手动杀毒角度出发, 变被动防御为主动查杀, 特别是Rootkit保护的内核级木马, 通过检测相应的被挂钩函数, 内核中被修改的地址, 找到相应的进程, 从而实现了木马进程的强杀、相应内核内容的恢复等功能, 更有效的保护计算机操作系统的安全。

关键词:内核防护,手动杀毒,信息安全,Rootkit

参考文献

[26]贾建忠.木马危害的新发展及对策[J].软件, 2012, 33 (2) :150-152.

[27]GREG HOGLUND, JAMES BUTLER著;韩志文译.Rootkits——Windows内核的安全防护[M].清华大学出版社, 2007-4.

[28]杨柯.分层技术在计算机软件开发中的应用效果分析[J].软件, 2013, 34 (10) :47.

[29]王德超.C/C++编译系统内存分配分类比较探究[J].软件, 2014, 35 (2) :85-87.

[30]俞明.面向对向程序设计C++中类成员的使用[J].软件, 2013, 34 (1) :47-49.

[31]谭文.寒江独钓:Windows内核安全编程[M].电子工业出版社, 2009-06.

[32]潘爱民.Windows内核原理与实现[M].电子工业出版社, 2010-5.

[33]王雷, 凌翔.Windows Rootkit进程隐藏与检测技术[J].计算机工程, 2010, 36 (5) :144-142.

系统内核 篇2

测试编译内核, bonnie++ 和 iozone

kernelbuild.sh

#!/bin/sh

for ((;;))

do

make mrproper

cp /boot/config-2.4.21-138-smp arch/i386/defconfig

make oldconfig

make dep

make bzImage

make modules

done

一 kernelbuild.sh

说明:

/root/ostest/kernel/buildkernel.sh -- 循环编译内核的测试程序

通过它可以提高系统的计算压力

用法:

# cd /var ; cp -a /usr/src/linux-2.4.21-138 .

# cd /opt ; cp -a /usr/src/linux-2.4.21-138 .

# cd /usr/src/linux ; nohup sh buildkernel.sh &

# cd /var/linux-2.4.21-138 ; nohup sh buildkernel.sh &

# cd /opt/linux-2.4.21-138 ; nohup sh buildkernel.sh &

二 bonnie++

说明:

/root/ostest/kernel/bonnie/bonnie++*.tar.gz

编译:

# mkdir -p /root/build

# cd /root/build; tar zxf /root/ostest/bonnie/bonnie++*.tar.gz

# cd bonnie*

# ./configure

# make

# make install

用法:

# mkdir -p /opt/bonnie++

# bonnie++ -d /opt/bonnie++ -s 16000 -n 100:2048:0:1000:512 -m GW04 -r 0 -x 2 -u 0:0

三 iozone

说明:

/root/ostest/kernel/iozone/iozone*

用法:

# mkdir -p /root/build/iozone

# cd /root/build/iozone

# tar xvf /root/ostest/iozone/iozone*.tar

# cd src; make linux

# cd /opt; /root/build/iozone/iozone -Ra -g 8G

将“内核”升级到顶 篇3

不!笔者所谓的“内核’,指的并不是电脑CPU,而是指产品的核心技术、价值。而这种“内核”,或许不像电脑内核更新换代那么快,但它必须很难被取代,才能坚持住一款产品的存在意义!

这期,就让我们一起来玩两款一诞生就满载核心技术,而且很难被他人取代的产品吧!

本月烧货

安全也能如此方便

Maxi-Cosi阿克斯儿童汽车座椅

(www.kidslandchina.com)

我已经不想再说“国内部份城市已经正式立法规定,儿童乘车必须使用儿童汽车座椅”这类过时旧闻,来用威胁与处罚的方式警告父母开车千万不能把BB抱在怀里,而是要给他专用的座椅。因为,我觉得处罚这种事有交警处理,父母应该出于天性就要疼爱自己子女,对儿童乘车要主动学习正确知识,并在乘车时为他选用安全可靠的儿童汽车座椅,才算尽责。但为何许多父母依然不愿使用儿童汽车座椅呢?价格贵、不方便算是常见答案,前者相信许多父母不太介意,而后者,Maxi-Cosi品牌提出了解决方案——这款阿克斯产品具有独特的可旋转式设计,可调节座椅朝向,下车时能方便父母抱着BB进出座椅,再加上其头枕高度和安全带长度可调,座椅靠背角度可8挡位调节,满足BB坐躺不同姿势需求,BB安坐其中不易哭闹。好了,这么多解决方案都有了,你还不为心爱子女准备乘车专用的儿童汽车座椅吗?

这份协议,签了吧!

德赛西威TM990宝马5系多媒体导航娱乐系统

通过MOST协议对接原车系统,原车功能完全对应。

增加屏幕触控功能,主机完全对应原车手套箱内安装位,并具备隐藏升降机构。

内建凯立德导航地图软件,可对应多种影音档案格式以及图档、文档读取播放,并可扩展空净宝等周边产品对接应用。

把玩一下

在采访德赛西威神秘新产品之前,我硬是逼着德赛西威公司的阳子无论如何先透露一点新产品资料给我,结果一看,心凉了一半……,这不就是坊间十分流行的“解码器”,也就是能让宝马、奔驰、奥迪……这类高端车改了之后扩充导航、音响改装……功能的产品嘛,这有什么好神秘?但当我实际接触TM990之后,就发现它与一般解码器有所不同。哪里不同?功能之异容后再说,首先从产品本身来看,完全密合宝马5系中控台的屏幕外框,具备缓速升降机构的主机安装盒,包裹多层防护套及接头牢靠的连接线组等,这就是坊间解码器难望项背的。

另外,TM990有绝招——“MOST(Media Oriented Systems Transport)”,这个于1998年,奥迪、宝马、奔驰、哈曼、摩托罗拉、绿洲芯片、江森电控、德尔福等集团公司联合开发的多媒体系统数据交换协议,它比我们比较熟知的CAN-BUS网络传输速率更高(MOST:24.5Mbps>CAN:1Mbps),更适用车载多媒体影像讯号以及多声道音频讯号传递,至于其它详细资讯,大家不妨上网科普就一目了然。在此,我要强调的是“协议”,所谓协议就是签订之后,保障签订方权利义务,并彼此都遵照执行的一种守则,外人要加入没那么容易。故此,坊间一般制作解码器的厂商,想透过MOST协议直接介入宝马5系的多媒体系统,要不就比登天难,要不就得付出庞大成本,也因此其产品往往只能从外接端输入讯号且功能无法完全对接;但德赛西威凭藉与车厂密切合作关系,处理这方面就得心应手,也因此才能推出像TM990这般能直接与宝马5系原车多媒体系统珠联璧合的改装产品!

有话直说

回到最基本的需求面来讲,TM990到底缘何诞生,因何存在呢?答案就是:宝马5系入门款车型,例如520Li典雅型这类代表,在多媒体娱乐系统上配置偏于阳春,没导航、没倒车影像、没电影播放等功能,在4S店加装的价格你也知道……。至于德赛西威TM990,据该公司方面人员表示说价格与坊间解码器应该相去不远,更重要的是有德赛西威“车规级”品质加持。如果这还不够,厂方提供的2年6万公里车规级质保,或许就让人更有信心了!

TM990使用起来与坊间解码器最大不同,就是会在原车系统的“CD/多媒体”选单中,直接注册一个名为“Media&Navigation”的选项,而非像解码器此举欠奉,可能得要长按某按键进入加一个外接讯源输入来使用。而透过iDrive直接控制进入“Media&Navigation”选项,就能看到TM990的功能选单,其中导航采用凯立德品牌的导航地图软件,功能方能笔者不多加赘述,我只觉得改装的触屏在此很受用,无论触控灵敏度与准确度都值得嘉许。接着,我透过TM990产品内附的USB对接线连接u盘,发现此机所能对应读取的影片、音乐档案格式相当多,甚至txt文档与3Pg、png等格式图档也能读取,就算目前尚未推出附带光盘机的产品版本,但应付数码时代多媒体应用也足够使用了。

在这个几乎没有秘密的时代里,TM990日后会否遇到足以匹敌的竞争对手,很难说。但个人认为其价值,除了对应MOST协议之外,还有的就是德赛西威周边车居生活产品功能扩展,例如空净宝、双向互联后座娱乐系统、CMMB数字电视模块……。虽然此番我未能体验这些产品大集合,由TM990整合控制的情况,但据德赛西威公司方人员表示这并无难度,而我相信,这或许就是TM990立于不败之地的下一步棋吧!

本月烧货

凉爽的隐私

量子膜钻石15(LX-15)汽车玻璃膜

(cn.Solargard.com)

nlc202309062059

炎炎夏日又将到来,汽车后市场也将迎来新一波贴膜的热潮,但对于一般消费者来说,如果你精明地谢绝了4S店赠送或低价促销的不明来源膜,叉会遇到市面上汽车膜品牌、款式、型号众多,该怎么选的烦恼!这时,你或可考虑全球目前掌握磁控溅射制膜工艺的三家厂商其中一者——圣戈班舒热佳特殊镀膜公司旗下产品,其中钻石15(LX-15)这款拥有g层金属磁控溅射工艺,涂布金、银、钛等多种珍稀金属,高达69%总太阳能阻隔率,5%极低反光率的侧后挡膜就是不错之选。此外,它的可见光透过率符合大多数车主对视线的要求,从车内向外看时,视觉清晰自然;从车外向车内看时,又具有良好私密性,薄薄一层,成为私密与凉爽共赢之机。

谢谢海尔博士

艺声SR-620套装二分频扬声器

ST-104为海尔气动式高音单体,据代理方表示其与知名高端民用音响品牌Gryphon使用的制品出于同源。

据代理方表示,中低音单体来自丹麦AT,与Dvnaudio、Scan-Speak品牌有“血缘关系”,但振膜添加了矿物披覆材料,与Dynaudio的“MSP”镁硅酸盐膜略有不同。

把玩一下

音响这个产业从来不缺潮起潮落的洗牌故事,一些音响大师因为种种原因,离开自己一手创办的公司又自立门户,丹麦AT(Audio Technology)就是其中之一!AT的创始人兼工程师之一EjvindSkaaning,就是创建丹拿(Dynaudio)、绅士宝(Scan-Speak)品牌的同一位,而如果你不知道这两个全球鼎鼎大名的音响品牌,那就请自行科普一下吧!

据艺声(Eternal Sound)品牌国内总代理方表示,SR-620的中低音单体来自AT,难怪我怎么看,都觉得这玩意与Dynaudio有很浓厚的“血缘关系”——例如相似的振膜与防尘罩一体成型设计。但实际上,Ejvind Skaaning没有墨守成规不求进步,这点可以从SR-620的中低音单体比Dynaudio同尺寸、等级单体音圈直径小,以及振膜上多了一点闪闪发光的矿物质披覆物看出,但这其中的设计到底有啥学问,或许等笔者何时有空走一趟丹麦音响品牌巡礼才能得知,眼前我就先从实际聆听上来一探究竟。

至此,你或许以为笔者已经把这套高端产品厉害的地方说完了!错!更厉害的其实是ST-104高音单体,其是采用汽车音响界非常少见,于1973年美国海尔(Oscar Heil)博士发明的海尔气动式发声结构,而且据国内总代理方表示,其技术与知名高端民用音响品牌贵丰(Gryphon)的气动高音出于同源。采用海尔气动原理运作的高音单体,与一般动圈式单体的最大不同,就是它不是由音圈推动圆形振膜,再推动空气产生声波,而是像手风琴的风箱一般有着折叠状的片状薄膜,其中覆有一层固定走向排列的金属线圈,并夹在两个磁极中间配置,当线圈通过电流产生磁场与磁铁吸斥时,薄膜就会伸缩运动从折缝挤出或吸入空气,以喷射方式辐射声波。正因如此的工作原理,使得海尔气动单体拥有阻抗曲线平直、非线性失真小、推动空气更快更直接等优点,但缺点就是制造成本高。至于其它有关海尔气动的知识,大家或可问“度娘”,我已经迫不急待要听听ST-104的声音了。

有话直说

我曾听过使用气动高音单体的Gryphon书架喇叭Mojo,或许可以对比出艺声的产品有没那个真本事让我勾起回忆。嗯!很明显,ST-104的声线与一般动圈高音单体就是不同,播放《魔鬼的颤音》“La Campanella”一曲,背景特别干净,环境感特别真实,而且多数产品难以企及的超高频空气感,落到ST104手上简直就像小孩玩意,推送得轻轻松松且能量十足,余音绕梁之势充斥着整间试听间。说简单点,就是ST-104对于音场铺陈最为厉害,那种三维象限深度、宽度、高度加层次感都分明的表现,与Mojo如出一辙!此外,气动单体稳定的阻抗曲线与能量感,也反应在极其稳定、流畅、细致、连绵的高音音粒中,三角铁的清透、小提琴的擦弦余韵……,虽然ST-104诠释起来,与我印象中的Mojo相比韵味略有不同,但这肯定可以算是汽车音响高音单体中的佼佼者了!

中低音单体的声音表现如何呢?也不赖!至少与Dynaudio单体那说一不二的鉴听风格有所不同,而是展现出属于自己独到的一种味道,好比说其在诠释蔡琴的歌声时,会特别强调将人声的喉韵,甚至喉韵的深度、嘴形、质感都竭力表现出来,可谓是真实之际还有温润甜美的音色。不过,此款中低音单体在表现大编制乐队演出时的壮阔感,以及低音推送的力度感有点保守、生硬,这很可能是新品没煲舒活导致,因为根据聆听Dynaudio、Scan-Speak品牌单体的经验告诉我,Ejvind Skaaning老先生设计的单体,往往需要比较长时间的煲机才能释放百分百声音。

基于安全内核的主机防护系统研究 篇4

随着计算机技术与网络技术的飞速发展,现在,网络应用已经深入到经济社会的各个领域,同时,各类安全威胁层出不穷。为了应对这些安全威胁,各类网络安全技术及网络安全产品不断涌现,如防火墙、IDS、VPN、防病毒工具等,这些安全技术及安全工具的应用,极大地解决了网络安全威胁的现状,但也应该看出,还是有相当多的网络安全问题没有解决,对于网络用户已经造成了巨大的危害。本文提出了一种基于安全内核的主机保护系统设计方案,能够很好地解决上述问题。

2 基于安全内核的主机防护系统

1)系统特征

基于数字签名认证的安全内核的实现是本系统的基本特征,从内核级别上防止网络黑客对主页及文件系统的恶意攻击和破坏,并利用禁止未授权的访问这一安全策略来保护关键业务数据和应用。

2)安全操作系统

安全操作系统是指具备基于数字签名认证的安全内核的,能够应对各类安全威胁的主机操作系统,其结构图如图1所示,可见,基于数字签名认证的安全内核是本系统的核心,对于主机的各类操作均是以安全内核为基础的。

对于传统的操作系统而言,用户通过操作或命令,操作系统访问界面,对系统内核资源进行使用,这样,网络黑客可以通过获得系统管理员权限进入文件系统,从而达到入侵的目标。对于基于安全内核的安全操作系统而言,在用户级和内核级分别通过使用诸如数字签名与证书、访问控制列表等安全手段,通过安全内核的审核,方可获得对系统内核资源的使用权,安全内核进程结构如图2所示。应用基于数字签名的安全内核的安全操作系统后,即使黑客获得了系统的管理员权限,由于其不能通过安全内核的审核,因此无法访问文件系统,也就是获得了安全保护系统的功能。

3)安全保护系统功能

本系统的功能有:具有基于数字签名进行访问控制的能力,能够对自身的内核模块进行隐藏,能够实现对系统内核的密封,具备对于未被授权的管理员的访问控制功能

3 安全保护系统的应用

1)Web Griffin

Web Griffin是基于数字签名与证书的访问控制方法,通过对于未被授权的管理员进行访问控制、密封系统内核,同时保护自身的目录和文件系统安全,其核心目标是通过对文件的写权限进行访问控制保护系统安全。

2)File Griffin

与Web Griffin相比,File Griffin可以对文件的读、写操作均执行进行访问控制,更好地满足系统安全的要求。

3)保护主要的守护进程

守护进程(daemon)是脱离于终端并且在后台运行的进程,通常在系统引导装入时启动,在系统关闭时终止。大部分系统服务都是通过守护进程实现的,同时,守护进程还能完成许多系统任务,常用安全保护系统可以对守护进程进行很好的保护。

4 结束语

依赖安全工具并不能解决所有的安全问题,网络信息安全是一个安全过程,重点是安全管理,需要建立完善的安全管理规章制度,同时更需要关注系统风险管理,降低系统风险,进行深度防御,正确使用安全工具,合理搭配,建立起多层次的立体的网络安全防护体系,即使用防火墙、IDS、主机保护系统、防病毒、VPN等产品一起组成多层次的立体网络安全防护体系。

参考文献

[1]王凤英,程震.网络与信息安全[M].北京:中国铁道出版社,2006:305-318.

[2]朱元忠,方园.网络操作系统案例教程[M].北京:机械工业出版社,2008:127-136.

系统内核 篇5

1:boot PROM phase

2:boot Programs phase

3:kernel initialization phase

4:init phase

system初始化,检测内存和cpu,检查设备和创建设备树,设置console

kernel初始化过程

kernel self -initialization 内核自检

loading of kernel modules 载入内核模块

reading of the kernel configuration file in /etc/system 读内核配置文件

staring of the /sbin/init process 运行/sbin/init进程

bootblk是用于装载第二个引导程序ufsboot的主引导程序

bootblk是被PROM的boot设备的引导扇区装载的

ufsboot程序是用了装载两部分核心genunix和unix的

installboot是用来在磁盘分区上安装bootblk的

genunix is the platform-independent generic kernel file ,while unix is the platform-specific kernel component.

整个的引导过程:

社交游戏的内核 篇6

其实没有。“疯狂猜图”比一时风头无两的Draw Something(你画我猜)还要简单,它是一款典型的人机对战游戏。人机对战类游戏最大的问题在于变化是有限的,玩者总可以摸到这款游戏的所谓规律技巧,而一旦摸到,这个游戏对于这个玩者来说,基本生命周期就告一段落了——除非这个游戏的声光色效实在非常出色,或是有极强的文化内涵。但《疯狂猜图》显然不具备任何表现形式或内涵实质的优势,当有好事者将所有的答案都公布在网上之后,这款游戏很有可能就走入了它的衰退期。未来最大可能是,它比《你画我猜》这种人人对战式游戏的生命周期还要短。

它的长处是利用了社交网络进行推广,但它并不是一款基于社交的游戏。让我们来看一下真正意义上的一款社交游戏:candy crush Saga——这个游戏的开发商King近期正准备在美国IPO上市。

Draw Something虽然是人人对战,但它的确缺少社交的乐趣,基本上人人对战都是陌生人。
Candy Crush Saga则是非常经典的熟人社交游戏,它的寿命比Draw Something长得多。

这是一个在Appstore上好评如潮的消除类游戏,但它必须要用Facebook的账号登录,玩这个游戏就有3个地方和社交有关:一是在命耗尽时(初始值为五条命)可以请朋友奉送一条命——当然你也可以等上半小时恢复一条命,二是在某些大关卡前,必须要收集到3张tickets才能进入,而这3张tickets除了花点银子去买以外,还可以请朋友帮忙奉送一张。最后,这个游戏有一张地图,你可以看到你的朋友们都在玩哪一关或陷在哪一关前进不得,这就意味着你的游戏进度别人也看得到。至于在每一关都有一个分数排行,也可以看到朋友们中的高手排名。

这个游戏的巧妙之处就是,充分利用了一般人社交中的两个非常重要的要素:互助及炫耀。在命和门票上,朋友们互相帮助(朋友送你命或门票时,他并没有损失什么,所以乐得帮助你)。而游戏的进度,则满足了炫耀的心理。我的一个好友在今年春节时突闯到第100关,很是洋洋自得了一番。另外,普通人社交中也会包含一定的善意嘲弄,这在这个游戏上也有所反应:如果你在某一关前被难住而无法继续时,恭喜你,会有大把人来嘲笑你的。

社交游戏,游戏当然很重要,但社交则会给这个游戏带来新的玩法和乐趣——没有这一点,谈不上社交游戏。Draw Something虽然是人人对战,但它的确缺少社交的乐趣,基本上人人对战都是陌生人。Candy Crush Saga则是非常经典的熟人社交游戏,它的寿命比Draw Something长得多:从消除类游戏层面上并无太多新意的它,已经至少风行了半年,而且覆盖人群男女老少都有,全然不是只有小女生玩的东西,虽然它的画风是颇有些小女生风格。

其实网络游戏天然是具有“社交”因子(更多的可能是基于仇恨、愤怒),大型MMORPG就有社交的成分:组队砍怪乃至发动一场国战。手游也有很多社交成分,但像Candy Crush Saga这种充分利用现成的社交网络,并将社交行为深入植入到游戏玩法中的,委实巧妙。它的植入已经到了这个份上:如果没有社交,这个游戏的精致程度比起宝石迷阵而言,就压根不值一提了。

C2C(copy to china)自然不会放过这款在二季度美区销售榜排名第一的游戏,也是Facebook上最流行的应用,每日平均用户人数预计为1540万人。上海的游戏公司迅速克隆了两个出来:水果总动员和苹果总动员。但恐怕仅是克隆了它的游戏界面,至于社交性,几乎就是个零,纯属只得表皮之作。

未来会不会在中国头号熟人社交的微信上产生这种游戏呢?我看很有可能。

系统内核 篇7

根据两篇文献来看,在这个操作系统当中,其最为核心的部分其实就是内核部分,从Linux操作系统的内核构成来看,主要是包括CPU、网络通信、文件系统等多个部分的内容。Linux操作系统包括多个子系统,而且,所有子系统的运作,都与Linux操作系统中的内核有一定的联系。因此,内核是整个Linux操作系统中最为关键的组成部分。Linux操作系统内核与其他的微内核系统有着很多的差异性,用户服务是微内核最为关注的内容,用户服务要求内核能够提供更加简洁和更高频率的服务,但是,这些服务的完成都需要微内核的支持。在Linux操作系统不断发展的情况下,微内核也随之不断地发展,从实际效果来看,Linux操作系统得到了不断地完善,在这样的情况下,微内核的应用效率得到了有效的提升。另外,Linux操作系统易于移植是其一个重要的特性,将Linux操作系统进行不同的内核编译,然后其就能够被用于各类系统当中,而且能够正常的运行。

目前来讲,Linux操作系统的内核主要有四个部分的内容:1)用户应用程序。这是Linux操作系统当中所有软件的一种集合。2)系统调用库,这是用户应用程序能够实现的唯一途径。3)Linux操作系统的内核。内核是一个系统的核心,主要是对硬件资源的访问,在系统启动并且运行的时候,可以对磁盘和内存中的文件进行有效的处理;4)硬件。这主要是指系统当中的物理设备。Linux操作系统能否被正常的运行,其实与系统本身有着重要的联系,而内核的扩展,系统调用接口的扩展等都是系统内核生存的重要内容。

从分析研究来看,Linux操作系统内核有这个几个方面的优势:1)抢占内核;2)能够更加有效的调度程序,在Linux2.6版本当中,就采用了O(1)算法,能够满足在高负荷工作条件下完成程序的调度。3)同步原型与共享内存。Linux系统内核采用互斥方法来实现资源任务的针对性,线程在继续执行时,就会丢掉消耗时间的系统程序调用。

针对Linux操作系统内核调度算法问题,在Linux2.6版当中,其采用了O(1)调度器,其的目的是为了能够提高Linux内核的实时性能,并且扩展CPU处理器的并行性。从实际的效果来看,保留了2.4版本中的给予优先级的调度、调度的公平性等优点,而且还呈现出很多其他优点:提高了SMP可扩展性、提高了SMP亲和度、优化计算密集型的批处理任务调度等。不过从实际的应用情况来看,其还存在着一定的问题。在Linux操作系统系统当中,其会将进程自动划分为进程和普通进程两类,然后通过多级轮转调度的算法,按照优先级的方式,逐步的实现这些进程的运行。Linux的优先级分配根据的是进程的价值,而不是进程的响应最终期限和资源占用时间,根本不能满足实时任务的要求。在本文的研究中,认为内核的调度算法是综合考虑最终期限、任务频率等在内的一种调度算法,其能够提升Linux内核的实用性。在算法应用方面,可以以EDF算法作为基础,其中最重要的一个环节是在相同优先级的进程当中,建立散列表,在这个表当中,可以根据程序的应用频率,做一个降序处理,在整个散列表当中,那些在第一位的进程,就是系统当中所有程序应用频率最高的程序,因此,在就要求在优先级层面,应当建立更多的进程。另外,在对这些优先级的程序做出处理的时候,首先就是查看是否存在这些进程,然后再根据散列表中的进程排序进行实时的调度。

针对Linux操作系统内核中基于优先级的可抢占式调度策略问题,在实际应用的调度过程中,有时可能会出现一种比较奇怪的情况:由于所有程序共用所有的资源,那些高优先级的任务可能会被低优先级的任务堵塞,反而让中优先级任务在高优先级任务之前得到执行,从而导致许多严重后果。这通常被称为优先级反转问题。在新的Linux的内核设计当中,并没有采用可抢占实时调度,因此,这并不能够对优先级反转问题进行解决,针对这个问题,可以通过优先级继承策略来进行解决。优先级继承的理念是:当优先级任务堵塞了另一个高优先级任务的情况下,其能够忽略自身的优先级,并且使其他的高优先级任务能够被执行,这样就能够将该任务所占据的资源释放出来。另外,在Linux操作系统的源代码当中,也应当做相应的修改,新增加的一个链表结构,保存所有对该资源表成功上锁的进程指针和进程原有的优先级,同时增加一项一记录,用来记录当前对资源表上锁的进程的最高优先级。当一个进程对资源表进行上锁的时候,那么这个进程的指针以及原有的优先级就应当被保存在资源表的上锁程序当中,如果这个进程的优先级高于资源表中所保存的最高优先级,那么就要更新进程记录。当进程申请一个资源表不成功的时候,如果该进程优先级大于资源表的最高优先级,则修改所有对该资源表进行上锁操作的进程的优先级,使它们等于该进程的优先级,同时更新资源表最高优先级记录,然后将进程插入到资源表的等待队列,如果不大于,则直接将进程插入到资源表的等待队列。当进程释放一个资源表时,若该进程的优先级小于或等于资源表记录的最高优先级,则用在该资源表中保存的该进程的原有优先级恢复其优先级,否则不需要恢复进程的优先级。

综上所述,在Linux操作系统内核的实际工作当中,虽然其本身具有很多的优势,但是,仍然存在很多的问题,其中最为典型的问题就是实时调度算法问题以及优先反转问题,针对这两个问题,本文提出了一些解决对策,这对于Linux系统内核的进一步改善有着重要的现实意义。

参考文献

[1]黄义文.Linux操作系统内核裁剪的分析[J].中国民航飞行学院学报,2010(3).

系统内核 篇8

嵌入式系统, 是计算机硬件和软件的综合体, 是以具体应用为中心, 以计算机和信息技术的发展为基础, 将用户所需的特定功能嵌入到产品、装置或大型系统中, 软硬件可裁剪, 从而能够适应实际应用中对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。嵌入式系统通常是面向用户、面向产品、面向特定应用的, 往往具有功耗低、体积小、集成度高等要求。这就要求嵌入式系统的软件包括操作系统的代码要精简而高效, 针对具体需求, 去除冗余, 在硬件资源有限的嵌入式系统上运行时达到理想的性能。嵌入式系统的硬件的核心部件是嵌入式处理器, 不同的应用领域往往需要不同类型的嵌入式处理器, 这就要求嵌入式操作系统具有一定的跨硬件平台的可移植性, 可以根据特定的应用需求进行配置或修改以支持特定的嵌入式处理器。嵌入式系统需要在硬件和软件上采取相应的容错技术, 特别是嵌入式操作系统能够在极端环境下表现出稳定可靠的性能。许多嵌入式系统具有实时性要求, 从而能对外部事件迅速作出反应。对嵌入式系统的实时性要求主要是对嵌入式操作系统的实时性要求, 以满足具体应用对系统反应时间的要求。

2 Linux在嵌入式系统中的应用

Linux和嵌入式系统都是计算机学术领域中的技术热点, 把Linux应用于嵌入式系统, 使Linux自身固有的优越性融入嵌入式技术, 是嵌入式技术发展的一个重要方向。作为一种现代操作系统, Linux是真正的32位操作系统, 支持虚拟内存和共享库, 并且使用处理器提供的内存保护模式来保证内核程序的安全可靠;Linux支持多种体系结构和硬件平台, 并且兼容POSIX1003.1标准, 在界面上具有很强的通用性;Linux内核中集成了大量的网络应用程序, 支持TCP/IP、PPP等众多的网络协议, 在强大的网络需求下表现出优良的健壮性;Linux支持多用户、多任务模式, 内核精简而高效, 模块性和可修改性强, 并且支持GNU公共许可证, 公开源代码供任何人免费修改和使用。这些优点使得Linux非常适合于嵌入式开发和应用。在嵌入式系统应用方面, Linux的内核完全可以裁减到100kb以下, 功能专一而高效, 高度节约资源, 启动速度快, 免费授权用户使用的特点更节约了嵌入式产品开发的成本。

3嵌入式Linux内核技术分析

把Linux用于嵌入式系统, 要充分考虑各种具体的嵌入式系统的特点, 有针对性地对Linux内核加以调整, 包括裁剪、修改和补充等几个方面:

(1) 将Linux内核移植到一些典型的微控制器或系统芯片上并加以必要的补充。Linux内核源代码中的arch目录下本来就已经有针对各种不同处理器的实现, 通过条件编译和条件链接就可以构成适用于不同处理器的映像。但是, 目标处理器可能有一些独特的资源和性质是原版Linux没有加以充分利用的, 所以还需要加以补充。以ARM嵌入式处理器为例, 原版Linux内核本来已经支持ARM体系结构, 在Linux内核源代码中的arch目录下有个子目录arm, 里面的代码就是Linux内核底层在ARM处理器上的实现。可是, 作为面向嵌入式系统的微控制器或片上系统, ARM中还有一些资源和功能在原版Linux内核中是用不到, 不存在的, 而对于嵌入式系统却意义重大。例如, ARM体系结构中有“通用可编程I/O”寄存器GPIO, 这在通用系统中是用不到的, 但是在嵌入式系统中却至关重要。再如, 作为通用操作系统的Linux需要支持VGA、XGA等显示卡及鼠标器, 但不需要支持嵌入的液晶 (LCD) 显示器和触摸屏, 可是在嵌入式系统中却恰恰相反, 甚至在SA-1ll0芯片上已经嵌入了LCD接口。还有, ARM体系结构中的“快中断”对于通用系统没有多大意义, 而对于有实时要求的嵌入式系统可能却很重要。凡此种种, 都说明了需要对本来就已经支持ARM体系结构的原版Linux内核再加以修改和扩充。

(2) 对Linux内核的代码进行裁剪, 一方面是为了减小内核映像的大小, 另一方面是为了缩短系统的初始化过程, 加快系统的启动速度。对于嵌入式系统, 一般的要求是打开就能用, 视具体应用的不同, 系统的引导/启动过程要求在几秒、十几秒或最多几十秒内完成。重启动则一般不作自检, 甚至也无需重新装入系统映像, 所以对重启动要求更快。实际上, 在嵌入式Linux系统的加电引导/启动过程中, 时间主要花在三个方面:一是对系统硬件的加电自检, 特别是对内存的自检;二是系统映像的引导/装入;三是系统的初始化。

(3) 从常规的Linux内核出发量身定制一个嵌入式操作系统时, 如果目标系统不带磁盘, 但是却需要采用文件系统, 就应该配备RAMDISK以及对闪存的支持。这二者都可以通过对Linux内核的条件编译完成。与此同时, 对磁盘的设备驱动应该砍掉。既然不用磁盘, 那么存储页面的换入/换出功能, 包括内核线程kswapd () , 自然也应该砍掉。进一步, 如果不需要采用文件系统, 那么可以把内核中的文件系统部分, 包括内核线程bd flush () 都砍掉。不过, 所砍掉的只是文件系统的底层, 而顶部的虚拟文件系统层VFS却需要保留, 因为设备驱动也需要通过VFS才能实现。

(4) 常规的Linux操作系统是划分“系统空间”和“用户空间”的, Linux内核在“系统空间”中运行, 而应用程序在“用户空间”中运行。如果嵌入式Linux操作系统不划分“系统空间”和“用户空间”, 那么操作系统的内核与外围应用程序之间不再有物理的边界。系统中所谓的进程实际上都是内核线程, 每个内核线程都与内核共享同一内存空间, 可以直接访问内核所有资源, 包括直接调用内核中的子程序, 而各个内核线程的可执行程序往往与内核静态地连接在一起。而且, 系统中所有的进程都可以访问系统中的全局变量, 因此所有的全局变量都是可以用于进程间通信的共享变量。从一个进程的代码中不仅可以直接调用内核中的函数, 还可以调用其它进程的函数。如果在这些函数中可以发生调度, 那就有多个进程并发进入这个函数的可能, 这就要求被调用的函数是可重入的, 就是不访问全局变量的。可是, 有时候确实需要使用进程内部的全局量, 为此可以在Linux内核中提供定义和使用“进程变量”的手段。这些进程范围内的全局量实际上是对进程控制块的扩充, 访问时要通过进程控制块指针作间接寻址。这样, 每当切换进程时, 这些进程变量就随着进程控制块一起切换了过来。不分“系统空间”和“用户空间”并不说明应用程序必须与内核静态地连接在一起, 事实上, Linux内核中的可安装模块与内核代码之间就采用了动态连接的技术, 需要动态装入的应用程序可以借鉴这种动态连接技术。不分“系统空间”和“用户空间”并不意味着不能使用页面交换技术, 只要CPU芯片中包含着存储管理单元, 就可以通过页面映射提供一定的保护, 但只是用于不同进程之间、代码段与数据段之间, 而不是用于用户空间与内核之间。

(5) 嵌入式系统中某些常用的外部设备在通用系统中是很少见的, 所以嵌入式Linux内核中常常需要一些特殊的设备驱动程序。系统的输入/输出设备, 特别是用作人机界面的设备以及网络设备, 都因具体的系统而异, 须配备相应的设备驱动程序, 有的可能需要加以开发。这些驱动程序可以通过可安装模块的方式实现, 也可以静态地连接在内核中。嵌入式Linux内核往往需要提供ramdisk、闪存、LCD显示屏、触摸输入屏、“看门狗”等设备的驱动程序。

(6) 根据嵌入式Linux系统是否需要网络支持, 决定是否在嵌入式Linux内核中包含对互联网域插口的支持和对Unix域插口的支持;根据嵌入式Linux系统的具体需要, 决定是否在嵌入式Linux内核中保留对Sys5或传统Unix进程间通信的支持;根据具体嵌入式Linux系统的硬件组成, 选择是否在嵌入式Linux内核中保留对多处理器SMP结构和PCI总线或Cardbus总线 (即PCMCIA接口) 的支持。

(7) 如果嵌入式Linux系统有实时性要求, 那么可以考虑下列措施: (1) 把存储页面的换入/换出机制从Linux内核中砍掉; (2) 将文件系统的实现 (除VFS外) 从Linux内核中砍掉, 或者把它移到内核外面; (3) 妥善安排各个进程的优先级, 并采用实时进程优先调度策略; (4) 适当提高时钟中断频率, 以改善时钟精度; (5) 对Linux的中断响应机制加以修改, 允许中断处理按优先级嵌套; (6) 仔细的权衡和估算嵌入式Linux系统的负载, 如中断的频率与分布以及进程的数量, 等等, 必要时可通过实验加以验证, 使CPU运行于负荷较轻的状态; (7) 时间要求特别高的任务可以实现成内核线程, 以缩短进程切换所需的时间; (8) 每当发送一个信号给优先级比当前进程更高的进程时, 就请求一次进程调度; (9) 必要时采用Linux2.6版本的内核, 实现可剥夺调度; (10) 采用“优先级继承”或“优先级封顶”等算法解决Linux内核中存在的优先级倒转问题;+, -可如RTLinux系统那样, 将整个Linux操作系统作为一个进程放在一个底层的微内核上运行, 而实时要求特别高的进程则直接在该微内核上运行。

参考文献

[1]毛德操, 胡希明.Lniux内核源代码情景分析[M].杭州:浙江大学出版社, 2002.

[2]李善平, 刘文峰, 王焕龙, 等.Linux与嵌入式系统[M].北京:清华大学出版社, 2003.

系统内核 篇9

近些年来,随着嵌入式集成电路技术的快速发展和人们对嵌入式产品需求的提高,嵌入式双核、四核移动处理器已经逐渐成为主流。然而正如传统桌面处理器一样,嵌入式软件的发展总是滞后于硬件的快速发展,软件开发的复杂性越来越大,开发成本和开发周期越来越长,在这种情势下,调试在嵌入式软件开发中的地位越来越重要。由于硬件资源有限,嵌入式软件开发中的调试主要为远程调试[2]。嵌入式软件开发中的远程调试主要有硬件调试和软件调试两大类,硬件调试虽然实时性强,但价格昂贵,通用性差,操作复杂;软件调试由于其成本低,通用性强,可移植性高而得到广泛的应用。

当前流行的远程调试代理工具主要是gdb Server。gdb Serve不仅性能稳定,而且支持大部分调试功能,但由于gdbserver是基于嵌入Linux操作系统开发的调试代理工具,不能应用于其他嵌入式操作系统。与桌面操作系统的单一化不同,由于应用环境的多样化,嵌入式操作系统也呈现多样化的趋势,单是常见的嵌入式操作系统就有十几种之多,如Vx Works、QNX、u C/OS-II等,但对于这些嵌入操作系统并没有现成的远程调试系统可用。

本文从嵌入式操作系统内核和调试代理两个方面详细分析了嵌入式调试器的的设计思路和实现流程,并合理地划分了操作系统和调试代理应提供的功能。以此为基础,在嵌入式实时操作系统a Coral上实现了一款嵌入式多线程软件调试器。

1 嵌入式远程调试体系结构的研究

嵌入式远程调试由目标机和宿主机两部分组成,其中调试代理运行在目标机端,完成具体的调试过程,宿主机调试器负责与调试代理通信,如图1所示。

调试人员在宿主机上运行宿主机调试器,在目标机上运行调试代理,宿主机调试器读入用户输入的命令后,将调试命令分解成一系列的数据报,并通过某种通信协议将这些数报发送给调试代理,调试代理根据收到的数据报完成具体的调试功能,然后将得到的结果再回送给调试代理,最后调试代理将收到的数据输出到宿主机终端动。

一个完整的嵌入式远程调试系统主要包括嵌入式操作系统内核和调试代理两个部分,总体来说操作系统内部要实现与调试相关的数据结构,并对外提供可应用于调试的系统调用供上层调试代理使用,调试代理利用操作系统提供的系统调用来实现远程调试功能。然而在一个调试系统哪些功能应试由操作系统内核来实现,哪些功能应该由调试代理来实现并不是一个容易解决的问题,如果把过多的功能放在内核中,虽然可以简化调试代理的开发,但另一方面却加重了内核的负担。本文通过仔细的研究后,合理地划分了操作系统和调试代理各自应该实现的功能,并给出了具体的实现细节,具体细节如图2所示。

由于每种调试功能实现起来都是非常复杂的,而且每种调试功能表面看起来有很大的不同,但其内部实现过程有许多部分是相同的。因此如果由内核来实现具体的调试功能,不仅增加了内核的负担,降低了内核的效率,使内核代码变得更加冗余,不易维护,而且可扩展性不强,如果以后增加其他的调试功能,只能修改内核,不能在应用层完成。本文通过分析常见调试命令的实现原理后,发现操作系统内核只要实现五个基本的功能,调试代理就可以使用操作系统提供的这五个基本的功能实现各种调试命令,这五个功能分别是:线程绑定,事件通知,控制线程运行状态,读写寄存器,读写进程地址空间,每种功能的具体描述和实现细节将在后面进行详细描述。在这种调试架构中,调试代理利用操作系统内核提供的功能实现调试命令,如图2所示,调试代理主要有通信处理,命令解析和事件驱动这三个核心部分组成,其中事件驱动是调试代理的核心,通信模块接收从宿主机发送的数据,命令解析模块从收到的数据中解析出调试命令,事件驱动机制来完成具体的调试过程。下面以断点为例来分析调试代理与目标机内核的交互过程,如图3所示。

命令接收模块接收到宿主机调试器发送的数据后,将收到的数据发送给命令解析模块,命令解析模块从收到的数据中解析出断点指令,然后就生成一个事件交由事件驱动模块处理。

设置断点就是用软中断指令替换当前指令,因此本质上还是一个读写进程地址空间的过程,通过内核提供的接口,首先将当前地址处的指令保存在一个缓冲区中,然后用将软中断指令写入当前地址处。当处理器遇到软中断指令后,会自动陷入内核,内核通过事件通知机制唤醒调试代理,同时将事件信息返回给调试代理。然后调试代理就根据内核返回的信息做进一步的处理。

可见只需利用操作系统内核提供的读写地址空间和事件通知机制这两种机制就可以基本上实现断点功能。

基于上述调试架构能够在任何一种嵌入式操作系统上快速实现一款功能完善,效率高,稳定性强,可扩展性好的远程调试系统。下面部分将具体分析架构中每个部分的实现原理和实现过程。

2 嵌入式操作系统内核

嵌入式操作系统内核中的调试部分主要包括核心数据结构和对线程的基本操作两个部分[4],其中核心数据结构是整个调试架构的基础,它将调试对象有机地组合在一起,上层调试软件利用操作系统提供的这些基本操作来实现完整的调试功能。

2.1 数据结构

每个进程线程都有记录其信息的数据结构,称为进程控制块(PCB)和线程控制块(TCB),为了记录调试进程和被调对象之间的调试关系和进程及线程本身的调试信息,需要在PCB和TCB中添加相关信息,如表1所示。

其中ptrace_list为调试进程使用,用于记录当前被调对象,每当创建一个新的线程时,就将此线程的TCB链接到调试进程的ptrace_list链表中。ptrace_children为被调线程使用,用于指向ptrace_list链表的下一项。在调试系统中,被调线程有两种父进程:parent和real_parent,其中real_parent为被调线程的真实父进程,即被调线程是由real_parent所产生的,parent表示被调线程的当前父进程,在非调试状态下real_parent与parent相等,但一旦进入调试状态,调试进程就成为被调进程的当前父进程,此时parent就代表调试进程。

2.2 嵌入式操作系统内核接口

嵌入式操作系统是整个调试系统的基础,它为调试代理提供基本的接口,调试代理利用操作系统提供的接口来实现更加复杂的调试功能。经过分析和研究之后,为了实现完整的调试功能,以下几个口是嵌入式操作系统必须提供的。

(1)绑定线程

绑定线程的意思为在被调线程和调试进程之间建立调试关系,本质上就是修改上面所述的数据结构。绑定分为两种,一种是静态绑定,一种是动态绑定。在静态绑定中,调试进程先启动,然后由调试进程启动被调线程,此时调试进程是被调线程的real_parent,但在动态绑定中,被调线程可能先于调试进程启动,在建立调试关系之前,它们之间没有父子关系。

为了绑定一个线程,建立调试关系,首先将被调线程添加到调试进程的调试链表中(ptrace_list),并将被调线程的parent修改为调试进程,然后将被调线程标记为被调(ptrace),如果是动态绑定的话,还要暂停被调线程,最后要根据调试进程是否是被调线程的真实父进程来判断是否暂停被调线程的父进程,如果调试进程不是被调线程的父进程,就要暂停父进程,由调试人员来作出进一步的调试动作。

(2)读写进程地址空间

通常情况下,进程地址空间的代码段是只读的,因此用户无权修改进程的代码段,但是在一些不支持硬件断点的处理器中,要实现断点功能,必须要向进程的代码段中插入软中断指令,因此就需要操作系统内核实现这个功能。例如调试代理要在某条指令后插入一条软中断指令,调试代理就将插入位置,指令长度,指令内容传入内核,由内核来完成具体的插入。为了防止用户恶意读写非法地址,内核在读写数据之前,首先要进行地址检查,确保要读写的地址位于用户空间。

(3)启动线程

在具体的调试过程中,被调线程可能由于许多原因暂停执行,如遇到断点,被调线程创建了一个新线程,收到了一个信号等,之后调试人员可能想要恢复暂停的线程,但由于调试代理运行在用户空间,因此调试代理没有调度线程的权限,也就无法重新启动暂停的线程。

启动线程的过程比较简单,主要分为两个步骤,设置线程的状态和重调度,如果线程已经处于运行状态,就直接返回,如果线程处于阻塞状态,就将线程设置为就绪状态,将其TCB加入到调度队列中,并唤醒此线程,使其参与下一次调度过程。

(4)读写寄存器

查看当前寄存器的值是常见的调试手段,每一个线程在内核中都有一个内核栈[5],当线程从用户空间进入内核空间时,就将此时的寄存器值,返回地址等现场保存在线程的内核栈中,当之后进程从内核空间返回到用户空间时,就将恢复之前保存在内核栈中的信息,从而确保线程的正确执行,因此读写进程寄存器可以由读写线程的内核栈间接实现。每种架构的嵌入式处理器都有大量的寄存器,因此内核必须按一定的顺序将寄存器值压入内核栈中,只有这样才能在寄存器和内核栈之间建立起映射关系。

(5)事件通知

当被调线程正在运行时,调试代理处于阻塞状态,等待被调线程产生某个事件,例如被调线程创建了一个新线程,被调线程遇到了一个断点等,当某个事件发生后,内核必须通知调试代理并将具体的事件信息返回给调试代理,调试代理根据内核返回的事件信息判断出事件类型,根据不同的事件类型做出不同的动作。除此之外一旦发生了某种事件,内核必须暂停被调线程,以使用户有时间做出反应,各种嵌入式操作系统都会提供某种事件通知机制,例如Linux中的信号、u C/OS-II中的邮箱等。

3 调试代理

调试代理是一个工作于操作系统之上的调试软件,它一方面接收用户的调试命令,另一方面以操作系统提供的接口为基础完成具体的调试功能。下面详细描述其核心数据结构与运行机制。

3.1 线程信息

每一个被调线程都需要一个描述其信息的数据结构,所有这些数据结构通过指针链接在一起,形成一个线程链表。其中每个数据结构记录一个线程在调试过程中的各种数据信息,所记录的信息主要包括断点信息、单步信息、寄存器信息和此线程的当前状态等数据信息。

断点信息记录在此线程中所插入的断点,每个断点都有一个与断点相关的数据结构,所有的断点对应的数据结构构成一个链表。每个数据结构记录断点的各种属性,断点主要的属性包括断点的插入状态、断点的插入地址、断点插入之前此地址处的内容等。每当用户要在一个线程中插入一个断点时,就为此线程生成这样的一个结构,并链入线程的断点链表中。

在不支持硬件单步的处理器中,单步功能本质上也是由断点实现的,当用户输入单步命令后,就在下一条语句位置处插入一个断点,然后运行线程,当线程执行完当前语句后,在执行下一条语句时,就会遇到此断点,由此来模拟实现单步功能。

寄存器信息用于缓存被调线程的寄存器值,当用户查看某一个寄存器的值的时候,通常情况下用户马上还会查看同一寄存器或其他寄存器的值。因此为了提高效率,调试代理通常把所有的寄存器的值都缓存起来,这样当下次再次查看寄存器时,如果缓存有效就直接从缓存中读取。

线程的状态信息主要记录线程当前的运行状态以及和特定于操作系统的一些信息。线程的运行状态主要有暂停、运行和中止。同一状态可能由多种情况导致,而不同情况的后续处理方式却不同,比如在单步和遇到断点时,线程都会处于暂停状态,但后续的处理却有很大不同,因此除了记录以上三种状态外,还必须记录产生这种状态的原因。

3.2 事件驱动机制

事件驱动机制是整个调试代理的设计架构,整个调试代理就是基于事件驱动机制工作的。利用事件驱动机制,不仅提高了程序的并发能力,而且增加了程序每个模块之间的独立性,具有很高的扩展性。在此架构中,每当用户输入一个调试命令,就会产生一个或多个事件,然后由事件处理逻辑来处理每一个事件,当所有的事件都处理完后,调试代理就阻塞等待下一个事件的到来。

每个事件都有一个数据结构struct event,所有的事件形成一个事件链表,每个event结构由三个元素组成,最重要是fd和proc,fd表示事件源,即是谁产生了这个事件,proc为此事件的处理程序。正常情况下事件链表为空,调试代理阻塞在所有的事件源上,当某个或多个事件源有事件到来时,调试代理就被激活。接着调试代理就分配并初始化相应的事件,把事件注册到事件管理单元中,然后调用事件处理单元,事件处理单元就扫描每一个事件,并调用每个事件中的事件处理程序来处理事件。当所有的事件都已经处理完闭后,调试代理就再次阻塞在事件源上,等待下一个事件的到来。

4 远程调试系统在aCoral上的实现

a Coral是电子科技大学开发的开源嵌入式多核实时操作系统,a Coral支持多线程,支持多核处理器并且具用内存保护机制,代码精简,扩展性强[8]。本文将在嵌入式a Coral上实现一款调试代理。下面简要描述一下实现过程。

4.1 a Coral对多线程的支持

在线程方面,a Coral本身对线程有很好的支持,a Coral提供了完整的线程控制函数,如创建线程、暂停线程、恢复线程、中止线程等;为了防止线程之间的竞争,a Coral也提供了多种线程互斥机制,如互斥锁、信息量等。利用这些函数,可以很好地实现上面所说的大部分功能。

4.2 a Coral在事件通知方面的缺陷和改进

实现的关键点在于a Coral没有提供事件通知机制。当调试代理阻塞等待一个事件到来的时候,此时如果调试人员输入了一条调试命令,正常情况下操作系统应该唤醒调试代理,并返回给调试代理相关事件信息,但a Coral没有实现这一功能的函数。

这在调试单线程的时候没有问题,因为此时只有一个线程,当有事件到来时,操作系统只要将调试代理唤醒即可,调试代理知道肯定是此线程的事件。但当操作多线程的时候就会出现问题,因为在多线程调试中,在同一时刻可能会产生多个事件,如果仅仅将调试代理唤醒,调试代理将无法正确获知事件信息,也就无法正确完成调试过程。

在具体的实现过程中,在嵌入式a Coral内核中添加一个链表来实现事件通知机制,每当一个事件到来时,内核就将此事件信息作为链表元素插入内核维护的事件链表中,当同一时刻有多个事件到来,或者当调试代理正在处理其它的事件时,又有事件到来时,内核就将每一个到来的事件都封装成一个链表元素插入到链表中,当调试代理处理完当前事件,又陷入阻塞状态时,内核就扫描此链表,若链表不为空,内核就直接唤醒调试代理,并将链表头的事件返回给调试代理,如果链表为空,调试代理就继续阻塞直到下一个事件的到来。

4.3 功能验证

基于以上的设计思路,本文在嵌入式a Coral上实现了一款嵌入式远程调试工具,下面给出具体的测试环境和测试过程,其中开发板为mini2440(处理器型号为arm920t),宿主机运行Ubuntu11.10操作系统,目标机运行a Coral,宿主机通过gdb与目标机上的调试代理建立调试连接。被调程序包含两个线程:thread1和thread2,每一个线程都运行快速排序代码,首先建立远程调试连接:

经过上面的测试可以看到本文的设计思路是正确的,能够完整的实现多线程调试。

5 结语

本文提出了嵌入式远程调试的基本设计思想和一种嵌入式远程调试架构。以此为基础,从嵌入式操作系统内核和调试代理两个方面详细分析了嵌入式远程调试工具的实现过程,分析了嵌入式操作系统内核对远程调试应该提供的接口并详细研究了这些接口的实现原理。之后又重点探讨了调试代理的设计原理,并对调试代理的事件驱动机制作了重点分析。最后着重分析了嵌入式a Coral中事件通知机制的缺陷和改进,并在a Cora上实现了一款嵌入式多线程远程调试工具。本文给嵌入式调试系统开发人员提供了帮助,使其开发出效率高、性能稳定、可扩展性强的调试系统。

参考文献

[1]龚兰兰.基于u C/OS II的远程调试模块的设计[J].计算机应用与软件,2010,27(7):97-99.

[2]姚放吾,丁皞.嵌入式远程调试器保护模式下调试功能的实现[J].计算机技术与发展,2011,21(4):242-245.

[3]李善平,刘文峰,王焕龙,等.Linux与嵌入式系统[M].北京:清华大学出版社,2006.

[4]张银奎.软件调试[M].北京:电子工业出版社,2008.

[5]毛德操,胡希明.Linux内核源代码情景分析[M].浙江大学出版社,2001.

[6]章辉,桥井,高桥,等.基于仿真器的源码级调试器设计与实现[J].计算机工程与设计,2010,31(8):1685-1688.

[7]黄光红,李钢,张仁斌.通用嵌入式系统远程调试器的研究与设计[J].计算机测量与控制,2008,16(6):853-854.

[8]多核嵌入式实时操作系统项目组.a Coral技术文档V1.0[EB/OL].(2010-09-03)[2012-12-10].http://www.acoral.org/admin/upload/111.rar.

[9]Bennett J.Howto:GDB remote serial Protocol:writing a RSP Server[EB/OL].http://www.embe-cosm.com/download/ean4.html.2011.

[10]Wenyu Chen,Dongpu Han,Dongcheng Tang,et al.A model of remote Debugger supporting multiple types of Connection[C]//2011 International Conference on Electronics,Communications and Control,9-11Sept 2011.Piscataway,NJ,USA:IEEE,2011.

[11]Akgul T,Kuacharoen P,Mooney V,et al.A debugger RTOS for embedded Systems[C].27th Euromicro Conference 2001.

系统内核 篇10

虽然对以上新能源的研究确实取得了一定的成绩,且在未来可再生能源肯定是能源的主要的选择方向,但在目前新能源在世界能源总量中所占比例依旧很低。

一、系统方案概述

虽然最近几年我国的煤矿瓦斯监控技术发展的很快,但是还存在一些关键技术问题没有解决,例如各种环境监测传感器精度和可靠性不高,大部分的厂家都是专用的通信协议,互不兼容,改进和扩充系统时必须找对应的厂家,在缺乏技术支持的情况下不得不改换整套的系统,而且信息处理技术还不够先进导致结果不够精确也不够及时,只能实现直接的传输、存储、显示和打印等功能,分析、挖掘的深度不够。

二、系统的总体结构和工作原理

系统主要由地面主站、以太网通信系统、CAN总线通信系统、井下监控分站、本安电源、各种传感器、变频器和通风机构成,系统的总体结构。监控分站采集来自传感器的数据,经过处理和判决之后,生成对应的状态供现场显示和报警,同时可以根据得出的正常、轻微和危险这三个融合结果对变频器输出的频率进行控制,从而实现对通风机转速的控制。

监控分站中的数据通过CAN总线将数据送到以太网——CAN网关来接入光纤以太网,以太网采用环形网络结构,保证了数据传输的安全性和可靠性,地面的主机对传送上来的信息进行分析和处理,实时显示动态的文字、曲线等信息。

2.1地面主站

地面主站由PC主机、以太网转RS232模块、打印机和投影仪组成。分站的监测数据经过地面主交换机转换成RS232信号后传送给PC主机,由支持DDE技术的VB来编写驱动程序以实现通过MSComm控件对串口数据的收发,然后组态王通过DDE技术和VB进行通信,从而实现上位机数据采集的功能。

以太网转RS232模块采用ETH232 GH微型以太网/串口转换器,它是一款带光电隔离的以太网/串口转换器,可以实现以太网、电源、串口的三方隔离。

2.2以太网通信系统

以太网通信系统包括地面主交换机、光纤收发器和井下的防爆网络交换机。井下的防爆网络交换机采用KJ127矿用隔爆型以太环网交换机,它采用高性能的千兆工业级以太网交换机,有2对1000M的冗余光纤接口和2对的100M下联冗余光纤或RJ45接口,能构建1000M的高速冗余双环网和下联100M的冗余双环网,拥有强大的网管控制的功能,当链路故障或断裂时能快速的重构网络链路,最大的重构自愈时间小于300ms,拥有6路的可选接口,可以是100M光纤以太网接口或CAN/RS485总线接口,这样交换机输出的总线上就可以直接挂载具有CAN总线和RS485总线接口的设备,构成多主式或者主从式的总线局域监控网,一台交换机最多可挂载6台监控分站。

2.3井下监控分站

井下监控分站主要包括主控芯片S3C2440A、外扩存储器、信号采集模块、LCD显示、RS485接口和CAN通信模块等。信号采集模块共有16路传感器测量通道,其中八路是模拟量通道,八路是频率和开关量复用输入通道。

2.4通风机

通风机变频器选择FR-E500系列变频器,它体积较小,性价比较高,能支持RS485通信,拥有独立的RS485接口,PU口也可用于RS485的通信,支持3点的模拟量输入,起动频率可以在0-60Hz范围内设置,输出范围是0.2-400Hz,支持最大为15种的多段速度选择,可以设置为30Hz,60Hz和90Hz三段式速度控制,分别对应多传感器模糊融合中融合结果为正常、轻微和危险时的输出频率。

2.5系统模块化设计

针对煤矿井下环境极其恶劣、复杂,而不同煤矿又千差万别的特点,项目软硬件各层次拟采用模块化结构设计,将各个环节在可靠的前提下设计成最小系统,可配置性强,使其灵活地组成系统以适应不同规模、不同工程环境要求的安装、配置、调试等。

同时,可以很方便的迁移应用到森林防火、水下环境监测等领域中。

三、结论

本着以人为本、加强安全生产的想法,本人在原有的煤矿瓦斯预警的系统上,进行了改进。本系统降低了事故发生的概率,保障了开采人员的生命安全。

摘要:煤矿开采是一个高风险的工作,因此煤矿安全问题一直是人们高度关注的事。但是每年因煤矿开采而死亡的人数虽略有下降,但一直是很高的。其中煤矿瓦斯爆炸又是引起煤矿事故的重要原因,所以煤矿瓦斯预警系统是保障煤矿安全开采比不可少的一项措施。

关键词:煤矿安全,光纤以太网+CAN总线,模糊数据融合,瓦斯预警

参考文献

[1]李景魁.基于无线传感网的煤矿瓦斯监控系统研究与设计[J].煤炭技术,2013,(11)

[2]徐士敏.煤矿监测监控分站平台的研究[J].山东煤炭科技,2016,(2)

资格管理,挖掘任职的“内核” 篇11

A企业经历十几年的艰辛创业和发展,已成长为一家集技术投融资、项目建设和项目托管于一体的综合性专业环境工程公司。凭借雄厚的技术力量,公司拥有国家重点环境保护实用技术示范工程多项,并在印制线路板废水治理、电镀废水治理、印染废水处理、食品业高浓度有机废水处理和生活污水处理等领域形成了一套成熟、稳定的处理工艺。

随着国家环保法律的强制限制和各类大型工业园区的建立,公司有了更多的发展机会。公司未来几年的战略目标是建立专适大型工业园区发展的工程体系,并独立承接工业园区的项目托管。

由于业务领域的延展和项目数量的增多,公司经常出现技术方案一改再改的问题。近期甚至还出现了一次重大失误:一个大型项目在资质申报过程中,由于一份文件过期而导致项目没有中标。这给公司老板带来很大震撼。公司业务设计中,技术人员既是技术方案的制定者也是业务的开展者,随着公司业务增长速度加快,这样的工作方式使高层对下属的技术指导和技术开发难以兼顾,加上技术人员普遍存在着追求完美的性格和不善于同客户进行商务洽谈的特点,导致员工感觉工作压力大,工作成就感低。

为了激励技术人员和专业人员,公司设立了“副经理、副部长”等管理职位,结果却导致公司职位管理混乱,干得好只有“当官”这一条路,提拔上来的人与以前想象的差距很大,但是只能“凑合用”。由于被提拔者管理能力的欠缺和忙于救火式的工作方式,更使得下属的团队意识、能力培养都没有到位,在很大程度上影响了公司项目的运作。由于激励手段的单一,使好几名高级研发人员看不到自己的成长空间,跳槽到竞争对手那里,给公司造成了重大损失。

现象解析:传统的以职位为基础的人力资源平台的局限

国内企业在发展过程中,存在类似A企业这样情形的非常之多。他们普遍遇到这样的发展瓶颈:员工职业化程度不高;管理人才和专业人才不能满足业务需要;没有完善的绩效考核机制;激励失衡;好的经验无法传递;业务开拓后才发现没有人才储备,现有的人才离未来的发展差距过大。

传统的以职位为基础的人力资源管理平台,是针对某一职种的“一个职位”,反映的是一个职位对企业战略中应负的责任。而企业基于业务发展,往往需要为某一职种的员工,依据其不同的能力设立成长阶段路标,关注的是其能力的成长。这个能力不是抽象的能力,而是组织基于成果经验和未来发展要求的“知识、技能、文化、贡献、行为规范”的实际工作能力,关注的是业务工作过程的管理和实现,这是传统的以“知识”为核心的能力转变为以“职业化的行为”为核心的能力突破。将职位为基础的“人”锁定在一个固定的“岗位”中,而为每个职位都设立发展轨迹显然是不现实的。一个职位的能力只是一个“点”,无法成为整类职种中任职能力的多个点而组成的“面”。

这个瓶颈单纯用传统的绩效考核是无法解决的。绩效考核是关注过程的结果。虽然绩效方案中也设计了能力指标,对员工能力发展有一定的牵引性,但是归根到底与目标设定相关,绩效考核中没有也不可能对能力成长设立系统的方法和操作评估。即绩效考核还是没有解决“怎么样的过程才是做得好”的标准。同时由于目标偏重对短期利益的关注而忽视公司的长远利益,促使员工关注当前目标的达成而忽略组织能力的长远建设。即使员工想成长也不知道如何成长,组织想帮助员工成长也不知道如何帮助。依据绩效考核结果制定的“行动改善计划”是发现一次改善一次,缺乏系统的联系和一致性。

这个瓶颈单纯用传统的薪酬激励也是无法解决的。因为岗位评估主要解决的是岗位与岗位之间当前价值的量化问题,无法从根本上解决员工的长远发展需要和内在激励等矛盾。此外,对同一岗位的任职者,它也无法解决横向攀比及内部公平问题。

而基于员工的职业发展通道和任职资格体系来设定员工的绩效体系、培训体系、报酬体系、成长体系,无疑是解决组织能力和员工发展的关键点。强调员工职业发展通道,对建立企业要求的行为规范、技能、贡献、文化、知识等特征的任职资格是一个有效解决途径。它解决了企业需要什么样的人(何种知识、技能、贡献),该怎么做事(行为表现),有什么贡献(成果和业绩)。

问题解析:以任职资格管理为核心的人力资源基础平台的建立

类似A企业这样以技术为主导的高科技公司,它们经过了创业期,进入了快速成长阶段,也是人力资源管理基础建设的关键时期。如果仅靠传统的以职位为基础的人力资源体系,无法快速培养人才、进行知识传承积累。因此,建立任职资格标准才是解决组织能力成长的基石,在此基础上配以完善的绩效考核、分层分类的培训体系、与任职资格对应的薪酬激励手段,以此来牵引员工的成长,才是及时、有效获得可持续发展的途径。

任职资格是重视以结果来检验和评价过程的管理,包括资格评价和行为能力评价,从组织层面和员工成长要求层面实施管理。任职资格的目的是建立职业化的员工队伍,它的标准是优秀企业、优秀行为的表现,是快速培养人才和成功经验积累的最快方式。在基于任职资格管理的人力资源管理体系中,绩效考核是进行任职资格调整的重要依据,也是组织衡量绩效的有效手段。

对于资格认证中还未达标或欠缺的知识、技能、行为标准,找到差距,基于差距进行有针对性的培训。因此,以改进为目的的培训体系,为组织和员工的成长提供了有效的上升阶梯。

基于任职资格为基础的薪酬激励,是实现员工回报的有效激励方式,把资格等级和薪酬等级直接对应的方式,为员工发展提供了内在的动力。通过表1的框架,我们可以更好的理解任职资格平台的设计。

建立了以任职资格为基础的人力资源管理平台,组织在符合资格条件的“人才库”中才能公平、公正、客观的选拔、任用、开发人才,借用绩效考核衡量和评价绩效,用培训开发来改善和提高技能和能力,用激励机制实现价值的分配和转移,真正创造一个适合人才成长的土壤和环境,实现人才管理的良性循环,提升组织能力,实现组织目标。

体系构建:以A企业为例的任职资格标准设计

1.依据职类职种划分确定管理类和专业技术类员工发展通道

如:管理类,职种分为经营管理、执行管理、基层管理。各职种级别又分别设定为1级、2级、3级。技术类,职种分工为工艺设计、研发设计、电气设计、土建设计等。各职种级别可设定为设计员、设计师、高级设计师等不同级别。

2.为每类职种建立任职资格标准

任职资格标准包括专业资格标准和行为标准。

专业资格标准比较易于掌握,主要包括专业知识、专业经验、专业技能和专业成果。

行为标准是指完成某~业务范围工作活动的成功行为的总和。强调的是员工能做什么,做到什么程度,而不仅仅是知道什么。行为标准强调的是关键的业务工作模块,而不是全部的工作。它的基本结构包括行为模块、行为要项和行为标准项三个部分。一系列的行为要项组成一个行为模块,同一行为模块与不同行为要项之间存在着一定的逻辑关系,反映行为模块成功实现的内在规律性。行为标准项是员工完成行为要项时,需要遵循的行为过程动作及结果。比如A企业工艺设计类的3级的行为标准,如表2所示。

3.为每类职种任职资格进行评价

对专业知识的评价采用考试和撰写报告的方式,通过者才可以进行专业资格的评定。评定时成立相关的专业小组(可聘请外部专家),设定达标的分数。达标的人员再参与行为能力的评定。行为评定也采用专家小组的方式,但是员工的相关行为“证据清单”,是能力评价的最基本的数据,是判断员工职业行为的重要素材。这个过程可以由员工个人收集,主管和相关人员签名的方式给予核实。

管理者是企业任职资格建立的核心群体,管理者任职资格的建立,同专业类、技术类的任职建立相类似,但对应的 “技能”项略有不同。以A企业管理类 “素质标准”为例,将素质类标准分为核心素质和专业素质,如表3所示。

A企业管理类的任职资格应当包括知识、经验、素质、行为标准。在评价中,对管理类职位的知识、经验、成果、行为评价标准,同样可采用小组评议的方式。对素质的评价则采用定性评价为主。

4.为职种任职资格进行薪酬绩效设计

任职资格虽然是对过程的管理,但是企业要的是绩效。所以绩效考核在任职资格管理中就成为了一个重要的管理手段,是对任职者能力的一种衡量工具。同时绩效考核结果也是任职资格调整的重要依据。比如在A企业,按照本企业特点,规定两年年度绩效累积积分为7分及以上(A等为4分,B等为3分、C等为2分、D等为1分、E等为0分),可以申请高级别的任职资格,评定通过后就可以享受高级别的薪酬待遇。

同时,基于在任职资格等级的薪酬结构中,不同的任职资格对应的薪等是不同的。A企业设立的经营管理类岗位对应的薪酬等级为薪等12-14等。12等对应经营管理的级别1,13等对应经营管理的级别2,14等对应级别3。在申请同一级别任职资格的不同员工中,如果都超过了达标分数,那么他们对应的新的薪等是一样的,但是如何体现他们的能力差异呢?比如在A企业中,这类情况就很多,在实践中可在制度里规定不同分数对应的薪酬级别(同一薪等的不同的薪级),能力不同,报酬也不同,这样真正实现回报的公平。

5.建立任职资格维护管理制度

对任职资格的维护、知识考试题库的建设、各专业小组的人员培训、评价、各级主管在任职资格中承担的责任,这些项目应在制度中明确规定,保证任职资格的严肃性、有效性、公平性、可实施性。

实施效果:

任职资格本质上是衡量员工对业务工作胜任能力的标尺。它体现了企业战略对员工成长和发展的内在需求,是企业理念与文化的重要载体之一。

A企业建立了任职资格体系后,由于第一次评价中没有太多的证据可以参考,所以公司先定性确定各技术类、管理类职位的等级。第一年中每半年进行一次资格评价,并逐渐完善评价机构、评价方式、证据收集、知识考试等流程,第二年开始每年评价一次。这样,逐步的完善了任职资格标准和评价过程。由于A企业在建立任职资格体系前,已经实施了有效的绩效考核,所以经过一年多的实行,现在运行效果良好。员工已经把任职资格当成自己职业生涯发展的重要平台,整个公司的学习氛围和团队氛围得到很大的改善。

针对任职资格评价中的不达标项目,确定培训需求,制定有针对性的培训计划,帮助员工改善和提升胜任工作的能力,确保能力的持续发展。

系统内核 篇12

Linux[1]作为一个自由软件, 在广大爱好者的支持下, 内核版本不断更新也不断增大, 通过编译内核可以轻易地对它进行修改, 使我们能够根据自己的要求度身定制一个更高效、更稳定的内核。

系统调用[2]是用户进程与系统之间的接口, 它们在内核中实现, 其主要目的是使得用户可以使用操作系统提供的操作底层设备的功能。用户程序肯定要操作系统设备, 没有系统调用, 程序员就需要了解硬件细节才能写出强大程序, 这显然不利于将精力集中在解决问题上。

学习操作系统设计技术的有效方法就是读懂并修改Linux的源代码, 编译内核和添加系统调用就是比较基础的内容, 本文就以这两部分来展开:一是编译内核, 二是添加系统调用。

一、编译内核

1. 到ftp://ftp.kernel.org/pub/linux/kernel/v2.6/中找到相关版本的压缩包linux-2.6.15.1.tar.bz2或linux-2.6.15.1.tar.gz

2. 首先cp命令或mv命令将压缩包放到/usr/src/redhat/SOURCES/下, 解压缩包:tar-jxvf linux-2.6.15.1.tar.bz2 (对应于.bz2文件) 或tar-xzvf linux-2.6.15.1.tar.gz (对应于.tar.gz (.tgz) 文件)

3. 在/usr/src/redhat/SOURCES/下得到解压后的文件linux-2.6.15.1, 并设置路径:cd/usr/src/redhat/SOURCES/linux-2.6.15.1, 一定要保证路径正确, make的有关命令一般在此目录下。

4. make mrproper, 该命令确保目录下没有相关的文件和编译设置, 如果已经编译过linux内核, 最好使用本命令。

5. make menuconfig, 自己配置编译选项, 建议保留默认值, 或者在当前linux-2.6.15.1目录下使用cp/usr/src/kernels/`uname-r`/.config.config将原来的配置文件拷贝过来。

6. make clean, 删除不必要的模块和文件

7. make bz Image, 编译内核并在/usr/src/redhat/SOURCES/linux-2.6.15.1/arch/i386/boot目录下生成内核程序文件bz Image

8. make modules, 内核模块的编译

9. make modules_install, 内核模块安装

10. 让新内核和旧内核都可以加载的配置的步骤:

在最后添加上:

保存后, reboot

设置采用新内核启动:启动时在grub界面按住e进行编辑, 按上下键选择刚刚的新内核, 按Enter键启动。

二、添加系统调用

可以用两种方法来添加系统调用:第一种方法是通过修改内核代码增加系统调用;第二种方法是利用内核模块机制添加系统调用。第一种方法因为修改了内核代码, 所以需要重新编译内核, 而第二种方法是将系统调用作为可加载的内核模块, 所以不用重新编译整个内核, 只要编译相应的模块。当然两者各有利弊。但是一般情况下, 内核中极为重要的地方, 是难以通过内核模块实现的, 必须直接对内核进行修改。这里我们采用第一种方法。

涉及到文件有:/usr/src/redhat/SOURCES/linux-2.615.1目录下,

1. 添加系统调用号表

2. 添加系统调用号

将#define__NR_mycall 294加入到unistd.h, 因为2.6.15.1内核的系统调用号已经到293了, 调用号在此基础上加1。并且将#define NR_syscalls 294改为#define NR_syscalls 295

3. 编写系统调用

vim./kernel/sys.c, 在最后一行加入如下代码:

4. 重新编译内核, 依第一部分的顺序进行

5. 编写用户测试程序

编译生成可执行文件[3]:

编译成功后, 执行以下命令, 运行测试程序:

6.结果:

发现和我们预想的结果不一样, Hello World!没有显示出来, 因为printk[4]不会直接打印出来, 而是需要命令:dmesg-c, 但要注意一定是执行完./test1后做才可以, 并且要在root权限下。

摘要:本文以实例来详细描述了从准备一直到使用新内核的Linux2.6内核编译过程, 然后介绍了添加系统调用的实现步骤, 最后给实验结果。

关键词:Linux,内核,编译内核,系统调用

参考文献

[1]鸟哥.鸟哥的Linux私房菜基础学习篇 (第三版) .北京:人民邮电出版社, 2010.

[2]李善平, 季江民, 尹康凯.操作系统课程设计.杭州:浙江大学出版社, 2009.

[3]宋劲杉.Linux C编程一站式学习.北京:电子工业出版社, 2009.

上一篇:节能建筑电气安装要点下一篇:开关控制