您的位置:首页 > 其它

软件资源管理模式(1)

2015-01-13 20:53 267 查看

软件资源的定义:

资源是一种实体,对于任何计算机系统(智能系统),使用的申请都受到一定的限制。如内存资源、IO资源及CPU资源等等。在我们熟知的系统中如Linux、window、mac&Android等系统内核都对这些资源做了各种管理机制。

这里我们讨论的资源主要是软件实体中内存、同步原语、文件句柄、网络连接、安全令牌、数据库会话和分布式服务等(参见E.Wolff:Server Component Patterns - Component Infrastructures Illustated with EJW)

资源到底是什么,其实没有明确的定义。例如在软件系统中,图像通常被视为资源,也有更精确的说法:它在被处理的时候(占用内存)才是资源。也就是说软件系统中的资源往往具有生命周期。

对资源的分类有很多种,最简洁的方式是将其分为可重用用的和不可重用的。通常从资源提供方那里获取的资源,使用完后还给提供方,这种资源被释放后可以被其他使用者再次使用。如内存,有操作系统分配,使用后立即被还给操作系统,再如文件句柄和线程。可重用的资源是资源的重要种类。不可重用的资源如计算机网格的时间被用掉了,就没有了(参加Grid Computing Info Centre,http://www.gridcomputing.com,2004)。还可以根据访问和使用方式对资源进行分类。资源获取后要么可以供多个用户同时使用,要么只能供一位用户使用,可以供多个用户同时使用的包括服务、队列和数据库。如果多个用户都有资源写权限,那么需要对资源进行同步。相反则不用同步。如J2EE
EJB(SUN Microsystem,Java2 Enterprise Edition).应用程序会话bean是一种不需要同步的资源,二网络套接字是一种需要同步的资源。供多个用户使用的资源,每个用户不需要显示的获得资源,可以是引用或者是其他的。相反资源仅仅可以被某一个用户使用,被称为独占式资源。典型的独占式资源就是服务的时间。

设计高效的资源管理系统要考虑下面几个因素

性能:

性能是所有的软件系统的要求:包括低延迟性和吞吐量高。每项操作通常都涉及到众多资源,因此要尽可以的避免不必要的资源获取、释放及访问,因为这些操作都可以带来处理开销和延迟。

可扩展性:

复杂的大型系统通常有很多需要多次访问资源的资源用户。在很多情况下,设计系统时都会考虑用例,例如用户数量。但是随着时间的推移,往往会增加新的需求,进而需要支持更多的用户和更大的传输量。如果系统满足这种要求,这系统时可扩展的。为了实现这个目标,管理资源及其生命周期的方式非常重要。除了同步开销外,获取和释放资源占用的CPU周期最多。除了向上扩展还必须考虑向下扩展。向下扩展指必须要适应更小的系统,使得系统在较少的资源情况下可以运行。

可预测性:

即指系统的行为符合预期,对于重要响应的时间必须是可测的。要实现可预测性,系统必须谨慎管理其资源。进行优化时,不能过度优化导致了可预测性问题。

稳定性:

软件系统的一个重要标是,频繁的使用资源不会导致系统的不稳定。分配和管理资源的方式应确保资源得到有效的利用,并避免因资源不足导致系统不稳定的情况。如果多项资源需要彼此交互或作为某项操作使用,则必须避免因其中一项或多项资源 出现故障而导致系统处资源状态处于不一致的状态。

灵活性

系统的一种常见需求是易于配置和定制。这意味着在编译、初始化或者运行阶段修改各种配置,真正的灵活的系统,留给了用户对资源项灵活配置的需求。

一致性

所有资源的获取、使用、释放都确保软件系统处于一致的状态。具体的说,必须妥善处理管理资源之间的相互依存关系,确保系统的一致性。

资源管理的范畴

如下图所示:涉及到软件的系统的各个层面

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: