c-有可能通过让linux内核运行java代码来制作一个操作系统吗



我一直有让内核运行java代码的想法,所以后端是在c和assembly上实现的,前端是在java上实现的?如果是,我在哪里可以找到Linux内核的源代码?

如果您想在内核中运行Java代码,那么就必须实现像模块一样嵌入的JVM,或者通过使驱动程序依赖于JVM来从驱动程序中启动Java程序。这似乎不是一个好主意,因为它通常会以依赖性方面非常脆弱的系统、非常沉重的映像和内核空间中的混合责任而结束。

您可能弄错了内核空间、init序列和用户空间。根据你的描述";所以后端是在c和assembly上制作的,前端是在java上制作的"似乎更可能的是,您希望将一些java程序作为SysVInit/systemd服务运行,这些服务为用户提供操作系统的接口,而不是作为内核的一部分。

当这样做时,init管理器将级联运行来自分发的所有必要服务,在内核初始化自己、文件系统、虚拟内存等之后,为它们提供适当的资源和权限,。。。以及硬件。

将java程序作为systemd服务运行非常容易(也可以从SysVInit运行(。从一个简单的单元服务,

[Unit]
Description=Hello Service -- A Service.
# Before and after directives go in this section. 
# Example for waiting for the network to start the service:
# After=network.target
[Service]
User=user
Group=group
ExecStart=/path/to/start.sh
ExecStop=/path/to/stop.sh
Type=forking
[Install]
WantedBy=default.target

您只需要根据软件的权限设置适当的用户和组,然后从start.sh启动Java程序,从stop.sh停止它,在那里您可以设置Java命令行、环境变量和检查。

确保您使用nohup启动Java程序,以避免干扰systemd及其日志:

#!/bin/bash
nohup java -cp /opt/hello:/opt/hello/* com.package.hello.Start > /tmp/hello.out 2>&1 &

也许你想检查SysVInit,因为它通常更轻,但我希望这个答案能给你一些想法。

相关内容

最新更新