本节书摘来自异步社区《Cisco IOS XR技术精要》一书中的第1章,第1.3节,作者 【美】Mobeen Tahir , Mark Ghattas , Dawit Birhanu , Syed Natif Nawaz,更多章节内容可以访问云栖社区“异步社区”公众号查看
1.3 操作系统概念
Cisco IOS XR技术精要
计算机系统,包括路由器之类的嵌入式系统,都会带有一个负责向应用提供服务的操作系统。操作系统还提供了协调进程活动和访问硬件资源(如内存、网络接口、硬盘)等重要功能。图1-1给出了操作系统、应用,以及硬件资源之间的逻辑关系图。
操作系统基本功能
操作系统为应用提供了多种多样的服务。可提供的基本功能包括进程调度、中断处理、内存管理、进程间通信,以及常见例行程序(常见库)。本节将对操作系统的这些基本功能做更详细的介绍。
1.进程调度
所谓进程(process),是指在具有执行多程序实例能力的系统上运行的软件程序执行实例。一个程序可并发生出多个进程。在一个多任务处理的操作系统上,多个进程可以分时请求CPU资源,使用户感觉多个进程是同时进行处理的。在多任务处理系统中,进程很可能需要在完成其当前任务之前交出对CPU的控制。
在协同多任务处理(cooperative multitasking)系统中,进程只有在完成执行任务或等待任务事件时才会主动地交出CPU控制权。这可能会导致其他进程在等待当前进程执行完毕的期间造成CPU饿死。
另一方面,抢占多任务处理(preemptive multitasking)系统中,当前运行的进程有可能会被强制交出CPU控制权。这种行为被称为抢占(preemption),有可能发生在高优先级进程准备就绪或当前进程已经运行满一定的时长的情况下。
当操作系统对进程进行抢占时,在向其他进程交出控制权之前保留进程状态是非常重要的,这样可以保证进程在重获CPU控制权时可以恢复之前的操作。内容交换(context switching)机制可以使进程在被抢占和重获控制的时候执行保存和恢复操作。
大多数今天的操作系统支持并发运行同一进程的多个实例,这种类型的操作系统被称为多线程(multithread)系统。线程是进程中的最小执行单元。
2.中断处理
中断(interrupt)是一种从硬件或软件发出的信号,用来指示CPU必须立刻进行处理。中断行为会导致操作系统挂起当前运行进程,转而去处理新的例行程序或进程。运行着的进程同样可以执行一个中断指令并触发中断处理例行程序的内容交换行为。当运行重要例行程序时,操作系统会阻止某些中断操作直至重要例行程序处理完毕。这种功能叫做中断屏蔽(interrupt masking)。
3.内存管理
操作系统负责管理全部的系统内存,包括对进程的内存分配,以及确保进程不会损坏分配给其他进程的内存数据。内存保护(memory protection)机制用来阻止进程去访问未分配给自身的内存空间。使用内存保护功能,每个进程各自运行在自身的内存空间中。某个进程的缺陷或针对某个进程的恶意攻击不会影响到其他进程。
在支持内存保护功能的操作系统中,进程间某些形式的通信可以使用共享内存(shared memory)来得到更好的处理。所谓共享内存,指的是可以由多个进程访问的内存资源。操作系统在共享内存区域执行读或写操作的进程之间提供了差异同步机制。
在单片式操作系统(monolithic operating system)中,所有进程共享相同的地址空间,而且不提供进程间的故障隔离机制。单片式系统具有更短的CPU周期,这是因为在内存访问、进程间通信、内容交换方面,单片式系统具有更低的负载,这适用于CPU资源密集和带有少量代码的简单系统场景中。
在支持内存保护功能的操作系统中,OS进程负责管理其他进程、内存以及其他被称为内核(kernel)的系统资源,因此这种OS也常被叫做基于内核的操作系统(kernel-based OS)。内核也可以包含其他服务,取决于其实现方式。内核运行在系统外的单独内存空间中,并且保护其不受内核外的其他进程引起的内存数据损坏。
非内核进程中的故障不会影响到内核以及其他进程。不过,内核进程中的故障将会影响所有应用。在微内核(microkernel)系统中,仅有关键性的核心OS服务被放置在内核中。所有其他服务,包括设备驱动器和网络驱动器,都被放置在自身所属的地址空间中。这种系统具有优秀的弹性,因为设备或网络驱动器内的故障将会自行控制而不会影响到内核或其他应用。设备和网络驱动器也可以在不重启整个系统的条件下完成单独重启。
4.同步
当多个应用同时运行并试图访问某个资源(例如硬盘)时,确保维护数据的完整性和资源的公平分配是非常重要的。网络操作系统可提供多种机制来同步事件和资源访问。
5.进程间通信
由于许多进程不能使用内存来交换数据,因此运行在独立的的地址空间中。操作系统为这些进程提供了进程间通信(IPC)机制。IPC通信同样可以在运行于主RP上的进程和运行于设备不同组件中的进程之间使用,包括线卡和电源。
6.动态链接库
多个应用使用一组常用例行程序的例子是很常见的。当这些应用各自运行在受保护的内存地址空间中时,常用例行程序将在每个地址空间中被复制一次,这将造成内存空间的浪费。为了避免这种问题的发生,操作系统提供了一种共享常用例行程序的机制,称作动态链接库(DLL)或Libc(C标准库)。该机制允许OS仅将活动库加载进设备内存,并启动不同的进程来共享相同的库。这是一种健壮的错误控制和软件模块化机制。该机制还可允许常用代码在不同应用之间进行共享。
7.可移植操作系统接口
可移植操作系统接口(POSIX)是一套用来规定内核API、线程接口、内核应用等技术的IEEE规范。POSIX还定义了一致性测试程序组。通过了测试程序的操作系统将被称为POSIX一致OS。遵循POSIX规范的OS被认为具有高度的灵活性,并可以为日后的特性或应用部署提供最大的可移植性。一款基于POSIX OS规范开发的应用程序可以方便、轻松地移植到另一台符合POSIX规范的OS上。