Contur 2
Educational OS kernel simulator
Loading...
Searching...
No Matches
io_manager.h
Go to the documentation of this file.
1
3
4#pragma once
5
6#include <memory>
7
9
10namespace contur {
11
12 class DeviceManager;
13 class IFileSystem;
14
16 class IoManager final : public IIoManager
17 {
18 public:
20 IoManager(IFileSystem &fileSystem, DeviceManager &devices);
21
23 ~IoManager() override;
24
25 IoManager(const IoManager &) = delete;
26 IoManager &operator=(const IoManager &) = delete;
27 IoManager(IoManager &&) noexcept;
28 IoManager &operator=(IoManager &&) noexcept;
29
31 [[nodiscard]] Result<void>
32 registerFile(RegisterValue resourceId, std::string path, IoResourceKind kind) override;
33
35 [[nodiscard]] Result<void>
36 registerSocket(RegisterValue resourceId, std::size_t capacity, IoResourceKind kind) override;
37
39 [[nodiscard]] Result<IoDescriptor> open(RegisterValue resourceId, IoResourceKind kind, OpenMode mode) override;
40
42 [[nodiscard]] Result<void> close(IoDescriptor fd) override;
43
45 [[nodiscard]] Result<RegisterValue> read(IoDescriptor fd, ProcessId pid) override;
46
48 [[nodiscard]] Result<void> write(IoDescriptor fd, RegisterValue value) override;
49
51 void setWakeCallback(IoWakeCallback callback) override;
52
53 private:
54 struct Impl;
55 std::unique_ptr<Impl> impl_;
56 };
57
58} // namespace contur
Registry and dispatcher for I/O devices.
Abstract file-system interface.
Kernel I/O manager interface.
~IoManager() override
Destroys the manager.
void setWakeCallback(IoWakeCallback callback) override
Sets the wake callback invoked when I/O becomes ready.
std::unique_ptr< Impl > impl_
Definition io_manager.h:55
Result< void > close(IoDescriptor fd) override
Closes a kernel I/O descriptor.
Result< void > registerFile(RegisterValue resourceId, std::string path, IoResourceKind kind) override
Registers a file resource ID to a filesystem path.
IoManager & operator=(const IoManager &)=delete
IoManager(const IoManager &)=delete
Result< IoDescriptor > open(RegisterValue resourceId, IoResourceKind kind, OpenMode mode) override
Opens a resource and returns a kernel I/O descriptor.
Result< void > registerSocket(RegisterValue resourceId, std::size_t capacity, IoResourceKind kind) override
Registers a socket resource ID.
Result< RegisterValue > read(IoDescriptor fd, ProcessId pid) override
Reads one value from the descriptor.
IoManager(IoManager &&) noexcept
IoManager(IFileSystem &fileSystem, DeviceManager &devices)
Constructs an I/O manager bound to filesystem and device registry.
Result< void > write(IoDescriptor fd, RegisterValue value) override
Writes one value to the descriptor.
A result type that holds either a success value of type T or an ErrorCode.
Definition error.h:104
IIoManager interface for unified file/socket I/O.
Definition block.h:15
std::uint32_t ProcessId
Unique identifier for a process.
Definition types.h:12
OpenMode
Open mode bit flags.
IoResourceKind
Resource kinds supported by the kernel I/O layer.
Definition io_types.h:31
std::int32_t RegisterValue
Value stored in a CPU register.
Definition types.h:21
std::function< void(ProcessId)> IoWakeCallback
Callback used to wake a blocked process when I/O becomes ready.
Unified descriptor handle returned by the kernel I/O layer.
Definition io_types.h:12