聚焦主题业务系统建设,支持数字化转型
提供云原生架构解决规划
以数据中台为主题的数据全性命周期产品
覆盖智能风控、远程视频银行等场景化产品
通过盛开银行等延长互联网金融产品
覆盖信贷全流程,助力普惠金融
提供信誉风险与本钱计量产品
聚焦监管合规,强化金融系统安全性
散布式主题系统国产适配,构建金融安全底座
全栈式信创云平台,驱动多行业自主可控
云原生+AI驱动,全栈式火速部署与智能运维
量子密钥分发技术,构建金融级安全通讯网络
数字技术赋能农业产融,构建智慧村落生态
大数据风控+线上化服务,破解幼微融资难题
区块链+AIoT技术整合,优化产融协同效能
智能合约+多载体支付,拓展消费场景
面向银行11大领域32个征询产品
数字化战术、经营造模、零售与绿色信贷征询
科技战术与系统群架构及治理研发规划等
企业整体战术导向全局数据治理与利用规划
萦绕项目进行全性命周期管控与专家赋能
3-5年信创工作整体规划造订
泛行业AI数智化解决规划
散布式架构+智能运维平台,全性命周期IT治理
丰硕的IT治理解决规划,保险业务陆续性
科研知识产权规划,提升全性命周期治理能力
工业智能体+物联网优化出产,打造数智工厂
云原生+DevOps全性命周期平台
自动化建模、执杏注测试、业务流程自动化
AI+TMMi赋能全性命周期测试,智能天生用例
全性命周期IT服务,PMO征询与行业级交付

Linux 内核深度分解
——以Hello, world 为例
J9集团信息 工程院
刘清华

武侠的世界和法式员的世界是相通的,楚留香在对阵无花和尚时,无花和尚用了少林神拳,弹指神通等好几种威名赫赫的武功,而楚留香所用的招式却是江湖中最通常,最平庸的,江湖中也不知有几千几万人能施展这种招式。乔峰在聚贤庄只身战群雄,也是以太祖长拳这种武林中最通常的功夫对敌?杉Ψ蛑挥猩钋,却无高下。
由武侠的江湖转身回到二进造世界。在法式员的圈子,若说最常见、最风杏注所有人城市的法式,莫过于“Hello, world”了。
这个法式最初的版本呈此刻C Bible(The C Programming Language)中
法式很短,内容如下:

图一:Hello, world
通常所有的法式员都是从Hello, world 起头进建编程的,区别在于推算机说话分歧,
打印函数名称分歧。该法式的职能就是挪用打印函数在屏幕打印一行话“Hello, world”。
若是再深刻一点,printf是怎么实现的?为什么在terminal运行这个法式,就会在屏幕上打出Hello, world?我们今天就聊聊若是我们自己写,该怎么做。
首先,我们分析printf函数,尝试着抽丝剥茧。
1. printf先整顿数据体式,最终形成一个蕴含打印数据的数组,并把指针传递到节造台法式。字符串我们依然能够以为是一个数组。这件事重要是通过挪用vsprintf函数来实现。例如参数传入的数字是不是要推算,推算后要转换成对应该实现的字符串。譬如若是是16进造暗示,那么16正本用十进造显示的是2个字符“16”,换成16进造,就要显示4个字符“0x10”,由于今上帝要思考是Hello, world。所以这个部门我们先跳过。
2. 在整顿完应该输出的字符串之后,printf就要挪用console_print函数了,这个是节造台函数,重要就是在屏幕上输出字符串,蕴含换杏注光标移动和定位等。这里console_print嵌入了一段涉及显示的汇编:

这段汇编重要职能就是把一个字符在指定的屏幕地位显示。这个指定的地位涉及到当前光标地点地位。而console_print使用while循环,将整个Hello, world显示出来。
3. 这段汇编为什么能够在屏幕上显示呢?这里就必要相识显示的驱动道理,单一的说,显示一个字符,必要显卡对于屏幕进行驱动,就是显卡通知屏幕该显示啥。但是显卡无从得知该在第几行第几列显示什么字符;蛘咚迪钥ㄕ媸档墓ぷ鞯览硎墙谠煸诘诩感械诩噶械哪歉鱿袼氐愀貌桓玫懔,若是是是非屏,那么就是0,1的区别,如第6行,第6列这个像素点重点亮,0是熄灭,1是点亮。那么显卡就必要三个参数(行数,列数,灭还是亮(0,1))。若是是彩色屏,再加上RGB的参数。
4. PC的编程,即便是linux系统的boot法式,也已经是相对进行了驱动简化,我们先从简化版起头说起,以上的汇编,其实是奉告了显示参数,具体要显示,还要挪用BIOS中断0x10,职能号ah = 0x13,显示字符串;al = 搁置光标的方式及属性。当把参数都配置好后,BIOS被挪用
int 0x10
OK, BIOS内嵌的法式把我们传递给它的参数:“Hello, world”在屏幕上显示了。
5. 这是PC的法式,BIOS就是内嵌在主板的通用驱动。如果我们自己设计了主板,使用的CPU是ARM,也没有BIOS法式,必要我们自己写显卡驱动,怎么办?刚才我们已经单一介绍了LCD屏幕的显卡驱动道理,事实上,LCD的数据线就蕴含了杏注列地址线,节造线,数据线等。我们通过CPU的I/O口,输出地址给LCD模组,通知模组行,列别离是几多,输出数据,通知模组显示的是0 or 1(代表熄灭还是点亮)。这个时辰,我们就能够成功节造LCD 的 1个像素点=谠1个像素点,输出不了Hello,world啊。这里我们还必要字符的点阵库。下面是一个示意图:

图二:字符“A”点阵图
通过这个图,我们能够看到第三行0x10(0b00010000),其实就逐一对应着右侧第三行的LCD显示,一共8个点,每个点用1个bit暗示(0是熄灭,1是点亮)。这里就是A的最高的那个点。左侧的这组数据,就暗示A的16*8体式下的点阵字符。
6. 那么显示Hello,world的第一个字符H,就是先通知LCD模组,我要从第几行第几列起头显示,即显示肇始点,就是图二右侧的LCD的左上角那个点的地位。显示共16行8列,把这一块的LCD的哪些点给点亮,就能得到H了。以此类推,显示全数字符串。
7. 怎么通知LCD模组呢?PC用的是BIOS,自己写驱动,就先写一个输出字符串的函数printk,挪用一个自己写的LCD函数LCD_print,给出字符串“Hello,world”。LCD_print函数就从系统调取此刻的光标地位,得到显示字符的肇始点,而后凭据字符串,转换成ASIC II的编码,而后凭据码表数值,从点阵字库中获取到该字符所对应的点阵数组,有了地位,有了显示内容,逐行驱动,最终就在LCD上获得了“Hello, world”。
以上,概要论述了Hello, world法式的运行过程。涉及到的知识点如下:操作系统 kernel,ASM汇编,C说话, BIOS,CPU架构及中断,LCD驱动,基础硬件设计。往深了说,还有过程切换实现方式,linux的多工作和;つJ。内核态和用户态的切换,等等。
若是持续引申,譬如从一个手机发送“hello,world”到另表一台设备的屏幕进行显示。这就涉及到通讯和谈,若是数据是经过运营商网络的互联网数据,那么就会涉及到TCP/IP和谈的解析,TCP数据包的内容里还有私有和谈的解析。通讯链路还蕴含基站注册,心跳监测,长链接的保险,域名解析、IP地址及端标语。若是涉及到后盾云端部署,又涉及到云平台以及云存储。若是是内表网的隔离,那么还涉及到防火墙的成立,以及若何预防IP嗅探和DDOS攻击。若是是超过10万台手机同时发送,那就涉及到大数据及高并发处置,思考若何做负载平衡。若是超过1000万台手机,就涉及到CDN架构。若是手机发送的是一张手写的“Hello, world”的jpg图片,那么又涉及到OCR图像识此外人为智能技术。若是手机的图片必要存储,又涉及到散布式文件系统。若是显示终端不是直连运营商大网,而是和边缘网关短距无线或者有线直连,那么又涉及到边缘推算。
我们如果这么一个场景:手机APP发送一张图片到云端,云平台利用AI?榧鸪鐾计谌菸“Hello,world”,而后在云端别离存储原始图片数据到HDFS,存储字符串到MysqL。并且做好1主2备的Hadoop备份,同时思考服务器节点的主备切换。做完存储后云平台通过运营商网络,将字符串加密后发送到指定边缘网关,边缘网关解析完数据内容后,再经过防火墙,通过有线RS485的私有和谈,发送到指定的终端,最后,终端屏幕闪动着“Hello,world”。这就是尺度的云管边端四层技术架构的物联网了。
所以,我们能够看到Hello, world是一个很值得深刻理解的法式,从月薪5000的应届毕业生,到年薪百万的架构师,我们都能够很愉快的聊一聊这个法式。若是有人对以上内容都很相识并纯熟利用,欢迎来到工程院物联网研发中心,我们这里一堆技术极客等待你的参与。

