Kernel: Remove kernel processes
Kernel can just use raw threads, pretty muchs the only thing that process provides is syscalls which kernel threads of course don't need. Also this makes init process have pid 1 :D
This commit is contained in:
@@ -18,14 +18,14 @@ namespace Kernel
|
||||
BAN::ErrorOr<BAN::UniqPtr<ARPTable>> ARPTable::create()
|
||||
{
|
||||
auto arp_table = TRY(BAN::UniqPtr<ARPTable>::create());
|
||||
arp_table->m_process = Process::create_kernel(
|
||||
arp_table->m_thread = TRY(Thread::create_kernel(
|
||||
[](void* arp_table_ptr)
|
||||
{
|
||||
auto& arp_table = *reinterpret_cast<ARPTable*>(arp_table_ptr);
|
||||
arp_table.packet_handle_task();
|
||||
}, arp_table.ptr()
|
||||
);
|
||||
ASSERT(arp_table->m_process);
|
||||
));
|
||||
TRY(Processor::scheduler().add_thread(arp_table->m_thread));
|
||||
return arp_table;
|
||||
}
|
||||
|
||||
@@ -35,9 +35,9 @@ namespace Kernel
|
||||
|
||||
ARPTable::~ARPTable()
|
||||
{
|
||||
if (m_process)
|
||||
m_process->exit(0, SIGKILL);
|
||||
m_process = nullptr;
|
||||
if (m_thread)
|
||||
m_thread->add_signal(SIGKILL);
|
||||
m_thread = nullptr;
|
||||
}
|
||||
|
||||
BAN::ErrorOr<BAN::MACAddress> ARPTable::get_mac_from_ipv4(NetworkInterface& interface, BAN::IPv4Address ipv4_address)
|
||||
|
||||
@@ -21,14 +21,14 @@ namespace Kernel
|
||||
BAN::ErrorOr<BAN::UniqPtr<IPv4Layer>> IPv4Layer::create()
|
||||
{
|
||||
auto ipv4_manager = TRY(BAN::UniqPtr<IPv4Layer>::create());
|
||||
ipv4_manager->m_process = Process::create_kernel(
|
||||
ipv4_manager->m_thread = TRY(Thread::create_kernel(
|
||||
[](void* ipv4_manager_ptr)
|
||||
{
|
||||
auto& ipv4_manager = *reinterpret_cast<IPv4Layer*>(ipv4_manager_ptr);
|
||||
ipv4_manager.packet_handle_task();
|
||||
}, ipv4_manager.ptr()
|
||||
);
|
||||
ASSERT(ipv4_manager->m_process);
|
||||
));
|
||||
TRY(Processor::scheduler().add_thread(ipv4_manager->m_thread));
|
||||
ipv4_manager->m_pending_packet_buffer = TRY(VirtualRange::create_to_vaddr_range(
|
||||
PageTable::kernel(),
|
||||
KERNEL_OFFSET,
|
||||
@@ -46,9 +46,9 @@ namespace Kernel
|
||||
|
||||
IPv4Layer::~IPv4Layer()
|
||||
{
|
||||
if (m_process)
|
||||
m_process->exit(0, SIGKILL);
|
||||
m_process = nullptr;
|
||||
if (m_thread)
|
||||
m_thread->add_signal(SIGKILL);
|
||||
m_thread = nullptr;
|
||||
}
|
||||
|
||||
void IPv4Layer::add_ipv4_header(BAN::ByteSpan packet, BAN::IPv4Address src_ipv4, BAN::IPv4Address dst_ipv4, uint8_t protocol) const
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include <kernel/Lock/LockGuard.h>
|
||||
#include <kernel/Networking/NetworkManager.h>
|
||||
#include <kernel/Networking/TCPSocket.h>
|
||||
#include <kernel/Process.h>
|
||||
#include <kernel/Random.h>
|
||||
#include <kernel/Timer/Timer.h>
|
||||
|
||||
@@ -42,12 +43,13 @@ namespace Kernel
|
||||
PageTable::Flags::ReadWrite | PageTable::Flags::Present,
|
||||
true
|
||||
));
|
||||
socket->m_process = Process::create_kernel(
|
||||
socket->m_thread = TRY(Thread::create_kernel(
|
||||
[](void* socket_ptr)
|
||||
{
|
||||
reinterpret_cast<TCPSocket*>(socket_ptr)->process_task();
|
||||
}, socket.ptr()
|
||||
);
|
||||
));
|
||||
TRY(Processor::scheduler().add_thread(socket->m_thread));
|
||||
// hack to keep socket alive until its process starts
|
||||
socket->ref();
|
||||
return socket;
|
||||
@@ -63,7 +65,7 @@ namespace Kernel
|
||||
TCPSocket::~TCPSocket()
|
||||
{
|
||||
ASSERT(!is_bound());
|
||||
ASSERT(m_process == nullptr);
|
||||
ASSERT(m_thread == nullptr);
|
||||
dprintln_if(DEBUG_TCP, "Socket destroyed");
|
||||
}
|
||||
|
||||
@@ -620,7 +622,7 @@ namespace Kernel
|
||||
dprintln_if(DEBUG_TCP, "Socket unbound");
|
||||
}
|
||||
|
||||
m_process = nullptr;
|
||||
m_thread = nullptr;
|
||||
}
|
||||
|
||||
void TCPSocket::remove_listen_child(BAN::RefPtr<TCPSocket> socket)
|
||||
@@ -652,7 +654,7 @@ namespace Kernel
|
||||
|
||||
LockGuard _(m_mutex);
|
||||
|
||||
while (m_process)
|
||||
while (m_thread)
|
||||
{
|
||||
const uint64_t current_ms = SystemTimer::get().ms_since_boot();
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include <kernel/Lock/SpinLockAsMutex.h>
|
||||
#include <kernel/Networking/NetworkManager.h>
|
||||
#include <kernel/Networking/UNIX/Socket.h>
|
||||
#include <kernel/Process.h>
|
||||
#include <kernel/Scheduler.h>
|
||||
|
||||
#include <fcntl.h>
|
||||
|
||||
Reference in New Issue
Block a user