Commit Graph

486 Commits

Author SHA1 Message Date
Jonas 'Sortie' Termansen 37a4c8f05e Add fchdir(2). 2013-12-17 14:30:25 +01:00
Jonas 'Sortie' Termansen 7dd59dd2e0 Add mkdirat(2). 2013-12-17 14:30:25 +01:00
Jonas 'Sortie' Termansen caf4a1f2c5 Add faccessat(2). 2013-12-17 14:30:25 +01:00
Jonas 'Sortie' Termansen 835f0d5fbc Add unlinkat(2). 2013-12-17 14:30:25 +01:00
Jonas 'Sortie' Termansen 8e50f3d76b Add dup2(2). 2013-12-17 14:30:25 +01:00
Jonas 'Sortie' Termansen 49fe4aa51f Add link(2). 2013-12-17 14:30:25 +01:00
Jonas 'Sortie' Termansen 2389a834b5 Add chown(3). 2013-12-17 14:30:25 +01:00
Jonas 'Sortie' Termansen a11439bc87 Add chmod(2). 2013-12-17 14:30:24 +01:00
Jonas 'Sortie' Termansen 1444683ea8 Refactor kernel VFS.
Note: This is an incompatible ABI change.
2013-12-17 14:30:24 +01:00
Jonas 'Sortie' Termansen 945c769daf Fix ^C not clearing the line buffer. 2013-12-17 14:30:24 +01:00
Jonas 'Sortie' Termansen 90036ca6a8 Update copyright headers of old files to the current format. 2013-12-17 14:30:23 +01:00
Jonas 'Sortie' Termansen eb5be61d20 Fix trailing blank lines. 2013-12-17 14:30:23 +01:00
Jonas 'Sortie' Termansen 7eb9e3c33f Refactor Sortix build system and de-autoconf mxmpp. 2013-12-17 14:30:22 +01:00
Jonas 'Sortie' Termansen f72969a662 Add sigset_t. 2013-09-24 17:09:49 +02:00
Jonas 'Sortie' Termansen bf2c624c9b Add struct timespec. 2013-09-24 17:09:49 +02:00
Jonas 'Sortie' Termansen 3c821cb4a1 Make sys_memstat arguments optional. 2013-09-24 17:09:48 +02:00
Jonas 'Sortie' Termansen 0095983c80 Add dispmsg_issue(2). 2013-09-24 17:09:48 +02:00
Jonas 'Sortie' Termansen b380dd49c1 Add useful functions to <sortix/kernel/video.h> API. 2013-09-24 17:09:48 +02:00
Jonas 'Sortie' Termansen b0c01f2c6a Make Memory::Lookup return false on unmapped pages. 2013-09-24 17:09:48 +02:00
Jonas 'Sortie' Termansen a685a9d68f Fix kernel thread frame pointer base case. 2013-09-24 17:09:47 +02:00
Jonas 'Sortie' Termansen 5ad26d68a3 Add OFF_MIN and OFF_MAX. 2013-09-24 17:09:47 +02:00
Juhani Haverinen 7c85b4a057 Add support for right shift in US keyboard layout 2013-09-24 17:09:47 +02:00
Jonas 'Sortie' Termansen dc4ef04e7c Add assembly file symbol sizes. 2013-09-24 17:09:47 +02:00
Jonas 'Sortie' Termansen 8a7a0db8c7 Add missing rdx register to x86_64 register dump function. 2013-09-24 16:52:29 +02:00
Jonas 'Sortie' Termansen 89118947ed Fix Sortix::Scheduler::ExitThread not being noreturn. 2013-09-24 16:52:29 +02:00
Steve Dougherty af2d8cb9de Fix typo in syscall registration sanity test. 2013-09-24 16:52:29 +02:00
Jonas 'Sortie' Termansen efe70b3b3e Avoid physical frame stack overflow. 2013-09-24 16:52:29 +02:00
Jonas 'Sortie' Termansen 2231e129b0 Fix deadlock in kthread_cond_wait. 2013-07-11 18:07:03 +02:00
Jonas 'Sortie' Termansen dd0379c608 Fix calltrace implementation on x86 and x86-64. 2013-07-09 20:28:55 +02:00
Jonas 'Sortie' Termansen aea6aefea9 Fix interlock implementation on x86_64 and x86. 2013-07-09 20:28:55 +02:00
Jonas 'Sortie' Termansen 986d331d39 Fix x86_64 declaration of uint64_t. 2013-07-09 20:28:55 +02:00
Jonas 'Sortie' Termansen 49a66893b2 Fix kernel compile warnings. 2013-07-09 20:28:55 +02:00
Jonas 'Sortie' Termansen 8318c51819 Allow syscall parameters and return values larger than native words.
Note: This is an incompatible ABI change.
2013-07-08 15:47:27 +02:00
Jonas 'Sortie' Termansen d890488304 Void system calls must now have a return value. 2013-07-07 17:03:01 +02:00
Jonas 'Sortie' Termansen 96e4c00c5f Detect and panic when running buggy qemu releases. 2013-06-21 23:20:14 +02:00
Jonas 'Sortie' Termansen 308b3169ca Fix missing single quote character (') in US keyboard layout. 2013-02-27 12:34:45 +01:00
Jonas 'Sortie' Termansen 607128334f Fix floating point corruption on thread exit. 2013-01-27 14:45:25 +01:00
Jonas 'Sortie' Termansen 754a10e274 Allow unloading video drivers. 2012-12-14 14:13:37 +01:00
Jonas 'Sortie' Termansen 6037babcbf Extend kernel video memory area to 386 MiB on x86. 2012-12-14 14:13:37 +01:00
Jonas 'Sortie' Termansen 3116161f5d BGA: Fix possible memory leak. 2012-12-14 14:13:37 +01:00
Jonas 'Sortie' Termansen 4d37197472 Sort objects in kernel makefile. 2012-12-14 14:13:37 +01:00
Jonas 'Sortie' Termansen 4f60d028ef Update coding style of ATA driver. 2012-12-14 14:13:37 +01:00
Jonas 'Sortie' Termansen c9b3002e43 Add openat(2).
This is a rather hacky implementation.
2012-12-14 14:13:37 +01:00
Jonas 'Sortie' Termansen 32f87f461d Remember path when opening files. 2012-12-14 14:13:37 +01:00
Jonas 'Sortie' Termansen db57bb6336 Port remaining x86 nasm assembly to GNU as. 2012-12-14 14:13:37 +01:00
Jonas 'Sortie' Termansen 24c89ec673 Use libgcc. 2012-12-14 14:13:36 +01:00
Jonas 'Sortie' Termansen 838992c3d8 Don't build libmaxsi.a.
This should just about remove most of the old and deprecated (and now
obsolete) Maxsi:: API. Of course, large parts of libc still suffer from
its poor design, but I'll get around to fix that eventually.
2012-12-14 14:13:35 +01:00
Jonas 'Sortie' Termansen bd8967069e Replace libmaxsi headers with libc headers. 2012-12-14 14:13:35 +01:00
Jonas 'Sortie' Termansen c0fabc2e8d Move remainder of Maxsi::String into kernel tree. 2012-12-14 14:13:35 +01:00
Jonas 'Sortie' Termansen 1b26d1bacf Make sprintf family freestanding.
And use them in the kernel.
2012-12-14 14:13:35 +01:00
Jonas 'Sortie' Termansen c55a2882dc Replace Maxsi::String::ToInt with atoi. 2012-12-14 14:13:35 +01:00
Jonas 'Sortie' Termansen 6ce762aac4 Replace Maxsi::String::Seek with strchr. 2012-12-14 14:13:35 +01:00
Jonas 'Sortie' Termansen 2206412e14 Replace Maxsi::String::Reject with strcspn. 2012-12-14 14:13:35 +01:00
Jonas 'Sortie' Termansen 02a711befb Replace Maxsi::String::Accept with strspn. 2012-12-14 14:13:35 +01:00
Jonas 'Sortie' Termansen e5cf6c18f7 Replace Maxsi::String::Compare with strcmp. 2012-12-14 14:13:35 +01:00
Jonas 'Sortie' Termansen 70da61f5d1 Replace Maxsi::String::Copy with strcpy. 2012-12-14 14:13:35 +01:00
Jonas 'Sortie' Termansen 5e4dadbba0 Replace Maxsi::String::Length with strlen. 2012-12-14 14:13:34 +01:00
Jonas 'Sortie' Termansen 5e7bf8527c Move <libmaxsi/sortedlist.h> into kernel tree. 2012-12-14 14:13:34 +01:00
Jonas 'Sortie' Termansen df7d8ca335 Move crc32 checksum code into kernel. 2012-12-14 14:13:34 +01:00
Jonas 'Sortie' Termansen 2c286d6830 Replace <libmaxsi/format.h> with <stdio.h>. 2012-12-14 14:13:34 +01:00
Jonas 'Sortie' Termansen b4374f66b7 Replace <libmaxsi/memory.h> with <string.h>. 2012-12-14 14:13:34 +01:00
Jonas 'Sortie' Termansen 5d082b3bbb Replace Maxsi::Error:: with <errno.h>. 2012-12-14 14:13:34 +01:00
Jonas 'Sortie' Termansen 42754f1728 Replace ASSERT with assert of <assert.h>. 2012-12-14 14:13:34 +01:00
Jonas 'Sortie' Termansen b685b7a9eb Don't include Maxsi:: API in kernel.cpp.
Since kernel.cpp is intended to be an example of the current best coding
practices within the Sortix kernel, and the Maxsi:: API is deprecated and
is being removed, it should rather use the nice C standard library.
2012-12-14 14:13:34 +01:00
Jonas 'Sortie' Termansen 0437d75147 Remove libmaxsi stddef.h and stdarg.h.
These are provided by the cross compiler.
2012-12-14 14:13:34 +01:00
Jonas 'Sortie' Termansen b293fb3171 Remove kernel platform.h dependency on libmaxsi platform.h.
This reduces the dependence on libmaxsi with the aim that the Maxsi:: api
can be removed and replaced with the standard C library.
2012-12-14 14:13:33 +01:00
Jonas 'Sortie' Termansen 3095503b9b Correct usage of deprecated nat and byte data types. 2012-12-14 14:13:33 +01:00
Jonas 'Sortie' Termansen 9cf092d32e Use cross compiler in build system. 2012-12-14 14:13:33 +01:00
Jonas 'Sortie' Termansen 81530bc58c Really fix size_t declarations by asking compiler. 2012-09-12 12:39:30 +02:00
Jonas 'Sortie' Termansen cceaaf0089 Fix declaration of size_t on x86. 2012-09-12 12:19:57 +02:00
Jonas 'Sortie' Termansen 53e945aa4f Fix including private signal.h in kthread.h. 2012-09-12 12:18:51 +02:00
Jonas 'Sortie' Termansen 82035e87da Add makefile targets for installing sysroot base headers. 2012-09-10 21:45:38 +02:00
Jonas 'Sortie' Termansen 0b94239912 Fix missing WEXITSTATUS in init and kernel. 2012-09-09 23:08:03 +02:00
Jonas 'Sortie' Termansen 66487f2895 Make waitpid(2) fail on signal arrival. 2012-09-09 22:58:18 +02:00
Jonas 'Sortie' Termansen da7f10269d Better declarations of limits in stdint.h.
This is more compatible with how gcc limits.h does stuff.
2012-09-09 22:41:02 +02:00
Jonas 'Sortie' Termansen 0245e9867c Fix NULL deference if no ATA bus is present. 2012-09-09 13:15:33 +02:00
Jonas 'Sortie' Termansen b9b697f2cb Implement proper W* error codes in sys/wait.h and kernel.
Note that signals can't really kill a process at this time.
2012-09-09 12:21:39 +02:00
Jonas 'Sortie' Termansen b0807e8c7a Fix reading /dev/video/fb causing a write instead.
This really fucks stuff up.
2012-09-08 19:40:22 +02:00
Jonas 'Sortie' Termansen 07b3cc8e06 Implement WNOHANG in waitpid(2). 2012-09-08 19:19:31 +02:00
Jonas 'Sortie' Termansen 356ae79f64 Don't deliver signals to zombies. 2012-09-08 19:15:56 +02:00
Jonas 'Sortie' Termansen 32a1be0008 Increased tab size from 4 to 8. 2012-09-08 18:45:53 +02:00
Jonas 'Sortie' Termansen 16019e5897 Make interrupt handler more robust. 2012-09-08 18:45:53 +02:00
Jonas 'Sortie' Termansen 3fd270f7a2 Remove trailing whitespace. 2012-09-08 18:45:53 +02:00
Jonas 'Sortie' Termansen 09c4f34e66 Remove -pc from Sortix host triplet. 2012-09-08 18:45:53 +02:00
Jonas 'Sortie' Termansen 17a93359dd Add . and .. support to kernel filesystems.
This makes the hack in ls(1) not needed and is hence removed.
2012-09-08 18:45:52 +02:00
Jonas 'Sortie' Termansen 118fc9ce9a The lfb text buffer class now uses the correct cursor color. 2012-09-08 18:45:52 +02:00
Jonas 'Sortie' Termansen 755e855c08 Renamed sforkr(2) to tfork(2).
It's a much better name if you think of it as task-fork or thread-fork in the
sense that it either modifies this task or creates a new one. This call will
be used to provide user-space threads as well as fork(2).
2012-09-08 18:45:52 +02:00
Jonas 'Sortie' Termansen 7d39906acc Added support for saving FPU registers upon context switch.
This code uses the cr0 task switched bit to disable the FPU upon task
switch, which allows the kernel to delay copying the registers until
another task starts using them. Or better yet, if no other thread actually
uses the registers, then it won't need to do any copying at all!
2012-09-08 18:45:52 +02:00
Jonas 'Sortie' Termansen 93bb4f992b Added support for floating point numbers.
Note that the scheduler does not load/restore floating point numbers yet
upon task switching. This means only one task can use floating point numbers
at the same time without the risk of race conditions.

Note that this enables SSE in 32-bit x86 platforms - but not all models
have such support, which limits which computers Sortix works on. Ideally, we
should detect what features are available on the computer at runtime and
enable/disable the proper kernel support. This is not a problem on x86_64.
2012-09-08 18:45:52 +02:00
Jonas 'Sortie' Termansen 8f3fd73bd6 The kernel provides the $cputype environmental variable. 2012-09-08 18:45:41 +02:00
Jonas 'Sortie' Termansen 51e3de971c Multithreaded kernel and improvement of signal handling.
Pardon the big ass-commit, this took months to develop and debug and the
refactoring got so far that a clean merge became impossible. The good news
is that this commit does quite a bit of cleaning up and generally improves
the kernel quality.

This makes the kernel fully pre-emptive and multithreaded. This was done
by rewriting the interrupt code, the scheduler, introducing new threading
primitives, and rewriting large parts of the kernel. During the past few
commits the kernel has had its device drivers thread secured; this commit
thread secures large parts of the core kernel. There still remains some
parts of the kernel that is _not_ thread secured, but this is not a problem
at this point. Each user-space thread has an associated kernel stack that
it uses when it goes into kernel mode. This stack is by default 8 KiB since
that value works for me and is also used by Linux. Strange things tends to
happen on x86 in case of a stack overflow - there is no ideal way to catch
such a situation right now.

The system call conventions were changed, too. The %edx register is now
used to provide the errno value of the call, instead of the kernel writing
it into a registered global variable. The system call code has also been
updated to better reflect the native calling conventions: not all registers
have to be preserved. This makes system calls faster and simplifies the
assembly. In the kernel, there is no longer the event.h header or the hacky
method of 'resuming system calls' that closely resembles cooperative
multitasking. If a system call wants to block, it should just block.

The signal handling was also improved significantly. At this point, signals
cannot interrupt kernel threads (but can always interrupt user-space threads
if enabled), which introduces some problems with how a SIGINT could
interrupt a blocking read, for instance. This commit introduces and uses a
number of new primitives such as kthread_lock_mutex_signal() that attempts
to get the lock but fails if a signal is pending. In this manner, the kernel
is safer as kernel threads cannot be shut down inconveniently, but in return
for complexity as blocking operations must check they if they should fail.

Process exiting has also been refactored significantly. The _exit(2) system
call sets the exit code and sends SIGKILL to all the threads in the process.
Once all the threads have cleaned themselves up and exited, a worker thread
calls the process's LastPrayer() method that unmaps memory, deletes the
address space, notifies the parent, etc. This provides a very robust way to
terminate processes as even half-constructed processes (during a failing fork
for instance) can be gracefully terminated.

I have introduced a number of kernel threads to help avoid threading problems
and simplify kernel design. For instance, there is now a functional generic
kernel worker thread that any kernel thread can schedule jobs for. Interrupt
handlers run with interrupts off (hence they cannot call kthread_ functions
as it may deadlock the system if another thread holds the lock) therefore
they cannot use the standard kernel worker threads. Instead, they use a
special purpose interrupt worker thread that works much like the generic one
expect that interrupt handlers can safely queue work with interrupts off.
Note that this also means that interrupt handlers cannot allocate memory or
print to the kernel log/screen as such mechanisms uses locks. I'll introduce
a lock free algorithm for such cases later on.

The boot process has also changed. The original kernel init thread in
kernel.cpp creates a new bootstrap thread and becomes the system idle thread.
Note that pid=0 now means the kernel, as there is no longer a system idle
process. The bootstrap thread launches all the kernel worker threads and then
creates a new process and loads /bin/init into it and then creates a thread
in pid=1, which starts the system. The bootstrap thread then quietly waits
for pid=1 to exit after which it shuts down/reboots/panics the system.

In general, the introduction of race conditions and dead locks have forced me
to revise a lot of the design and make sure it was thread secure. Since early
parts of the kernel was quite hacky, I had to refactor such code. So it seems
that the risk of dead locks forces me to write better code.

Note that a real preemptive multithreaded kernel simplifies the construction
of blocking system calls. My hope is that this will trigger a clean up of
the filesystem code that current is almost beyond repair.

Almost all of the kernel was modified during this refactoring. To the extent
possible, these changes have been backported to older non-multithreaded
kernel, but many changes were tightly coupled and went into this commit.

Of interest is the implementation of the kthread_ api based on the design
of pthreads; this library allows easy synchronization mechanisms and
includes C++-style scoped locks. This commit also introduces new worker
threads and tested mechanisms for interrupt handlers to schedule work in a
kernel worker thread.

A lot of code have been rewritten from scratch and has become a lot more
stable and correct.

Share and enjoy!
2012-09-08 18:45:41 +02:00
Jonas 'Sortie' Termansen c518a37bef Fixed compiler warning in PageProtect function family. 2012-08-04 18:35:23 +02:00
Jonas 'Sortie' Termansen 69c23aed56 Thread secured the sound driver. 2012-08-04 18:35:23 +02:00
Jonas 'Sortie' Termansen 5f93e157d5 Thread secured refcount class. 2012-08-04 18:35:23 +02:00
Jonas 'Sortie' Termansen 61dbb4a2ec Better abstraction of setting kernel stack. 2012-08-04 18:35:23 +02:00
Jonas 'Sortie' Termansen 950610e1eb Added a kernel worker thread for use when the kernel goes multithreaded. 2012-08-04 18:35:23 +02:00
Jonas 'Sortie' Termansen ee73aa7783 Added a library of functions to simulate atomic operations on memory. 2012-08-04 18:35:23 +02:00
Jonas 'Sortie' Termansen dafe1c499d Thread secured pipe class. 2012-08-04 18:35:23 +02:00
Jonas 'Sortie' Termansen 66d7234ab1 Thread secured logterminal class and implemented VEOF. 2012-08-04 18:35:23 +02:00
Jonas 'Sortie' Termansen bf07674d7a Thread secured the keyboard driver. 2012-08-04 18:35:23 +02:00
Jonas 'Sortie' Termansen af015491db sortix/io.cpp is now ready for new system call semantics. 2012-08-04 18:35:23 +02:00
Jonas 'Sortie' Termansen 4810ccae39 Added warning in case the laws of logic changes. 2012-08-04 18:35:23 +02:00
Jonas 'Sortie' Termansen 2e3843ffce Fixed incorrect x86-family protection flags. 2012-08-04 18:35:23 +02:00
Jonas 'Sortie' Termansen 49ad293d1d Thread secured the physical page allocator. 2012-08-04 18:35:23 +02:00
Jonas 'Sortie' Termansen 459a1b2b3f Thread secured initfs. 2012-08-04 18:35:23 +02:00
Jonas 'Sortie' Termansen f00c8b3d63 Thread secured the kernel device class. 2012-08-04 18:35:23 +02:00
Jonas 'Sortie' Termansen 38349da082 Thread secured the COM driver. 2012-08-04 18:35:22 +02:00
Jonas 'Sortie' Termansen f3f33e22e7 Thread secured ATA driver. 2012-08-04 18:35:22 +02:00
Jonas 'Sortie' Termansen eb4f179330 Added DEBUG_KERNEL option to kernel makefile. 2012-08-04 18:35:22 +02:00
Jonas 'Sortie' Termansen 199fec6674 Hack: ReadParamString supports "STOP" because of stdarg bug. 2012-08-04 18:35:22 +02:00
Jonas 'Sortie' Termansen 14d709c136 Added support for gcc 4.7.1. 2012-08-04 18:33:47 +02:00
Jonas 'Sortie' Termansen 78300931ba Workarounds for older gcc releases such that endian.h works. 2012-08-02 16:24:51 +02:00
Jonas 'Sortie' Termansen 86f8662a4e The VGA font is now available as /dev/vga. 2012-08-01 13:07:47 +02:00
Jonas 'Sortie' Termansen f3532081aa Added a filesystem utility class for providing a fixed buffer. 2012-08-01 13:07:31 +02:00
Jonas 'Sortie' Termansen 8dc5955f5e Wrote a driver for the Bochs VBE Extensions (BGA). 2012-07-30 19:03:48 +02:00
Jonas 'Sortie' Termansen cb5a242dfc Added a text buffer that works with graphical linear frame buffers. 2012-07-30 19:02:05 +02:00
Jonas 'Sortie' Termansen 78f0c6c094 The video framework is now exposed as /dev/video.
This provides easy user-space access to the framebuffer.
2012-07-30 19:00:24 +02:00
Jonas 'Sortie' Termansen 1ce55af846 Created framework for video drivers.
This supports dynamic loading and unloading of graphics drivers, mode
switching and detection and flexible kernel access to the framebuffer.
2012-07-30 19:00:24 +02:00
Jonas 'Sortie' Termansen d27a2bdcbf Better detection of panicing while panicing. 2012-07-30 18:59:13 +02:00
Jonas 'Sortie' Termansen 1041823d42 Fixed VGA text buffer rendering non-ascii text incorrectly. 2012-07-30 18:56:47 +02:00
Jonas 'Sortie' Termansen 3b0f165c4f Fixed bad declaration of MapPAT in x86-family/memorymanagement.h. 2012-07-30 18:56:02 +02:00
Jonas 'Sortie' Termansen 19b5451f3b Refactored the PCI code to become a library of utility functions. 2012-07-29 23:45:54 +02:00
Jonas 'Sortie' Termansen 5f6ca5e729 Added a kernel endian.h header for easy conversion. 2012-07-29 23:45:54 +02:00
Jonas 'Sortie' Termansen f390418515 Preallocated kernel address space for video memory. 2012-07-24 20:08:51 +02:00
Jonas 'Sortie' Termansen 494636b8eb Added some filesystem utility classes. 2012-07-24 19:56:33 +02:00
Jonas 'Sortie' Termansen 143120d160 Added tcgetwinsize(2) for determining terminal resolution.
Unfortunately this area is not standardized by POSIX. Linux uses an ioctl
which is not that bad, but I'd like to have a designated function. I'm not
sure if this facility is powerful enough and whether it should be improved.
Also note that I use a struct winsize as on Linux, but I use size_ts instead
for the heck of it. Perhaps I should use another name for the struct.
2012-07-24 18:43:34 +02:00
Jonas 'Sortie' Termansen f5c4b64aff The console can now be rendered to any text buffer.
The console renderer now renders to a text buffer, which can be implemented
on any device, whether it's the VGA text buffer or a bitmap graphics device
with font rendering. This replaces the older code that could only render to
a VGA framebuffer and where the input parsing was tightly coupled with the
device rendering phase.
2012-07-24 14:48:14 +02:00
Jonas 'Sortie' Termansen 8c5ab54c9b Updated refcount.cpp to a newer coding convention. 2012-07-23 00:05:31 +02:00
Jonas 'Sortie' Termansen 3907e14cb8 Updated vgaterminal.cpp to newer coding conventions. 2012-07-23 00:05:31 +02:00
Jonas 'Sortie' Termansen d75a7145ef Updated vga code to newer coding conventions. 2012-07-23 00:05:31 +02:00
Jonas 'Sortie' Termansen b2814db927 Added support for getting a copy of the VGA Font.
This will be useful for providing a text-mode like environment (console)
after having switched to graphical mode where the system needs a font.
2012-07-22 15:51:38 +02:00
Jonas 'Sortie' Termansen 476ba278da Improved VGA scroll performance using memcpy(3). 2012-07-17 16:23:00 +02:00
Jonas 'Sortie' Termansen ebc0b064c3 Added a function to get the current address space pointer. 2012-07-06 17:18:07 +02:00
Jonas 'Sortie' Termansen d59c0cb3ed getpagesize(2) now call Sortix::Page::Size(). 2012-07-06 17:18:07 +02:00
Jonas 'Sortie' Termansen 22990b77b8 Refactored the internal kernel memory management API.
It is now permission-oriented, not just user/kernel oriented.

Added <sys/mman.h> with nice PROT_{READ,WRITE,EXEC,FORK} constants.
2012-07-06 17:18:07 +02:00
Jonas 'Sortie' Termansen ec5fa92761 Programmers can now redirect what the errno macro refers to. 2012-07-06 17:18:06 +02:00
Jonas 'Sortie' Termansen e7baf6a4b0 Updated the kthread compatibility layer with signal support. 2012-07-06 17:17:45 +02:00
Jonas 'Sortie' Termansen c39473157a Implemented a new initrd format with better inode support.
This enables useful features such as directories, CRC32 checksums, and other
useful features. The initrdfs in the kernel is now hooked up against the new
API, although the kernel's current limited FS support is a problem for now.
To work around that, directories are not supported at runtime, although the
internal API understands them wonderfully. This will be fixed when the
kernel gets a real VFS.
2012-07-02 17:40:52 +02:00
Jonas 'Sortie' Termansen 2046482e77 Added support for MSRs, PAT and MTRRs.
This provides control over the caching of memory, which makes write-combined
IO possible. Graphics drivers can use this to transfer data at a much higher
rate to the video memory.

The implementation is a bit hacky but it'll do for now. It provides enough
support for the experimental VBE driver to work on the real computers I
tested it on, even if the BIOS uses screwed up default MTRRs.

The virtual memory layer now automatically uses the PAT feature if available
but in a backwards compatible manner and otherwise just tries to approximate
PAT features if they are asked for.
2012-07-01 00:55:36 +02:00
Jonas 'Sortie' Termansen b650c9a8f0 Added a O_ACCMODE flag for GNU compatibility. 2012-05-28 22:52:11 +02:00
Jonas 'Sortie' Termansen 00869bcdc1 The PIC can now be deprogrammed and reprogrammed. 2012-05-26 14:00:24 +02:00
Jonas 'Sortie' Termansen bd489eb73a Forward compatbility with the kthread branch. 2012-05-04 13:13:44 +02:00
Jonas 'Sortie' Termansen 92c5533820 Improved the implementation of the exec* functions. 2012-04-30 21:10:02 +02:00
Jonas 'Sortie' Termansen 93abeda32e Fixed buffer overflow in devfs.cpp. 2012-04-14 22:03:55 +02:00
Jonas 'Sortie' Termansen 3b63a70191 Added Interrupt::SetEnabled(bool). 2012-04-13 17:42:21 +02:00
Jonas 'Sortie' Termansen f59b53ddce Ported x64 interrupt assembly to the GNU assembler. 2012-04-13 17:34:17 +02:00
Jonas 'Sortie' Termansen 8cbf9ff8f0 Added Interrupt::IsEnabled(). 2012-04-11 15:46:32 +02:00
Jonas 'Sortie' Termansen 36ff6c7f96 seek(2) now correctly rejects a bad whence value. 2012-04-10 13:20:33 +02:00
Jonas 'Sortie' Termansen 6367a2352e Added sforkr(2) that controls the child registers as well.
sfork(2) now calls sforkr(2) with the current registers.

This will prove useful in creating threads, where user-space now can fully
control what state the child will start in. This is unlike the Linux clone
system call that accepts a pointer to the child stack; this is more powerful
and somehow simpler. Note that this will create a rather raw thread; no
thread initization has been done by the standard thread API (when it is
implemented), so this feature shouldn't be used by programmers unless they
know what they are doing.

fork(2) now calls sfork(2) directly. Also removed fork(2) and sfork(2) from
the kernel as they are done using sforkr(2) now. So technically they aren't
system calls right now, but that could always change.
2012-04-05 23:00:47 +02:00
Jonas 'Sortie' Termansen 6f36ecf0b3 execve(2) now pushes envp to the new stack and sets up registers.
This fully implements environmental variables over exec.
2012-04-04 01:49:14 +02:00