2015-12-17 17:04:28 587浏览
iOS操作系统主要完成两个功能:硬件抽象和资源管理。硬件抽象给iOS软件开发者提供一个接口,这个接口在计算机硬件与他们的应用程序之间。有了这样的接口,iOS软件开发者就不用再关心硬件的复杂性。实际上对硬件的编程只需一次(在操作系统内部),然后大家都可以共享。操作系统完成的第二个功能是管理计算机的资源(包括:CPU周期、存储器、磁盘空间等)。
通过操作系统的有效管理,这些资源就可以被各种应用所共享。像硬件抽象功能一样,在操作系统内部构造一个资源管理体系,从而每一个应用的iOS开发者都不必再为自己的程序编写资源管理代码。本文主要为大家介绍一下iOS系统中CPU资源管理和多任务的具体操作。
CPU资源管理和多任务
虽然一些操作系统在同一时刻只允许一个程序运行(例如:MS.DOS的许多版本都是如此),现在也很容易发现许多操作系统也可以在同一时刻管理多个程序。在同一时刻运行多个程序称为多任务,而支持多任务的操作系统一般称之为多任务操作系统。为多任务操作系统编写的应用程序通常包括多个能在同一时刻运行的、独立的任务。这些小的子程序一般称之为线程,因为它们组成了一个程序内的单线指令序列。每个线程都含有自己的一个CPU寄存器的集合,称为上下文(Context),线程也能和同一程序内部的其他线程共享存储地址空间。一组共享相同的地址空间、为完成同一个任务且一起控制一组操作系统资源的线程称为一个进程(Process)。在支持虚拟存储的操作系统和CPU中,每一个进程都在各自独立的地址空间运行,它们的地址并不交叉。
因为一个处理器在同一时刻只能运行一个程序的指令,操作系统必须判断某一时刻应该执行哪一个程序的指令集合(哪一个线程)。决定究竟该执行哪个进程的机制称为调度(Scheduling),这通常由操作系统的一部分核心程序来完成,称之为内核(kernel)。根据操作系统所采用的优化方式的不同,操作系统可以使用不同的线程调度策略。不同的应用(批处理、交互、事务性、实时及其他类型的应用)拥有不同的CPU使用特性,同时这些应用的整体性能也受所采用的调度策略影响。
最简单的调度策略就是根据每一个线程请求处理的先后来分配处理器,先来的先用,直至执行完一个再执行下一个,这种方法也称为FIFO(先进先出)直至运行完调度。FIFO的优点是:它比较容易实施,开销非常低,而且比较公平一一所有的线程都是平等的,先来的先服务。关于多任务线程抢占不了解的读者可以观看扣丁学堂iOS实战课程视频或是阅读iOS扣丁资讯。
这种调度方法比较适合于批处理应用以及一些需要顺序处理,而且处理完马上就会结束的事务性应用。但是它不适合于交互性和实时性的应用。因为交互性应用需要很快的被调度,对CPU需求周期也比较短,只有这样它才能很快地把执行结果及时反馈给用户或服务于其他外部设备。
对于这些类型的应用,一个可行的解决方法就是赋于每一个线程不同的优先级。对于那些急需访问CPU的线程,比如实时应用的线程,赋于较高的优先级;而对于哪些不太关键的线程,比如批处理应用的线程,赋于较低的优先级。具有高优先级的线程可以跳到任务队列的头部,迅速地访问CPU。如果有几个相同优先级的线程同时到达,则按它们到达的顺序调度(就像基本的FIFO策略),这种调度机制就称为直至运行完带有优先级的调度。
虽然这种调度策略比基本的FIFO有所改进,但它有一个不足,这种方法很容易使某一个线程长期独占CPU,从而不太适合于交叉的或实时的应用。具有高优先级的线程可能会一直等在一个已经开始运行、优先级比较低的线程后面,直至它运行完。要解决这个问题,一个可行的方法就是暂时挂起(Suspend)或抢占(Preempt)一个正在运行的线程,从而其他的线程可以使用CPU。
下一篇文章我们将会介绍iOS操作系统中多任务线程抢占的优点,详情请关注扣丁学堂资讯实时更新。同时欢迎大家免费观看扣丁学堂iOS在线教程视频学习。