首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >操作系统内核是单例的吗?

操作系统内核是单例的吗?
EN

Software Engineering用户
提问于 2018-08-14 01:54:54
回答 3查看 832关注 0票数 1

据我理解,单例设计模式是指系统中只有一个对象的实例。

我不确定这部分的定义,但我相信在操作系统只有一个运行内核在监督模式。

因此,说OS内核是一个单例是正确的吗?

EN

回答 3

Software Engineering用户

发布于 2018-08-14 03:00:27

不是的。Singleton是面向对象编程的模式。大多数操作系统都不是这样设计的。事实上,很少有操作系统在内核中使用面向对象的编程。Linux以不自觉地使用C++ (面向对象)和坚持C(过程)而闻名。

即使您认为操作系统内核只是其中之一,而您只想要一个操作系统内核,那么虚拟化的整个概念就会让它发人深省。虚拟机在同一硬件中承载其他内核。然后,当您谈到容器化时,您的操作系统中包含了其他内核。

老实说,作为模式的单例应该是使用最少的模式之一--即使您只想在应用程序中使用其中之一。静态访问器可以使看似不相关的代码相互耦合,间接使用它们。

当您停下来考虑内核到底是什么时,您会发现Singleton模式离正确的理解更远。内核提供了许多功能,但它本身就是一个API。

内核:

  • 管理资源
  • 调度进程的线程和执行时间
  • 切换当前正在运行的进程的上下文
  • 管理加载应用程序的内存和控件。
  • 管理所有设备(磁盘、图形、声音等)的I/O。

许多内核为设备驱动程序定义了API (实际上设置寄存器和从设备中移动数据的代码),并为应用程序提供了一致的API以供使用。最终的结果是,您的应用程序不必仅仅因为您有了一个新的显卡就需要重写。

如果您要尝试将面向对象的概念引入内核的世界,更好的模式应该是接口、适配器和其他一些。但是没有一种模式可以说代表内核,因为内核要复杂得多。

票数 10
EN

Software Engineering用户

发布于 2018-08-14 12:02:01

单例设计模式确保只有一个类的对象实例。因此,除非您用面向对象的编程语言开发内核类,否则它不是单一的。

然而,辛格尔顿的概念不仅仅是一个设计模式:它是一个包含一个元素的集合。

根据此定义,如果考虑执行代码的活动状态集,则可以将os微核视为单例状态,因为它只有一个活动状态(虚拟内存映射、调度程序管理的进程列表等)。在任何时候。如果多个进程运行相同的代码,则所有其他程序或服务可能具有多个活动状态。

票数 4
EN

Software Engineering用户

发布于 2018-08-14 05:06:34

对我来说,Singleton本身并不是一个类型本身的特性,而是它的使用方式。当您以IKernel::Instance()的形式访问内核时,它就是一个Singleton。当您从调用方获得它作为IKernel类型的参数时,那么它不是Singleton,即使实际上您的程序中从来没有几个内核对象。

正如其他答案所述,它更多地是关于面向对象的代码--这是获取对象的一种方法,它同时具有方法实现和方法应该使用的内部状态。但是,如果您有"OOP in C“(它使用函数指针的结构作为对象),那么您可以有一个"Singleton”get_kernel(),它返回这样的对象。

票数 3
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/376813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档