兼容ARM9的软核处理器设计(首本在FPGA上实现兼容ARM9指令集处理器设计的书)

         这是一本描述如何使用硬件描述语言Verilog进行FPGA设计的参考书。按照本书的指导,读者可以设计一个32位的RISC架构处理器—兼容市面上流行的ARM9微处理器。读者在完成RTL编程后,可以在购买的FPGA开发板上运行ARM9兼容的嵌入式程序。
  使用Verilog HDL进行编程到底属于硬件设计还是软件设计?这是一个很难回答的问题。它处于传统的硬件设计和软件设计的交叉点:描述的对象是硬件,但采用的方法和软件设计类似。市面上充斥着各种介绍Verilog HDL设计的书,但都是以介绍Verilog HDL的语法为主,兼而给出一些简单逻辑的Verilog RTL描述。但没有一本书介绍如何使用这种精简的语言进行成熟作品的设计,本书填补了这方面的空白。
  一个成功的RTL设计将是价值连城的,譬如ARM公司的系列处理器内核,它们都是采用Verilog等硬件描述语言进行描述设计的,用户如果想使用这些处理器内核,将需要付出昂贵的授权费用。正因为设计出成熟的RTL作品非常难,因此很多书籍对此回避,或者大而化之。好比我们在市面上看到的旅游指南书,都是连篇累牍地介绍该国的地理概貌、风土人情,以及各种介绍数据;但是这样的书籍并不受读者欢迎,而那些由旅游者介绍的各种攻略,由于有旅游者的现身说法,使人读了以后有种身临其境的感觉,受到了读者的热捧。本书尝试做一个Verilog RTL设计攻略的尝试,以流行的RISC处理器为目标,向读者传授编写Verilog程序的第一手的经验和体会。
  正因为设计出成熟的RTL程序比较难,很多公司的诸位同仁虽然口头上大力宣扬“创新”的重要性,同他交谈简直是口不离“创新”,言不离“变化”,但如果真的要他稍微改改样儿,则反而会认为非常不稳妥。指原因很简单,所谓创新,所谓变化,初期总是不稳定的,总是没有受到时间检验的,能够直接“盈利”的项目是不会稍稍“改样”来做检验创新的实验品的。于是,我们的创新要成长为众人接受的稳态的变化,需要走很长很长的一段路。幸而,在FPGA设计上,可以接受这种创新、这种变化。因为FPGA是可以不断重复可编程的,如同我们练习毛笔字的那种蘸水写的字帖,练完后,等字迹一干,下次再练不受任何影响。也就是说,读者只需要一块FPGA开发板,加上掌握了一定的Verilog RTL设计技巧,你也就和进行最高端的处理器设计的公司,比如ARM、MIPS等公司站在同一条起跑线上,他们能做的,你也能做。
  处理器设计在我们眼里之所以是那么高不可攀,原因就在于这只是为少数公司所掌握的,并不是为大众所能够掌握的技能。对于RISC处理器,我们都知道三级流水线、五级流水线,但都没有一个生动的例子来显示这三级流水线是如何工作的,是如何协调数据、指令的关系。也许有这样的开源的32位的RISC处理器设计,但都非常复杂,读者要弄懂它们,要花费大量的工夫。而且,市面上最主流的处理器是ARM公司推出的一系列RISC处理器,读者对它们的架构与指令集都有所了解。基于此,作者针对ARM9的指令集与架构,介绍Verilog RTL设计,以便读者了解处理器设计的架构,能够在FPGA上真正运行一个32位的RISC处理器。
  对于FPGA设计,最重要的是能够在开发板中运行起来。开源的32位RISC处理器开发出来了,它最大的功效是能够帮助FPGA设计者在实际中应用,而不是成为一个展览品,供大家解剖学习。对于本书开发的兼容ARM9微处理器,全部的Verilog RTL描述只有不到1800行代码,存放在一个文件当中。FPGA设计者只需明白设计的I/O接口,即可例化在设计者的设计当中,可以最大化地方便设计者。同时,由于ARM9的开发工具众多,相关的嵌入式软件设计人员也占据了主流,因此,在嵌入式软件资源方面,兼容ARM9处理器的应用会受到这些因素支持。读者在本书中得到了兼容ARM9处理器的Verilog RTL设计后,可以在网络资源以及从事嵌入式软件开发的朋友中得到支持,以在FPGA设计应用中,真正实现完全自我掌握的SoC设计。
  长久以来,我国的处理器设计水平落后于欧美国家。虽然龙芯在基于MIPS的架构上有所突破,但在更加流行的ARM架构上鲜有建树。众所周知,以Intel为代表的CISC处理器设计所采用的技术高深,设计过程复杂,在后面的追赶者望尘莫及。有些人在看到Intel的高科技设计水平后,自叹弗如,于是对其他人在处理器上的追赶嗤之以鼻。这就好比看见西方人吃西餐礼节繁琐、堂而皇之,于是自惭形秽,觉得还不如不吃饭了。殊不知吃饭不仅有西餐的吃法,而且还有快餐式的KFC、麦当劳式的吃法。ARM和MIPS就好比饮食界的肯德基与麦当劳。他们为业界提供了RISC架构的处理器,这些处理器都是采用硬件可综合语言编写而成的,易于其他芯片设计公司集成。这种设计方式生产简便、灵活快速,深受其他芯片设计公司欢迎。这就好比快餐式的做法,业界一致摒弃了Intel这种西餐式的吃法。读者如果有志于在处理器设计方面进行突破,那么掌握Verilog RTL的设计技巧,对处理器进行钻研,一定会有所拓展。
  本书以Verilog RTL设计为核心,从第1章建立Verilog RTL设计模型开始,到最后一章能够对Linux操作系统进行仿真。读者通过本书可以切实掌握到基于ARM9的数字电路设计流程,并能够利用成熟的MCU软件设计工具生成BIN文件,通过BIN文件和一个只有1800行代码的兼容ARM9处理器内核,读者能够快速完成FPGA设计。
  第1章的主要目的是建立Verilog RTL设计的模型。我们知道,进行Verilog RTL设计,必须先具有基本的硬件思维,使得在编写软件式的Verilog代码时,能够时时刻刻警惕自己写的每一行代码都会对应着实体逻辑。这一章会对数字电路的基本模型进行梳理,在这个基础上,我们才能进行复杂逻辑的组织与设计。
  第2章基于第1章建立的基本模型,采用硬件模型,使用Verilog语言进行基本的电路设计。首先,分析了Verilog这种硬件描述语言的语言特点。它是一种非常类似C的编程语言。针对RTL设计,它只有寥寥的几种格式。正如我们手机上的笔画输入法,正是这三四种格式,经过组合变换,可以写出各种各样复杂的逻辑。在掌握了Verilog RTL的语言特点后,这一章将带领读者进行串口通信的设计。串口通信涉及串行收发数据,是硬件设计中离不开的调试接口。通过该章建立的设计理念,只需寥寥几十行代码就可以设计一个高效的Verilog RTL程序。
  第3章介绍了Modelsim仿真。Verilog RTL设计第一步的检验是进行仿真。该章建立了仿真的基本流程。读者可以通过编写task函数来定制激励,比如在对UART串口进行仿真时,可以通过一个task函数把并行数据串行发送到RTL设计的输入端口上。
  第4章介绍了FPGA及FPGA开发板。FPGA是一种奇妙的芯片,它可以模拟各种数字电路的功能—只要我们按照RTL的规则编写了数字电路,FPGA就能很快成为这种功能的芯片。单独的FPGA就如同人的大脑,但如果离开了手臂、腿脚以及眼耳鼻舌等,那再聪明的大脑也不会有所作为。以FPGA为核心的FPGA开发板就如同人脑和人身体结合在一起一样,在我们编写的程序的指导下,FPGA开发板可以实现各种特定的功能。但如果再进一步,把32位的RISC处理器放置于FPGA内部,那么我们指挥“FPGA”的效率就会进一步提高。该章除了对FPGA和FPGA开发板介绍以外,还通过具体的串口通信例子,零实践指导读者对FPGA开发板进行了解。
  第5章着重介绍了ARM9TDMI这种曾经风靡一时,现在仍发挥着巨大作用的处理器架构。ARM9的嵌入式开发人员应该对ARM9的编程模型了如指掌,特别是系统设计工程师,必须熟悉汇编级的应用,才能对系统进行调试。该章将从设计的角度对微处理器的中断和指令集进行解读。我们看到的介绍ARM9的指令集都是从一条条的汇编指令的角度入手的,但是本书通过指令集的各种指令的结构把它们总结成了20类指令。于是,对第6章提出了一个课题:如何在一个.v文件内实现20条指令和7种中断。
  第6章是本书的核心,它将结合之前章节讲述的知识点,共同呈现出这只有1800行的ARM9微处理器代码。从RTL的角度看,它是由一条条关于寄存器和组合逻辑的描述组成的;从ARM9的编程模型的角度看,它必须实现ARM9架构的20条指令和7种中断;从处理器流水线的角度来看,它必须在三级执行、五级执行之间进行折中;从FPGA执行的角度来看,它必须适应FPGA的结构,在时序和面积之间折中。可以说,Verilog RTL编程就如同带着镣铐的舞蹈,在受到种种约束的情况下,还要跳出优美的舞蹈。该章将以简为纲,尽量把复杂的东西通过简洁的描述呈现给读者。让读者不仅能够理解它,而且在使用时,也能够很轻易地融入到自己的设计中。
  第7章介绍了兼容ARM9处理器内核运行的第一个程序—Hello World。在学习C语言时,学习的第一个程序就是输出Hello World。在做好了一个兼容ARM9的处理器设计后,最美妙的事莫过于在开发板中通过串口同样通过C语言描述输出Hello World。现在看看我们具有的元素:FPGA开发板、串口、处理器内核,只要我们通过ARM公司自家流行的RealView MDK以任意一款流行的ARM9 MCU为原型,就可以编写出BIN文件。这些BIN文件在例化入FPGA内的ROM后,它就从死的状态变成活跃的了。我们将看到,这些代码指挥FPGA通过串口输出任何字符串。这一简单的例子将使大家享受到SoC设计带来的乐趣,在以后的FPGA设计中可以尽量使用处理器来简化繁琐的设计流程。
  第8章介绍了兼容ARM9处理器内核性能测试—Dhrystone Benchmark。我们知道了处理器的功效,但还不知道这款兼容ARM9的微处理器内核的性能如何。本章将延续第7章的SoC设计流程,对这款处理器内核进行体检,以便获得关于它的第一手资料。经过该章的测试后,我们发现,这款兼容处理器内核可以达到1.2 DMIPS/MHz。
  第9章介绍了uClinux仿真—结合SkyEye,启动不带MMU的操作系统。有了FPGA和处理器内核的结合,本书将具有另外一个主旨,那就是把操作系统引入设计当中。SkyEye作为一款软件模拟处理器的工具,它可以作为我们这款内核的标尺,衡量它运行现代流行操作系统的能力。操作系统虽然复杂,但我们同样可以通过编写一个简单的testbench的方式,结合1800行代码构成的处理器内核,让这款操作系统也能在Modelsim中运行。经过仿真,可以看到,它可以输出同SkyEye同样的log信息。硬件工程师通过该章同样可以了解到MCU的构成。
  第10章介绍了Linux操作系统—结合mini2440开发板,启动带MMU的嵌入式操作系统。在该章中,读者可以看到开发ARM9兼容处理器内核的优势:它能够得到的帮助实在是太多了。我们不仅有软件模拟器,而且还有市面上极为流行的ARM9开发板。通过开发板,我们可以看到Linux操作系统启动起来,现在,通过编写一个tb文件,我们同样能够在Modelsim中再现ARM9处理器是如何启动Linux操作系统的。本书不同于其他只是介绍性质的书籍,通过实际的仿真步骤,我们能够清晰地理解Linux操作系统是如何与处理器内核结合在一起的。
  最后,本书附录提供了带有注释的兼容ARM9处理器内核的Verilog RTL描述。读者可以在这1800行的代码中体会Verilog RTL编程的巧妙之处,以便融会贯通,应用在自己的设计当中。如果能够在设计中应用这款处理器内核,那将是笔者最大的欣慰。

(4个打分, 平均:5.00 / 5)

Nick McKeown . “OpenFlow Innovation in Campus Networks”

(没有打分)

OpenStack – 开源云计算项目

时下云计算如火如荼,众多企业纷纷推出云计算相关的应用,不少还搭建企业私有云和少数公有云(代表为Amazon)。然而,业界仍然缺乏一套实用的云计算管理平台,很大程度上提高了云计算应用的门槛,制约了云服务的发展。

作为开源的IaaS(Infrastructure as a Service)平台,OpenStack遵循Apache许可,其长期设计目标为同时服务公有云和私有云,提供统一的开源资源管理平台。

OpenStack是美国国家航空航天局(NASA)和Rackspace合作研制的云计算管理软件,最初目的是存储大量的空间视频、图片等信息,随着云计算需求的增长逐渐成长起来。

自2010年7月项目成立开始,OpenStack就收到广泛关注和支持。项目成员不乏业界巨头,包括Cisco、Citrix、HP、Intel、Dell、IBM、Microsoft等。其中Dell和HP公司还利用OpenStack创建了自己的云计算解决方案,当然,所使用的企业版本与开源版本有所区别。经过两年左右的发展,该项目已经吸引了超过160家公司和2600多名开发者,足可见认可程度。

目前,OpenStack项目由若干子项目组成,包括计算组件Nova、存储组件Swift、镜像管理组件Glance、认证组件Keystone、前台组件Horizon和网络管理组件Quantum。其中前三个组件是OpenStack的核心,经过长期开发和完善,已经较为成熟。大部分的组件都是松耦合联系,支持分布式,较好的保证了扩展性。

OpenStack在虚拟化技术上支持Xen、KVM、VMware、ESX、LXC、QEMU、UML等,并通过统一的虚拟层(Libvirt)来调用,实现底层对用户透明。对现有虚拟化技术较为全面的支持使得OpenStack可以被广泛部署在多种场景,而不用担心底层需要选取哪家技术实现。同时,OpenStack还支持亚马逊的EC2和S3的API,使得面向AWS(Amazon Web Services)开发的应用可以轻松的实现迁移。

OpenStack的版本命名与Ubuntu类似,按照字母顺序,分别为Austin、Bexar、Cactus、Diablo、Essex。最新版本为第五版的Essex,这一版经过了较长的开发周期。从第五版开始,OpenStack开始注意代码的质量和用户的体验,真正可以作为较为实用的云计算管理平台。

另外,根据最新的消息,OpenStack将在今年的4月16-18日在美国旧金山举办OpenStack Conference & Design Summit峰会,讨论该项目的未来发展,大家不妨略作关注。

客观的看,OpenStack对推动云计算的发展有着积极的作用(类似的项目包括OpenNebula、Eucalyptus等),但目前的版本,功能还比较简单,面向的群体也有限。同时,不支持网络虚拟化等新兴技术,在某种程度上制约了OpenStack的功能和性能。希望OpenStack在未来能更加完善,成为功能完善而又易用的云计算平台;也希望有更多的优质开源云计算项目能够成长起来,促进产业的发展。对OpenStack有兴趣的朋友可以尝试访问官方网站,或者trystack.org,简单注册后即可进行体验。

(4个打分, 平均:3.25 / 5)

Google 扩增实境(Augumented Reality)眼镜计划

Image

用户戴眼镜,眼前会出现快捷标识。

用户戴上眼镜能查询地图。

Google 共同创办人 Sergey Brin 戴着 Project Glass 眼镜现身

Image
Google 的 Project Glass 计划前两天刚出现的时候,看起来像是一群工程师闲暇时间太多在做的梦而已(事实上应该也是这样没错啦…)。但没想到的是,现实世界中还真有这么个设备存在,而且是由 Google 的共同创办人 Sergey Brin 戴着,出现在一场慈善活动上。据拍照的 Robert Scoble 叙述,Brin 的眼镜看起来完全是可运作的,可以看到淡淡的蓝光投射在 Brin 的眼睛上,同时听说不只是 Brin,其他 Google 的高层像 Vic Gundotra 也都有这样一台设备在测试中。

Google 的智能眼镜计划最近引起了不小的反响。许多人热情的盼望它早日成为现实,但是持批评态度的也不在少数。这些批评有讽刺性的言论,有搞笑的视频,还有对于其毁灭人性的能力的担心。虽然智能眼镜实现的不过是智能手机的功能,但是它将现实虚拟化的潜力却更大,或许这是许多人担心的理由。

google_project_glass

在这里,我们暂时把它可能产生的社会影响放到一边,从用户体验的层面考虑一下。毕竟,智能眼镜和手机不同,它所输出的文字和影像直接展现在视野之内,是否会让人产生不舒服的感觉?Technology Review 网站为此采访了神经生物学专家 Mark Changizi。

根据 Mark Changizi 的说法,Google 智能眼镜的设计从生理学上来说,并不会给人带来不舒服的感觉。“从视觉上说,图像不会在你的前面浮动,因为它只展现给一只眼,”Changizi 解释说。

这就好像你在视野的边缘看到自己鼻子的影像,多数情况下我们不会去注意。”从每只眼中接受非对应图像,实际上已经是我们非常习惯的东西了“。

同时,他也指出,视频中展示的清晰的文字影像并不容易做到。“他们要展示给你文字,要辨别那种细节,你需要将影像放在眼睛的小窝前面,那是你视野的微小、中心的部分”。而这通常不是我们接受非对应图像的地方。

Changizi 认为,影像的合理位置应该放在视野中的脸部那里。“更加自然的放置位置,特别是非文字的时候,应该是你的视野中脸部影像已经存在的地方。”这会使得电子图层像是自己身体的一部分。电子界面的体验更加潜意识化,而不是让人感觉是盯着手机屏幕。

一位 Google 员工告诉 Technology Review,智能眼镜开发团队进行了许多实验,包括户外测试。对于测试对用户体验视觉层面的结果,他没有透露任何细节。显然,Google 官方放出的视频更多的是一种理想状态。

虽然最终结果如何还不好预测,但是 Changizi 比较乐观。“现在我们看到许多人在走路的时候眼睛盯着手中四寸的屏幕,彼此碰撞,” 他说,“无论 Google 的智能眼镜结果如何,它肯定会是一个提升。”

题外话:the Verge 网站采访了 Google 联合创始人 Sergey Brin。Brin 说智能眼镜仍处于早期原型机阶段, Google 发布视频的目的是收集人们的反馈。他说,Google 希望最终产品能够和各种不同的设备相连接。另外,智能眼镜还需要通过射频辐射测试,这对于 Brin 来说非常重要。当问到产品上市的时间时,Brin 回答说,”给我们些时间“。

提供14种服务

谷歌公司在其社交网站“谷歌+”上简单介绍“眼镜计划”,公布产品原型和一段2分30秒的视频。视频从眼镜佩戴者角度拍摄。

从视频来看,谷歌眼镜并非传统模样,主体是一根钢圈,可以架在鼻梁上,右眼前方是一块邮票大小的透明显示屏。

谷歌公司称,眼镜计算机提供拍摄照片、视频聊天、天气信息、导航信息、日程提醒等14种服务,由用户声控操作或所处环境触发。

视频中,用户行走在美国纽约街头,不时张嘴说话,向眼镜下达指令,譬如拍一张照片并上传至“谷歌+”;当他看向一面空白墙时,显示屏弹出对话框,提醒用户晚上有约;当他看向窗外时,对话框显示降水几率为10%;显示屏还弹出对话框显示用户的一名朋友就在附近。当收到朋友信息询问当天稍后能否见面时,显示屏出现提醒内容;用户口述回复,显示屏原有内容上叠现一个麦克风标识。

将进行公开测试

谷歌公司旗下X特别项目小组两年前开始开发“眼镜计划”。这一团队专门致力于开发概念产品,包括自动驾驶汽车。

谷歌称,眼镜尚在调试阶段,现阶段公布旨在展示“这项技术的样子”,希望网民就眼镜计算机提供的服务内容提出建议。谷歌官网上写道:“我们现在公布这一信息是想开始与您交流,获得您的宝贵参与。”

路透社4日援引谷歌内部人士的话报道,谷歌眼镜将进行公开测试。

路透社评论说,这款眼镜计算机产品可能帮助谷歌公司更好地推动谷歌在线服务深入人们日常生活,包括广告支持的网络搜索、地图和电子邮件等;也有助谷歌应对竞争对手苹果公司推出的新款iPhone 4S和语音助手Siri。Siri具备发电子邮件、安排会议、获取天气信息等功能。

上市日期尚未确定

关于“眼镜计划”,先前业界和媒体颇多揣测,这是谷歌公司首次公布细节。美国《纽约时报》今年初报道相关内容,称第一批产品可能于今年年底前上市,售价为250美元至600美元。

用扩增实境(Augumented Reality)加强过的生活,会长什么样子呢?

Project Glass 的假想影片,整合了语音输入、日程表、Google Maps 导航、打卡、视频等功能,除了搞不清楚要怎么操作外(眼球追踪?),其实看起来在技术上已经很接近实现了!

http://v.youku.com/v_show/id_XMzc2Mzc1NjU2.html

它可以传输近在眼前的信息。谷歌实体的“眼镜”设备的扩张正在干扰人们的商业模式,大家甚至不用掏出手机就能拍照,找到方向,或是给朋友发短信。如果谷歌的“眼镜”设备都可以做得到,那么你还会需要买最新一款iPhone或是在Facebook上花费大量的时间么?

该设备的模拟视频让人垂涎三尺,其展示了“眼镜”设备的强大能力,包括通过语音控制发送信息、拍照、分享Google+、找到朋友们的位置、查看地图、找方向、设置日历提醒等等。

将这么多的功能塞进这一“眼镜”设备中需要花费很多时间和努力,很多种可能会导致这一产品失败,最显而易见的如果这一设备笨拙或是老土,亦或它太重,太昂贵,易损坏,或者大众还没做好接受它的心理准备。让我们先忽略掉上述可能,倘若谷歌解决了种种问题,如果这一设备推出后广受好评,那么这将对苹果和 Facebook造成什么样的冲击呢,他们该如何采取措施保卫自己的利益呢?

“眼镜”设备把人们在iPhone和iPod上的所使用应用通通装到里面,“眼镜”可能是运行Android系统,并且由于该设备可能是声控的,它也有可能变成谷歌针对Siri的竞争者。

(2个打分, 平均:4.00 / 5)

E语言概览

[陈怀临注:这次是真的matrixos同学的文章。上次是他的徒弟干的。。。希望同学们大胆假设,小心求证。。。但切记不要attack。。。]

e语言是基于c语言衍生出来的一种新型面向对象语言,向下完全兼容标准c语言语法,是matrix系统的基本程序设计语言,在这里,我们将只针对扩展的面向对象语法进行描述。

e语言所用到的文件类型:

1)      对象描述文件(***.d):描述一个类、对象或多个类、对象的文本文件,类、对象的定义都在该文件中实现。

2)      头文件(***.h):c语言完全等效的文件类型,可被对象描述文件、e源代码文件、以及汇编语言文件包含引用。

3)      e源代码文件(***.e):

4)      汇编语言文件(***.s):

5)      其它资源文件:(*.*):可以为一切类型文件。

类的定义:(类实际上就是一个库,在对象设计和编译时刻引用的库文件)

class className  <类继承列表>

{

head:   这个段是对象的基本信息特征之数据结构(有待具体标准化定义)

private: 这是私有数据段

int data;

public: 这是公共段

float   abc;

int protect ba;        protect关键字表示这个变量只能被外部读。

int Function();

byte   (& Dev1)[4096];               可读可写,按字节访问,4KB大小。
dword  protect (& Dev2)[256];   只读地址,按双字访问,256双字大小

interrupt: 这是中断服务程序挂接段

INT_16    : status intUartSend(int, void *);

INT_27    : status intTimer(int void *);

message: 这是消息函数段

MX_CLICK : status onClick(int, int, int, int);

WM_DOUBLECLICK  : status onDoubleClick(int, int, int, int);

event: 这是响应事件的函数段

EV_MOVE<parameters>    : status move (int, void *);

EV_HIT <parameters>      : status Hit(int, void *);

space: 这是存储空间定义段,定义对象运行所涉及的内存空间。

heap<memory: size=4096,unit=8>;

pool <memory: size=16MB,unit=4KB>;

Dev1<remap: globalBase=0xc0001000, size=4KB>;

Dev2<remap: globalBase=0xc0002000, size=4KB>;

compose组成这个类的实体模块文件。

xxx.e;

xxx.s;

xxx.a;

xxx.bmp;

option 编译这个类、或对象的选项。

};

对象的定义:

className objName

{

格式和类定义相同,但是,对象的定义优先级高于类的定义(遵循越是后期定义的变量,优先级越高的原则),例如:需要重定义的变量,函数,直接在本对象中进行重新定义即可,如下:

public:

char string[32];        在原有类的基础上,为本对象新定义一个新的变量。

重新定义对象运行所需内存空间。

space: 这是存储空间定义段,

heap <store=memory, unit=4, total=8KB>;

pool <store=memory, unit=2KB, total=32MB>;

};

我们也可以不需要类的支持,直接定义一个全新的对象:

object objXxx

{

head

private:

int  abc;

int Function();

………..

…..

space:

};

编译的时候,以对象定义为单位进行编译,生成相应的二进制对象实体文件:object.o,可供matrix系统进行装载。

E语言源代码文件(*.e):

*.e文件是一种文本文件,兼容标准c语言。在设计e语言程序时,我们完全可以按照c语言的语法,定义变量、函数,引用.h头文件,以及跟汇编文件混合编程等等。例如:

定义3个变量:

int   a, b, c;

定义3个函数:

void Func1()

{

a = b + c;

}

int Func2()

{

b = a + c;

return b;

}

status  Func3(int,  void *p)

{

。。。。。。。

。。。

return   status;

}

我们根据实际需要,在类、或对象定义文件中,把上面的函数或变量分配到合适的对象段,例如:

object Xxx

{

。。。。。

。。。

把变量b和Func1分配到对象公共段:

public:

int   b;

void  Func1();

把Func3跟一个消息挂钩:

message

WM_XXX : status  Func3(int,  void *p);

。。。。。

。。。

};

其他剩下的变量和函数,将在编译时自动分配到对象的私有段。因此,在.e文件中,函数和变量的定义以及各种运算、逻辑语法的表达,跟传统c语言几乎没什么区别。不同之处主要表现在e语言扩充的外界对象的访问和引用上面,下面简单介绍:

1如果要在e语言中引用一个外界对象。

首先,定义一个对象别名,并为这个对象别名指定实际的对象实体,如下:

class  #objXxx  =  mx . com . uart

或,

object objType #objXxx  =  mx . com . uart

class objType 来自.d文件的对象和类的定义。)

然后在代码中,通过对象别名使用这个对象,例如:

objXxx . Buffer[0] = 0×12;          访问对象公共数据,向串口缓冲区写入一个数据。

Xxx  =  objXxx . GetBardRate();  调用对象函数,获取串口波特率。

SendMessage(objXxx, , , );            向对象发消息:

我们也可以不必定义对象别名,在代码中直接使用对象:

mx . com . uart . GetBardRate();

2)模糊对象引用:程序设计时,当我们不完全知道某个对象的类型或类库,但是知道这个对象的部分接口或成员,这时,我们也可以直接定义一个未知类型的对象别名:

object #objXxx  =  mx . Xxx;

然后通过这个对象别名访问该对象成员。这种模糊对象的引用,可以最大限度的不依赖类库和对象类型定义,使得e语言中对象使用更加灵活方便。

3)对象其它操作:

对象动态copy: 以一个对象为基础,可以在运行时复制出来其他很多相同对象个体。

对象动态move: 一个对象动态从一个matrix系统迁移到另一个matrix系统。

对象是matrix系统中最小的软件单位,一切复杂多样化的应用,都是由一个一个的对象组成,它们之间相互协作,达到实际的功能。

纯对象为基本的软件开发。

未完,待续。。。。。。。

(3个打分, 平均:3.67 / 5)

全面向对象,矩阵操作系统

在人类的认知世界中,我们总是习惯于把事物按照个体对象来感知和总结,例如,一辆汽车,一座房子,一个人,一棵树等等。同时,一个对象又可以分解成多个小的对象,例如,一辆汽车由发动机,轮胎,方向盘等各种组件组成;再进一步,又可以分解成更加微小的对象,例如,发动机可以分解成若干个小零件构成;更进一步,每个微小的汽车零件,又可以分解成极小的分子、原子组成。这是人类对现实世界的认知模式,我们可以总结如下几个基本概念:

1、对象,个体是组成客观世界的基本单位。

2、对象,个体的定义可以宏观,也可以微观,主要根据我们认知的层次需求。

3、对象之间可能有相互作用和依赖的关系。

4、对象可能会随着时间的流失,其本身发生变化。

5、大多数对象存在于有限的空间和时间中。

6、任何一个对象个体都是唯一的,世界上没有完全相同的两片树叶。

7、有生命对象,和无生命对象。

8、…………

人们已经证实,对象概念符合人类认知的思维习惯,有利于软件开发和应用,传统的面向对象设计语言如c++,java等正被主流与用于各种软件系统的开发。但是目前,这些传统的面向对象程序设计并没有做到完全的面向对象理念。例如:当我们用c++开发应用程序时,在源代码中设计定义类:

Class classXxx{,,,,,,};

再根据类去定义对象:

classXxx  objXxx;

然后调用对象的函数或访问对象的变量:

objXxx.Function(,,,);

xxx = objXxx.Variable;

源代码是这样写的,它具备面向对象的特性,但是,当编译链接后生成可执行文件(例如.exe)运行起来后,我们不能再看见和接触这个对象objXxx。也就是说,在传统的面向对象程序设计中,我们仅仅只能在源代码开发阶段使用有面向对象特性,一旦源代码被编译链接运行,所有对象的特性完全丢失,这是一种不完全的面向对象软件设计方法,不符合人类的思维习惯,必然会给应用和开发带来诸多的不方便。

我们下面将要讨论的技术,就是要实现最彻底的面向对象系统,我们暂时称之为:矩阵系统matrix

matrix是一种完全面向对象化管理的操作系统,其基本概念是:一切皆对象。一个文件,一个程序,一个驱动,都是一个对象个体,从他们的设计、创建开始到编译运行,自始自终都具备对象的一切属性。无论是开发的源代码,还是编译过后产生的二进制体,我们在matrix中所看到的,都是对象模型。举个例:

当我们设计一个串口驱动程序时,在开发阶段,是这样描述的:(假如这个驱动的名字为objUart)

Object objUart

{

定义对象自身变量:

……

对象接口函数:

int   GetBaudRate();

void  SendData();

…………

…….

}

在编译阶段,编译器以每个对象为基础,编译生成对应的二进制对象实体,objUart.o, (注意:这并不是传统系统中的二进制对象文件),objUart.o拥有一切对象信息,包括自身的数据以及对外公共接口等,以便当这个对象被装载进入matrix系统后,其他装入的对象可以进行访问。

运行阶段,objUart.o会被装载进入matrix系统内存,其它的应用软件(确切地说应该是其他对象),便可以在matrix系统中直接访问这个串口对象公共接口。

例如我们接下来开发另一个应用程序对象objA,将要调用上面串口对象接口,

源代码开发这样写:

object objA

{

……

objUart.GetBaudRate();   获得其串口波特率。

objUart.SendData(,,,);     向串口发送数据。

……

}

编译生成二进制对象objA.o,然后装载进入matrix系统运行。

需要注意的是,对象objUart和objA是两个完全独立的对象个体,他们在开发和编译阶段完全可以互不相干,只有在运行时,并且两个对象都已经装载进入matrix系统,才发生相互作用关系。当其中一个对象并不存在时,系统也不会发生崩溃。例如,当objUart对象不在系统时,objA在调用串口对象接口时,会收到一个来自系统的消息,表明串口对象缺席,进而做出相应处理。

通过上面的实例体验,我们大概了解这种全面向对象程序设计的基本概念,没错,一切皆对象,从设计、编程,编译到装载运行,所有的一切都是基于对象以及互动的概念,我们设计一个软件系统,将主要集中考虑的是各个对象功能,以及对象之间的互动关系,这正好类似于我们现实世界环境,不同的是,现实世界的对象由分子原子组成,而matrix系统里的对象,则是由代码和数据组成。

Matrix核心是实现这一切技术的基石,下面我们来看看matrix系统的架构。

如图所示,matrix的核心由下面几部分组成:

1、基本的多线程、处理机调度内核。 为适应matrix系统设计需求,我们开发了一款名为e-kernel的基本多任务调度内核,有64个任务优先级,其中32个优先级用于实时调度,另外32个优先级用于一般任务调度。E-kernel支持单处理机,对称多处理机、非对称混合多处理机。非对称混合多处理机MMP是matrix系统引进的一种新的概念,基本目的是允许不同类型的处理机共同存在系统中,以满足各种不同的数据处理需要。例如,一个系统中可以有通用处理机,用于一般程序运行,也需要数字信号处理机,用于数学运算,也可为图形专用的处理机等,这些不同类型处理机共同存在于系统中,统一由e-kernel进行管理和调度。需要注明的是,在matrix系统中,我们会以函数为单位,为每一个函数标记一个匹配的处理机类型,以便调度到合适的目标处理机上运行。

2、基本的存储管理单元。 包括内存管理和外存管理,为对象运行时提供内存空间,也可为对象数据永久存储提供外部磁盘空间。在matrix系统里,各个对象按照一定的层次关系组织起来,当一个对象载入matrix系统后,这个对象就永久的存在于matrix系统中,而不管系统是否掉电上电,或重新启动。由此可见,对象体首先是存在于外部永久存储空间上,然后再根据需要,部分载入内存进行运行。存储管理单元也为对象开发屏蔽了大量细节技术,当我们开发设计一个对象时,根本不再需要考虑内外存访问使用等问题,就可以直接在对象中引用,例如,在对象中定义两个变量Va,Vb:

object objXxx

{

……

int Va;           一般程序变量,放在内存,系统掉电、重启将不能保存。

int saved Vb;     可存储变量,系统掉电、重启将保留当前值。关键字saved表示这个变量放在外存空间。

……

}

3、对象管理器。 对象管理器是matrix系统对象存在的基础,管理对象的载入、移出,组织对象在matrix系统中的层次关系,以及实现对象之间的互动。

4、根对象mx根对象mx有两个作用,第一,是一切对象载入到matrix系统的基点,类似于传统文件系统里的根目录;第二,为其他对象提供基本的内核服务,例如:我们可以调用mx.CreateThread(,,,,,)来创建一个线程。根对象mx是与matrix核心一起开发并紧密的绑定在一起的。

5、接入/接出单元。 这是matrix系统对象跟外界交互的基本接口,主要包括:调试接口,本机或交叉调试;操作显示接口,简单的控制台shell,复杂的图形界面操作等,实现人与对象互动;各种网络通信接口,互联网,移动通信网等,方便在各种网络中对象之间互动。

注意:以上并不是构成matrix系统的必须部分,在一个功能更加简单的matrix系统中,可能只存在一个控制对象和网络通信接口,例如一个网络温度传感器,放在珠穆朗玛峰山顶,我们可以在非常遥远的北京某一matrix系统设备上,方便地获得当前山顶温度,使用下面句法:

(IP:128.123.113.2)mx .TemSensor . GetTempreture();

(IP:128.123.113.2)表示这个温度传感器对象所在matrix系统的网络IP接入/接出地址。

举这样例子或许并无多大实用意义,这里主要是想说明matrix系统的简易方便使用的特性。同理,我们可以再举个例子,获取某辆汽车轮胎气压,语法如下:

(Cell: 13312345678)mx.MyCar.GetTierPressure();

(Cell: 13312345678)表示这辆汽车对象是通过移动网接入到matrix系统网络。

matrix系统的对象模型定义和互动:

在传统的面向对象基础上,我们扩展了对象结构,定义了一种更加符合人类思维习惯,功能更加强大的对象模型。

类的定义:

class className  <类继承列表>

{

head:   这个段是对象的基本信息特征之数据结构(有待具体标准化定义) 

private: 这是私有段

int data;

protect: 这是受保护的段,跟传统的定义有所区别,这个段的数据外部只能读

char *ss;

struct store xxxx;  int const abc;

public: 这是公共段

float abc;

int Function();

interrupt: 这是中断服务程序挂接段

INT_16    : status intUartSend(int, void *);

INT_27    : status intTimer(int void *);

message: 这是消息函数段

MX_CLICK : status onClick(int, int, int, int);

WM_DOUBLECLICK  : status onDoubleClick(int, int, int, int);

event: 这是响应事件的函数段

EV_MOVE<parameters>    : status move (int, void *);

EV_HIT <parameters>      : status Hit(int, void *);

space: 这是存储空间定义段,定义对象运行所需动态内存空间。

heap <store=memory, unit=8, total=4096>;

pool <store=memory, unit=4KB, total=16MB>;

};

对象的定义:

className objName

{

和类定义相同,需要重定义的变量,函数,直接在对象中进行重定义,例如,如下重定义内存空间段:

space: 这是存储空间定义段,定义对象运行所需动态空间。

heap <store=memory, unit=4, total=8KB>;

pool <store=memory, unit=2KB, total=32MB>;

};

跟传统面向对象不同的是,matrix系统也可以不需要类的支持,直接定义对象:

object objXxx

{

head

private:

int Function();

………..

…..

space:

};

定义上面对象的私有成员函数:

objXxx :: int Function();

matrix系统可以在运行时刻复制已有的对象:

object objCopy;                    首先,定义一个空对象。

objCopy  =  ObjectCopy(objXxx);      复制已有对象到空对象

objCopy.Function();                   调用复制对象的成员函数。

matrix对象描述语言,对象编译器,对象处理机,对象接口总线:

实现matix系统,我们还需要一个基本的工具链,那就是描述matrix对象的一种新型高级语言和他的编译器,这个对象描述语言基于c/c++,并作了相当大的扩展,我们暂时定义为e语言。e语言应该是一个比较灵活的语言,代码设计以对象(或类)为基本单位,及所有的代码都是包含(属于)在某个对象里面的。e语言支持高级语言和低级语言的混合编程、编译。生成的输出结果以每个对象为单位的2进制的对象体,用于装载、连接进入matrix系统。为方便开发,也可以支持多个对象体融入一个对象文件,一次性连接载入matrix系统。

对象处理机的开发,是为了更加很好的适应matrix对象这种工作模型,主要有两点考虑:对象互动的安全性和对象装载的灵活性。

matrix系统对象装载可以在任何时刻,任何内存地址,这就要求二进制对象具备可重定位特点。常规的处理机架构下,比如ARM处理机,需要进行动态连接,对象内部所使用的相对地址必须根据载入内存的地址进行变动,这会消耗大量的时间。对象处理机可以解决这一问题,对象处理机有一组基址寄存器,分别用于代码段,数据段,堆栈段,扩展数据段访问,以及对象互动访问。代码、数据的寻址都是基于这些基址寄存器,并有着访问权限,越界检查的功能,可以非常灵活的进行对象重定位,以及相对安全的对象互动。这种技术跟x86系列处理机段寻址结构类似,但相对简单高效,并且在现有的处理机基础上很容易实现。不可否认,就要被遗弃的段访问技术,在matrix系统里将会派上很大用场。

对象接口总线,前面讲到,对象体二进制文件装载进入matrix系统,成为可运行的一个对象,这是一种对象入住matrix系统的方式,还有另一种方式,那就是通过对象总线的连接进入matrix系统。比如说一个智能家庭的中心控制器,是一个matrix系统,我们可以通过对象总线,把各种按照对象规范设计的家电设备连接到中心控制器,于是就可以通过这个中心控制器,以对象方式访问各种家电设备对象。例如:打开电视机,mx.TV.PowerOn();

对象运行时连接技术:

matrix系统中每个对象都是独立的代码、数据空间,对象之间的互动访问必须保证高效率,如下两个对象objA和objB,相互调用对方的公共接口函数实现互动。

object objA                              object objB

{                                        {

objB . Function(,,,);                           objA . Function(,,,);

}                                        }

两个对象独立设计和编译,它们只需要知道对方公共函数的调用方式即可,当两个对象编译后载入到matrix系统时,它们并不知道对方具体存在于什么内存位置,更不可能知道对方的公共函数的地址,同时为了保证效率问题,它们之间也不可能通过系统调用的方式来实现互动,这就需要一种新的技术实现直接对象间调用,我们称之为运行时连接技术,例如:当objA第一次运行到调用objB的函数时,会发送一个对象连接请求信号到matrix核心,matrix核心进行各种权限检查,如果符合要求,就直接把这个函数地址连接到objA内部,当下一次调用该函数时,objA就不必要再次向系统发送请求,直接可以调用这个函数。这就是所谓运行时连接技术,它跟人们之间相互交流,从生疏到熟悉的认识过程非常相识。

matrix系统的优势:

一个新颖的系统,可能并不是很容易地列举出来一大堆优点缺点,也许只有往后的运用,才能逐渐的体现其各种优势所在,对创作者来说,往往就是一个不经意的信息,导致整个想法的产生,总结归纳如下几点:

1、简单、高效的程序设计:完全的对象化,更加符合人类思维习惯的代码设计,让程序设计更加注重对象功能的实现,而不用再去学习复杂的系统方面知识或架构、工具方面等技术。

2、统一的程序设计:一切皆对象,程序设计就是对象设计,不再像传统系统那样,分为各种各样的软件类型,协议,开发等等。对象之间耦合也是统一的格式,更加方便分工合作开发、以及重复使用其他人的智慧成果。

3、灵活开放的系统组成:以对象为基础构建的系统,可以根据实际运用需要,增加、裁减、或选择不同的对象个体。

4、便利的网络互动:以对象为基础网络通信或编程,完全不需要了解各种复杂的网络知识和技术,网络对象之间和本地对象之间的互动通信,除了速度有差别以外,其他完全没有区别。

5、数字地球:各种仪器仪表互连提供统一标准。

6、虚拟现实世界。

matrix是一个巨大的工程:

1)首先是matrix系统本身的实现,包括matrix 核心,e语言编译器,开发工具等(如果要想获得更好的对象运行性能,对象处理机架构也必须被实现。)

2)matrix系统各种技术规格、对象规范的定义和文档撰写,需要一个专门组织机构来负责,并且是免费开放的。

3)矩阵网络的实现,多网合一,各种中间层设备和通信软件,需要各个厂商合作。

matrix系统开发现状:

matrix系统思想来自电影《黑客帝国》,作者经过多年的努力,利用业余时间,致力于开发并实现了matrix核心里面的多任务调度e-kernel第一版,接下来会继续开发第二版内核的同时,将定义完备的matrix对象模型和e语言语法。往后的任务会更加艰巨,希望新的力量加入,一起来实现这个有趣的工程。

联系邮箱:mx65536@gmail.com

慎重声明:
由于我平时工作比较忙,不常来网上逛,没想到大家的评论如此激烈,甚至吵骂起来了,实在是我不愿意看到的。首先感谢大家这么热情的支持,不管鼓励也好,还是怀疑也好,都谢谢大家.

在这里,我需要向大家,以及陈首席澄清一件事情,matrix并不是我本人的言论,事实上这是跟我一起接私活做项目的合作过的兄弟发言,弯曲的帐号也是他一手包办帮忙申请的,没想到我的朋友如此这样在网上较真,希望各位海涵,如有他骂过的网友和说过的脏话,我代他向你们致歉.

最后,谢谢大家的关注.感谢弯曲,陈首席,以及其他编辑同志,给这个发表文章的机会.谢谢你们搭建这个平台,让更多的思想,技术展现在大家眼前.

(1个打分, 平均:5.00 / 5)

内网也可以DropBox——私有云“阳盘”小记

过去一两年里,云存储的美国鼻祖Dropbox——这个几十人的小团队在4年间将企业的估值做到了100亿美元。2011年,苹果也推出了自己的云存储产品——iCloud。苹果前CEO乔布斯将iCloud评价为“下一个伟大远见”的产品。同观国内,金山、腾讯、360、阿里、华为、联想、中国移动等巨头纷纷进入,就连酷盘、115网盘等中小创业公司也纷纷一头扎进这个行业当中。
上述公司的技术架构和商业模式也几乎和DropBox如出一辙:建立大规模云存储后台服务,同时推出前台客户端,吸引大量用户参与,从中产生收费用户收取费用。
相对于个人市场,企业用户对文件存储和分发软件有着更紧迫而现实的需求。但是,如果把这种模式照搬到企业市场,存在着一个弊端:即,上述产品都需要用户把数据传送到位于互联网机房的云后台,而基于敏感数据的安全管理以及当前云模式诚信机制的担忧,很多企业不会选择轻易的上传企业数据。同时,企业对存储产品的要求,也有别于个人。
针对企业文件存储需要,在2010年底,几个在通信领域有着丰富工作经验的创业者,成立了新云软件,专门研发针对企业使用的私有云存储软件,并且给该产品起了一个很有四川特色的本土化名称——阳盘(YoungDisk)。针对企业存储需求特点,除了具有个人存储产品好用的客户端和分享功能外,阳盘着力打造了企业需要的数据私有化、数据存储加密,以及按照严格企业组织架构进行文档分发的控制功能。
阳盘基于C/S架构设计,同时也支持web客户端。企业可以将服务器部署在企业内部机房,甚至企业部门内部。同基于个人产品自发共享的模式不同,阳盘为系统设计了一个超级管理员,超级管理员可以给部门管理员赋权,也可以直接将某一个共享目录指派给某部门单独共享。
产品特点
1、文件微观同步技术
有别于传统文件同步,YoungDisk采用文件微观同步技术,将文件拆分成极小的单元进行同步,实现了快速差异对比、差异同步,在较差网络链路的极端情况下,可提供高速同步效果。
2、加密传输通道
文件传输通道采用SSL协议进行加密,数据传输安全有保证,防止黑客恶意窥探和窃听。
3、严格权限管理
用户采用组、用户交叉权限管理,不同的用户可以继承不同组的属性,保障用户仅能按照企业管理规定,操作权限内的文件。
4、灵活组目录共享
组可拥有多个共享目录,组内用户可指定对共享目录内文件的操作权限,包括只读、可删除、读写,
5、选择同步
可选择指定目录进行同步。
6、文件误删除恢复
对于误删除的文件,用户可通过恢复机制进行恢复,保证工作的连续性。
7、手机和WEB客户端
可通过手机和WEB访问存储文件,适用于出差、会议、网吧上网等临时获取指定文件的场合需要。
目前,新云公司团队规模依然不大,从最初的几人发展为10人规模,目标是打造建立企业内部更安全、更灵活的DropBox。2012新春伊始,新云愿意和各路豪杰一起,打造更给力的企业级私有云存储,合作方式包括并不限于产品代理、产品直接整合、甚至直接肉身加入。
在内网也想DropBox起来吗?您还等什么呢?需要的可以在这里跟帖留言,新云团队竭诚为您服务!
(5个打分, 平均:3.60 / 5)

拨云见日:企业网络准入策略小议

近来有机会接触了一些企业网络准入的项目,感触颇深。针对这个复杂的市场有一点自己的心得,没有结论,意在抛砖引玉,为大家的思考和讨论铺路。

本文只关注企业用户,而且是具备一定用户规模的国内企业用户,不是学校、不是小区宽带;其次,范围是用户对网络资源的访问,包括有线、无线、VPN等等。之所以要这么规定一下,是为了后面的讨论更准确、更有针对性,企业用户有自己的特点和需求,适合其它环境的思路在企业网中很可能玩儿不转,任何一种技术方案只有在立足的环境中才存在讨论的意义。

一. 缘起

网络准入是一个由来已久的话题,但一直以来并不是IT安全的重点,直到近年来,才逐渐成为炙手可热的话题。无线接入、智能移动终端和云计算的兴起共同催生了这一波热潮。

随着云计算的不断深入,越来越多的企业业务系统由传统的C/S架构向B/S架构迁移,以往访问后台数据需要安装专用软件,IT部门控制客户端软件的许可发放,就能够大致控制访问用户的范围。而在B/S架构中,用户只需要一个WEB浏览器即可登录系统,加上智能手机、智能平板和WiFi的流行,以往的限制条件消失了,任何人手中的设备都成了可能访问后台数据库的平台,IT部门突然一下子失去了对局面的控制,因此,对网络的准入控制被重新提上日程。只有合法的用户才能够接入网络,通过对接入用户的控制,IT部门开始试图重新夺回对数据访问的控制权。

二.  几种思路

控制用户接入网络的技术伴随网络本身的诞生和发展已经衍生出五花八门的派别,每种方式都有自己的特点和适用场景,很难说那种方式在技术和最终效果上技高一筹取得了绝对的领先地位。

在新形势下,接入技术本身并没有发生翻天覆地的变化,其演进更多地是从满足需求的前提出发,将现有的方式进行重新的优化、组合,从而推出一个满足新需求的解决方案。在实际环境中常见的认证方式包括二层认证、三层认证和基于客户端方式的认证。

二层认证

二层认证就是用户在获得IP地址之前必须通过的认证,大型企业往往利用DHCP进行IP地址分发,用户在接入网络之初同网络侧通过二层连接进行认证数据的交互,只有成功通过认证才能向DHCP服务器申请IP地址,从而收发数据。

二层认证的代表实现方式就是802.1X。802.1X是IEEE 802.1协议集的一部分,定义了EAP在以太网环境中的实现方式,而EAP是IETF在RFC3748中制定的在数据链路层中进行认证行为的一种机制,以满足在不同的二层环境下进行统一、一致的认证的需求。这个逻辑连起来就是,IETF首先制定了在数据链路层也就是二层上进行验证的EAP机制,然后IEEE给出了EAP在以太网环境中的运行方式,这个方式就是大家熟知的802.1X。现在,我们可以回答两个常常被混淆的问题:

1)802.1X是802.11的子集吗?

No,802.1X不但可以工作在无线环境中,同样能够工作在有线环境中,并且在WiFi被大规模部署之前,802.1X就已经是有线网络中一种重要的认证方式。

2)EAP是802.1X专用的认证方式吗?

No,理论上EAP可以被运用在任何一种数据链路层之上,例如PPP或以太。

基于802.1X的二层认证基本工作方式如下图所示:

image

上图中的三个元素,分别是客户端(Supplicant)、认证方(Authenticator)和认证服务器(Authentication Server)。客户端就是支持802.1X功能的终端设备,如笔记本、智能手机;认证方是将客户端接入网络的接入设备,在有线网络中是接入交换机,无线网络中是无线AP和控制器,在VPN连接中,认证方则是VPN服务器,认证方负责接受客户端的认证请求,但本身并没有处理这些请求的能力,它会将获得的信息转发到认证服务器,由认证服务器辨别客户端的合法性;认证服务器通常是集中部署在网络内的一台安全设备,当收到转发来的用户请求后,认证服务器将请求信息同已有的用户资料做比对,并将结果返还给认证方,如用户合法,认证方便会将客户端接入网络,否则予以屏蔽,或放入特殊VLAN,至此,一个标准的二层认证流程才结束。

在这个过程中,认证方和认证服务器之间通过特定的协议通信,目前采用最普遍的两个协议是RADIUS和TACACS+,总体说来,TACACS+的稳定性、安全性和灵活性更高,但TACACS+是思科私有协议,因此,在一般的用户接入场合,RADIUS更加常见。

通过多年的发展,802.1X+RADIUS的实现方式已经发展成为一个功能非常强大的准入方案,RADIUS丰富的字段使得认证可以不仅仅针对用户名与密码,还可以根据接入设备的MAC地址、IP地址、交换机端口等信息来进行认证。

之所以解释这么多二层认证的细节,是想说明基于802.1X的二层接入是一个非常成熟的方案,市场接受程度很高,不管认证方还是认证服务器,都不难找到多家厂商的产品,客户端的支持方面也不是问题,主流的桌面操作系统和智能手机终端大都支持802.1X。用户的接受与市场的成熟,对于安全策略的长期部署是非常重要的,802.1X在这方面的优势异常明显,其他方案不一定有这么幸运。

总体说来,802.1X的二层模式具备了以下三个特点:

1)完全公开的架构,每一个部分都有相应的国际标准,便于企业客户自由选择软硬件、搭建一个灵活的安全架构,不会受制于特定厂家;

2)成熟的技术标准,802.1X已经部署在全球成千上万的园区网,本身是一个非常成熟的技术,实施风险和成本低;

3)包含完善的认证和授权机制,能够满足企业用户的大部分需求。

如果仔细揣摩这三点,你会发现802.1X同以太网非常相似–公开、成熟、实用,这其实就是企业客户的核心需求,企业的IT部门在做任何选择时首先考虑的都是技术的可延续性以及成熟性,如果某项技术大家都在用,本身功能又实现得七七八八,这个方案就是最优方案,华而不实的新鲜玩意反而难以得到企业用户的垂青。

三层认证

说了这么多,传统的二层方案是个完美的方案了?如果放在五年前,也许是这样,但随着网络的发展,接入环境越来越复杂,802.1X在某些方面渐渐显得力不从心了。例如,某些企业需要为访客提供无线网络接入,但不可能每次有来访人员时临时在笔记本电脑上配置802.1X策略,这就需要一个快捷的办法将没有经过认证的第三方设备接到网络中。

三层认证就在这种背景下应运而生了。

三层认证又被称为WEB认证,顾名思义,认证过程是通过一个WEB页面完成的。当有新的设备需要接入时,网络设备不会默认屏蔽它,而仅仅为其提供一些基本数据的转发能力,如DHCP、DNS等,客户端可以通过DHCP拿到地址,但他还没有办法获得完全的网络权限,比如上个QQ啥的;此时,用户需要发起一个HTTP请求(在浏览器中访问任意一个WEB页面),交换机或者无线控制器从中截取到用户的这个HTTP请求,并将用户重定向到一个预先写好的认证页面上(这个页面可以存放在任意一个IP可达的WEB服务器上),用户在在这个页面使用用户名/密码完成认证,从而获得全面的网络访问权限。

image


同传统的二层认证比较,WEB最大区别就是去除了对客户端的要求,用户端设备无需进行配置,只要有一个浏览器就OK了,而这个条件基本上所有的个人设备都能够满足。因此,近年来WEB认证的发展非常快,特别是在无线、大型园区等环境中得到了大规模的部署,而主流网络厂家也纷纷将WEB认证作为无线控制器和接入交换机的一项默认内置功能。

三层认证凭借其自身的特点获得了市场的认可,但在现阶段毕竟还是一个补充方案,难以作为企业环境的主力认证方式。首先,每次上网通过WEB页面登录的方式对大多数企业用户来说都“土”了一点儿,而且WEB认证检查的内容也比较简单,大部分时候仅有用户名和密码,在高安全级别的环境中仍显单薄。

客户端方式

除了三层认证和二层认证,还有一种很有意思的思路,即通过客户端对接入用户进行认证。这里所说的客户端是指安装在用户设备的上的软件,其表现形式五花八门,以杀毒软件起家的厂商会做成杀软的功能子集、以桌面控制立足的厂家会做成控制软件的一部分、而传统的网络设备厂家则会将这部分功能集成到VPN\无线接入的用户端软件中。不管是什么路子,这类软件一般只干两件事情:1)从操作系统接手802.1X的认证流程;2)对操作系统的健康状况做检查,如是否安装了最新版补丁、杀毒软件是否更新到最新病毒库等等,若操作系统处于可靠的状态则允许接入网络,否则拒绝。

这种方式有一点像一个加强版的360软件,它不但帮你检查身体,还基于你的身体状况决定你是否能获得一张游泳证。由于健康状态的检查内容包含了系统的补丁安装、应用软件安装、杀毒软件更新等情况,因此,必须在客户的设备上安装一个系统权限非常高的客户端软件才能完成所有的检查工作。

很明显,客户端方式完全是从企业IT部门的视角出发,对最终用户采取更多的限制。通常,这种方式都会和厂家进行紧密的绑定,通过在每台终端设备上安装客户端,用户的IT流程和安全规范也紧密地同厂家能够提供的功能选项结合在一起。

三种方式的对比表格

image

三.  延伸思考

用户需要什么样的方案?

企业网的准入是一项非常特殊的技术,最终用户的体验是决定一个项目成败的关键。有的方案从技术上评估非常完美,但实施之后发现最终用户根本接受不了,过多挑战用户的使用习惯,最终被行政层面废掉。

有的客户在被厂家忽悠过后决定在整个公司范围内推广严格的网络准入控制,在所有PC终端上安装安全客户端软件。结果,客户端装上后频频告警,因为不少人在自己的电脑上安装的下载软件强行修改了系统的下载线程限制,还有的员工干脆卸载了原有杀毒软件,自己重新安装了互联网上的免费杀软。这些被折腾过的电脑,在安全客户端内置的严格的策略规则前统统被亮了红灯,上线测试第一周就有不少员工无法正常接入网络。结果IT部门啥都顾不上,成天到各处救火,最后这个系统被大领导一句话下了马。

即使是最通行的802.1X方式,也不一定适应每个地方的水土。当一台配置了802.1X接入的PC机刚开机时需要一定时间同网络侧交互认证信息,如果用户接受程度不高,很可能会认为网络接入效率低,从而投诉,给IT部门造成很大压力。

因此,对于最用用户来说,最好的方案就是用户体验最友好的方案,只有对原有使用流程影响最小的技术方案才能得到上下一致的支持,从而推动最终的全面部署。另一方面,业务部门对准入的支持也至关重要。

IT部门需要什么样的方案

对于IT部门来说,网络准入是一个非常笼统、模糊的概念,什么样的用户能够接入网络?什么样的安全检查才是足够安全?同企业的其他安全策略该如何整合?这些问题在业界都没有统一的结论,而且安全防护是一场没有终点的拉锯战,IT部门不可能无限制地投入资源去追求极致的安全级别。

准入控制的实施过程是非常复杂的,是一个惊动全局的工程,因此,IT部门在上马准入时无不希望是一个循序渐进的过程,先从最基本的二层准入或三层准入开始,逐渐推进到设备健康状态检查等复杂的机制,这在准入项目的实施过程中尤其重要。

其次,准入控制的最终对象是企业内部的人员,而大部分企业往往已经具备了用户数据库,且用户的合法性以此数据库的实时数据为准,比如供人力部门使用的微软Active Directory。新的准入系统要能够方便地与原有数据库集成,特别是将准入系统内复杂的策略直接绑定到已有的用户帐号上。例如有的用户希望对PC机的MAC地址进行认证,而在原有的Active Directory内是没有MAC地址这一个字段的,且这个数据库的管理权不一定在IT部门手里,那么新添加的MAC地址信息如何同原有的用户帐号绑定,并实现帐号信息的定期自动更新就是一个挑战。

最后,准入控制系统一定要有一个清晰、简洁的管理流程和界面。

什么是完美的产品?

综上所述,一个优秀的准入控制技术方案需要具备以下特点:

1)可延续性

所谓可延续性是指采用的技术方案要具有长期的发展路线和支持力度,或者是被广泛应用的公开标准,或者是强大厂商的主流产品。准入机制一旦部署将延伸到网络的各个角落,并同企业今后的安全策略紧密结合起来,如果基础平台不稳定,后期变更将是迁一发动全局的麻烦事;

2)可用性

准入策略的顺利实施一定是以最终用户的接受为基础,因此,准入系统对最终用户的使用流程不能有太大的影响,要提供一个足够友好的用户体验;

3)灵活性

准入策略的内涵非常广泛,企业IT部门在实施时一定是一个逐渐完善的过程,为了应对这种需求,准入系统要具备一定灵活性,各个功能模块的实现不能有冲突;

4)整合性

准入系统要能够方便地同主流的企业数据库系统整合,并将安全策略绑定到相应的用户帐号之上,实现自动化的用户数据更新。

虚拟桌面的机会

网络环境的变化,带来的是访问方式的变化。一方面,网络准入技术开始快速发展,另一方面,很多人开始询问“是否一定需要在网络边界做这么严格的控制,还有没有其他方法?”。

也许是有的。

虚拟桌面在企业内部的应用开始逐渐铺开,员工对数据库的访问全部通过虚拟桌面完成,而硬件本身可能是一个简单的瘦客户端,不具备复杂的功能。在企业网络内部对虚拟桌面流量设置高优先级QoS策略,对其余流量以及网络接入采取从简的思路,在未来,这并非不会是一种解决方案。

总之,随着云计算、智能手机、WiFi等新应用的快速发展,传统的企业网络不得不开始主动变化,这种变化将如何发生,往哪里去,得出怎样的结果,现在都还不明晰,但有一点是明确的,那就是有意企业数据网络和安全的厂家现在就必须开始重视这股潮流,未雨绸缪,才能从容应对未来的新一代企业网络的发展。

(7个打分, 平均:3.29 / 5)