《Cisco IOS XR技术精要》一2.1 Cisco IOS XR内核

简介:

本节书摘来自异步社区《Cisco IOS XR技术精要》一书中的第2章,第2.1节,作者 【美】Mobeen Tahir , Mark Ghattas , Dawit Birhanu , Syed Natif Nawaz,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.1 Cisco IOS XR内核

Cisco IOS XR技术精要
Cisco IOS XR是一款基于微内核、高度分布的操作系统。Cisco IOS XR中使用的微内核是一种由QNX Software Systems公司开发的QNX Neutrino实时操作系统(RTOS),其使用的内核是轻量级的,仅提供了少量必要的服务。该系统负责终端处理、调度、任务交换、内存管理、同步、进程间通信等工作。微内核系统不包括如设备驱动器、文件系统和网络栈之类的系统服务;这些服务是通过内核外的独立进程来执行的,可以像其他应用那样重新启动。

微内核是一种兼容POSIX(可移植操作系统接口)的内核。POSIX定义了兼容POSIX的OS必须遵循的OS规范和针对API和OS服务的测试组。基于POSIX兼容的内核开发的应用和服务可以方便地移植到另一个兼容POSIX的内核上。

基于微内核的OS必要的一点就是模块性。微内核提供了极具高度的模块性。OS是由一组通过微内核来管理、通过消息传送服务相结合的协作进程来执行工作的。每种进程运行在各自的地址空间中,不会因其他进程而造成内存数据损坏。微内核架构中有一个重要的因素就是快速内容交换能力,该能力提高了模块性的灵活程度。因为内容交换使用的CPU开销很低,它可以使每种应用和服务最大化地使用各自的进程并运行在各自的地址空间中。例如,Cisco IOS XR中,BGP、OSPF、OSPFv3、RIBv4、RIBv6等应用会执行在不同的进程中。而且,如果路由器上配置了多个OSPF进程,那么系统会将每个进程分配进与其他进程完全分离的单独进程实例中。这种快速内容交换能力使更优的模块性成为可能,这里的快速内容交换能力是指由QNX提供、Cisco加强的微内核和有效进程间通信的快速能容交换能力。进程间通信内容将在本章后续小节中做更详细的介绍。

2.1.1 线程

如图2-1所示,OS是由一组通过微内核管理的协同进程组成的。微内核提供了线程调度、抢占,以及到进程的同步服务。微内核还扮演着消息传送“通道”的角色。微内核和进程管理器共同构成了procnto进程。每种进程运行在单独的地址空间中,并且重启不会影响到其他进程。


81c4bb48d124737785c858ec1253664cebbf34b8

在开发一款应用时,经常需要考虑并发地执行多种算法。这种并发性可以通过使用一个进程中的多个线程来实现。线程(thread)是执行与调度操作的最小单元。换句话说,一个进程(process)包含了多个相关线程,并且定义了线程可以执行的地址空间。每个进程至少带有一个线程。有关线程将在2.1节中做详细的介绍。

如读者所见,在例2-1中的show processed threadname 120命令输出中,IOS XR的BGP进程具有多个线程,每个线程各负其职,包括输入、输出、导入等。在下例的输出中,120表示BGP进程的作业ID,作业ID(JID)是分配给每个进程的唯一编号,更多内容将在2.1节中做更详细的介绍。

例2-1 BGP进程的线程名称


5c36b535fb85c4cd6ecd9f66dcee0f25a420b9fb

图2-2给出了最为常见的线程状态以及各状态之间的转换。内侧的圆圈实际上代表了两种截然不同的状态:ready和running。线程状态可以从ready转变成running,反之亦然。处于running状态的线程同样可以转变成图2-2中所示的其他任意一种状态。

Cisco IOS XR微内核使用一种抢占的、基于优先级的、非自适应的调度算法。每个线程分得一个优先级。调度程序负责基于已分配的优先级选择下一个执行的线程。处于ready状态中优先级最高的线程将被将被选择为running。每个优先级级别都会有一个ready状态的先进先出(FIFO)队列。

空闲线程是procnto进程中的一种特殊线程,因为只有这种线程的优先级为0并使用FIFO调度机制。而且,空闲线程只会处于running或ready状态,并且永远不会主动地交出CPU控制权。不过,由于其使用的优先级最低,所以空闲进程可以被任何处于ready状态的其他进程所抢占。

running状态的线程可能由于系统呼叫(如内核呼叫、异常或硬件中断)、被阻断、被抢占,或主动交让操作而转变成某种不同的状态。如果running状态的线程被更高优先级的线程抢占了,将会被放入同优先级ready队列的最前端。另一种情况,如果是由于线程的时隙用尽或是主动交让进程的原因,将会被放入同优先级ready队列的最末端。时隙(timeslice)指的是当同一优先级的ready队列中,如果一个或多个线程为running状态时,每个running状态的线程可以执行的最大时间长度。

当线程需要等待某个事件的发生时(如回复消息),running线程会被阻断。被阻断的线程将会永久地进入对应的阻断状态,直到阻断消失。当进程的阻断结束后,线程通常都会被放入同优先级ready队列的最末端。当然也有一些例外。


8bde69167c7ed0ead8a25f10d15d62b9d3485436

例如,如果一个服务器线程正在等待一个客户端请求,将会进入阻断(block)状态。假设受阻断的服务器线程的优先级为10,而非阻断的客户端线程的以优先级20发送请求并等待回应。在这种情况下,服务器线程将会解除阻断,并将客户端线程转变为阻断的reply状态。如果服务器线程以10的优先级放入ready队列,不过还有多个ready状态的线程优先级为15,这样的话,即便是客户端线程的优先级为20,也会影响到客户端的相应时间。这个问题被称作优先级倒置。为了防止优先级倒置,微内核使用了优先级继承机制,可以使服务器线程的优先级临时地增加成匹配客户端线程的值(20),并将服务器线程放入客户端优先级(20)使用的ready队列中。

2.1.2 调度算法

微内核中提供了如下3种调度算法来满足不同场景的需要。

FIFO调度。
轮询调度。
偶发调度。
在FIFO调度中,除非线程主动交让控制权或被更高优先级线程抢占,否则线程会一直工作下去。在Cisco IOS XR中,只有procnto进程(内核)中的空闲线程使用FIFO调度算法。

IOS XR中的大多数其他进程都使用轮询(round-robin)调度,这种调度方法限定了每个线程得到资源控制权的最大时间长度(时隙)。使用轮询调度的线程会一直运行,直到其主动交让控制权、被更高优先级线程抢占,或待其时隙用尽。

偶发(sporadic)调度算法允许线程的优先级在下降为低优先级之前,在补充间隔(replenishment interval)内使用常规优先级运行一段时长(预算时间,budget time)。图2-3说明了偶发调度算法是如何工作的。


ba486f7c0ff28c8fb3ec55872919e222937234d5

假设从t=0ms开始,线程T1和T2准备就绪,其他所有线程处于阻断状态。此外,假设T1为偶发调度线程,其常规优先级为30,低优先级为10,预算时间为20ms,补充时间为50ms。T2为轮询调度线程,优先级为20。实例如下。

1.由于T1的优先级比T2高,所以T1在t=0ms时被优先调度得到服务。

2. 在t=5ms时,带有40优先级的线程T3阻断结束,并变为ready状态。

3. 由于T3带有比T1还高的优先级,所以T3抢占T1得到服务。抢占的结果是,T1进入优先级30的ready队列的最前端。

4.在t=10ms时,T3线程被阻断并交还CPU控制权。此时优先级为30的T1线程和优先级为20的T2线程均处于ready状态。因此,较高优先级的T1在t=10ms时得到服务。

5. 当t=25ms时,T1线程的预算时间已经用完,由于偶发调度的机制,其优先级被降低成10。此时的T2线程处于ready状态并带有20的优先级,所以,T2抢占了T1,从25ms开始得到服务。

6.在t=50ms时,补充间隔的50ms到期,T1线程的优先级恢复成了常规优先级30,于是,又从T2线程上将控制权抢占了回来。

7.当t=70ms时,新补充间隔中的预算时间20ms又被用完,优先级再次降为10,T2再次抢占T1得到服务。

例2-2给出了show process pidin命令的部分输出。输出中列出了线程,以及相应的进程ID(pid)、线程ID(tid)、进程名称、优先级、调度算法和进程状态。“prio”一列给出了线程的优先级和调度算法。在线程调度符号中,f表示FIFO,r表示轮询,?表示偶发调度。例2-2中,共有两个线程使用FIFO调度;procnto线程1和2,这两个都是内核的空闲线程。每个CPU都会有一个空闲进程。由于此命令是在CRS-16/S的RP上执行的,该RP上共有两块CPU处理器,所以显示出了两个空闲线程,每个CPU一个。例2-2中还显示了eth_server进程中的线程3、4、7使用了偶发调度,所有其他线程使用的是轮询调度。

例2-2 show processes pidin命令输出


1f2d7fff303d29e27c9387bfe9a465a7acd3b065

2.1.3 同步服务

微内核提供了一种基于消息传送的IPC同步机制。这种消息传送服务可以不经过任何中间组件,直接从发送线程的地址空间中将消息拷贝给接收线程。消息的内容和格式对内核来说是透明的。IPC内容将在2.3节中做更详细的介绍。

微内核除了提供了消息传送IPC机制之外,还可以开发出其他使用共享内存空间的IPC机制。不过,访问共享内存空间必须要求同步来确保数据的一致性。例如,如果某个线程正试图访问连接列表,而另一线程正在对列表进行更新,那么很可能会导致灾难性的结果。为了解决这一问题,微内核加入了mutex、condvar和semaphore同步机制。

相互排外锁,即mutex,用于保证在线程之间单独地访问共享数据。在线程访问共享数据之前,应该先获得(锁住)mutex。当完成在共享数据上的操作之后,线程会释放mutex。任意时间上,只能有一个线程获得mutex。如果某个线程试图锁住已经被其他线程锁住的mutex,那么该线程将进入阻断状态,直到mutex解锁并获得为止。当线程释放mutex时,具有最高优先级等待获得mutex的线程将解除阻断并成为新的mutex拥有者。

如果高优先级的线程试图锁住已经被低优先级线程锁住的mutex,那么当前拥有mutex的线程的优先级将会增加到同高优先级的阻断线程一样的优先级值。这种机制被称为优先级继承(priority inheritance),用来解决优先级倒置的问题。优先级继承与优先级倒置的内容在之前的客户端/服务器线程交互部分中有过介绍。

条件变量(condvar)用于等待某些条件的执行(例如超时)。线程在满足特定条件之前一直处于阻断状态。condvar通常与mutex按如下方式结合使用:

锁住mutex;
等待condvar;
执行动作(操作共享数据);
解锁mutex。
另一种同步机制被称为信号量(semaphore),线程状态由semaphore是否为正数来决定。如果semaphore为正数,线程将解除阻断访问资源,semaphore值减1。每次post操作会使semaphore值增加1。可以使用semaphore借助信号控制器来唤醒线程。线程通过semaphore发出一个wait操作,表示等待信号。信号控制器通过semaphore执行post操作,唤醒被semaphore阻断的线程。

像本节先前例2-2中显示的那样,命令show process pidin location< r/s/m >可以列出每个线程的状态。表2-1给出了一份进程可能获得的状态列表。


12bf39711f3aaf3338d5b14095772531e14b3782

回到例2-2的输出,可以看到,某些线程正处于reply状态,这表示客户端线程正处于阻断状态并等待服务器响应。如果进程一直卡在阻断状态,很可能是(Client/Server)进程或应用出了问题。不过,并不是路由器上所有的阻断进程都是有问题的,因为在进程的选择过程中,阻断状态是一种可预期的行为。有些进程卡在阻断状态可能会导致应用不做响应。理解生产网络中路由器的进程行为是很有必要的。

如果想要查看所有阻断线程,可以使用命令show processes blocked location< r/s/m>,如例2-3所示。建议在数秒内多使用几次,这样可以确定某个阻断进程是由于错误被阻断还是执行常规IPC交换时的正常阻断。某些进程,如ksh和devc-conaux设计出来即是阻断状态。ksh作为客户端进程与devc-conaux(服务器进程)进行通信。在用户提供Console服务器上的输入信息之前,线程会一直处于阻断状态。更具体地讲,ksh等待Console或auxiliary端口上的输入信息并向devc-conaux返回系统消息。当devc-conaux回复ksh,进程状态将从阻断变为reply。

例2-3 受阻断进程


1f9f221fd0741bfb2ed7b3b97270bce80ae5d10c
相关文章
|
25天前
|
JavaScript 前端开发 Android开发
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
73 13
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
1月前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
65 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
1月前
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
54 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
5月前
|
安全 Android开发 iOS开发
Android vs. iOS:构建生态差异与技术较量的深度剖析###
本文深入探讨了Android与iOS两大移动操作系统在构建生态系统上的差异,揭示了它们各自的技术优势及面临的挑战。通过对比分析两者的开放性、用户体验、安全性及市场策略,本文旨在揭示这些差异如何塑造了当今智能手机市场的竞争格局,为开发者和用户提供决策参考。 ###
|
5月前
|
安全 Android开发 iOS开发
安卓与iOS的较量:技术深度对比
【10月更文挑战第18天】 在智能手机操作系统领域,安卓和iOS无疑是两大巨头。本文将深入探讨这两种系统的技术特点、优势以及它们之间的主要差异,帮助读者更好地理解这两个平台的独特之处。
102 0
|
4月前
|
存储 安全 算法
深入探索iOS系统安全机制:保护用户隐私的前沿技术
本文旨在探讨苹果公司在其广受欢迎的iOS操作系统中实施的先进安全措施,这些措施如何共同作用以保护用户的隐私和数据安全。我们将深入了解iOS的安全架构,包括其硬件和软件层面的创新,以及苹果如何通过持续的软件更新来应对新兴的安全威胁。此外,我们还将讨论iOS系统中的一些关键安全功能,如Face ID、加密技术和沙箱环境,以及它们如何帮助防止未经授权的访问和数据泄露。
|
4月前
|
安全 Swift iOS开发
Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法
本文深入探讨了 Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法。Swift 以其简洁、高效和类型安全的特点,结合 UIKit 丰富的组件和功能,为开发者提供了强大的工具。文章从 Swift 的语法优势、类型安全、编程模型以及与 UIKit 的集成,到 UIKit 的主要组件和功能,再到构建界面的实践技巧和实际案例分析,全面介绍了如何利用这些技术创建高质量的用户界面。
89 2
|
4月前
|
监控 iOS开发 开发者
iOS性能优化:深入函数调用栈与符号化技术
在iOS开发中,函数调用栈是理解程序执行流程和优化性能的关键。当应用出现性能问题或崩溃时,能够准确地读取和解析调用栈信息对于快速定位问题至关重要。本文将探讨iOS中的函数调用栈,以及如何通过符号化技术进行有效的性能调优。
63 3
|
4月前
|
安全 搜索推荐 Android开发
揭秘安卓与iOS系统的差异:技术深度对比
【10月更文挑战第27天】 本文深入探讨了安卓(Android)与iOS两大移动操作系统的技术特点和用户体验差异。通过对比两者的系统架构、应用生态、用户界面、安全性等方面,揭示了为何这两种系统能够在市场中各占一席之地,并为用户提供不同的选择。文章旨在为读者提供一个全面的视角,理解两种系统的优势与局限,从而更好地根据自己的需求做出选择。
272 2
|
4月前
|
安全 搜索推荐 Android开发
揭秘iOS与安卓系统的差异:一场技术与哲学的较量
在智能手机的世界里,iOS和Android无疑是两大巨头,它们不仅定义了操作系统的标准,也深刻影响了全球数亿用户的日常生活。本文旨在探讨这两个平台在设计理念、用户体验、生态系统及安全性等方面的本质区别,揭示它们背后的技术哲学和市场策略。通过对比分析,我们将发现,选择iOS或Android,不仅仅是选择一个操作系统,更是选择了一种生活方式和技术信仰。

热门文章

最新文章

  • 1
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
  • 2
    iOS|解决 setBrightness 调节屏幕亮度不生效的问题
  • 3
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 4
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 5
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 6
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
  • 7
    iOS各个证书生成细节
  • 8
    uniapp云打包ios应用证书的获取方法,生成指南
  • 9
    iOS|记一名 iOS 开发新手的前两次 App 审核经历
  • 10
    【iOS-cocos2d-X 游戏开发之十】自定义各类模版&触屏事件讲解!
  • 1
    uniapp云打包ios应用证书的获取方法,生成指南
    27
  • 2
    iOS|解决 setBrightness 调节屏幕亮度不生效的问题
    117
  • 3
    iOS|记一名 iOS 开发新手的前两次 App 审核经历
    20
  • 4
    iOS各个证书生成细节
    35
  • 5
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    158
  • 6
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    55
  • 7
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    73
  • 8
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    54
  • 9
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    65
  • 10
    uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
    172