IOS Software Overview

The operating system that runs on Cisco hardware is called IOS (Internetwork Operating System). In general an OS is responsible for low-level processes on a device such as access to hardware, management of memory, communication between processes, and process scheduling.

Memory management is a defining characteristic of an operating system. A monolithic operating system is one in which all processes share the same memory space. There is no fault tolerance between processes. One process can experience a memory leak and starve all memory on the entire device. While a monolithic OS sounds like a poor way to design an OS, there are some benefits. In a monolithic OS, CPU utilization can be improved due to the immediate access to memory. The OS in this case can run directly on the hardware. So using a monolithic OS can be useful when the system is simple and the codebase is small.

In contrast, a kernal-based OS uses a separate kernal process to manage memory and other resources. The kernal allows processes to have separate memory spaces. This means that a memory leak in one process does not impact the memory space of other processes. Processes can be restarted individually without affecting the entire system. In a microkernel OS, only the essential core services run in the kernal, and all other processes run in their own memory space.

IOS

This is the classic IOS software which runs on end-of-life hardware you may be familiar with, including switches such as the 2960 and 3750, and routers such as the 2951 and 3845. This is a monolithic OS - all processes run in the same memory space.

Have you ever noticed how small the IOS file is on an IOS device? On the 2960 running in my lab, the 152-2.E6 software file is a mere 21.3 MB. On a monolithic OS, the entire system image is held in memory.

IOS-XE

IOS-XE is kernal-based, running IOSd (IOS daemon) ontop of a Linux kernal.

I’ve seen this called “a combination of a linux kernal and monolithic application (IOSd)” which can be a bit confusing. This makes it sounds as if IOS-XE is simply a kernal with a single process. IOSd is a single daemon but it is able to parition functions into separate processes, which are isolated and memory-protected. IOSd is the main process, running as an application on the Linux kernal. The IOS subsystems run as separate processes.

The fact that IOS-XE runs on Linux allows for the ability to run different applications, such as wireshark and containers, tangent to the IOSd. IOS-XE even allows for a guest linux shell, allowing you to access a bash shell from the CLI.

CSR1000v(config)#iox
CSR1000v(config)#int vpg0
CSR1000v(config)#int virtualportGroup 0
CSR1000v(config-if)#ip add 192.168.1.1 255.255.255.0
CSR1000v(config-if)#exit
CSR1000v(config)#app-hosting appid guestshell
CSR1000v(config-app-hosting)#vnic gateway1 virtualportgroup 0 guest-interface 0 guest-ipaddress 192.168.1.2 netmask 255.255.255.0 gateway 192.168.1.1 name-server 8.8.8.8 
CSR1000v(config-app-hosting)#end
CSR1000v#guestshell enable
Interface will be selected if configured in app-hosting
Please wait for completion
guestshell activated successfully
Current state is: ACTIVATED
guestshell started successfully
Current state is: RUNNING
Guestshell enabled successfully

CSR1000v#
CSR1000v#guestshell
[guestshell@guestshell ~]$ 
[guestshell@guestshell ~]$ pwd
/home/guestshell
  • Example of enabling guestshell in CSR1000v

IOS-XE runs on modern switches and routers, such as the Catalyst 3650/3850, and 9300/9400/9500, as well as the Cisco ISR and ASR line such as the ISR 4300/4400 and ASR 1000 series.

IOS-XE inherits the IOS CLI, so if you are dropped into the CLI of each, you probably won’t be able to tell the difference unless you issue a “show version.”

IOS-XR

IOS-XR is a microkernel OS which runs ontop of QNX in the 32-bit version of IOS-XR, and Yocto Linux in the 64-bit version of IOS-XR. QNX is a Unix-like operating system.

The 32-bit version is called “classic IOS XR” and runs on older hardware such as the 12000 series, CRS series (Carrier Routing System, not to be confused with CSR Cloud Services Router), and ASR 9000 series. The 64-bit version runs on the NCS series and new ASR 9x00 series.

IOS-XR shares very little with older IOS trains, and was built from the ground up. This is one reason for the different CLI syntax. IOS-XR is highly distributed, with each process individually restartable. For example, BGP may be one process, RIB another, and ISIS another. Each runs in its own memory space.

IOS-XR places some processes directly on the line cards, for example ARP, BFD, and FIB. IOS-XR has RPs (route processors) which allow for fault tolerance. Processes can be distributed among the multiple RPs on the system.

Package management is modular. Features such as multicast and MPLS can be installed in separate packages, allowing these features to be enabled and disabled while the router is in service. The 32-bit version uses PIE-based software packages, while the 64-bit version uses RPM packages that you may be familiar with in Linux. PIE stands for Package Installation Envelope.

Further Reading

https://meelaz.medium.com/using-cows-to-explain-the-differences-of-the-cisco-operating-systems-876d14145827

https://en.wikipedia.org/wiki/Cisco_IOS_XE

https://networklessons.com/cisco/ccie-routing-switching-written/introduction-cisco-ios-xe

https://www.packetcoders.io/what-are-the-key-differences-between-cisco-ios-and-ios-xe/

https://en.wikipedia.org/wiki/Cisco_IOS_XR

Cisco IOS XR Fundamentals, Ch. 1

Last updated