内核对象和C#对象之间的区别?

时间:2010-01-01 22:27:05

标签: object kernel

在C#或C ++中,我们有对象,内存中存在的类的实例。内核也有对象,比如中断对象。我想知道这些内核对象是否可以被认为是我们C#或C ++程序员的对象?

3 个答案:

答案 0 :(得分:2)

简短的回答是'是'。物体是一种心态。您可以使用几个宏或PL / I,C或C ++以汇编语言组织对象。有些人可能会坚持认为,如果没有对对象进行某种绑定,它就不是一个对象。好吧,内核/ C对象模型使用函数指针来完成,更多地手动完成C ++,C#或Java等语言。

毕竟,什么是'对象'?

答案1:对一些相关项目进行分组的任何数据块。任何c struct。有些人会喋喋不休地坚持......

答案2:数据和函数的组合,使代码“调用”对象,结果取决于对象创建者设置的条件。因此,在C ++或C#或Java中,存在继承。代码调用SomeObject.someFunction(),发生的情况取决于继承图,它由对象作者控制,而不是由调用者控制。

在内核中,在更新世时代,当我们中的一些人学习编程时,我们使用函数指针使用更简单的语言或多或少完成同样的事情。也就是说,存储对函数的引用的结构中的槽。调用者调用someobject.throwAnEgg,实际发生的事情取决于`throwAnEgg'中的函数指针。

答案 1 :(得分:1)

我认为这应该被标记为主观的,因为答案会有所不同,反映个人对事物的个人看法。

我的看法是......

当你谈论低级别的东西时,有时候,更容易将OOP的视角引入其中,以便更容易地传达内核级别发生的概念

...但是...

我宁愿更倾向于谈论低级螺母和螺栓,因为通过锤击它可以很容易地解决螺母和螺栓的复杂性,而不是根据物体进行交谈和思考,因为它是设计和制作复杂的事情听起来很简单,并在代码经济方面让自己陷入虚假思考。

例如,从内核的角度来看,TSS(任务状态段)是一种用于在发生任务切换之前保持寄存器的结构(这是基于处理器切换到32位并启用了分页)等等)。如果你谈论OOP方面,即一个任务选择器对象,这听起来不对,因为你真的在谈论一个高级别的方面,它是一个实际的细节,看看英特尔80386程序员的手册,并提供TSS,第13章 - 保护模式多任务,文档24143004.pdf中的第13.1节可供下载here

如果从高级编程方面谈论高级,那么定义OOP范例会更容易。

所以,回到你的问题,从内核方面来说,如果你愿意,你可以从一个简单而具体的OOP术语谈起,但是,它会让你想到必须付出额外的努力来编码遵循OOP范式,这可能会或最终会产生错综复杂的代码。

答案 2 :(得分:0)

如果您正在阅读的书是关于Linux的,那么您可能正在寻找kobject,这只是一个支持Linux驱动程序模型的抽象。但一般而言,任何与某些行为(如函数集,宏等)相关联的数据都可称为对象。对于像C#或C ++这样的OO语言中的对象的或多或少的正式定义,这是非常宽松的。