在操作系统中使用Java而不是 C 的比较
Java是一种提供内存安全的托管语言。
在Java,指针不存在,所以我们不能对函数指针进行指针运算。应用程序可以通过类对象调用类中定义的方法。在Java,我们不能对对象进行不安全的类型转换以用其他东西覆盖方法指针。在Java,越界数组访问会引发运行时异常,因此不可能出现返回地址损坏。
现在,让我们看看通过Java实现的操作系统的一些重要方面。
- 内存隔离:
在Java,内存只能通过对象访问。 Java应用程序无法访问对象外的内存。虚拟内存没有抽象到应用程序。由于这些原因,我们不需要额外的硬件支持(分段/页表)来进行进程分配。不需要页表或特权环。内核本身是一个Java进程,因此内核和不受信任的应用程序都在 ring-0 中执行。 - 系统调用:
要执行系统调用,我们需要切换到内核进程。切换到不同的进程不需要页表切换。因此,系统调用处理程序只是一个上下文切换例程,它在内核地址空间中复制系统调用参数并直接跳转到系统调用处理程序。 - 进程间通信(IPC):
IPC 类似于系统调用处理程序。上下文切换方法需要在复制消息后调用目标进程中的接收例程。因此,与 Linux 和 Windows 相比,这更好,在 Linux 和 Windows 中,我们必须进行两次环转换和一次上下文切换来调度目标例程。 - 设备驱动程序:
每个设备驱动程序都可以分配给一个单独的Java进程。设备驱动程序可以通过系统调用与内核对话。但是,现有的操作系统不是用Java编写的。这是因为, Java不是一种高效的语言,特别是由于垃圾收集会导致任意延迟。
因此所有的操作系统都广泛使用 C 语言而不是Java。