-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathchangelog.txt
47 lines (38 loc) · 2.57 KB
/
changelog.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
- Added a basic ELF parser, along with a hello world user application.
- Scheduler : The scheduler is now capable of loading and executing user tasks. The
MMX, FPU and SSE registers are unfortunately not saved/restored yet, so
applications are (for now!) not allowed to use them.
- Scheduler : Every task has an assigned kernel stack. This kernel stack is used to
executes syscalls, IRQs etc. The kernel stack is always mapped to the exact
same address, and each task has a different physical page mapped into that
address. This allows for every interrupt to execute on a different stack,
even though they all use the same address, by simply taking advantage of
paging.
- Scheduler : Likewise, the user stack is also allocated and used in the same
way. I.e. it is always mapped to the same address, and different pages are
mapped for different tasks. See doc/kernel_stack.txt for more info, although
it does not go into much detail about actual kernel stacks yet.
- Scheduler : There is now a task loader function (written in assembly) that
executes at the start of a task (before actually jumping to the task).
Its whole purpose is to unlock the scheduler before the task executes, and
then it jumps.
- Heap : Fixed minor bug that caused more pages to be mapped than what was
actually allocated for the heap.
- Syscalls : There is now a syscall interface. Interrupt number 0x80 is
reserved for this interface. Currently, only exit(), read(), write(), open()
close(), fork(), wait() and exec() are implemented. This is good enough for simple shell
commands, as demonstrated in the sample program that is loaded on start-up.
(in /bin/sh)
Hopefully, I can port another, better shell soon (and a libc of course).
- Task termination : The ability to terminate tasks has been added. There is
always a new task created at start-up. This task has the sole purpose of
cleaning up tasks in the termination queue. The terminate_task() function
is there for processes that want to exit. A syscall (rax=0 rbx=err_code) exit
is provided for user-space tasks.
- Standard input-output : the application loaded by the kernel at bootup
(currently root/bin/sh) has 2 file descriptors open at start-up, 0 referring
to standard input (the keyboard) and 1 referring to standard output (screen)
- Keyboard : The way keyboard input is handled has been changed. When a
keyboard IRQ comes in, the character is first printed to screen and
added to a buffer (if not enter) and if it is a newline, then the buffer is
flushed to a vnode. The first loaded application has a file descriptor open to said vnode.