Bananymous
00f1f30a08
Kernel: Userspace sets the foreground process and Shell handles ^C
2023-07-28 18:10:36 +03:00
Bananymous
a5813f9ba5
Kernel: TTY now sends SIGINT on ^C to foreground process
2023-07-28 18:10:09 +03:00
Bananymous
5652af3384
Kernel: Mark reading section from StorageDevice as terminate critical
2023-07-28 18:09:35 +03:00
Bananymous
22cd9af8cc
Kernel: Restructure process and thread termination
...
When we want to kill a process, we mark its threads as Terminating
or Terminated. If the thread is in critical section that has to be
finished, it will be in Terminating state until done. Once Scheduler
is trying to execute Terminated thread it will instead delete it.
Once processes last thread is marked Terminated, the processes will
turn it into a cleanup thread, that will allow blocks and memory
cleanup to be done.
2023-07-28 18:06:20 +03:00
Bananymous
a9cf9bceef
Kernel: Rewrite DiskCache
...
We now cache only clean pages since I don't want to think about
syncing the disk later.
2023-07-27 22:22:39 +03:00
Bananymous
6c0f864a6e
Kernel: Locks allow locking after locker is invalid
...
SpinLock and RecursiveSpinLock will now allow locking after the initial
locker is invalid. This allows us to kill threads even if they are holding
internal locks
2023-07-27 18:52:51 +03:00
Bananymous
e4509d9482
Kernel: DiskCache uses are now done without interrupts
...
This allows disk cache to not be invalid state after partial read/write
2023-07-27 18:52:51 +03:00
Bananymous
0f23e1f0f4
Kernel: Scheduler can now check if tid is valid
...
Tid can become invalid if the thread is already terminated
2023-07-27 18:34:06 +03:00
Bananymous
642a6aa4ad
Kernel: Process::exit() unblocks the whole lock before blocking
2023-07-24 22:29:59 +03:00
Bananymous
432c296b7b
Kernel: Implement SYS_GET_PID and SYS_TCSETPGID
...
we don't have consept of process groups yet
2023-07-24 22:29:59 +03:00
Bananymous
b576d373c4
Kernel: TTY now stores foreground process pid
...
this will be process pgid when we have process groups
2023-07-24 22:29:59 +03:00
Bananymous
522aa8e762
Kernel: add Thread::queue_signal()
2023-07-24 22:26:10 +03:00
Bananymous
146802fa4c
Kernel: Scheduler can now block threads based on tid
2023-07-24 22:24:21 +03:00
Bananymous
cc8af25d73
Kernel: remove Semaphore::is_blocked
...
this will not mean anything after semaphores can spuriously wake up
2023-07-24 22:23:13 +03:00
Bananymous
f5f4bf58ad
Kernel: add is_tty() to inode
2023-07-24 22:19:59 +03:00
Bananymous
3784da0d18
Kernel: you can now ask process if it is userspace process
2023-07-23 18:54:10 +03:00
Bananymous
9eb72f4392
Kernel: OpenFileDesctiptor can now return inode of fd
2023-07-23 18:52:33 +03:00
Bananymous
f7bf6d5e62
Kernel: Change signal kernel API
...
return rsp and rip are now stored per thread
2023-07-23 18:33:10 +03:00
Bananymous
adb14ba373
Kernel: Userspace signal handlers are now called one at a time
...
I added a syscall for telling the kernel when signal execution has
finished. We should send a random hash or id to the signal trampoline
that we would include in the syscall, so validity of signal exit can
be confirmed.
2023-07-23 13:34:53 +03:00
Bananymous
7391d91317
Kernel/LibC: add SYS_SIGNAL/signal()
2023-07-21 20:08:13 +03:00
Bananymous
2149cec29f
Kernel: Make signals more POSIX
2023-07-21 20:01:12 +03:00
Bananymous
ad756c36fc
Kernel/LibC: Add SYS_KILL/kill()
2023-07-21 19:27:38 +03:00
Bananymous
b56316e9da
Kernel: Scheduler now sends queued signals
2023-07-21 19:27:10 +03:00
Bananymous
a989c44211
Kernel: Make signals thread specific
2023-07-21 19:00:59 +03:00
Bananymous
217e5f81cc
Kernel: add default signal actions
2023-07-21 18:02:35 +03:00
Bananymous
5f2549b198
BuildSystem: Strip kernel. We will add the map once we use it
2023-07-21 15:47:31 +03:00
Bananymous
dcd4d0daeb
Kernel/LibC: Add bareboness signals
...
You can now call raise() to raise a signal. Signal handlers are
not yet supported, but the handling works :)
2023-07-21 15:45:02 +03:00
Bananymous
faf4220b38
Kernel: kernel memory takes now full pml4e
...
This allows flags to work properly
2023-07-21 13:47:05 +03:00
Bananymous
193ddaa2f6
Kernel: remove PAGE_FLAGS_MASK as that was not correct anymore
...
After I added NXE bit, the flags mask is no longer valid
2023-07-21 12:01:50 +03:00
Bananymous
46eb27883a
Kernel: Don't map kernel executable memory as writable
2023-07-21 11:17:39 +03:00
Bananymous
2db7cdb71e
Kernel: Syscalls now get the interrupt stack
2023-07-21 11:04:16 +03:00
Bananymous
5411c5aa4a
BAN: Fix function call in Optional
2023-07-21 10:57:46 +03:00
Bananymous
f8a1a10897
Kernel: add NullDevice to /dev/null
2023-07-20 00:06:22 +03:00
Bananymous
adbe13938e
Kernel: move Device.h to its own directory
2023-07-19 23:55:38 +03:00
Bananymous
4d5b14753d
Kernel: cleanup sys_exec()
...
We now scope everyting so desctructors get called
2023-07-19 23:20:39 +03:00
Bananymous
ba9fa00947
Kernel: fix memory leak in PageTable
...
PageTable used to leak 2 pages on creation and other two on deletion
2023-07-19 23:17:39 +03:00
Bananymous
98cedf155c
Kernel: FixedWidthAllocator creation can now fail
2023-07-19 18:07:24 +03:00
Bananymous
88e3998664
Kernel: VirtualRange creation can fail
2023-07-19 17:56:26 +03:00
Bananymous
c0c0bbc1bf
Kernel: SYS_FORK can now fail instead of panicing on error
2023-07-19 17:47:12 +03:00
Bananymous
650e1b4fc5
Kernel: Fix bug which made bochs unbootable
...
We could not boot if ATABus did not have valid primary device.
2023-07-13 15:53:09 +03:00
Bananymous
6c1ada8d0a
Kernel: Enable global bit on kernel pages
2023-07-13 15:23:25 +03:00
Bananymous
7d00c2670f
Kernel: Support execute disable bit
...
We will now map executable memory explicitly as executable.
2023-07-13 14:28:53 +03:00
Bananymous
bca7e9a1e8
Kernel: CPUID can detect wether cpu supports nxe bit
2023-07-13 14:24:58 +03:00
Bananymous
3748f0304f
Kernel: Fix multiple bugs with terminal
2023-07-13 13:09:52 +03:00
Bananymous
2576bdbd14
Kernel: Fix ATA disk and partition numbering
2023-07-13 12:12:47 +03:00
Bananymous
e341a36287
Init: Use the new pwd.h api for user parsing
2023-07-13 12:01:41 +03:00
Bananymous
bba09a3cd0
LibC: add getpwname() and getpwuid()
2023-07-13 12:01:16 +03:00
Bananymous
985df3532b
LibC: implement endpwent(), getpwent() and setpwent()
2023-07-13 11:22:09 +03:00
Bananymous
72041a52e8
Kernel: Ext2Inode::create_file actually sets the inode data
...
We used to just create inode without touching its memory.
2023-07-13 10:20:56 +03:00
Bananymous
891144dac1
BAN: Iterators are now single general type with CONST template
...
This allows us to use the same base class for iterator and
const_iterator which were practically the same code.
2023-07-12 13:35:21 +03:00
Bananymous
41e7b53903
BAN: add either_or and either_or_t
...
This allows you to select type depending on constexpr evaluatable
boolean
2023-07-12 13:34:31 +03:00
Bananymous
6b0920e8c0
BAN: Implement ConstIteratorDouble and add it to HashMap
...
This is same as IteratorDouble except it uses const_iterator and does
not return non-const references.
2023-07-12 11:41:05 +03:00
Bananymous
4285729d5c
BAN: Generalize HashMapIterator to IteratorDouble
...
This iterator should be able to iterate any container within container
with type iterator defined.
This also fixed bug if first entry in outer container is empty container.
2023-07-12 09:29:05 +03:00
Bananymous
a9c10d0751
Base: add empty directories with .gitkeep to base/
2023-07-11 08:02:28 +03:00
Bananymous
74c79c7eff
Kernel: Rewrite whole device structure
...
We now have DevFileSystem which is derived from RamFileSystem. All
devices are RamInodes. We don't have separate DeviceManager anymore.
To iterate over devices, you can loop througn every inode in devfs.
2023-07-10 23:17:14 +03:00
Bananymous
9174a89971
BAN: Add iterators to HashMap
2023-07-10 23:16:41 +03:00
Bananymous
5c94a583bc
Userspace: add basic 'touch' command
2023-07-10 16:38:15 +03:00
Bananymous
6e1fc2766f
tee: indent with tabs
2023-07-10 16:18:08 +03:00
Bananymous
d3bb00cb55
Userspace: Add basic tee command
2023-07-10 16:07:53 +03:00
Bananymous
5a5656b2d3
Kenrel: RamInode now implements truncate()
2023-07-10 16:07:09 +03:00
Bananymous
1a1e584cba
Kernel: OpenFileDescriptors can now store more than 8 bits of flags
2023-07-10 16:06:36 +03:00
Bananymous
65fa05f998
Kernel: add O_TRUNC
...
this is not supported by anything yet
2023-07-10 15:48:18 +03:00
Bananymous
2276fc95b8
Kernel: creat() mode now has to be access mode
...
We provide the S_IFREG in creat
2023-07-10 15:34:41 +03:00
Bananymous
1e173c178d
Kernel: Ext2 fill now return ENOTSUP on write
...
We used to crash the kernel
2023-07-10 15:34:25 +03:00
Bananymous
773747cf9c
Kernel: O_APPEND is now supported
2023-07-10 15:11:27 +03:00
Bananymous
4972284dde
Kernel: open() and openat() now take mode as parameter
...
O_CREAT now tries to create file if O_CREAT is specified
2023-07-10 15:08:54 +03:00
Bananymous
45789fda08
Kernel: You can now read/write to RamInodes
...
RamFS should be stored on physical pages and not in kmalloc, but
that will be implemented later :)
2023-07-10 14:09:35 +03:00
Bananymous
3b5bc63d1b
Kernel: Inode::create_file() now takes uid and gid as parameters
2023-07-10 13:32:10 +03:00
Bananymous
f1089e2b8a
Kernel: start work on ram file system
2023-07-10 13:26:14 +03:00
Bananymous
6d93c1eb92
LibC: add NAME_MAX to limits.h
...
This is defined to 255 which is _XOPEN_NAME_MAX, smallest value
for XOPEN compliance
2023-07-10 11:48:11 +03:00
Bananymous
363c325c79
Kenrel: Fix inode comparison
...
We should not compare rdevs
2023-07-10 11:48:11 +03:00
Bananymous
583504ebe0
Kernel: Inode rename directory functions
2023-07-10 11:48:11 +03:00
Bananymous
b354b77f8b
Kernel: Mark Ext2 classes final
2023-07-10 11:48:11 +03:00
Bananymous
74af46cb4a
BAN: RefPtr can be constructed from other types
2023-07-10 11:48:11 +03:00
Bananymous
19dab08275
Kernel: add more functionality to PCI
2023-07-09 23:04:11 +03:00
Bananymous
3840fbf957
Kernel: Edit lock scopes and make string copy able to fail
2023-07-07 23:12:19 +03:00
Bananymous
78c091f7f8
Kernel: Move open file descriptors to their own class
...
This simplifies code a lot :)
2023-07-07 23:11:37 +03:00
Bananymous
274ecbba78
LibC: limits.h now defined OPEN_MAX
2023-07-07 23:08:49 +03:00
Bananymous
683c2a68cd
Shell: $(...) expansion works now :)
2023-07-06 23:22:57 +03:00
Bananymous
ad98181069
Shell: you can call Shell -c ... to invoke the shell as interpreter
2023-07-06 23:22:49 +03:00
Bananymous
a549336530
Kernel/LibC: add basic dup2
2023-07-06 23:17:54 +03:00
Bananymous
4eb95c963d
Kernel/LibC: Add basic pipe() syscall and command
...
You can now create pipes :)
2023-07-06 22:16:26 +03:00
Bananymous
22caacd2a9
LibC: add read() and write() to unistd
2023-07-06 22:15:55 +03:00
Bananymous
af30d537da
Kernel: TTY now unblocks semaphore after read
...
This allows concurrent reads not fully reading the buffer not block
indefinately.
2023-07-06 21:32:34 +03:00
Bananymous
f1bd26fb92
Kernel: Add O_CLOEXEC
2023-07-06 20:00:33 +03:00
Bananymous
5c6bbcb62f
Kernel: Remove spammy process/thread exit printing
2023-07-06 10:34:46 +03:00
Bananymous
21bd87bb07
Userspace: Shell now has 'env' for printing environment
2023-07-06 10:32:43 +03:00
Bananymous
79450df04c
Userspace: Shell imporove 'time' command
2023-07-06 09:45:04 +03:00
Bananymous
7f8b7b811e
Userspace: Shell now has time builtin
2023-07-06 00:39:04 +03:00
Bananymous
3c068aa0ae
Kernel/LibC: add clock_gettime() for CLOCK_MONOTONIC
...
This gets the number of milliseconds since boot
2023-07-06 00:38:29 +03:00
Bananymous
86df258365
Kernel: rework the whole PageTable structure
...
We now have page table structure for kernel memory which is shared
between all processes.
2023-07-05 23:41:35 +03:00
Bananymous
d99e704728
LibC: Fix syscall SYS_READ and SYS_WRITE arguments
2023-06-19 10:38:29 +03:00
Bananymous
0d620f3e0f
Kernel: Rewrite and optimize DiskCache
...
DiskCache now consists of PageCaches which are caches of contiguous
sectors. This allows the disk cache to be ordered and faster traversal.
We seem to have a problem somewhere during reading. The stack gets
corrupted.
2023-06-19 10:31:47 +03:00
Bananymous
4dce0f9074
Userspace: u8sum fix error message
2023-06-19 10:31:23 +03:00
Bananymous
54f89cba33
Userspace: Shell now processes $ arguments
2023-06-19 01:39:24 +03:00
Bananymous
de88f60d1a
Userspace: Shell argument parsing now appriciates quotes
2023-06-19 01:07:00 +03:00
Bananymous
f7060970e6
Userspace: Shell argument parse now results in BAN::String
2023-06-19 00:34:44 +03:00
Bananymous
e7a98ac6cc
Userspace: Shell now sets SHELL environment variable
2023-06-18 23:35:51 +03:00
Bananymous
10544db52e
LibELF: We use BAN::Vector<uint8_t> as elf storage
...
This is made possible by the dynamic kmalloc
2023-06-18 23:29:23 +03:00
Bananymous
5e123031aa
Kernel: kmalloc has now somewhat dynamic storage
...
Allocations bigger than PAGE_SIZE and those not forced to be identity
mapped are now done on a GeneralAllocator. This allows us to use kmalloc
for big allocations; bigger than the fixed 1 MiB storage.
This is still a hack and the whole kmalloc will have to be rewritten at
some point, but for now this does the job :D
2023-06-18 23:27:00 +03:00