From f0b2ebefea1a7db657b757f1044b5971f6cd5d9d Mon Sep 17 00:00:00 2001 From: Sami Samhuri Date: Tue, 10 Jan 2012 08:47:26 -0800 Subject: [PATCH] (broken) user mode support --- user_mode/bochs.out | 220 ++++++++++++++++ user_mode/bochsrc | 9 + user_mode/bochsrc.txt | 10 + user_mode/floppy.img | Bin 0 -> 1474560 bytes user_mode/go | 11 + user_mode/initrd.img | Bin 0 -> 4910 bytes user_mode/make_initrd | Bin 0 -> 8905 bytes user_mode/make_initrd.c | 58 +++++ user_mode/run_bochs.sh | 8 + user_mode/src/Makefile | 22 ++ user_mode/src/boot.s | 47 ++++ user_mode/src/common.c | 129 ++++++++++ user_mode/src/common.h | 26 ++ user_mode/src/descriptor_tables.c | 187 ++++++++++++++ user_mode/src/descriptor_tables.h | 154 +++++++++++ user_mode/src/fs.c | 58 +++++ user_mode/src/fs.h | 65 +++++ user_mode/src/gdt.s | 37 +++ user_mode/src/initrd.c | 117 +++++++++ user_mode/src/initrd.h | 27 ++ user_mode/src/interrupt.s | 151 +++++++++++ user_mode/src/isr.c | 58 +++++ user_mode/src/isr.h | 39 +++ user_mode/src/kernel | Bin 0 -> 30307 bytes user_mode/src/kheap.c | 408 ++++++++++++++++++++++++++++++ user_mode/src/kheap.h | 100 ++++++++ user_mode/src/link.ld | 33 +++ user_mode/src/main.c | 98 +++++++ user_mode/src/monitor.c | 216 ++++++++++++++++ user_mode/src/monitor.h | 24 ++ user_mode/src/multiboot.h | 51 ++++ user_mode/src/ordered_array.c | 76 ++++++ user_mode/src/ordered_array.h | 59 +++++ user_mode/src/paging.c | 297 ++++++++++++++++++++++ user_mode/src/paging.h | 75 ++++++ user_mode/src/process.s | 37 +++ user_mode/src/syscall.c | 57 +++++ user_mode/src/syscall.h | 70 +++++ user_mode/src/task.c | 255 +++++++++++++++++++ user_mode/src/task.h | 41 +++ user_mode/src/timer.c | 36 +++ user_mode/src/timer.h | 11 + user_mode/test.txt | 1 + user_mode/test2.txt | 1 + user_mode/update_image.sh | 8 + 45 files changed, 3387 insertions(+) create mode 100644 user_mode/bochs.out create mode 100644 user_mode/bochsrc create mode 100644 user_mode/bochsrc.txt create mode 100644 user_mode/floppy.img create mode 100755 user_mode/go create mode 100644 user_mode/initrd.img create mode 100755 user_mode/make_initrd create mode 100644 user_mode/make_initrd.c create mode 100755 user_mode/run_bochs.sh create mode 100644 user_mode/src/Makefile create mode 100644 user_mode/src/boot.s create mode 100644 user_mode/src/common.c create mode 100644 user_mode/src/common.h create mode 100644 user_mode/src/descriptor_tables.c create mode 100644 user_mode/src/descriptor_tables.h create mode 100644 user_mode/src/fs.c create mode 100644 user_mode/src/fs.h create mode 100644 user_mode/src/gdt.s create mode 100644 user_mode/src/initrd.c create mode 100644 user_mode/src/initrd.h create mode 100644 user_mode/src/interrupt.s create mode 100644 user_mode/src/isr.c create mode 100644 user_mode/src/isr.h create mode 100755 user_mode/src/kernel create mode 100644 user_mode/src/kheap.c create mode 100644 user_mode/src/kheap.h create mode 100644 user_mode/src/link.ld create mode 100644 user_mode/src/main.c create mode 100644 user_mode/src/monitor.c create mode 100644 user_mode/src/monitor.h create mode 100644 user_mode/src/multiboot.h create mode 100644 user_mode/src/ordered_array.c create mode 100644 user_mode/src/ordered_array.h create mode 100755 user_mode/src/paging.c create mode 100644 user_mode/src/paging.h create mode 100644 user_mode/src/process.s create mode 100644 user_mode/src/syscall.c create mode 100644 user_mode/src/syscall.h create mode 100644 user_mode/src/task.c create mode 100644 user_mode/src/task.h create mode 100644 user_mode/src/timer.c create mode 100644 user_mode/src/timer.h create mode 100644 user_mode/test.txt create mode 100644 user_mode/test2.txt create mode 100755 user_mode/update_image.sh diff --git a/user_mode/bochs.out b/user_mode/bochs.out new file mode 100644 index 0000000..6895457 --- /dev/null +++ b/user_mode/bochs.out @@ -0,0 +1,220 @@ +00000000000i[ ] Bochs x86 Emulator 2.4.2 +00000000000i[ ] Build from CVS snapshot on November 12, 2009 +00000000000i[ ] System configuration +00000000000i[ ] processors: 1 (cores=1, HT threads=1) +00000000000i[ ] A20 line support: yes +00000000000i[ ] CPU configuration +00000000000i[ ] level: 6 +00000000000i[ ] SMP support: no +00000000000i[ ] APIC support: yes +00000000000i[ ] FPU support: yes +00000000000i[ ] MMX support: yes +00000000000i[ ] SSE support: 4E +00000000000i[ ] CLFLUSH support: yes +00000000000i[ ] 3dnow! support: yes +00000000000i[ ] 1G paging support: no +00000000000i[ ] x86-64 support: yes +00000000000i[ ] SEP support: yes +00000000000i[ ] MWAIT support: no +00000000000i[ ] XSAVE support: yes +00000000000i[ ] AES support: no +00000000000i[ ] VMX support: no +00000000000i[ ] Optimization configuration +00000000000i[ ] RepeatSpeedups support: yes +00000000000i[ ] Trace cache support: yes +00000000000i[ ] Fast function calls: yes +00000000000i[ ] Devices configuration +00000000000i[ ] ACPI support: yes +00000000000i[ ] NE2000 support: yes +00000000000i[ ] PCI support: yes, enabled=yes +00000000000i[ ] SB16 support: yes +00000000000i[ ] USB support: yes +00000000000i[ ] VGA extension support: vbe +00000000000i[MEM0 ] allocated memory at 0xb42f9008. after alignment, vector=0xb42fa000 +00000000000i[MEM0 ] 32.00MB +00000000000i[MEM0 ] mem block size = 0x00100000, blocks=32 +00000000000i[MEM0 ] rom at 0xfffe0000/131072 ('/usr/share/bochs/BIOS-bochs-latest') +00000000000i[MEM0 ] rom at 0xc0000/38400 ('/usr/share/bochs/VGABIOS-lgpl-latest') +00000000000i[VTIME] using 'realtime pit' synchronization method +00000000000i[ ] lt_dlhandle is 0x97998b8 +00000000000i[PLGIN] loaded plugin libbx_cmos.so +00000000000i[ ] lt_dlhandle is 0x9799de8 +00000000000i[PLGIN] loaded plugin libbx_dma.so +00000000000i[ ] lt_dlhandle is 0x979a350 +00000000000i[PLGIN] loaded plugin libbx_pic.so +00000000000i[ ] lt_dlhandle is 0x979a900 +00000000000i[PLGIN] loaded plugin libbx_pit.so +00000000000i[ ] lt_dlhandle is 0x979ae10 +00000000000i[PLGIN] loaded plugin libbx_vga.so +00000000000i[ ] lt_dlhandle is 0x979b3f8 +00000000000i[PLGIN] loaded plugin libbx_floppy.so +00000000000i[ ] lt_dlhandle is 0x979bc00 +00000000000i[PLGIN] loaded plugin libbx_pci.so +00000000000i[ ] lt_dlhandle is 0x979c330 +00000000000i[PLGIN] loaded plugin libbx_pci2isa.so +00000000000i[ ] lt_dlhandle is 0x979c838 +00000000000i[PLGIN] loaded plugin libbx_unmapped.so +00000000000i[ ] lt_dlhandle is 0x979ce50 +00000000000i[PLGIN] loaded plugin libbx_biosdev.so +00000000000i[ ] lt_dlhandle is 0x979d320 +00000000000i[PLGIN] loaded plugin libbx_speaker.so +00000000000i[ ] lt_dlhandle is 0x979d930 +00000000000i[PLGIN] loaded plugin libbx_extfpuirq.so +00000000000i[ ] lt_dlhandle is 0x979de08 +00000000000i[PLGIN] loaded plugin libbx_gameport.so +00000000000i[ ] lt_dlhandle is 0x979e2e8 +00000000000i[PLGIN] loaded plugin libbx_pci_ide.so +00000000000i[ ] lt_dlhandle is 0x979e7f8 +00000000000i[PLGIN] loaded plugin libbx_acpi.so +00000000000i[ ] lt_dlhandle is 0x979ee20 +00000000000i[PLGIN] loaded plugin libbx_ioapic.so +00000000000i[ ] lt_dlhandle is 0x979f438 +00000000000i[PLGIN] loaded plugin libbx_keyboard.so +00000000000i[ ] lt_dlhandle is 0x979fa30 +00000000000i[PLGIN] loaded plugin libbx_harddrv.so +00000000000i[ ] lt_dlhandle is 0x97b17f0 +00000000000i[PLGIN] loaded plugin libbx_serial.so +00000000000i[ ] lt_dlhandle is 0x97b2320 +00000000000i[PLGIN] loaded plugin libbx_parallel.so +00000000000i[CMOS ] Using local time for initial clock +00000000000i[CMOS ] Setting initial clock to: Sat Jan 7 21:09:59 2012 (time0=1325999399) +00000000000i[DMA ] channel 4 used by cascade +00000000000i[DMA ] channel 2 used by Floppy Drive +00000000000e[FDD ] cannot determine media geometry, trying to use defaults +00000000000i[FDD ] fd0: '/dev/loop0' ro=0, h=2,t=80,spt=18 +00000000000i[PCI ] 440FX Host bridge present at device 0, function 0 +00000000000i[PCI ] PIIX3 PCI-to-ISA bridge present at device 1, function 0 +00000000000i[VGA ] interval=50000 +00000000000i[MEM0 ] Register memory access handlers: 0x000a0000 - 0x000bffff +00000000000i[XGUI ] test_alloc_colors: 16 colors available out of 16 colors tried +00000000000i[XGUI ] font 8 wide x 16 high, display depth = 24 +00000000000i[MEM0 ] Register memory access handlers: 0xe0000000 - 0xe0ffffff +00000000000i[VGA ] VBE Bochs Display Extension Enabled +00000000000i[PLGIN] init_dev of 'unmapped' plugin device by virtual method +00000000000i[PLGIN] init_dev of 'biosdev' plugin device by virtual method +00000000000i[PLGIN] init_dev of 'speaker' plugin device by virtual method +00000000000i[SPEAK] Open /dev/console successfully +00000000000i[PLGIN] init_dev of 'extfpuirq' plugin device by virtual method +00000000000i[PLGIN] init_dev of 'gameport' plugin device by virtual method +00000000000i[PLGIN] init_dev of 'pci_ide' plugin device by virtual method +00000000000i[PCI ] PIIX3 PCI IDE controller present at device 1, function 1 +00000000000i[PLGIN] init_dev of 'acpi' plugin device by virtual method +00000000000i[PCI ] ACPI Controller present at device 1, function 3 +00000000000i[PLGIN] init_dev of 'ioapic' plugin device by virtual method +00000000000i[IOAP ] initializing I/O APIC +00000000000i[MEM0 ] Register memory access handlers: 0xfec00000 - 0xfec00fff +00000000000i[PLGIN] init_dev of 'keyboard' plugin device by virtual method +00000000000i[KBD ] will paste characters every 1000 keyboard ticks +00000000000i[PLGIN] init_dev of 'harddrv' plugin device by virtual method +00000000000i[HD ] Using boot sequence floppy, none, none +00000000000i[HD ] Floppy boot signature check is enabled +00000000000i[PLGIN] init_dev of 'serial' plugin device by virtual method +00000000000i[SER ] com1 at 0x03f8 irq 4 +00000000000i[PLGIN] init_dev of 'parallel' plugin device by virtual method +00000000000i[PAR ] parallel port 1 at 0x0378 irq 7 +00000000000i[PLGIN] register state of 'unmapped' plugin device by virtual method +00000000000i[PLGIN] register state of 'biosdev' plugin device by virtual method +00000000000i[PLGIN] register state of 'speaker' plugin device by virtual method +00000000000i[PLGIN] register state of 'extfpuirq' plugin device by virtual method +00000000000i[PLGIN] register state of 'gameport' plugin device by virtual method +00000000000i[PLGIN] register state of 'pci_ide' plugin device by virtual method +00000000000i[PLGIN] register state of 'acpi' plugin device by virtual method +00000000000i[PLGIN] register state of 'ioapic' plugin device by virtual method +00000000000i[PLGIN] register state of 'keyboard' plugin device by virtual method +00000000000i[PLGIN] register state of 'harddrv' plugin device by virtual method +00000000000i[PLGIN] register state of 'serial' plugin device by virtual method +00000000000i[PLGIN] register state of 'parallel' plugin device by virtual method +00000000000i[SYS ] bx_pc_system_c::Reset(HARDWARE) called +00000000000i[CPU0 ] cpu hardware reset +00000000000i[APIC0] allocate APIC id=0 (MMIO enabled) to 0xfee00000 +00000000000i[PLGIN] reset of 'unmapped' plugin device by virtual method +00000000000i[PLGIN] reset of 'biosdev' plugin device by virtual method +00000000000i[PLGIN] reset of 'speaker' plugin device by virtual method +00000000000i[PLGIN] reset of 'extfpuirq' plugin device by virtual method +00000000000i[PLGIN] reset of 'gameport' plugin device by virtual method +00000000000i[PLGIN] reset of 'pci_ide' plugin device by virtual method +00000000000i[PLGIN] reset of 'acpi' plugin device by virtual method +00000000000i[PLGIN] reset of 'ioapic' plugin device by virtual method +00000000000i[PLGIN] reset of 'keyboard' plugin device by virtual method +00000000000i[PLGIN] reset of 'harddrv' plugin device by virtual method +00000000000i[PLGIN] reset of 'serial' plugin device by virtual method +00000000000i[PLGIN] reset of 'parallel' plugin device by virtual method +00000000000i[XGUI ] [x] Mouse off +00000003305i[BIOS ] $Revision: 1.235 $ $Date: 2009/09/28 16:36:02 $ +00000316426i[KBD ] reset-disable command received +00000432848i[VBIOS] VGABios $Id$ +00000432919i[VGA ] VBE known Display Interface b0c0 +00000432951i[VGA ] VBE known Display Interface b0c4 +00000433620i[VBIOS] VBE Bios $Id$ +00000475000i[XGUI ] charmap update. Font Height is 16 +00000525000i[XGUI ] charmap update. Font Height is 16 +00000744973i[BIOS ] Starting rombios32 +00000745430i[BIOS ] Shutdown flag 0 +00000746053i[BIOS ] ram_size=0x02000000 +00000746502i[BIOS ] ram_end=32MB +00000805906i[BIOS ] Found 1 cpu(s) +00000821921i[BIOS ] bios_table_addr: 0x000fba98 end=0x000fcc00 +00000822029i[PCI ] 440FX PMC write to PAM register 59 (TLB Flush) +00001149723i[PCI ] 440FX PMC write to PAM register 59 (TLB Flush) +00001477653i[P2I ] PCI IRQ routing: PIRQA# set to 0x0b +00001477674i[P2I ] PCI IRQ routing: PIRQB# set to 0x09 +00001477695i[P2I ] PCI IRQ routing: PIRQC# set to 0x0b +00001477716i[P2I ] PCI IRQ routing: PIRQD# set to 0x09 +00001477726i[P2I ] write: ELCR2 = 0x0a +00001478536i[BIOS ] PIIX3/PIIX4 init: elcr=00 0a +00001486300i[BIOS ] PCI: bus=0 devfn=0x00: vendor_id=0x8086 device_id=0x1237 class=0x0600 +00001488673i[BIOS ] PCI: bus=0 devfn=0x08: vendor_id=0x8086 device_id=0x7000 class=0x0601 +00001490885i[BIOS ] PCI: bus=0 devfn=0x09: vendor_id=0x8086 device_id=0x7010 class=0x0101 +00001491120i[PIDE ] new BM-DMA address: 0xc000 +00001491775i[BIOS ] region 4: 0x0000c000 +00001493896i[BIOS ] PCI: bus=0 devfn=0x0b: vendor_id=0x8086 device_id=0x7113 class=0x0680 +00001494139i[ACPI ] new irq line = 11 +00001494151i[ACPI ] new irq line = 9 +00001494182i[ACPI ] new PM base address: 0xb000 +00001494196i[ACPI ] new SM base address: 0xb100 +00001494224i[PCI ] setting SMRAM control register to 0x4a +00001658315i[CPU0 ] Enter to System Management Mode +00001658325i[CPU0 ] RSM: Resuming from System Management Mode +00001822343i[PCI ] setting SMRAM control register to 0x0a +00001831140i[BIOS ] MP table addr=0x000fbb70 MPC table addr=0x000fbaa0 size=0xd0 +00001832890i[BIOS ] SMBIOS table addr=0x000fbb80 +00001835925i[BIOS ] Firmware waking vector 0x1ff00cc +00001876821i[BIOS ] ACPI tables: RSDP addr=0x000fbc90 ACPI DATA addr=0x01ff0000 size=0x1f18 +00001876858i[PCI ] 440FX PMC write to PAM register 59 (TLB Flush) +00001877610i[BIOS ] bios_table_cur_addr: 0x000fbcb4 +00081162072i[BIOS ] Booting from 0000:7c00 +00082779758i[BIOS ] int13_harddisk: function 41, unmapped device for ELDL=80 +00082784535i[BIOS ] int13_harddisk: function 08, unmapped device for ELDL=80 +00082789188i[BIOS ] *** int 15h function AX=00c0, BX=0000 not yet supported! +00202100000i[ ] cpu loop quit, shutting down simulator +00202100000i[CPU0 ] CPU is in protected mode (active) +00202100000i[CPU0 ] CS.d_b = 32 bit +00202100000i[CPU0 ] SS.d_b = 32 bit +00202100000i[CPU0 ] EFER = 0x00000000 +00202100000i[CPU0 ] | RAX=0000000000000000 RBX=0000000000000200 +00202100000i[CPU0 ] | RCX=00000000000b8000 RDX=00000000000003d5 +00202100000i[CPU0 ] | RSP=00000000dffffd3c RBP=00000000dffffd54 +00202100000i[CPU0 ] | RSI=0000000000053c9d RDI=0000000000053c9e +00202100000i[CPU0 ] | R8=0000000000000000 R9=0000000000000000 +00202100000i[CPU0 ] | R10=0000000000000000 R11=0000000000000000 +00202100000i[CPU0 ] | R12=0000000000000000 R13=0000000000000000 +00202100000i[CPU0 ] | R14=0000000000000000 R15=0000000000000000 +00202100000i[CPU0 ] | IOPL=0 id vip vif ac vm rf nt of df if tf sf ZF af PF cf +00202100000i[CPU0 ] | SEG selector base limit G D +00202100000i[CPU0 ] | SEG sltr(index|ti|rpl) base limit G D +00202100000i[CPU0 ] | CS:0008( 0001| 0| 0) 00000000 ffffffff 1 1 +00202100000i[CPU0 ] | DS:0010( 0002| 0| 0) 00000000 ffffffff 1 1 +00202100000i[CPU0 ] | SS:0010( 0002| 0| 0) 00000000 ffffffff 1 1 +00202100000i[CPU0 ] | ES:0010( 0002| 0| 0) 00000000 ffffffff 1 1 +00202100000i[CPU0 ] | FS:0010( 0002| 0| 0) 00000000 ffffffff 1 1 +00202100000i[CPU0 ] | GS:0010( 0002| 0| 0) 00000000 ffffffff 1 1 +00202100000i[CPU0 ] | MSR_FS_BASE:0000000000000000 +00202100000i[CPU0 ] | MSR_GS_BASE:0000000000000000 +00202100000i[CPU0 ] | RIP=000000000010094e (000000000010094e) +00202100000i[CPU0 ] | CR0=0xe0000011 CR2=0x00000000123890ab +00202100000i[CPU0 ] | CR3=0x00482000 CR4=0x00000000 +00202100000i[CPU0 ] 0x000000000010094e>> jmp .+0xfffffffe (0x0010094e) : EBFE +00202100000i[CMOS ] Last time is 1325999803 (Sat Jan 7 21:16:43 2012) +00202100000i[XGUI ] Exit +00202100000i[ ] restoring default signal behavior +00202100000i[CTRL ] quit_sim called with exit code 1 diff --git a/user_mode/bochsrc b/user_mode/bochsrc new file mode 100644 index 0000000..7920a4d --- /dev/null +++ b/user_mode/bochsrc @@ -0,0 +1,9 @@ +megs: 32 +romimage: file=/usr/share/bochs/BIOS-bochs-latest +vgaromimage: file=/usr/share/bochs/VGABIOS-lgpl-latest +floppya: 1_44=/dev/loop0, status=inserted +boot: a +log: bochs.out +mouse: enabled=0 +clock: sync=realtime +cpu: ips=500000 diff --git a/user_mode/bochsrc.txt b/user_mode/bochsrc.txt new file mode 100644 index 0000000..011fa44 --- /dev/null +++ b/user_mode/bochsrc.txt @@ -0,0 +1,10 @@ +megs: 32 +romimage: file=/usr/share/bochs/BIOS-bochs-latest, address=0xf0000 +vgaromimage: /usr/share/bochs/VGABIOS-elpin-2.40 +floppya: 1_44=/dev/loop0, status=inserted +boot: a +log: bochsout.txt +mouse: enabled=0 +clock: sync=realtime +cpu: ips=500000 + diff --git a/user_mode/floppy.img b/user_mode/floppy.img new file mode 100644 index 0000000000000000000000000000000000000000..27f38bbc7706d3c3593f742ced699c8ee930e110 GIT binary patch literal 1474560 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%0DE^ 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 z

cVQtlM9r$=%ZirsFJ%V9DJY=lvs9^l<# zhq?s0SDS;B2c!}Aiq98ecPi}QWhKNHwbA%=HsDzN!S^J)7U%7xai@d_jCNK(U zLJ9*9cDR(b-t_?6r8dxq^iXNAWuT$fkTtTT?jUdG!KzPK<+;j(Y+|c^GvDh*VH~N*nR7 zexUF?{E5yX1KKPj^x0zebi>R!L+o~ooB%W8O3@3ofUi^ubuooQb>m+Py9M}T3@Gcg zSw`;q`wTAz4RC98xRgx}m$F059=98KopvvvOlWhEa=Vy4Zf|A$pMALd#cp>2CEcwm zbP(_nan7C|tki{{<7|1z{deK+7Fhy!OnE5E9V#VXgSGwEd-|;cN{8CdP|@w9N70WJ zLXaW7i$7!;h4Wg-yasEZxBBs|aT0+g6wX@%y|~)k2Dycq30O;fo9$Mnj})fB1>Knhr5j8%exch;9y!K_ocxvI4mmP`_KpcW2AH zbzUHzO5yUhb~WMhy&35t(8@_#x1l9q_YHZ|P1^4O&y+V^s}{h!(yizL@>XgnC8A0* zN99ht>(!)U*hRE^*5r_BK!fJxC2*s|rEJpXAmw^7d)%$SSBPD*fO5Mw2Ptn9v&Y>J ze4E%M3n*{b<{;&7#GKCklGyE5l&|6sHGv|NdK7lLO->e2{sDhf1Ld&1^rRI7N5l?e zF32(39Hd+=W-kilvJGXCrldP+2Sp}zwCn8VS8vUnp1XM=k-Hmz42kk5_(S=n__}r=l&clu-SlZC7kHD{ z?Jl7FH2yHyq;RNigF|l}YLHToiIz|})R0k`MeRrG-S|UWLg7%k#x4(sPWR!DohIe| z+8m^;52QzyTz-VWeu467{2?bO=4om_O1@?_NKe4|O<^ve_>&kHQk*En1w$dGX`_kN zA(vQ3qIPv#{sxd6@y9q*HfeK^axNO8GzG)%R&n1g(sA!LA<-|#y@1kjZ})Kz(tVh; zdrK%r=%7NBY-&-`DI6cX%S7AVhk=ySv^9m}gPTWu>+|@7QXhlh^qXpj zctIQgA4EXjuca8Ejr6rd8%=6H1L7m{&O-Y1CvAKSf@Bmt3I=aYc-F#|F+gMHg3c38xlt0sfdnly%x1q`X4RUR%=J6#F$F?(Jf?TTy-se~1^wx5YXYr2MtE zrs&0o0{ZYxq1IA3KJ=q}Nn2AmKDhPpDC}OxAJazp2W<{gM$zBdrH@>E^aZ=!B2SV2 zu#Vz1he|nKTT@JQtSRSeYl``fHRUDRnxdER3K(vGq1IA3;q{{&t*t4X@cL2e0ZA=| z6J9^ci}8o@M&X3#>Vo-=#!z%Yi9$iMbm-i=wso-yZW(ii22gU1!s8jQZw0XCOcNV!Msy&|3(92PwZLW{=BF_8)2Y0?OyKIY@aHHq7nZBlq9LeYZ%uTT$e`d>;O&8One*2Puye zvllG)>IaMW*o}Z3qRm0d>%^SSohNp?73EI+p~6%2LMvRSGystlTld1VFxTvB=O?E{oqA?8YDULAh6(gOua&jexCMa_3$q`Y6uUVN*7 zqhhyPWE0HjR4M$ZTwUcboAP=wr}|Ou7xV4{$~(oJ>PM;l*p1WOn zy{`d}s<`^Un{04_$SxX@S}IYoB_fywL;_R;Vfj#ksSvPg3?Uy93`v^o^5JVBxLM8h zx)@t&X{(l6Y;9{>+Nz+UCV`TGs1c}5?LVUZ3yTJ5WFplLq5 zCGr&oiDwAF3K6t$4LrGd6&8z(m3bG?yFnz(h$IZJ?3j>wf%qb`WX%$GPcLDmD(pwd z_pvNl1*L)pQw1HcH4k5|M7`oP^~u=o^kLeiA}vk{;d6zA&ZBpenUsDd9D?bcrvy7o zFyq4%wAA3R#JjB6ni#~>UoJ4npl4!`K!2XVAcLM+LwFst2}!wQg(-^&epkM#^0`ob zRF$tAorr%z`1j)-Tt@G# z2=+PXry(1H>7AzpJ4-U-!!)wg;IPDpna>g*&-e*&80z#)3=-%M5g269GiwMlUml|O ziChcchu0!sL-0D~E78sr`NM*N3$j~9Y?y3p^C=M|+9?ku=P9Cc&-1j1UBKezi{ipP zxC1dn0i-RZPmHa**GQcM#~z`dE8iXTFY4dDM;0OMpCbMV;XiVbjHkaKGGr9UiR*=P$^y`Un?&tRcH5anlB zN@6K20=Ovj9Y|Cq5(|)9?|%3eFvUbzN);#0p2WvG8nr`zN%Of(L&G3BK8g@qyv@dEtjFs!27*?RoT0M z$x;!tfC))=@SKWeY2WUiVIIIj5j2mbvfogN>NC8myi7<3xkAru-!8oVS%%V+*~3Jp z0E5nhr|7Ftak0#ipHP}KN&4EuJ%e^zf>xW!+Ik7=Hx#9MwT!Ps3dN=8qB1Z3#)v94 zs1TV@L&6^;n=~o>s{Kb_5e?lVR!6dY(q{}SmS(xm7Rt?bJs z+tF*X)jf(k@+H%05JS&(t6$Nl79 zZ6yM%xtQn$*z@0?Usk4V!AoA$w+FR)1TG6-oV5>7)E%Km5mc%!qEJ_3{vClR6BpWQ zXIX&dV^3w;KoH7XxC|FT55Ze$SxGMLXjK>NO-2x|e=RS`##L2$Mfrlr*9s!rW?|?; zj=Thk*vB_0CQa%iLfiM>$#fY;Pag$NnzXu)7;W5tE7!Nqmx}`B_ejv~{?Yl6bGWNY z(L6Hn3+HRvoJ+9uLW1azP(bcjI)h){(hl{StSo<7PN}%!Op5{0qjOD~B+*{t&(Zy-^e93eV^qQ_maT|I~7QTyBD}%vdbf!s@({41XDg`P{qGX+ps-sOa9B53d;Q<0IM6did2U%rQIRnJ z?N%BZ8@_#1`vkL7RIIr2OdF4NR#Zf(&#V2sXRr{rT2~(txO7wd8773NvP7m?`75=r zgM?9WN=!|eqAfgc?4#$6<*3*R7o(M6PW}-1J%GkWf5&RlB#yA_5!*9nb##ze*hUAU zx1xizieAg>k?hA`E*V=QP5Q{Y0M*ytEyoqjy$h{1mY`DvTLtK9VWP1_*!a@kn%`~O!7o@KvN_@(3#bq zhKtcY{}GO8(T_Aj=;gyn5{Vc3id@}G7H#)`DfK`5O5I!0Uj?SUgio5(OQ04+;{27l z`K9c$bWGKl?5R&f@QJ3c+o)+}L$Jq)NuUVP^D%L2p9A2hk}xdjX_rDCTVZz?7S{k% z@aC6$XO&>WPlsrhN%L1iVan6qg*cW0q9{LlR)V=D#on@n8Be7~#`B{Qv=dT~jOSb~)GP+;`yAvlNrxLvY;9-V7Ij6JK{Q z6YvKMi{VP)YT)wW?t@cL4PIh^1JCm=fpfs|tWP}|cp>MUfcp&Y5x6?IC2$~O_{qVW zHQi>wOsAe&wB-<7E8M4+c5$zL1>9;l15Q0R_7VOP!uP|`#?;Ce7lX`0;AX-dk|Y;J z{S$xLz5#G-qk7zU=lSDAIG#DGXBrN&)p0-1`qk4{I4uX}!`%g!Wl7HidLD?Yb8}S= z!=H!aar{eg>f!sPy`=vJaGM6FPM1{rOwjOdI3A%q2A7BT8{n(wMZmNl<~a!C--wFu z2O3=krw$HOzRN&Y3QF!Z-wr+*0skLx>fyFHcdgS9$M}F5za0KrIQ4Mvmiwy9!K>UQ zR1de|xCh70I_`aPv#;4q^Ry-19cDUiDROsCJx?I~QiKhG8*WK|vX5|XopSe;b+AtE zGqO(gC|Jd-aBgnh1(yZK4Kej_Pp$;69PV*TxC$%5dWAby>UkAu=9yvjmhhu}gmWV- zAM&&a&MGgy2bkMCS3rhX!+XE1sgG-lA?=1ag~h&= zH!Lk&R=9Gk^2*D^1?4x2#ZC%t(w4hHp2fUROkPur%aBAYZk@r_1@5Q!maWoqidN*T zDo@6WxyMaOJ(tWxzx#Ek=C#AiwStne`?ckZ^RtD%RFIRKpIx4RpN0*J3~w1r&&1+h z+--K=8{lt3%6Wwk@D}>~f}))J%C(-$u)?0|85V+ADQJsx%JZ|A6yCQ)E5aY|%(DDd zT44#+h}n!0=!yBbqzGshlxQ>OW+tYM8kIPHjC;)3#F3eceZ^j%ghnU(1T;QLAU%#6 zF)n$|&&7twD&7EJOdLs&s4LsYQ|mIL&f8S?SoBf`ZZ9az#dPn*n^s& zkr_PKw@k*AYfGqV6&9PDm8$0P)Pg)2;^z9?`<2$sSQ6fyEJ;-ko&`s%oleW@-m>k8 zq+yJhS+tHXHz9^xh!S#_uPyX_3FZSXr1TGhx+skqQh^Y&H z$CL9xj?yCVJohTpMW@BM8QokJ%+6CgO~`1urG7#*(NGSDN-1{U(CM05?1;XI8hBz| zirc-dm)5(pL0NW2w`#^F%WCBP%($;(c5z<*N>sHNDBrJ@j~k0I3-wtjvVtNxd3j}G z^oKcKTU=7&&Cbi`cj7g6Ms#aYMaGg<<>2KaHbLA9qG9urqkmb>N<|bP7Il+5M?8DS zWVsZ+i`?cQ%UH_tW}_>Zw+BPIlOsdGvt+4v36rV5aZezsC@|cP9v8_2Ik0gq=mwf} z%bQHjHl-*B4FpQsDl8kUAH|(wcJOuAj~nZ|+3aMwAyrt8;SePei}H)L$o>x7b6yEC z0g?_oq8*H&Bc*Yb;(7nYS2 zi#;|W7qsw#Wm*2RY#%w1Rmx%L205qZaw{}HkE4iJ&P&X=dBXPexaP&39NDCk+#Qw@ z;aTWqCG79rVp6-Kc95#+T-9}V$Hm5L;oGQ(h_mZ*i%Poo6c{_Q0o^M&Hq>L1i zGsLuazu1`$^R2p0BR5yeDP5NBX#RPW(BQcsS z6OyHsrudFbZpf|_4~+D@!ZPnFR$`9V2^di*5VPEprP?xTC6EXAL1F`xD5ygP_Latj-j#g1HE>N~S(~x8c*E$|ClJKJ4q(@mkr(Mk_ zrwO3g+aQlj#hwg7WT|&@pt>hSZ=X=q``nOjn03)YXgWm4RD`4wx2!Oa2P>#eltzgr zrGp?s1YP8u2G!1NEO?;D;gE%bNZmnrBHypH~`3O%5dm1;oSB!QIpY@*@zzY-jR#WN=bo;&9AY>NT%$Dd%)u zBuWd9y~sQ(dGwC_JShK|`ncB=;Rh`*r|f>AI9mwkCRwEBBc}nFF*?P zq34qH&^ds6uPC^!O#~)O*doE8;iF5O2~gFwOjGPTiY2a+pk{HY1f{;*n^P9n8AZEs zripc)kq4HX+{d~xRo+(|t+s)L zIbv2*ODECX?jxb7+#Dc1=Jv4C4#5_#txS!P98T}%(T>m_i%PgQ$S#JM(sFoXn|2?R z{$i|iO3J*6zT$Eqn4gzOu@ITJC9|f3S&F?mJf!8q1#`Gbl@+*Qj~Tp63L!?+hJ24z zPcO}yAW;Japz#zG-e;LpdvLVmI5AO@9eU8`rg^3Lxll&TrVt^;W*m0t7Y^NsKoRKl zAZJQgH8f>tWUE@v9MIPCiui}J07{sKGxg{m6+^k(&;n}^0a539H4&mpA&2h14|BY) zD5tDYPGCL9m^&imI7-eV>zHE(cqLjy#gM3hr=5)yMANT#$8 z4ASh}C1v+PR`xP}M8kTp1ML16;~eS!QXU?$T#M+8h@)(X2aJbk;{tg|nO|NyHoW{( zb_bLWP}hWXl&UWltI%lkLSX9dHk|XEsn-a71;K?-%)&&OsMa+=8tC-Y0<0t%OVz4p5?NK$`cRr%!guB&&6fMjEfyh~Ar(lU@w&M;VYiCq=602M%669c8ENflQ!f*rY56-us{2UHhv znI~9*h?=`k80%$_?xsR&n%z*oD-{;o2y(Qeln8Ba6f5i=6ld3|xf79C6PP=lBtiF~ zDisBg-BW1YMZuacJY0Cw6hvaFwmgT!=*w@$s!QZ3Nqg9iu~eWl4kymzap~S-4;BHX zm;^Nf5QXCW(lpW%_E^d`it6%I3L*^>PZ(!Gx1ydrbI$G4rq0REo}GO^&7`vLa*wrU z%(yLg={&Awi%J&f6qU>Ri*tnJ?PdX%4S6Tm)eq!nm%_@aw5+g1Oasc+!D0<&Ho-l< z+*<-g$J9Z&H<+F6%`M1woBmkSA8-0Mn*IdSzX?i^wE(FTWpk^QQ%CU%GCuxto)E19 zm{)|&LWJfp?nV)cMnK&w@hS}$O;J50rS-R@-UZd7%LxdB{` z>C3wSY6rR;yO`K9!F-clT+)|4n8|j1E=a_NQc4(`j6yAYIktz#^o5jlsZ4d`zc4!F zbT8!|MR#PQ12LZBJcji!ej@%dTC5wc|B}_%szHch|b=# zbEzk3-jX}=z2Ku>tzNv#poJ)c-N;0iSs8enBHMBwotb#-*xpM-9!6MaHA*ruO;Z}W zv6<678ae(8Y-LWaq7n{ww_s}LLF;l%PNXDPRAzvIg<&Rr$m zq>T>goL9KK5L&8ME|wt3=1%FwIHhNmJuOvwHLmHUEY^w*nLKL#VO@C%EK*Ey$JZIy zsfSt#EsT~bB}I92@*RrniD2XiMaL*5ghQZgH#*>FrZ7LMQIh(o$n7Sj^O(cNkKOjnua(kkb{ zB#05_Ln|DD_nAH{P_)kJF0B*BT^36y@fC1HX+cXmhsUKk@U!yX(!F3wHx%iH_L1&Q zOS+LrH?og(ADQXc#8jk9MY>vxsYW8g`TPxzmLq}`8KBl80E%dMO@!lf9L_=pkR}mlFq4#hW=8z>HJf(7r2_Rz-_lLm!CITv z3bRc7rbU|sM-#zoB@YJn30FS5WK|LP(B;{khzMA|nU@GmX!ZGeAeffoXv5A$C6 z*u?MitmQp~c=fRS??=J>t%-UVk6{~r2)`W#zaIsE7zLk-g85xXb^qEWAl^_8ewgW! z6AAN^vg*z}!jl1~g8CeJgl{Em-W^2v9>D6ZFT#}h>fSiQ8wi_s?GdKgb1TfJIe!xV z3*aS}NqX@+O$Px_GwDhA2w-&=5!0UltnPUvJQ&RVswMyBfbCh5Uj}1*e~ru!Gv({e z`bGh!`Sdj=JPq*mW`D81S%4Q=+Pe@i;8V^W%jyN2lardJHNd-y}W`?FzsfEcFcsoC^BFR$Zh| z0c^LF$IAnjnd6o1rRne$miF+whUzXt*2j-xDEaBaEWn@CEU=`n1iaJ&KMc6kLcjHZ z6D|1s4)A954?IZ20opda^t0rz2dwVqWBq>xe63k}lKv=Q2weOj{ZDkY0nV`S;|ak0*#Pwq=BMejy5o>AZ{w*%e`lNV zw*gjn1~R@7@FI-Y3>Q^12P{7I8+)+GPhv@?L!U1>~zF(&Yd7JAUEI~o0{=*4eL{K`__IKb+TJ?5Va zIME`n?+0vcAAc&L?yhC}2LZR*<$bz@pJF`nEB^Tv#p+Xrb>NfYn`d%+GH+Y_zn$6fpHmDNp0Hb%3q-tp}{`7i9jQ10G>1 z{{_IBMgF`2c)ta|9e~ySrObaAu(}tK@NvM@UuFFlX{P~i1hvLvo@2ZNDr%!ezFZFY zUQ7AIsKQ$K`)a`IensX_2CVK(CY%9S-Em9!+kl%;KGg*F&m!hWe@;LErSl!h}cst++E%-G8RzEYkT8q(+0X}P?-`@dS>HRrib>}V1yM`*cdG{&d z>44iT<=+apG*RBO%J>|>FIvhk0GwzUkNiS~b^P-K6t!2&yH1(^S;kw^|AP53U)3O# z^m!RDzeV{xV5a|&`OUkB34a3kSqpycfGf?rSQ&o_I=aIp?@lIsCEyX3`bGd&_uw-A zX233se7Fs|4QC$By6GA&jG8uU73F`U@JXZ z0IRz*86PW_L=kz{AMg$fzw+0B>V90NzYg%N7I~2j_+blvHv;BYVQ)3*n+|x41;2TK z)&0IK&j(oDUrhLMz%>?r_&MMv$cMFNdA|dk2zmIj3GV}}?g3~17QhEB^&JMh*8*$P zuwOf-TuYyJ`|b0yGp5e;WKW$ld*)m-Al;LmJ$vqq+f8tmXXSk7~`Wy?y6aZ>18jAI3_uMCEr_)TZF`HqhpbW765 zSs7cNZn2W$UZn`Lny4@!`q)NK^^%PVU9Lme?e-1~+)xY8L@qGu#ux-$PMmM%?}d#?a9MY z#xJCYOgX;$;bh;{iEd;K6D`<@mP-Q}WtV~^Od$*pP|d&TO!7u)^a(CnFF3S!lW5`q z`DL2mAZ@h8j^sixlIZd1*xv1VdK6;$eVWPgL=|<521U$kA_R*TN#U68W8}s@evt%A zirlioQW$g0m%nRc%erTc*kXdP6U6ClPwOl8POl8CxYSKE4O$gRPVM95uxIVz-!L+& z2RHWeBa)s)K-`6GKzp970-9GyyGDjoY)4sXaIusK~ zrd2;t;BQ8NtDwQZIj%Y5V@En6Th7Em#!C5~V0+?EOc*(oBvBl1Zc6(d!S}tafwKo zf)`cZ#I6woqNgepW?!je^d>Zv$Qjog>U|q&!f;XjO0c(5d+A@1KCBt_LZ|RlawA(L zRLW@bt45C%^JPzkq?=WHuLKn(^z0*(?@c>LkuzHTm9z-|vPFKy59|&Nxa>RQurR#v zT%f@JMhfJYUs!;Jf8U59_y6?*EbAWyj)AZ>h9D2ftw!3e@=LTz?RkSVE8%Dj(G$|st^D!C?=x6KB4nMv3sPBp3tywRSyFgqW>7=MM$`)k~DSHna@k{@{3|vxRa`c6F^4 z@0H9lAE2>*B%+)z$N1}Qx_F;*owI5&Ore}_)arrj5$SJB_ILJg5Dh{$&H0EM8Qpu0 zAY+5}?*`{jZ88F)oHsPTc(GZtF8{OsUfr4D{om7rBueNX|LE#E6(CBf&Z@7$YQ;!r zll*mdJ;(+*-*klb!>_FPo8}Ds7O8i7{+1Ye4ln<;TGvlub$;ZN6mW!c!d1JRRX+3z zshOVOuea;#S+!v^)=z}5yF%HYlk|52I5jHH5o$e$SkOH)L6#L`IC#sw7S7rrh_wNW)ejL|Hgighv#J@H8tfxRTp#CXJA52v3YzFa_H;^}-cZp`5Aa^x20r-=jSSA}Lg(Fp1o~ZeTh`Wwm~Erc4?pT;4#6+s zPIH8cL6%54mzd=|&2rYW9EDg_8-g09h4E>KnGV{9JfcvA#=ifQXxtml9{LE(pvnmB zL>C5wq7QH}O85~Ri_J>Tpn(#{&>zWhl2#}xxWGY* zHT0VX3@yd+Yww1qHBjptWCZ4*dWw?4K-CDO0*)i518W9` zj-p!-;BR;Nzi>I%?Sx$_veWQ`89iHFlIG#cSMQDB|6A}b`zj@jfBP0IV;bu@bihWE zLH(`Hx{y7v%lWcBMsf}K^FZjbvuJ(R4t>}N2uTO*&@?41+j0(xj@IuP5pSeBf=^dL z_Br2-0c_XfM^KiwT?fM=e`lB8;H+vzUdj+96hjWwep(0_SSV@Es&~;iIewilJA}v# zkKEAgsI+fb)4FRT2@|6dmQx-Jp@2do$y&oadML(U>p1lEB9cM~>(Cpg6(>RX`B@Q! zAB2h$enyOQOOPU{KzD==baZb7?ghW)TNWxe2%z&*e*x)E*ti2iy; z1wGrqTqwg8^c>V56zDnh`GUpTXos27;0$a_U)GFyt$2#TR^ z0}JTANE;-X85=4=X@>&j-$TPjw5_^PYA(Ds$1s%xkH0g< z`A80=lBK+XeU&#nj4X(%g&spwrAES08rDHVuNj;@gnxCK1md05OY zYBmV{2dYp}*1?-=36G4``!Pzaa^erbLk(#$4#OhFh^cmjWEcUT5`eL zo@RJMgPvA+m`ojq!1ITmrqG0db%}wB5mg9FIa&67QaT(8Fp0B@U+k6dz@A*1L zNp(gv5|wdcb3R#LwbvOa0tLc#Wru-$=i?8fQ0L2n4~_KJYR}vLkS(xFPj7WrcOq)1 z=bcf|ZJg`M0R$^H>tAfWub`lSicLswtm_;_a-#Be(GSi5TcCHM z_R~#QbxK_?GV(%QU`MGEDg`hDrITrdx6URf=J$*4_sM9vqV*x&_nix>~>ix$;p1|2nhnqX(82Bk%h{KJc>{u$WQnvg^b&&Puz3ZHp!v7kLLXR_)!R9myRW%I z=?Fu`f^aRLR!)NMJQ^L>vMV;dH8c{qw6w~RH9GW5s?c(9I;);S1<=ky?;$^UD471< zPS3l^)t;u%E@a{)gV_+{jq}r-5iU$kSnz>JYKe$J_Zj(zT8(#*Ic29G44o1xMSOw( z*7(%WQA`OD@iF3KDL&poXy`{!MNhYY^GDZ&G}LH#kY`qWYH+z0+Q4iTt%0u9SF72> z*WVkG2UBRb_qe9)U1O(e*}Hxvd`#G3F}F~z!gg&r@rkd`oohTSDfIcuF$U# z(y}YGnnYc$1-E^JG|SXK@gE=B_Q@`klY3~tG5L=l(e{Sy1@AYEtWLvsPCuTtJ?QzAsi;n{ zex$bRNckjEw(sX6@*YtE5T(K*Ff2g({5ulv z&f1Rj3l|{A6!e)uY$!GRJtz;&3mh;mfv|M0+Xh%~Xz(<{*NlG9#*77aJ+oE!vibaq{hjf<_Bk`v{X#Dr8ft5tsd&$E5@ty<>}WQtF}+V zEDV8s!uGD=aiK)N7E|D#qZ$yv>7str%Gf5()&@6FEIZe$*G9{|VeL-ZN; z_K#2_aAT(-O+yT+(ZHEdQ|T4vmJ&QJ|FUK*beODxf3)^z(9LH5#x=5k6F@9rJEAwNmedldhK4*RA+>(VpM`yRH zmV&x7j;dYyZtu3>v^7(%Tz*k-TH+MviiP?I!D+QqZYEqg<-rv*MP=24s_(V6|Il6A zzMiGFTS`4OO0*>jrMBuH6x5w{RPEK9u*E~3sLh^|<$U-knz)r+7MhPgEa0T2fR{u8 z&cJBI1x{_oX2KY}=^qfqV<^lw(zskS62oXn11N$Yqu6)$`|8dawvjt$#7y(=jIACN zI?JIu?ZYWqE7k|6(pzT?7pMmg_>hYdWpkX&HA3YYQa#reV%G*~*{>C>{i5q4=ej#k zyYtQMdi}Mv_-QuCzxIgM0sa!CSG`boHr~IxwR%R(Ru0SRA)yCYOd6Z}$Y2y8sWt>u z3oSxSL_Q3~Oxh6l{G2#7#38I*VkmhiTiVwDMh>NVuYH%^wB5LvNdvpQ|KJ+Lp*LB$ z5d6pC>@u<(ZK;2vjP?#{y9qBw#>Bwhf*S7(=bQ85Pt`lTON=xZVm+toZN9HSWjzw( zi#5^`^fZTmhs#}i_q~uk%Qb{FqzSZ6H|uFbk#2{JQEeaZKz{(YfiHD+wf|agy0#M2 z+&8IEdw+wKb=y9~v#R!=oT_(;j`r^GAF+FHGRnt;Ertivrl;)m4sQD~%ke^}p{&PW z11F@7C*6Tufj>9?KtmcdSnz#pf&aF62MY{M2Pv)NO~|kKpLSrw%-B2&oyrmP0y4!B z&^;Z-z4qW6)d+wRwrWUw5k%eOs-ILM!0SYi|BEi~osiIhy}nP38Fpj-GY$;UlxA;v z!}MoF)4^na5!|M?>}w4?f?s!N-unZOa6`v8&#?c5TT@_QxgzY^ivoSW3%>YuRG^_i z4C=W?Kal!XBeO$~q4fSM8f~O^815P>>Gz;P{vGi`vg!BQ+iOrH$kDZz^XJ`&?AoiJ zGUuPrZ2%#GeI5Ev%KP>=!la1s6WAx-!cU;==3jnE4hqi)x~I`dZ#1U4^voUZy_2W9 zoR1GedyUK;AdbH-LH8W3YmL#<+x+zjdggIky{*x3U}E5`kiN$lfK5}+9w@G-PXuap z5B@hh1Aiew(svl1MyMg8$6vpKg2Gw7nK7BQZme6{8axne z#QT>WwfWoZh%fup$UF+d=-TB@HtN${q3WF(;{~qs9tFjVY%JEY?DpzINcQMISx8vuTl4GZt&DFHS&?TuObky zHikdRaBOP(D-!xUAC48P{RD=I&pkAFhVtFr)!=ywO@X&jdM^+WkgFkeIuk&DGNw)E zHXEc^n~pJw{i&)0x@V6*HPuQX_NIYY1Ub-B~+!TOsPr zCV3OkDE|@XA7c;RxM(bzC|C;obcK6Ydo1JvrXBBqgYj>tA`*+E_s;r`NuD@-!el?s z^Js0=V6;|7w6sZ*K75W}Nyt^V(w?zIR|$ynw^Bs$=N1mbh9ZJUIUCJJCbvY+WSN zMHY6s>~P5>heIZc?EYqSKlIQHBXbYVM9g|aEjSy|_i4mHbvx^GkHi#XKtk{In6cc&UO=Ql97rEdKtnr@_z zz}9)y!{=})wlY==X2kj?AWR=@8HY6(JzZ-W_>m<|7sEd^0O{9ab?DT#ZbT{Gt?j=@ zu3(0vTSmioeC^J$;MZ7RoBv;l&UNRAi4Y2}q_VINl1}V95}ez*udP31ynF8*Yd;-_ z40pMP0`J$V-coR9pL z1yv+;jd;Bk{i5`f^cT>{0k?>&F?>&&QyA9kR~Vknf!fuVPR1ryr}J@sU?a&>lhlyp z*=%Gz891;y*ASVjwm`rJPOY8|H4bawCay5Kza2lKZ7weI);&!Iq%qcq-Q&t2X7uec zO05}-@ihxQYn$PDGO5EEcm_3cVZf%Ci^~7}Dqmj=?1g%=`YT5Ii>c7rB_)3x;^lBEcehVThpsZr}$8xpm}ZQu%^(GmY?etHElJjhB+#RtCyhTP zhfA^bguvqkA*6v<)iXd46#ohi1JIHtOA%8<5lu#VQ{a@IzQY+<2o5uZU_+Quu?K9T zXFjGwr>NLZeLb@gByGD9=K&A^x@Us{-Af?7jf?Vh5EvSmK((S#--!x2ZN5nYk$%f? zDJwc9HJ(@v2K{*QWp?I!SovU~(!bL;(C|FQ1V05XP++U?L~{oE62jrL07HyEK8mv;-@;((*-15}CLjfY2{-zPxvRthJJiD*X(+UD8jtlB`OqDKa^ zbz;kbAF+b2*&~r?u-&L|=ulWb5Q%n#_Cos+>tTTb#A6r!}A{Gb);5v-UK2YS|V&YrkHxgM|sc?bf1VkeA9M0!;;Y8;I)f)ST-+ zAWLB5AhQc>%@B;4_WGzm=CjSevk>4segCKVjVLKIRDOCN?KSPV29I?h>D$pfZ}5&Ce8 z@Ry@(2$~7D=90@oc(YxA`>2M$L|LgLGY12vWS5cp~{1V$-MNJ&1FHk0Qg4%lKrqdrd zs}>+iZ=$Bu>O2@PbV0qTt`kc}sk=C<#v+A#uh6ofHr3mn7h2PwmDbehYY)ARuF>BL zIpH;Uxb8)Fa2IdgL{{t@s{1zTzNbPvP;De02n4+@TW~eDSM&-da6bMlQuzNBCfY%s znt6n(*!~;!vO@@jOd(A8Eh!MU1x<|}a%69Fye*|j@$A633}p+VY)Zv zM4gV%P1rfdaE@`V%V!=jOI2SE-OgGa*opIt1<7@yIyvQ4Y@>8Njtao^+qG!H&iAWN0UXA$Njz*7yzclG$0{` zDe90D7TaVj+x;q|dXm=<9z;P-5>`71U|a#ro7gp$*c{spk8c80bSsV;QGY%h7n&QLPVvu0tsd93%w-XhI zMuU=&d7AU_X^3$?R)OR#ab)(xyUf*zc`oWtMsIiL=TL?aN=?QzyU-S-`nCpBBfD?A zG1C>a2QZuS{K27j`fG(rMKDclPab_m@QLUmAs(c3UyG>?13xquqsMpgDRc+**}&ys zF#odsm{#^zPE7WGrf(Q(N}w=!Hh`M2*g|K;ga#l^bQVvklNw-O_*;Y^ z|4uChiLhxBss}GieLu8MNC+V@LtAmOC`#Syt~Jv4Ls$7ptA}a{TqlkkPN3nuW{CM?{%MYzC6`dRqGuvWt4Y9<*Jxb-ehbY_y33PYJXR( z7hYqh32uBt!!+Ff?rZEO8Ngf8+uuNXUUjX#=E5J5bG>CtQSAp_&vTiIc%#(8-BlaP zaK1S+{&|P9iuPPaHqMHiRV{qYbh!_>Pdy*Qqa*D3@gV(q4E#2f4mx(wb5?yQfTIM= z&9Vm1K?$|e!zLT{3LeC!7KBL^zrASqu&&wK*S~1cG2MrFsc`iEW1%au-p89TF{VOUicGhMP3gPa5ei zW2(e*s>552f^EJIk{{()wLgQZ4Y%=ayT8t%<81AK_tUjsXlS?IygF{Hc;T2O@61d@ z9bF4YqPg|Xb@SL;vgjs+Oa+oj9ANuw?_)poweH2X|AIt(#xxq)kE}$Xpe7Vg!ErhI zVfl?{Ud`$oM4Qq(^uz1}%zkbC(I(jkxBp1?K?`V+KM8`1U(<_)wT+Yj+F@x9~q8Ob;i*PF~Uakh01HiUW3WFWPBFPhoZ zeh~6j$kU;19@Ni6ck{T`Joa8Au!%GVZ!-PAIe)w22}~n6%0AEe8|5UA&@rAW9KdIn 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 zKoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy z1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6ahs*5l{pa0YyL&Py`eK zML-cy1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6ahs*5l{pa0YyL& zPy`eKML-cy1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6ahs*5l{pa z0YyL&Py`eKML-cy1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6ahs* z5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*` z6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9 zKoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy z1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6ahs*5l{pa0YyL&Py`eK zML-cy1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6ahs*5l{pa0YyL& zPy`eKML-cy1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6ahs*5l{pa z0YyL&Py`eKML-cy1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6ahs* z5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*` z6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9 zKoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy z1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6ahs*5l{pa0YyL&Py`eK zML-cy1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6ahs*5l{pa0YyL& zPy`eKML-cy1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6ahs*5l{pa z0YyL&Py`eKML-cy1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6ahs* z5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*` z6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9 zKoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy z1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6ahs*5l{pa0YyL&Py`eK zML-cy1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6ahs*5l{pa0YyL& zPy`eKML-cy1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6ahs*5l{pa z0YyL&Py`eKML-cy1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6ahs* z5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*` V6ahs*5l{pa0YyL&_`e2${|VT%m%{)6 literal 0 HcmV?d00001 diff --git a/user_mode/go b/user_mode/go new file mode 100755 index 0000000..3ce37dc --- /dev/null +++ b/user_mode/go @@ -0,0 +1,11 @@ +#!/bin/sh + +cd src +make +success=$? +cd .. +if [ $success -eq 0 ]; then + sudo ./update_image.sh + sudo ./run_bochs.sh + grep -F 'CPU0' bochs.out +fi diff --git a/user_mode/initrd.img b/user_mode/initrd.img new file mode 100644 index 0000000000000000000000000000000000000000..630c3c1e9e0ee07b25c88e06d381f88f7d4c238f GIT binary patch literal 4910 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 Rd7MbA{$;@XM*+Wue*wZX!#n^0 literal 0 HcmV?d00001 diff --git a/user_mode/make_initrd.c b/user_mode/make_initrd.c new file mode 100644 index 0000000..af93d89 --- /dev/null +++ b/user_mode/make_initrd.c @@ -0,0 +1,58 @@ +#include + +struct initrd_header +{ + unsigned char magic; + char name[64]; + unsigned int offset; + unsigned int length; +}; + +int main(char argc, char **argv) +{ + + int nheaders = (argc-1)/2; + struct initrd_header headers[64]; + printf("size of header: %d\n", sizeof(struct initrd_header)); + unsigned int off = sizeof(struct initrd_header) * 64 + sizeof(int); + + int i; + for(i = 0; i < nheaders; i++) + { + printf("writing file %s->%s at 0x%x\n", argv[i*2+1], argv[i*2+2], off); + strcpy(headers[i].name, argv[i*2+2]); + headers[i].name[strlen(argv[i*2+2])] = '\0'; + headers[i].offset = off; + FILE *stream = fopen(argv[i*2+1], "r"); + if(stream == 0) + { + printf("Error: file not found: %s\n", argv[i*2+1]); + return 1; + } + fseek(stream, 0, SEEK_END); + headers[i].length = ftell(stream); + off += headers[i].length; + fclose(stream); + headers[i].magic = 0xBF; + } + + FILE *wstream = fopen("./initrd.img", "w"); + unsigned char *data = (unsigned char *)malloc(off); + fwrite(&nheaders, sizeof(int), 1, wstream); + fwrite(headers, sizeof(struct initrd_header), 64, wstream); + + for(i = 0; i < nheaders; i++) + { + FILE *stream = fopen(argv[i*2+1], "r"); + unsigned char *buf = (unsigned char *)malloc(headers[i].length); + fread(buf, 1, headers[i].length, stream); + fwrite(buf, 1, headers[i].length, wstream); + fclose(stream); + free(buf); + } + + fclose(wstream); + free(data); + + return 0; +} diff --git a/user_mode/run_bochs.sh b/user_mode/run_bochs.sh new file mode 100755 index 0000000..c3fc32a --- /dev/null +++ b/user_mode/run_bochs.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +# run_bochs.sh +# mounts the correct loopback device, runs bochs, then unmounts. + +sudo /sbin/losetup /dev/loop0 floppy.img +sudo bochs -f bochsrc +sudo /sbin/losetup -d /dev/loop0 diff --git a/user_mode/src/Makefile b/user_mode/src/Makefile new file mode 100644 index 0000000..c748567 --- /dev/null +++ b/user_mode/src/Makefile @@ -0,0 +1,22 @@ +# Makefile for JamesM's kernel tutorials. +# The C and C++ rules are already setup by default. +# The only one that needs changing is the assembler +# rule, as we use nasm instead of GNU as. + +SOURCES=boot.o main.o monitor.o common.o descriptor_tables.o isr.o interrupt.o gdt.o timer.o \ + kheap.o paging.o ordered_array.o fs.o initrd.o task.o process.o syscall.o + +CFLAGS=-nostdlib -nostdinc -fno-builtin +LDFLAGS=-Tlink.ld +ASFLAGS=-felf + +all: $(SOURCES) link + +clean: + -rm *.o kernel + +link: + ld $(LDFLAGS) -o kernel $(SOURCES) + +.s.o: + yasm $(ASFLAGS) $< diff --git a/user_mode/src/boot.s b/user_mode/src/boot.s new file mode 100644 index 0000000..e9b6d12 --- /dev/null +++ b/user_mode/src/boot.s @@ -0,0 +1,47 @@ +; +; boot.s -- Kernel start location. Also defines multiboot header. +; Based on Bran's kernel development tutorial file start.asm +; + +MBOOT_PAGE_ALIGN equ 1<<0 ; Load kernel and modules on a page boundary +MBOOT_MEM_INFO equ 1<<1 ; Provide your kernel with memory info +MBOOT_HEADER_MAGIC equ 0x1BADB002 ; Multiboot Magic value +; NOTE: We do not use MBOOT_AOUT_KLUDGE. It means that GRUB does not +; pass us a symbol table. +MBOOT_HEADER_FLAGS equ MBOOT_PAGE_ALIGN | MBOOT_MEM_INFO +MBOOT_CHECKSUM equ -(MBOOT_HEADER_MAGIC + MBOOT_HEADER_FLAGS) + + +[BITS 32] ; All instructions should be 32-bit. + +[GLOBAL mboot] ; Make 'mboot' accessible from C. +[EXTERN code] ; Start of the '.text' section. +[EXTERN bss] ; Start of the .bss section. +[EXTERN end] ; End of the last loadable section. + +mboot: + dd MBOOT_HEADER_MAGIC ; GRUB will search for this value on each + ; 4-byte boundary in your kernel file + dd MBOOT_HEADER_FLAGS ; How GRUB should load your file / settings + dd MBOOT_CHECKSUM ; To ensure that the above values are correct + + dd mboot ; Location of this descriptor + dd code ; Start of kernel '.text' (code) section. + dd bss ; End of kernel '.data' section. + dd end ; End of kernel. + dd start ; Kernel entry point (initial EIP). + +[GLOBAL start] ; Kernel entry point. +[EXTERN main] ; This is the entry point of our C code + +start: + ; Load multiboot information: + push esp + push ebx + + ; Execute the kernel: + cli ; Disable interrupts. + call main ; call our main() function. + jmp $ ; Enter an infinite loop, to stop the processor + ; executing whatever rubbish is in the memory + ; after our kernel! diff --git a/user_mode/src/common.c b/user_mode/src/common.c new file mode 100644 index 0000000..445aa07 --- /dev/null +++ b/user_mode/src/common.c @@ -0,0 +1,129 @@ +// common.c -- Defines some global functions. +// From JamesM's kernel development tutorials. + +#include "common.h" + +// Write a byte out to the specified port. +void outb(u16int port, u8int value) +{ + asm volatile ("outb %1, %0" : : "dN" (port), "a" (value)); +} + +u8int inb(u16int port) +{ + u8int ret; + asm volatile("inb %1, %0" : "=a" (ret) : "dN" (port)); + return ret; +} + +u16int inw(u16int port) +{ + u16int ret; + asm volatile ("inw %1, %0" : "=a" (ret) : "dN" (port)); + return ret; +} + +// Copy len bytes from src to dest. +void memcpy(u8int *dest, const u8int *src, u32int len) +{ + const u8int *sp = (const u8int *)src; + u8int *dp = (u8int *)dest; + for(; len != 0; len--) *dp++ = *sp++; +} + +// Write len copies of val into dest. +void memset(u8int *dest, u8int val, u32int len) +{ + u8int *temp = (u8int *)dest; + for ( ; len != 0; len--) *temp++ = val; +} + +// Compare two strings. Should return -1 if +// str1 < str2, 0 if they are equal or 1 otherwise. +int strcmp(char *str1, char *str2) +{ + int i = 0; + int failed = 0; + while(str1[i] != '\0' && str2[i] != '\0') + { + if(str1[i] != str2[i]) + { + failed = 1; + break; + } + i++; + } + // why did the loop exit? + if( (str1[i] == '\0' && str2[i] != '\0') || (str1[i] != '\0' && str2[i] == '\0') ) + failed = 1; + + return failed; +} + +// Copy the NULL-terminated string src into dest, and +// return dest. +char *strcpy(char *dest, const char *src) +{ + do + { + *dest++ = *src++; + } + while (*src != 0); +} + +// Concatenate the NULL-terminated string src onto +// the end of dest, and return dest. +char *strcat(char *dest, const char *src) +{ + while (*dest != 0) + { + *dest = *dest++; + } + + do + { + *dest++ = *src++; + } + while (*src != 0); + return dest; +} + +int strlen(char *src) +{ + int i = 0; + while (*src++) + i++; + return i; +} + +extern void panic(const char *message, const char *file, u32int line) +{ + // We encountered a massive problem and have to stop. + asm volatile("cli"); // Disable interrupts. + + monitor_write("PANIC("); + monitor_write(message); + monitor_write(") at "); + monitor_write(file); + monitor_write(":"); + monitor_write_dec(line); + monitor_write("\n"); + // Halt by going into an infinite loop. + for(;;); +} + +extern void panic_assert(const char *file, u32int line, const char *desc) +{ + // An assertion failed, and we have to panic. + asm volatile("cli"); // Disable interrupts. + + monitor_write("ASSERTION-FAILED("); + monitor_write(desc); + monitor_write(") at "); + monitor_write(file); + monitor_write(":"); + monitor_write_dec(line); + monitor_write("\n"); + // Halt by going into an infinite loop. + for(;;); +} diff --git a/user_mode/src/common.h b/user_mode/src/common.h new file mode 100644 index 0000000..20b003e --- /dev/null +++ b/user_mode/src/common.h @@ -0,0 +1,26 @@ +// common.h -- Defines typedefs and some global functions. +// From JamesM's kernel development tutorials. + +#ifndef COMMON_H +#define COMMON_H + +// Some nice typedefs, to standardise sizes across platforms. +// These typedefs are written for 32-bit X86. +typedef unsigned int u32int; +typedef int s32int; +typedef unsigned short u16int; +typedef short s16int; +typedef unsigned char u8int; +typedef char s8int; + +void outb(u16int port, u8int value); +u8int inb(u16int port); +u16int inw(u16int port); + +#define PANIC(msg) panic(msg, __FILE__, __LINE__); +#define ASSERT(b) ((b) ? (void)0 : panic_assert(__FILE__, __LINE__, #b)) + +extern void panic(const char *message, const char *file, u32int line); +extern void panic_assert(const char *file, u32int line, const char *desc); + +#endif // COMMON_H diff --git a/user_mode/src/descriptor_tables.c b/user_mode/src/descriptor_tables.c new file mode 100644 index 0000000..71fe778 --- /dev/null +++ b/user_mode/src/descriptor_tables.c @@ -0,0 +1,187 @@ +// +// descriptor_tables.c - Initialises the GDT and IDT, and defines the +// default ISR and IRQ handler. +// Based on code from Bran's kernel development tutorials. +// Rewritten for JamesM's kernel development tutorials. +// + +#include "common.h" +#include "descriptor_tables.h" +#include "isr.h" + +// Lets us access our ASM functions from our C code. +extern void gdt_flush(u32int); +extern void idt_flush(u32int); +extern void tss_flush(); + +// Internal function prototypes. +static void init_gdt(); +static void init_idt(); +static void gdt_set_gate(s32int,u32int,u32int,u8int,u8int); +static void idt_set_gate(u8int,u32int,u16int,u8int); +static void write_tss(s32int,u16int,u32int); + +gdt_entry_t gdt_entries[6]; +gdt_ptr_t gdt_ptr; +idt_entry_t idt_entries[256]; +idt_ptr_t idt_ptr; +tss_entry_t tss_entry; + +// Extern the ISR handler array so we can nullify them on startup. +extern isr_t interrupt_handlers[]; + +// Initialisation routine - zeroes all the interrupt service routines, +// initialises the GDT and IDT. +void init_descriptor_tables() +{ + + // Initialise the global descriptor table. + init_gdt(); + // Initialise the interrupt descriptor table. + init_idt(); + // Nullify all the interrupt handlers. + memset(&interrupt_handlers, 0, sizeof(isr_t)*256); +} + +static void init_gdt() +{ + gdt_ptr.limit = (sizeof(gdt_entry_t) * 6) - 1; + gdt_ptr.base = (u32int)&gdt_entries; + + gdt_set_gate(0, 0, 0, 0, 0); // Null segment + gdt_set_gate(1, 0, 0xFFFFFFFF, 0x9A, 0xCF); // Code segment + gdt_set_gate(2, 0, 0xFFFFFFFF, 0x92, 0xCF); // Data segment + gdt_set_gate(3, 0, 0xFFFFFFFF, 0xFA, 0xCF); // User mode code segment + gdt_set_gate(4, 0, 0xFFFFFFFF, 0xF2, 0xCF); // User mode data segment + write_tss(5, 0x10, 0x0); + + gdt_flush((u32int)&gdt_ptr); + tss_flush(); +} + +// Set the value of one GDT entry. +static void gdt_set_gate(s32int num, u32int base, u32int limit, u8int access, u8int gran) +{ + gdt_entries[num].base_low = (base & 0xFFFF); + gdt_entries[num].base_middle = (base >> 16) & 0xFF; + gdt_entries[num].base_high = (base >> 24) & 0xFF; + + gdt_entries[num].limit_low = (limit & 0xFFFF); + gdt_entries[num].granularity = (limit >> 16) & 0x0F; + + gdt_entries[num].granularity |= gran & 0xF0; + gdt_entries[num].access = access; +} + +// Initialise our task state segment structure. +static void write_tss(s32int num, u16int ss0, u32int esp0) +{ + // Firstly, let's compute the base and limit of our entry into the GDT. + u32int base = (u32int) &tss_entry; + u32int limit = base + sizeof(tss_entry); + + // Now, add our TSS descriptor's address to the GDT. + gdt_set_gate(num, base, limit, 0xE9, 0x00); + + // Ensure the descriptor is initially zero. + memset(&tss_entry, 0, sizeof(tss_entry)); + + tss_entry.ss0 = ss0; // Set the kernel stack segment. + tss_entry.esp0 = esp0; // Set the kernel stack pointer. + + // Here we set the cs, ss, ds, es, fs and gs entries in the TSS. These specify what + // segments should be loaded when the processor switches to kernel mode. Therefore + // they are just our normal kernel code/data segments - 0x08 and 0x10 respectively, + // but with the last two bits set, making 0x0b and 0x13. The setting of these bits + // sets the RPL (requested privilege level) to 3, meaning that this TSS can be used + // to switch to kernel mode from ring 3. + tss_entry.cs = 0x0b; + tss_entry.ss = tss_entry.ds = tss_entry.es = tss_entry.fs = tss_entry.gs = 0x13; +} + +void set_kernel_stack(u32int stack) +{ + tss_entry.esp0 = stack; +} + +static void init_idt() +{ + idt_ptr.limit = sizeof(idt_entry_t) * 256 -1; + idt_ptr.base = (u32int)&idt_entries; + + memset(&idt_entries, 0, sizeof(idt_entry_t)*256); + + // Remap the irq table. + outb(0x20, 0x11); + outb(0xA0, 0x11); + outb(0x21, 0x20); + outb(0xA1, 0x28); + outb(0x21, 0x04); + outb(0xA1, 0x02); + outb(0x21, 0x01); + outb(0xA1, 0x01); + outb(0x21, 0x0); + outb(0xA1, 0x0); + + idt_set_gate( 0, (u32int)isr0 , 0x08, 0x8E); + idt_set_gate( 1, (u32int)isr1 , 0x08, 0x8E); + idt_set_gate( 2, (u32int)isr2 , 0x08, 0x8E); + idt_set_gate( 3, (u32int)isr3 , 0x08, 0x8E); + idt_set_gate( 4, (u32int)isr4 , 0x08, 0x8E); + idt_set_gate( 5, (u32int)isr5 , 0x08, 0x8E); + idt_set_gate( 6, (u32int)isr6 , 0x08, 0x8E); + idt_set_gate( 7, (u32int)isr7 , 0x08, 0x8E); + idt_set_gate( 8, (u32int)isr8 , 0x08, 0x8E); + idt_set_gate( 9, (u32int)isr9 , 0x08, 0x8E); + idt_set_gate(10, (u32int)isr10, 0x08, 0x8E); + idt_set_gate(11, (u32int)isr11, 0x08, 0x8E); + idt_set_gate(12, (u32int)isr12, 0x08, 0x8E); + idt_set_gate(13, (u32int)isr13, 0x08, 0x8E); + idt_set_gate(14, (u32int)isr14, 0x08, 0x8E); + idt_set_gate(15, (u32int)isr15, 0x08, 0x8E); + idt_set_gate(16, (u32int)isr16, 0x08, 0x8E); + idt_set_gate(17, (u32int)isr17, 0x08, 0x8E); + idt_set_gate(18, (u32int)isr18, 0x08, 0x8E); + idt_set_gate(19, (u32int)isr19, 0x08, 0x8E); + idt_set_gate(20, (u32int)isr20, 0x08, 0x8E); + idt_set_gate(21, (u32int)isr21, 0x08, 0x8E); + idt_set_gate(22, (u32int)isr22, 0x08, 0x8E); + idt_set_gate(23, (u32int)isr23, 0x08, 0x8E); + idt_set_gate(24, (u32int)isr24, 0x08, 0x8E); + idt_set_gate(25, (u32int)isr25, 0x08, 0x8E); + idt_set_gate(26, (u32int)isr26, 0x08, 0x8E); + idt_set_gate(27, (u32int)isr27, 0x08, 0x8E); + idt_set_gate(28, (u32int)isr28, 0x08, 0x8E); + idt_set_gate(29, (u32int)isr29, 0x08, 0x8E); + idt_set_gate(30, (u32int)isr30, 0x08, 0x8E); + idt_set_gate(31, (u32int)isr31, 0x08, 0x8E); + idt_set_gate(32, (u32int)irq0, 0x08, 0x8E); + idt_set_gate(33, (u32int)irq1, 0x08, 0x8E); + idt_set_gate(34, (u32int)irq2, 0x08, 0x8E); + idt_set_gate(35, (u32int)irq3, 0x08, 0x8E); + idt_set_gate(36, (u32int)irq4, 0x08, 0x8E); + idt_set_gate(37, (u32int)irq5, 0x08, 0x8E); + idt_set_gate(38, (u32int)irq6, 0x08, 0x8E); + idt_set_gate(39, (u32int)irq7, 0x08, 0x8E); + idt_set_gate(40, (u32int)irq8, 0x08, 0x8E); + idt_set_gate(41, (u32int)irq9, 0x08, 0x8E); + idt_set_gate(42, (u32int)irq10, 0x08, 0x8E); + idt_set_gate(43, (u32int)irq11, 0x08, 0x8E); + idt_set_gate(44, (u32int)irq12, 0x08, 0x8E); + idt_set_gate(45, (u32int)irq13, 0x08, 0x8E); + idt_set_gate(46, (u32int)irq14, 0x08, 0x8E); + idt_set_gate(47, (u32int)irq15, 0x08, 0x8E); + idt_set_gate(128, (u32int)isr128, 0x08, 0x8E); + + idt_flush((u32int)&idt_ptr); +} + +static void idt_set_gate(u8int num, u32int base, u16int sel, u8int flags) +{ + idt_entries[num].base_lo = base & 0xFFFF; + idt_entries[num].base_hi = (base >> 16) & 0xFFFF; + + idt_entries[num].sel = sel; + idt_entries[num].always0 = 0; + idt_entries[num].flags = flags | 0x60; +} diff --git a/user_mode/src/descriptor_tables.h b/user_mode/src/descriptor_tables.h new file mode 100644 index 0000000..ea3f74f --- /dev/null +++ b/user_mode/src/descriptor_tables.h @@ -0,0 +1,154 @@ +// +// descriptor_tables.h - Defines the interface for initialising the GDT and IDT. +// Also defines needed structures. +// Based on code from Bran's kernel development tutorials. +// Rewritten for JamesM's kernel development tutorials. +// + +#ifndef DESCRIPTOR_TABLES_H +#define DESCRIPTOR_TABLES_H + +#include "common.h" + +// Initialisation function is publicly accessible. +void init_descriptor_tables(); + +// Allows the kernel stack in the TSS to be changed. +void set_kernel_stack(u32int stack); + +// This structure contains the value of one GDT entry. +// We use the attribute 'packed' to tell GCC not to change +// any of the alignment in the structure. +struct gdt_entry_struct +{ + u16int limit_low; // The lower 16 bits of the limit. + u16int base_low; // The lower 16 bits of the base. + u8int base_middle; // The next 8 bits of the base. + u8int access; // Access flags, determine what ring this segment can be used in. + u8int granularity; + u8int base_high; // The last 8 bits of the base. +} __attribute__((packed)); + +typedef struct gdt_entry_struct gdt_entry_t; + +// This struct describes a GDT pointer. It points to the start of +// our array of GDT entries, and is in the format required by the +// lgdt instruction. +struct gdt_ptr_struct +{ + u16int limit; // The upper 16 bits of all selector limits. + u32int base; // The address of the first gdt_entry_t struct. +} __attribute__((packed)); + +typedef struct gdt_ptr_struct gdt_ptr_t; + +// A struct describing an interrupt gate. +struct idt_entry_struct +{ + u16int base_lo; // The lower 16 bits of the address to jump to when this interrupt fires. + u16int sel; // Kernel segment selector. + u8int always0; // This must always be zero. + u8int flags; // More flags. See documentation. + u16int base_hi; // The upper 16 bits of the address to jump to. +} __attribute__((packed)); + +typedef struct idt_entry_struct idt_entry_t; + +// A struct describing a pointer to an array of interrupt handlers. +// This is in a format suitable for giving to 'lidt'. +struct idt_ptr_struct +{ + u16int limit; + u32int base; // The address of the first element in our idt_entry_t array. +} __attribute__((packed)); + +typedef struct idt_ptr_struct idt_ptr_t; + +// A struct describing a Task State Segment. +struct tss_entry_struct +{ + u32int prev_tss; // The previous TSS - if we used hardware task switching this would form a linked list. + u32int esp0; // The stack pointer to load when we change to kernel mode. + u32int ss0; // The stack segment to load when we change to kernel mode. + u32int esp1; // Unused... + u32int ss1; + u32int esp2; + u32int ss2; + u32int cr3; + u32int eip; + u32int eflags; + u32int eax; + u32int ecx; + u32int edx; + u32int ebx; + u32int esp; + u32int ebp; + u32int esi; + u32int edi; + u32int es; // The value to load into ES when we change to kernel mode. + u32int cs; // The value to load into CS when we change to kernel mode. + u32int ss; // The value to load into SS when we change to kernel mode. + u32int ds; // The value to load into DS when we change to kernel mode. + u32int fs; // The value to load into FS when we change to kernel mode. + u32int gs; // The value to load into GS when we change to kernel mode. + u32int ldt; // Unused... + u16int trap; + u16int iomap_base; + +} __attribute__((packed)); + +typedef struct tss_entry_struct tss_entry_t; + + +// These extern directives let us access the addresses of our ASM ISR handlers. +extern void isr0 (); +extern void isr1 (); +extern void isr2 (); +extern void isr3 (); +extern void isr4 (); +extern void isr5 (); +extern void isr6 (); +extern void isr7 (); +extern void isr8 (); +extern void isr9 (); +extern void isr10(); +extern void isr11(); +extern void isr12(); +extern void isr13(); +extern void isr14(); +extern void isr15(); +extern void isr16(); +extern void isr17(); +extern void isr18(); +extern void isr19(); +extern void isr20(); +extern void isr21(); +extern void isr22(); +extern void isr23(); +extern void isr24(); +extern void isr25(); +extern void isr26(); +extern void isr27(); +extern void isr28(); +extern void isr29(); +extern void isr30(); +extern void isr31(); +extern void irq0 (); +extern void irq1 (); +extern void irq2 (); +extern void irq3 (); +extern void irq4 (); +extern void irq5 (); +extern void irq6 (); +extern void irq7 (); +extern void irq8 (); +extern void irq9 (); +extern void irq10(); +extern void irq11(); +extern void irq12(); +extern void irq13(); +extern void irq14(); +extern void irq15(); +extern void isr128(); + +#endif diff --git a/user_mode/src/fs.c b/user_mode/src/fs.c new file mode 100644 index 0000000..a9e88b3 --- /dev/null +++ b/user_mode/src/fs.c @@ -0,0 +1,58 @@ +// fs.c -- Defines the interface for and structures relating to the virtual file system. +// Written for JamesM's kernel development tutorials. + +#include "fs.h" + +fs_node_t *fs_root = 0; // The root of the filesystem. + +u32int read_fs(fs_node_t *node, u32int offset, u32int size, u8int *buffer) +{ + // Has the node got a read callback? + if (node->read != 0) + return node->read(node, offset, size, buffer); + else + return 0; +} + +u32int write_fs(fs_node_t *node, u32int offset, u32int size, u8int *buffer) +{ + // Has the node got a write callback? + if (node->write != 0) + return node->write(node, offset, size, buffer); + else + return 0; +} + +void open_fs(fs_node_t *node, u8int read, u8int write) +{ + // Has the node got an open callback? + if (node->open != 0) + return node->open(node); +} + +void close_fs(fs_node_t *node) +{ + // Has the node got a close callback? + if (node->close != 0) + return node->close(node); +} + +struct dirent *readdir_fs(fs_node_t *node, u32int index) +{ + // Is the node a directory, and does it have a callback? + if ( (node->flags&0x7) == FS_DIRECTORY && + node->readdir != 0 ) + return node->readdir(node, index); + else + return 0; +} + +fs_node_t *finddir_fs(fs_node_t *node, char *name) +{ + // Is the node a directory, and does it have a callback? + if ( (node->flags&0x7) == FS_DIRECTORY && + node->finddir != 0 ) + return node->finddir(node, name); + else + return 0; +} diff --git a/user_mode/src/fs.h b/user_mode/src/fs.h new file mode 100644 index 0000000..ba9f38b --- /dev/null +++ b/user_mode/src/fs.h @@ -0,0 +1,65 @@ +// fs.h -- Defines the interface for and structures relating to the virtual file system. +// Written for JamesM's kernel development tutorials. + +#ifndef FS_H +#define FS_H + +#include "common.h" + +#define FS_FILE 0x01 +#define FS_DIRECTORY 0x02 +#define FS_CHARDEVICE 0x03 +#define FS_BLOCKDEVICE 0x04 +#define FS_PIPE 0x05 +#define FS_SYMLINK 0x06 +#define FS_MOUNTPOINT 0x08 // Is the file an active mountpoint? + +struct fs_node; + +// These typedefs define the type of callbacks - called when read/write/open/close +// are called. +typedef u32int (*read_type_t)(struct fs_node*,u32int,u32int,u8int*); +typedef u32int (*write_type_t)(struct fs_node*,u32int,u32int,u8int*); +typedef void (*open_type_t)(struct fs_node*); +typedef void (*close_type_t)(struct fs_node*); +typedef struct dirent * (*readdir_type_t)(struct fs_node*,u32int); +typedef struct fs_node * (*finddir_type_t)(struct fs_node*,char *name); + +typedef struct fs_node +{ + char name[128]; // The filename. + u32int mask; // The permissions mask. + u32int uid; // The owning user. + u32int gid; // The owning group. + u32int flags; // Includes the node type. See #defines above. + u32int inode; // This is device-specific - provides a way for a filesystem to identify files. + u32int length; // Size of the file, in bytes. + u32int impl; // An implementation-defined number. + read_type_t read; + write_type_t write; + open_type_t open; + close_type_t close; + readdir_type_t readdir; + finddir_type_t finddir; + struct fs_node *ptr; // Used by mountpoints and symlinks. +} fs_node_t; + +struct dirent +{ + char name[128]; // Filename. + u32int ino; // Inode number. Required by POSIX. +}; + +extern fs_node_t *fs_root; // The root of the filesystem. + +// Standard read/write/open/close functions. Note that these are all suffixed with +// _fs to distinguish them from the read/write/open/close which deal with file descriptors +// , not file nodes. +u32int read_fs(fs_node_t *node, u32int offset, u32int size, u8int *buffer); +u32int write_fs(fs_node_t *node, u32int offset, u32int size, u8int *buffer); +void open_fs(fs_node_t *node, u8int read, u8int write); +void close_fs(fs_node_t *node); +struct dirent *readdir_fs(fs_node_t *node, u32int index); +fs_node_t *finddir_fs(fs_node_t *node, char *name); + +#endif diff --git a/user_mode/src/gdt.s b/user_mode/src/gdt.s new file mode 100644 index 0000000..1b507ec --- /dev/null +++ b/user_mode/src/gdt.s @@ -0,0 +1,37 @@ +; +; Gdt.s -- contains global descriptor table and interrupt descriptor table +; setup code. +; Based on code from Bran's kernel development tutorials. +; Rewritten for JamesM's kernel development tutorials. + +[GLOBAL gdt_flush] ; Allows the C code to call gdt_flush(). + +gdt_flush: + mov eax, [esp+4] ; Get the pointer to the GDT, passed as a parameter. + lgdt [eax] ; Load the new GDT pointer + + mov ax, 0x10 ; 0x10 is the offset in the GDT to our data segment + mov ds, ax ; Load all data segment selectors + mov es, ax + mov fs, ax + mov gs, ax + mov ss, ax + jmp 0x08:.flush ; 0x08 is the offset to our code segment: Far jump! +.flush: + ret + +[GLOBAL idt_flush] ; Allows the C code to call idt_flush(). + +idt_flush: + mov eax, [esp+4] ; Get the pointer to the IDT, passed as a parameter. + lidt [eax] ; Load the IDT pointer. + ret + +[GLOBAL tss_flush] ; Allows our C code to call tss_flush(). +tss_flush: + mov ax, 0x2B ; Load the index of our TSS structure - The index is + ; 0x28, as it is the 5th selector and each is 8 bytes + ; long, but we set the bottom two bits (making 0x2B) + ; so that it has an RPL of 3, not zero. + ltr ax ; Load 0x2B into the task state register. + ret diff --git a/user_mode/src/initrd.c b/user_mode/src/initrd.c new file mode 100644 index 0000000..3bf2a7c --- /dev/null +++ b/user_mode/src/initrd.c @@ -0,0 +1,117 @@ +// initrd.c -- Defines the interface for and structures relating to the initial ramdisk. +// Written for JamesM's kernel development tutorials. + +#include "initrd.h" + +initrd_header_t *initrd_header; // The header. +initrd_file_header_t *file_headers; // The list of file headers. +fs_node_t *initrd_root; // Our root directory node. +fs_node_t *initrd_dev; // We also add a directory node for /dev, so we can mount devfs later on. +fs_node_t *root_nodes; // List of file nodes. +int nroot_nodes; // Number of file nodes. + +struct dirent dirent; + +static u32int initrd_read(fs_node_t *node, u32int offset, u32int size, u8int *buffer) +{ + initrd_file_header_t header = file_headers[node->inode]; + if (offset > header.length) + return 0; + if (offset+size > header.length) + size = header.length-offset; + memcpy(buffer, (u8int*) (header.offset+offset), size); + return size; +} + +static struct dirent *initrd_readdir(fs_node_t *node, u32int index) +{ + if (node == initrd_root && index == 0) + { + strcpy(dirent.name, "dev"); + dirent.name[3] = 0; + dirent.ino = 0; + return &dirent; + } + + if (index-1 >= nroot_nodes) + return 0; + strcpy(dirent.name, root_nodes[index-1].name); + dirent.name[strlen(root_nodes[index-1].name)] = 0; + dirent.ino = root_nodes[index-1].inode; + return &dirent; +} + +static fs_node_t *initrd_finddir(fs_node_t *node, char *name) +{ + if (node == initrd_root && + !strcmp(name, "dev") ) + return initrd_dev; + + int i; + for (i = 0; i < nroot_nodes; i++) + if (!strcmp(name, root_nodes[i].name)) + return &root_nodes[i]; + return 0; +} + +fs_node_t *initialise_initrd(u32int location) +{ + // Initialise the main and file header pointers and populate the root directory. + initrd_header = (initrd_header_t *)location; + file_headers = (initrd_file_header_t *) (location+sizeof(initrd_header_t)); + + // Initialise the root directory. + initrd_root = (fs_node_t*)kmalloc(sizeof(fs_node_t)); + strcpy(initrd_root->name, "initrd"); + initrd_root->mask = initrd_root->uid = initrd_root->gid = initrd_root->inode = initrd_root->length = 0; + initrd_root->flags = FS_DIRECTORY; + initrd_root->read = 0; + initrd_root->write = 0; + initrd_root->open = 0; + initrd_root->close = 0; + initrd_root->readdir = &initrd_readdir; + initrd_root->finddir = &initrd_finddir; + initrd_root->ptr = 0; + initrd_root->impl = 0; + + // Initialise the /dev directory (required!) + initrd_dev = (fs_node_t*)kmalloc(sizeof(fs_node_t)); + strcpy(initrd_dev->name, "dev"); + initrd_dev->mask = initrd_dev->uid = initrd_dev->gid = initrd_dev->inode = initrd_dev->length = 0; + initrd_dev->flags = FS_DIRECTORY; + initrd_dev->read = 0; + initrd_dev->write = 0; + initrd_dev->open = 0; + initrd_dev->close = 0; + initrd_dev->readdir = &initrd_readdir; + initrd_dev->finddir = &initrd_finddir; + initrd_dev->ptr = 0; + initrd_dev->impl = 0; + + root_nodes = (fs_node_t*)kmalloc(sizeof(fs_node_t) * initrd_header->nfiles); + nroot_nodes = initrd_header->nfiles; + + // For every file... + int i; + for (i = 0; i < initrd_header->nfiles; i++) + { + // Edit the file's header - currently it holds the file offset + // relative to the start of the ramdisk. We want it relative to the start + // of memory. + file_headers[i].offset += location; + // Create a new file node. + strcpy(root_nodes[i].name, &file_headers[i].name); + root_nodes[i].mask = root_nodes[i].uid = root_nodes[i].gid = 0; + root_nodes[i].length = file_headers[i].length; + root_nodes[i].inode = i; + root_nodes[i].flags = FS_FILE; + root_nodes[i].read = &initrd_read; + root_nodes[i].write = 0; + root_nodes[i].readdir = 0; + root_nodes[i].finddir = 0; + root_nodes[i].open = 0; + root_nodes[i].close = 0; + root_nodes[i].impl = 0; + } + return initrd_root; +} diff --git a/user_mode/src/initrd.h b/user_mode/src/initrd.h new file mode 100644 index 0000000..3d0d28b --- /dev/null +++ b/user_mode/src/initrd.h @@ -0,0 +1,27 @@ +// initrd.h -- Defines the interface for and structures relating to the initial ramdisk. +// Written for JamesM's kernel development tutorials. + +#ifndef INITRD_H +#define INITRD_H + +#include "common.h" +#include "fs.h" + +typedef struct +{ + u32int nfiles; // The number of files in the ramdisk. +} initrd_header_t; + +typedef struct +{ + u8int magic; // Magic number, for error checking. + s8int name[64]; // Filename. + u32int offset; // Offset in the initrd that the file starts. + u32int length; // Length of the file. +} initrd_file_header_t; + +// Initialises the initial ramdisk. It gets passed the address of the multiboot module, +// and returns a completed filesystem node. +fs_node_t *initialise_initrd(u32int location); + +#endif diff --git a/user_mode/src/interrupt.s b/user_mode/src/interrupt.s new file mode 100644 index 0000000..35a7cca --- /dev/null +++ b/user_mode/src/interrupt.s @@ -0,0 +1,151 @@ +; +; interrupt.s -- Contains interrupt service routine wrappers. +; Based on Bran's kernel development tutorials. +; Rewritten for JamesM's kernel development tutorials. + +; This macro creates a stub for an ISR which does NOT pass it's own +; error code (adds a dummy errcode byte). +%macro ISR_NOERRCODE 1 + global isr%1 + isr%1: + cli ; Disable interrupts firstly. + push byte 0 ; Push a dummy error code. + push %1 ; Push the interrupt number. + jmp isr_common_stub ; Go to our common handler code. +%endmacro + +; This macro creates a stub for an ISR which passes it's own +; error code. +%macro ISR_ERRCODE 1 + global isr%1 + isr%1: + cli ; Disable interrupts. + push %1 ; Push the interrupt number + jmp isr_common_stub +%endmacro + +; This macro creates a stub for an IRQ - the first parameter is +; the IRQ number, the second is the ISR number it is remapped to. +%macro IRQ 2 + global irq%1 + irq%1: + cli + push byte 0 + push byte %2 + jmp irq_common_stub +%endmacro + +ISR_NOERRCODE 0 +ISR_NOERRCODE 1 +ISR_NOERRCODE 2 +ISR_NOERRCODE 3 +ISR_NOERRCODE 4 +ISR_NOERRCODE 5 +ISR_NOERRCODE 6 +ISR_NOERRCODE 7 +ISR_ERRCODE 8 +ISR_NOERRCODE 9 +ISR_ERRCODE 10 +ISR_ERRCODE 11 +ISR_ERRCODE 12 +ISR_ERRCODE 13 +ISR_ERRCODE 14 +ISR_NOERRCODE 15 +ISR_NOERRCODE 16 +ISR_NOERRCODE 17 +ISR_NOERRCODE 18 +ISR_NOERRCODE 19 +ISR_NOERRCODE 20 +ISR_NOERRCODE 21 +ISR_NOERRCODE 22 +ISR_NOERRCODE 23 +ISR_NOERRCODE 24 +ISR_NOERRCODE 25 +ISR_NOERRCODE 26 +ISR_NOERRCODE 27 +ISR_NOERRCODE 28 +ISR_NOERRCODE 29 +ISR_NOERRCODE 30 +ISR_NOERRCODE 31 +ISR_NOERRCODE 128 +IRQ 0, 32 +IRQ 1, 33 +IRQ 2, 34 +IRQ 3, 35 +IRQ 4, 36 +IRQ 5, 37 +IRQ 6, 38 +IRQ 7, 39 +IRQ 8, 40 +IRQ 9, 41 +IRQ 10, 42 +IRQ 11, 43 +IRQ 12, 44 +IRQ 13, 45 +IRQ 14, 46 +IRQ 15, 47 + +; In isr.c +extern isr_handler + +; This is our common ISR stub. It saves the processor state, sets +; up for kernel mode segments, calls the C-level fault handler, +; and finally restores the stack frame. +isr_common_stub: + pusha ; Pushes edi,esi,ebp,esp,ebx,edx,ecx,eax + + mov ax, ds ; Lower 16-bits of eax = ds. + push eax ; save the data segment descriptor + + mov ax, 0x10 ; load the kernel data segment descriptor + mov ds, ax + mov es, ax + mov fs, ax + mov gs, ax + + call isr_handler + + pop ebx ; reload the original data segment descriptor + mov ds, bx + mov es, bx + mov fs, bx + mov gs, bx + + popa ; Pops edi,esi,ebp... + add esp, 8 ; Cleans up the pushed error code and pushed ISR number + sti + iret ; pops 5 things at once: CS, EIP, EFLAGS, SS, and ESP + +; In isr.c +extern irq_handler + +; This is our common IRQ stub. It saves the processor state, sets +; up for kernel mode segments, calls the C-level fault handler, +; and finally restores the stack frame. +irq_common_stub: + pusha ; Pushes edi,esi,ebp,esp,ebx,edx,ecx,eax + + mov ax, ds ; Lower 16-bits of eax = ds. + push eax ; save the data segment descriptor + + mov ax, 0x10 ; load the kernel data segment descriptor + mov ds, ax + mov es, ax + mov fs, ax + mov gs, ax + + call irq_handler + + pop ebx ; reload the original data segment descriptor + mov ds, bx + mov es, bx + mov fs, bx + mov gs, bx + + popa ; Pops edi,esi,ebp... + add esp, 8 ; Cleans up the pushed error code and pushed ISR number + sti + iret ; pops 5 things at once: CS, EIP, EFLAGS, SS, and ESP + + + diff --git a/user_mode/src/isr.c b/user_mode/src/isr.c new file mode 100644 index 0000000..41cdadc --- /dev/null +++ b/user_mode/src/isr.c @@ -0,0 +1,58 @@ +// +// isr.c -- High level interrupt service routines and interrupt request handlers. +// Part of this code is modified from Bran's kernel development tutorials. +// Rewritten for JamesM's kernel development tutorials. +// + +#include "common.h" +#include "isr.h" +#include "monitor.h" + +isr_t interrupt_handlers[256]; + +void register_interrupt_handler(u8int n, isr_t handler) +{ + interrupt_handlers[n] = handler; +} + +// This gets called from our ASM interrupt handler stub. +void isr_handler(registers_t regs) +{ + // This line is important. When the processor extends the 8-bit interrupt number + // to a 32bit value, it sign-extends, not zero extends. So if the most significant + // bit (0x80) is set, regs.int_no will be very large (about 0xffffff80). + u8int int_no = regs.int_no & 0xFF; + if (interrupt_handlers[int_no] != 0) + { + isr_t handler = interrupt_handlers[int_no]; + handler(®s); + } + else + { + monitor_write("unhandled interrupt: "); + monitor_write_hex(int_no); + monitor_put('\n'); + for(;;); + } +} + +// This gets called from our ASM interrupt handler stub. +void irq_handler(registers_t regs) +{ + // Send an EOI (end of interrupt) signal to the PICs. + // If this interrupt involved the slave. + if (regs.int_no >= 40) + { + // Send reset signal to slave. + outb(0xA0, 0x20); + } + // Send reset signal to master. (As well as slave, if necessary). + outb(0x20, 0x20); + + if (interrupt_handlers[regs.int_no] != 0) + { + isr_t handler = interrupt_handlers[regs.int_no]; + handler(®s); + } + +} diff --git a/user_mode/src/isr.h b/user_mode/src/isr.h new file mode 100644 index 0000000..c7a5630 --- /dev/null +++ b/user_mode/src/isr.h @@ -0,0 +1,39 @@ +// +// isr.h -- Interface and structures for high level interrupt service routines. +// Part of this code is modified from Bran's kernel development tutorials. +// Rewritten for JamesM's kernel development tutorials. +// + +#include "common.h" + +// A few defines to make life a little easier +#define IRQ0 32 +#define IRQ1 33 +#define IRQ2 34 +#define IRQ3 35 +#define IRQ4 36 +#define IRQ5 37 +#define IRQ6 38 +#define IRQ7 39 +#define IRQ8 40 +#define IRQ9 41 +#define IRQ10 42 +#define IRQ11 43 +#define IRQ12 44 +#define IRQ13 45 +#define IRQ14 46 +#define IRQ15 47 + +typedef struct registers +{ + u32int ds; // Data segment selector + u32int edi, esi, ebp, esp, ebx, edx, ecx, eax; // Pushed by pusha. + u32int int_no, err_code; // Interrupt number and error code (if applicable) + u32int eip, cs, eflags, useresp, ss; // Pushed by the processor automatically. +} registers_t; + +// Enables registration of callbacks for interrupts or IRQs. +// For IRQs, to ease confusion, use the #defines above as the +// first parameter. +typedef void (*isr_t)(registers_t*); +void register_interrupt_handler(u8int n, isr_t handler); diff --git a/user_mode/src/kernel b/user_mode/src/kernel new file mode 100755 index 0000000000000000000000000000000000000000..911ed4f66104905e58c7219b65f09468078d4437 GIT binary patch literal 30307 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 + ((u32int)addr&0xFFF); + } + return (u32int)addr; + } + else + { + if (align == 1 && (placement_address & 0xFFFFF000) ) + { + // Align the placement address; + placement_address &= 0xFFFFF000; + placement_address += 0x1000; + } + if (phys) + { + *phys = placement_address; + } + u32int tmp = placement_address; + placement_address += sz; + return tmp; + } +} + +void kfree(void *p) +{ + free(p, kheap); +} + +u32int kmalloc_a(u32int sz) +{ + return kmalloc_int(sz, 1, 0); +} + +u32int kmalloc_p(u32int sz, u32int *phys) +{ + return kmalloc_int(sz, 0, phys); +} + +u32int kmalloc_ap(u32int sz, u32int *phys) +{ + return kmalloc_int(sz, 1, phys); +} + +u32int kmalloc(u32int sz) +{ + return kmalloc_int(sz, 0, 0); +} + +static void expand(u32int new_size, heap_t *heap) +{ + // Sanity check. + ASSERT(new_size > heap->end_address - heap->start_address); + + // Get the nearest following page boundary. + if (new_size&0xFFFFF000 != 0) + { + new_size &= 0xFFFFF000; + new_size += 0x1000; + } + + // Make sure we are not overreaching ourselves. + ASSERT(heap->start_address+new_size <= heap->max_address); + + // This should always be on a page boundary. + u32int old_size = heap->end_address-heap->start_address; + + u32int i = old_size; + while (i < new_size) + { + alloc_frame( get_page(heap->start_address+i, 1, kernel_directory), + (heap->supervisor)?1:0, (heap->readonly)?0:1); + i += 0x1000 /* page size */; + } + heap->end_address = heap->start_address+new_size; +} + +static u32int contract(u32int new_size, heap_t *heap) +{ + // Sanity check. + ASSERT(new_size < heap->end_address-heap->start_address); + + // Get the nearest following page boundary. + if (new_size&0x1000) + { + new_size &= 0x1000; + new_size += 0x1000; + } + + // Don't contract too far! + if (new_size < HEAP_MIN_SIZE) + new_size = HEAP_MIN_SIZE; + + u32int old_size = heap->end_address-heap->start_address; + u32int i = old_size - 0x1000; + while (new_size < i) + { + free_frame(get_page(heap->start_address+i, 0, kernel_directory)); + i -= 0x1000; + } + + heap->end_address = heap->start_address + new_size; + return new_size; +} + +static s32int find_smallest_hole(u32int size, u8int page_align, heap_t *heap) +{ + // Find the smallest hole that will fit. + u32int iterator = 0; + while (iterator < heap->index.size) + { + header_t *header = (header_t *)lookup_ordered_array(iterator, &heap->index); + // If the user has requested the memory be page-aligned + if (page_align > 0) + { + // Page-align the starting point of this header. + u32int location = (u32int)header; + s32int offset = 0; + if ((location+sizeof(header_t)) & 0xFFFFF000 != 0) + offset = 0x1000 /* page size */ - (location+sizeof(header_t))%0x1000; + s32int hole_size = (s32int)header->size - offset; + // Can we fit now? + if (hole_size >= (s32int)size) + break; + } + else if (header->size >= size) + break; + iterator++; + } + // Why did the loop exit? + if (iterator == heap->index.size) + return -1; // We got to the end and didn't find anything. + else + return iterator; +} + +static s8int header_t_less_than(void*a, void *b) +{ + return (((header_t*)a)->size < ((header_t*)b)->size)?1:0; +} + +heap_t *create_heap(u32int start, u32int end_addr, u32int max, u8int supervisor, u8int readonly) +{ + heap_t *heap = (heap_t*)kmalloc(sizeof(heap_t)); + + // All our assumptions are made on startAddress and endAddress being page-aligned. + ASSERT(start%0x1000 == 0); + ASSERT(end_addr%0x1000 == 0); + + // Initialise the index. + heap->index = place_ordered_array( (void*)start, HEAP_INDEX_SIZE, &header_t_less_than); + + // Shift the start address forward to resemble where we can start putting data. + start += sizeof(type_t)*HEAP_INDEX_SIZE; + + // Make sure the start address is page-aligned. + if (start & 0xFFFFF000 != 0) + { + start &= 0xFFFFF000; + start += 0x1000; + } + // Write the start, end and max addresses into the heap structure. + heap->start_address = start; + heap->end_address = end_addr; + heap->max_address = max; + heap->supervisor = supervisor; + heap->readonly = readonly; + + // We start off with one large hole in the index. + header_t *hole = (header_t *)start; + hole->size = end_addr-start; + hole->magic = HEAP_MAGIC; + hole->is_hole = 1; + insert_ordered_array((void*)hole, &heap->index); + + return heap; +} + +void *alloc(u32int size, u8int page_align, heap_t *heap) +{ + + // Make sure we take the size of header/footer into account. + u32int new_size = size + sizeof(header_t) + sizeof(footer_t); + // Find the smallest hole that will fit. + s32int iterator = find_smallest_hole(new_size, page_align, heap); + + if (iterator == -1) // If we didn't find a suitable hole + { + // Save some previous data. + u32int old_length = heap->end_address - heap->start_address; + u32int old_end_address = heap->end_address; + + // We need to allocate some more space. + expand(old_length+new_size, heap); + u32int new_length = heap->end_address-heap->start_address; + + // Find the endmost header. (Not endmost in size, but in location). + iterator = 0; + // Vars to hold the index of, and value of, the endmost header found so far. + u32int idx = -1; u32int value = 0x0; + while (iterator < heap->index.size) + { + u32int tmp = (u32int)lookup_ordered_array(iterator, &heap->index); + if (tmp > value) + { + value = tmp; + idx = iterator; + } + iterator++; + } + + // If we didn't find ANY headers, we need to add one. + if (idx == -1) + { + header_t *header = (header_t *)old_end_address; + header->magic = HEAP_MAGIC; + header->size = new_length - old_length; + header->is_hole = 1; + footer_t *footer = (footer_t *) (old_end_address + header->size - sizeof(footer_t)); + footer->magic = HEAP_MAGIC; + footer->header = header; + insert_ordered_array((void*)header, &heap->index); + } + else + { + // The last header needs adjusting. + header_t *header = lookup_ordered_array(idx, &heap->index); + header->size += new_length - old_length; + // Rewrite the footer. + footer_t *footer = (footer_t *) ( (u32int)header + header->size - sizeof(footer_t) ); + footer->header = header; + footer->magic = HEAP_MAGIC; + } + // We now have enough space. Recurse, and call the function again. + return alloc(size, page_align, heap); + } + + header_t *orig_hole_header = (header_t *)lookup_ordered_array(iterator, &heap->index); + u32int orig_hole_pos = (u32int)orig_hole_header; + u32int orig_hole_size = orig_hole_header->size; + // Here we work out if we should split the hole we found into two parts. + // Is the original hole size - requested hole size less than the overhead for adding a new hole? + if (orig_hole_size-new_size < sizeof(header_t)+sizeof(footer_t)) + { + // Then just increase the requested size to the size of the hole we found. + size += orig_hole_size-new_size; + new_size = orig_hole_size; + } + + // If we need to page-align the data, do it now and make a new hole in front of our block. + if (page_align && orig_hole_pos&0xFFFFF000) + { + u32int new_location = orig_hole_pos + 0x1000 /* page size */ - (orig_hole_pos&0xFFF) - sizeof(header_t); + header_t *hole_header = (header_t *)orig_hole_pos; + hole_header->size = 0x1000 /* page size */ - (orig_hole_pos&0xFFF) - sizeof(header_t); + hole_header->magic = HEAP_MAGIC; + hole_header->is_hole = 1; + footer_t *hole_footer = (footer_t *) ( (u32int)new_location - sizeof(footer_t) ); + hole_footer->magic = HEAP_MAGIC; + hole_footer->header = hole_header; + orig_hole_pos = new_location; + orig_hole_size = orig_hole_size - hole_header->size; + } + else + { + // Else we don't need this hole any more, delete it from the index. + remove_ordered_array(iterator, &heap->index); + } + + // Overwrite the original header... + header_t *block_header = (header_t *)orig_hole_pos; + block_header->magic = HEAP_MAGIC; + block_header->is_hole = 0; + block_header->size = new_size; + // ...And the footer + footer_t *block_footer = (footer_t *) (orig_hole_pos + sizeof(header_t) + size); + block_footer->magic = HEAP_MAGIC; + block_footer->header = block_header; + + // We may need to write a new hole after the allocated block. + // We do this only if the new hole would have positive size... + if (orig_hole_size - new_size > 0) + { + header_t *hole_header = (header_t *) (orig_hole_pos + sizeof(header_t) + size + sizeof(footer_t)); + hole_header->magic = HEAP_MAGIC; + hole_header->is_hole = 1; + hole_header->size = orig_hole_size - new_size; + footer_t *hole_footer = (footer_t *) ( (u32int)hole_header + orig_hole_size - new_size - sizeof(footer_t) ); + if ((u32int)hole_footer < heap->end_address) + { + hole_footer->magic = HEAP_MAGIC; + hole_footer->header = hole_header; + } + // Put the new hole in the index; + insert_ordered_array((void*)hole_header, &heap->index); + } + + // ...And we're done! + return (void *) ( (u32int)block_header+sizeof(header_t) ); +} + +void free(void *p, heap_t *heap) +{ + // Exit gracefully for null pointers. + if (p == 0) + return; + + // Get the header and footer associated with this pointer. + header_t *header = (header_t*) ( (u32int)p - sizeof(header_t) ); + footer_t *footer = (footer_t*) ( (u32int)header + header->size - sizeof(footer_t) ); + + // Sanity checks. + ASSERT(header->magic == HEAP_MAGIC); + ASSERT(footer->magic == HEAP_MAGIC); + + // Make us a hole. + header->is_hole = 1; + + // Do we want to add this header into the 'free holes' index? + char do_add = 1; + + // Unify left + // If the thing immediately to the left of us is a footer... + footer_t *test_footer = (footer_t*) ( (u32int)header - sizeof(footer_t) ); + if (test_footer->magic == HEAP_MAGIC && + test_footer->header->is_hole == 1) + { + u32int cache_size = header->size; // Cache our current size. + header = test_footer->header; // Rewrite our header with the new one. + footer->header = header; // Rewrite our footer to point to the new header. + header->size += cache_size; // Change the size. + do_add = 0; // Since this header is already in the index, we don't want to add it again. + } + + // Unify right + // If the thing immediately to the right of us is a header... + header_t *test_header = (header_t*) ( (u32int)footer + sizeof(footer_t) ); + if (test_header->magic == HEAP_MAGIC && + test_header->is_hole) + { + header->size += test_header->size; // Increase our size. + test_footer = (footer_t*) ( (u32int)test_header + // Rewrite it's footer to point to our header. + test_header->size - sizeof(footer_t) ); + footer = test_footer; + // Find and remove this header from the index. + u32int iterator = 0; + while ( (iterator < heap->index.size) && + (lookup_ordered_array(iterator, &heap->index) != (void*)test_header) ) + iterator++; + + // Make sure we actually found the item. + ASSERT(iterator < heap->index.size); + // Remove it. + remove_ordered_array(iterator, &heap->index); + } + + // If the footer location is the end address, we can contract. + if ( (u32int)footer+sizeof(footer_t) == heap->end_address) + { + u32int old_length = heap->end_address-heap->start_address; + u32int new_length = contract( (u32int)header - heap->start_address, heap); + // Check how big we will be after resizing. + if (header->size - (old_length-new_length) > 0) + { + // We will still exist, so resize us. + header->size -= old_length-new_length; + footer = (footer_t*) ( (u32int)header + header->size - sizeof(footer_t) ); + footer->magic = HEAP_MAGIC; + footer->header = header; + } + else + { + // We will no longer exist :(. Remove us from the index. + u32int iterator = 0; + while ( (iterator < heap->index.size) && + (lookup_ordered_array(iterator, &heap->index) != (void*)test_header) ) + iterator++; + // If we didn't find ourselves, we have nothing to remove. + if (iterator < heap->index.size) + remove_ordered_array(iterator, &heap->index); + } + } + + // If required, add us to the index. + if (do_add == 1) + insert_ordered_array((void*)header, &heap->index); + +} diff --git a/user_mode/src/kheap.h b/user_mode/src/kheap.h new file mode 100644 index 0000000..eb6819f --- /dev/null +++ b/user_mode/src/kheap.h @@ -0,0 +1,100 @@ +// kheap.h -- Interface for kernel heap functions, also provides +// a placement malloc() for use before the heap is +// initialised. +// Written for JamesM's kernel development tutorials. + +#ifndef KHEAP_H +#define KHEAP_H + +#include "common.h" +#include "ordered_array.h" + +#define KHEAP_START 0xC0000000 +#define KHEAP_INITIAL_SIZE 0x100000 + +#define HEAP_INDEX_SIZE 0x20000 +#define HEAP_MAGIC 0x123890AB +#define HEAP_MIN_SIZE 0x70000 + +/** + Size information for a hole/block +**/ +typedef struct +{ + u32int magic; // Magic number, used for error checking and identification. + u8int is_hole; // 1 if this is a hole. 0 if this is a block. + u32int size; // size of the block, including the end footer. +} header_t; + +typedef struct +{ + u32int magic; // Magic number, same as in header_t. + header_t *header; // Pointer to the block header. +} footer_t; + +typedef struct +{ + ordered_array_t index; + u32int start_address; // The start of our allocated space. + u32int end_address; // The end of our allocated space. May be expanded up to max_address. + u32int max_address; // The maximum address the heap can be expanded to. + u8int supervisor; // Should extra pages requested by us be mapped as supervisor-only? + u8int readonly; // Should extra pages requested by us be mapped as read-only? +} heap_t; + +/** + Create a new heap. +**/ +heap_t *create_heap(u32int start, u32int end, u32int max, u8int supervisor, u8int readonly); + +/** + Allocates a contiguous region of memory 'size' in size. If page_align==1, it creates that block starting + on a page boundary. +**/ +void *alloc(u32int size, u8int page_align, heap_t *heap); + +/** + Releases a block allocated with 'alloc'. +**/ +void free(void *p, heap_t *heap); + +/** + Allocate a chunk of memory, sz in size. If align == 1, + the chunk must be page-aligned. If phys != 0, the physical + location of the allocated chunk will be stored into phys. + + This is the internal version of kmalloc. More user-friendly + parameter representations are available in kmalloc, kmalloc_a, + kmalloc_ap, kmalloc_p. +**/ +u32int kmalloc_int(u32int sz, int align, u32int *phys); + +/** + Allocate a chunk of memory, sz in size. The chunk must be + page aligned. +**/ +u32int kmalloc_a(u32int sz); + +/** + Allocate a chunk of memory, sz in size. The physical address + is returned in phys. Phys MUST be a valid pointer to u32int! +**/ +u32int kmalloc_p(u32int sz, u32int *phys); + +/** + Allocate a chunk of memory, sz in size. The physical address + is returned in phys. It must be page-aligned. +**/ +u32int kmalloc_ap(u32int sz, u32int *phys); + +/** + General allocation function. +**/ +u32int kmalloc(u32int sz); + +/** + General deallocation function. +**/ +void kfree(void *p); + +#endif // KHEAP_H diff --git a/user_mode/src/link.ld b/user_mode/src/link.ld new file mode 100644 index 0000000..bbb2ee0 --- /dev/null +++ b/user_mode/src/link.ld @@ -0,0 +1,33 @@ +/* Link.ld -- Linker script for the kernel - ensure everything goes in the */ +/* Correct place. */ +/* Original file taken from Bran's Kernel Development */ +/* tutorials: http://www.osdever.net/bkerndev/index.php. */ + +ENTRY(start) +SECTIONS +{ + + .text 0x100000 : + { + code = .; _code = .; __code = .; + *(.text) + . = ALIGN(4096); + } + + .data : + { + data = .; _data = .; __data = .; + *(.data) + *(.rodata) + . = ALIGN(4096); + } + + .bss : + { + bss = .; _bss = .; __bss = .; + *(.bss) + . = ALIGN(4096); + } + + end = .; _end = .; __end = .; +} diff --git a/user_mode/src/main.c b/user_mode/src/main.c new file mode 100644 index 0000000..ac58871 --- /dev/null +++ b/user_mode/src/main.c @@ -0,0 +1,98 @@ +// main.c -- Defines the C-code kernel entry point, calls initialisation routines. +// Made for JamesM's tutorials + +#include "monitor.h" +#include "descriptor_tables.h" +#include "timer.h" +#include "paging.h" +#include "multiboot.h" +#include "fs.h" +#include "initrd.h" +#include "task.h" +#include "syscall.h" + +extern u32int placement_address; +u32int initial_esp; + +int main(struct multiboot *mboot_ptr, u32int initial_stack) +{ + initial_esp = initial_stack; + // Initialise all the ISRs and segmentation + init_descriptor_tables(); + // Initialise the screen (by clearing it) + monitor_clear(); + + // Initialise the PIT to 100Hz + asm volatile("sti"); + init_timer(50); + + monitor_write(" -- sjs kernel --\n\n"); + + // Find the location of our initial ramdisk. + ASSERT(mboot_ptr->mods_count > 0); + u32int initrd_location = *((u32int*)mboot_ptr->mods_addr); + u32int initrd_end = *(u32int*)(mboot_ptr->mods_addr+4); + // Don't trample our module with placement accesses, please! + placement_address = initrd_end; + + // Start paging. + initialise_paging(); + monitor_write("*** paging\n\n"); + + // Initialise the initial ramdisk, and set it as the filesystem root. + fs_root = initialise_initrd(initrd_location); + monitor_write("*** initrd\n\n"); + + // Start multitasking. + initialise_tasking(); + monitor_write("*** multitasking\n\n"); + + // Create a new process in a new address space which is a clone of this. + int ret = fork(); + + monitor_write("fork() returned "); + monitor_write_hex(ret); + monitor_write(", and getpid() returned "); + monitor_write_hex(getpid()); + monitor_write("\n============================================================================\n\n"); + + monitor_write("*** fs\n\n"); + + // The next section of code is not reentrant so make sure we aren't interrupted during. + asm volatile("cli"); + // list the contents of / + int i = 0; + struct dirent *node = 0; + while ( (node = readdir_fs(fs_root, i)) != 0) { + monitor_write("Found file "); + monitor_write(node->name); + fs_node_t *fsnode = finddir_fs(fs_root, node->name); + + if ((fsnode->flags&0x7) == FS_DIRECTORY) { + monitor_write("\n\t(directory)\n"); + } else { + monitor_write("\n\t contents: \""); + char buf[256]; + u32int sz = read_fs(fsnode, 0, 256, buf); + int j; + for (j = 0; j < sz; j++) + monitor_put(buf[j]); + + monitor_write("\"\n"); + } + i++; + } + monitor_write("\n"); + + asm volatile("sti"); + + initialise_syscalls(); + monitor_write("*** syscalls\n\n"); + + switch_to_user_mode(); + monitor_write("*** user mode\n\n"); + + syscall_monitor_write("Hello, user world!\n"); + + return 0xdeadbeef; +} diff --git a/user_mode/src/monitor.c b/user_mode/src/monitor.c new file mode 100644 index 0000000..5bbc24e --- /dev/null +++ b/user_mode/src/monitor.c @@ -0,0 +1,216 @@ +// monitor.c -- Defines functions for writing to the monitor. +// heavily based on Bran's kernel development tutorials, +// but rewritten for JamesM's kernel tutorials. + +#include "monitor.h" + +// The VGA framebuffer starts at 0xB8000. +u16int *video_memory = (u16int *)0xB8000; +// Stores the cursor position. +u8int cursor_x = 0; +u8int cursor_y = 0; + +// Updates the hardware cursor. +static void move_cursor() +{ + // The screen is 80 characters wide... + u16int cursorLocation = cursor_y * 80 + cursor_x; + outb(0x3D4, 14); // Tell the VGA board we are setting the high cursor byte. + outb(0x3D5, cursorLocation >> 8); // Send the high cursor byte. + outb(0x3D4, 15); // Tell the VGA board we are setting the low cursor byte. + outb(0x3D5, cursorLocation); // Send the low cursor byte. +} + +// Scrolls the text on the screen up by one line. +static void scroll() +{ + + // Get a space character with the default colour attributes. + u8int attributeByte = (0 /*black*/ << 4) | (15 /*white*/ & 0x0F); + u16int blank = 0x20 /* space */ | (attributeByte << 8); + + // Row 25 is the end, this means we need to scroll up + if(cursor_y >= 25) + { + // Move the current text chunk that makes up the screen + // back in the buffer by a line + int i; + for (i = 0*80; i < 24*80; i++) + { + video_memory[i] = video_memory[i+80]; + } + + // The last line should now be blank. Do this by writing + // 80 spaces to it. + for (i = 24*80; i < 25*80; i++) + { + video_memory[i] = blank; + } + // The cursor should now be on the last line. + cursor_y = 24; + } +} + +// Writes a single character out to the screen. +void monitor_put(char c) +{ + // The background colour is black (0), the foreground is white (15). + u8int backColour = 0; + u8int foreColour = 15; + + // The attribute byte is made up of two nibbles - the lower being the + // foreground colour, and the upper the background colour. + u8int attributeByte = (backColour << 4) | (foreColour & 0x0F); + // The attribute byte is the top 8 bits of the word we have to send to the + // VGA board. + u16int attribute = attributeByte << 8; + u16int *location; + + // Handle a backspace, by moving the cursor back one space + if (c == 0x08 && cursor_x) + { + cursor_x--; + } + + // Handle a tab by increasing the cursor's X, but only to a point + // where it is divisible by 8. + else if (c == 0x09) + { + cursor_x = (cursor_x+8) & ~(8-1); + } + + // Handle carriage return + else if (c == '\r') + { + cursor_x = 0; + } + + // Handle newline by moving cursor back to left and increasing the row + else if (c == '\n') + { + cursor_x = 0; + cursor_y++; + } + // Handle any other printable character. + else if(c >= ' ') + { + location = video_memory + (cursor_y*80 + cursor_x); + *location = c | attribute; + cursor_x++; + } + + // Check if we need to insert a new line because we have reached the end + // of the screen. + if (cursor_x >= 80) + { + cursor_x = 0; + cursor_y ++; + } + + // Scroll the screen if needed. + scroll(); + // Move the hardware cursor. + move_cursor(); + +} + +// Clears the screen, by copying lots of spaces to the framebuffer. +void monitor_clear() +{ + // Make an attribute byte for the default colours + u8int attributeByte = (0 /*black*/ << 4) | (15 /*white*/ & 0x0F); + u16int blank = 0x20 /* space */ | (attributeByte << 8); + + int i; + for (i = 0; i < 80*25; i++) + { + video_memory[i] = blank; + } + + // Move the hardware cursor back to the start. + cursor_x = 0; + cursor_y = 0; + move_cursor(); +} + +// Outputs a null-terminated ASCII string to the monitor. +void monitor_write(char *c) +{ + int i = 0; + while (c[i]) + { + monitor_put(c[i++]); + } +} + +void monitor_write_hex(u32int n) +{ + s32int tmp; + + monitor_write("0x"); + + char noZeroes = 1; + + int i; + for (i = 28; i > 0; i -= 4) + { + tmp = (n >> i) & 0xF; + if (tmp == 0 && noZeroes != 0) + { + continue; + } + + if (tmp >= 0xA) + { + noZeroes = 0; + monitor_put (tmp-0xA+'a' ); + } + else + { + noZeroes = 0; + monitor_put( tmp+'0' ); + } + } + + tmp = n & 0xF; + if (tmp >= 0xA) + { + monitor_put (tmp-0xA+'a'); + } + else + { + monitor_put (tmp+'0'); + } + +} + +void monitor_write_dec(u32int n) +{ + + if (n == 0) + { + monitor_put('0'); + return; + } + + s32int acc = n; + char c[32]; + int i = 0; + while (acc > 0) + { + c[i] = '0' + acc%10; + acc /= 10; + i++; + } + c[i] = 0; + + char c2[32]; + c2[i--] = 0; + int j = 0; + while(i >= 0) + { + c2[i--] = c[j++]; + } + monitor_write(c2); + +} diff --git a/user_mode/src/monitor.h b/user_mode/src/monitor.h new file mode 100644 index 0000000..7b95771 --- /dev/null +++ b/user_mode/src/monitor.h @@ -0,0 +1,24 @@ +// monitor.h -- Defines the interface for monitor.h +// From JamesM's kernel development tutorials. + +#ifndef MONITOR_H +#define MONITOR_H + +#include "common.h" + +// Write a single character out to the screen. +void monitor_put(char c); + +// Clear the screen to all black. +void monitor_clear(); + +// Output a null-terminated ASCII string to the monitor. +void monitor_write(char *c); + +// Output a hex value to the monitor. +void monitor_write_hex(u32int n); + +// Output a decimal value to the monitor. +void monitor_write_dec(u32int n); + +#endif // MONITOR_H diff --git a/user_mode/src/multiboot.h b/user_mode/src/multiboot.h new file mode 100644 index 0000000..69b327f --- /dev/null +++ b/user_mode/src/multiboot.h @@ -0,0 +1,51 @@ +// multiboot.h -- Declares the multiboot info structure. +// Made for JamesM's tutorials + +#ifndef MULTIBOOT_H +#define MULTIBOOT_H + +#include "common.h" + +#define MULTIBOOT_FLAG_MEM 0x001 +#define MULTIBOOT_FLAG_DEVICE 0x002 +#define MULTIBOOT_FLAG_CMDLINE 0x004 +#define MULTIBOOT_FLAG_MODS 0x008 +#define MULTIBOOT_FLAG_AOUT 0x010 +#define MULTIBOOT_FLAG_ELF 0x020 +#define MULTIBOOT_FLAG_MMAP 0x040 +#define MULTIBOOT_FLAG_CONFIG 0x080 +#define MULTIBOOT_FLAG_LOADER 0x100 +#define MULTIBOOT_FLAG_APM 0x200 +#define MULTIBOOT_FLAG_VBE 0x400 + +struct multiboot +{ + u32int flags; + u32int mem_lower; + u32int mem_upper; + u32int boot_device; + u32int cmdline; + u32int mods_count; + u32int mods_addr; + u32int num; + u32int size; + u32int addr; + u32int shndx; + u32int mmap_length; + u32int mmap_addr; + u32int drives_length; + u32int drives_addr; + u32int config_table; + u32int boot_loader_name; + u32int apm_table; + u32int vbe_control_info; + u32int vbe_mode_info; + u32int vbe_mode; + u32int vbe_interface_seg; + u32int vbe_interface_off; + u32int vbe_interface_len; +} __attribute__((packed)); + +typedef struct multiboot_header multiboot_header_t; + +#endif diff --git a/user_mode/src/ordered_array.c b/user_mode/src/ordered_array.c new file mode 100644 index 0000000..7ed6639 --- /dev/null +++ b/user_mode/src/ordered_array.c @@ -0,0 +1,76 @@ +// ordered_array.c -- Implementation for creating, inserting and deleting +// from ordered arrays. +// Written for JamesM's kernel development tutorials. + +#include "ordered_array.h" + +s8int standard_lessthan_predicate(type_t a, type_t b) +{ + return (aarray); +} + +void insert_ordered_array(type_t item, ordered_array_t *array) +{ + ASSERT(array->less_than); + u32int iterator = 0; + while (iterator < array->size && array->less_than(array->array[iterator], item)) + iterator++; + if (iterator == array->size) // just add at the end of the array. + array->array[array->size++] = item; + else + { + type_t tmp = array->array[iterator]; + array->array[iterator] = item; + while (iterator < array->size) + { + iterator++; + type_t tmp2 = array->array[iterator]; + array->array[iterator] = tmp; + tmp = tmp2; + } + array->size++; + } +} + +type_t lookup_ordered_array(u32int i, ordered_array_t *array) +{ + ASSERT(i < array->size); + return array->array[i]; +} + +void remove_ordered_array(u32int i, ordered_array_t *array) +{ + while (i < array->size) + { + array->array[i] = array->array[i+1]; + i++; + } + array->size--; +} diff --git a/user_mode/src/ordered_array.h b/user_mode/src/ordered_array.h new file mode 100644 index 0000000..bb2b8f4 --- /dev/null +++ b/user_mode/src/ordered_array.h @@ -0,0 +1,59 @@ +// ordered_array.h -- Interface for creating, inserting and deleting +// from ordered arrays. +// Written for JamesM's kernel development tutorials. + +#ifndef ORDERED_ARRAY_H +#define ORDERED_ARRAY_H + +#include "common.h" + +/** + This array is insertion sorted - it always remains in a sorted state (between calls). + It can store anything that can be cast to a void* -- so a u32int, or any pointer. +**/ +typedef void* type_t; +/** + A predicate should return nonzero if the first argument is less than the second. Else + it should return zero. +**/ +typedef s8int (*lessthan_predicate_t)(type_t,type_t); +typedef struct +{ + type_t *array; + u32int size; + u32int max_size; + lessthan_predicate_t less_than; +} ordered_array_t; + +/** + A standard less than predicate. +**/ +s8int standard_lessthan_predicate(type_t a, type_t b); + +/** + Create an ordered array. +**/ +ordered_array_t create_ordered_array(u32int max_size, lessthan_predicate_t less_than); +ordered_array_t place_ordered_array(void *addr, u32int max_size, lessthan_predicate_t less_than); + +/** + Destroy an ordered array. +**/ +void destroy_ordered_array(ordered_array_t *array); + +/** + Add an item into the array. +**/ +void insert_ordered_array(type_t item, ordered_array_t *array); + +/** + Lookup the item at index i. +**/ +type_t lookup_ordered_array(u32int i, ordered_array_t *array); + +/** + Deletes the item at location i from the array. +**/ +void remove_ordered_array(u32int i, ordered_array_t *array); + +#endif // ORDERED_ARRAY_H diff --git a/user_mode/src/paging.c b/user_mode/src/paging.c new file mode 100755 index 0000000..32b02a3 --- /dev/null +++ b/user_mode/src/paging.c @@ -0,0 +1,297 @@ +// paging.c -- Defines the interface for and structures relating to paging. +// Written for JamesM's kernel development tutorials. + +#include "paging.h" +#include "kheap.h" + +// The kernel's page directory +page_directory_t *kernel_directory=0; + +// The current page directory; +page_directory_t *current_directory=0; + +// A bitset of frames - used or free. +u32int *frames; +u32int nframes; + +// Defined in kheap.c +extern u32int placement_address; +extern heap_t *kheap; + +// Macros used in the bitset algorithms. +#define INDEX_FROM_BIT(a) (a/(8*4)) +#define OFFSET_FROM_BIT(a) (a%(8*4)) + +// Static function to set a bit in the frames bitset +static void set_frame(u32int frame_addr) +{ + u32int frame = frame_addr/0x1000; + u32int idx = INDEX_FROM_BIT(frame); + u32int off = OFFSET_FROM_BIT(frame); + frames[idx] |= (0x1 << off); +} + +// Static function to clear a bit in the frames bitset +static void clear_frame(u32int frame_addr) +{ + u32int frame = frame_addr/0x1000; + u32int idx = INDEX_FROM_BIT(frame); + u32int off = OFFSET_FROM_BIT(frame); + frames[idx] &= ~(0x1 << off); +} + +// Static function to test if a bit is set. +static u32int test_frame(u32int frame_addr) +{ + u32int frame = frame_addr/0x1000; + u32int idx = INDEX_FROM_BIT(frame); + u32int off = OFFSET_FROM_BIT(frame); + return (frames[idx] & (0x1 << off)); +} + +// Static function to find the first free frame. +static u32int first_frame() +{ + u32int i, j; + for (i = 0; i < INDEX_FROM_BIT(nframes); i++) + { + if (frames[i] != 0xFFFFFFFF) // nothing free, exit early. + { + // at least one bit is free here. + for (j = 0; j < 32; j++) + { + u32int toTest = 0x1 << j; + if ( !(frames[i]&toTest) ) + { + return i*4*8+j; + } + } + } + } +} + +// Function to allocate a frame. +void alloc_frame(page_t *page, int is_kernel, int is_writeable) +{ + if (page->frame != 0) + { + return; + } + else + { + u32int idx = first_frame(); + if (idx == (u32int)-1) + { + // PANIC! no free frames!! + } + set_frame(idx*0x1000); + page->present = 1; + page->rw = (is_writeable==1)?1:0; + page->user = (is_kernel==1)?0:1; + page->frame = idx; + } +} + +// Function to deallocate a frame. +void free_frame(page_t *page) +{ + u32int frame; + if (!(frame=page->frame)) + { + return; + } + else + { + clear_frame(frame); + page->frame = 0x0; + } +} + +void initialise_paging() +{ + // The size of physical memory. For the moment we + // assume it is 16MB big. + u32int mem_end_page = 0x1000000; + + nframes = mem_end_page / 0x1000; + frames = (u32int*)kmalloc(INDEX_FROM_BIT(nframes)); + memset(frames, 0, INDEX_FROM_BIT(nframes)); + + // Let's make a page directory. + u32int phys; + kernel_directory = (page_directory_t*)kmalloc_a(sizeof(page_directory_t)); + memset(kernel_directory, 0, sizeof(page_directory_t)); + kernel_directory->physicalAddr = (u32int)kernel_directory->tablesPhysical; + + // Map some pages in the kernel heap area. + // Here we call get_page but not alloc_frame. This causes page_table_t's + // to be created where necessary. We can't allocate frames yet because they + // they need to be identity mapped first below, and yet we can't increase + // placement_address between identity mapping and enabling the heap! + int i = 0; + for (i = KHEAP_START; i < KHEAP_START+KHEAP_INITIAL_SIZE; i += 0x1000) + get_page(i, 1, kernel_directory); + + // We need to identity map (phys addr = virt addr) from + // 0x0 to the end of used memory, so we can access this + // transparently, as if paging wasn't enabled. + // NOTE that we use a while loop here deliberately. + // inside the loop body we actually change placement_address + // by calling kmalloc(). A while loop causes this to be + // computed on-the-fly rather than once at the start. + // Allocate a lil' bit extra so the kernel heap can be + // initialised properly. + i = 0; + while (i < 0x400000 ) //placement_address+0x1000) + { + // Kernel code is readable but not writeable from userspace. + alloc_frame( get_page(i, 1, kernel_directory), 0, 0); + i += 0x1000; + } + + // Now allocate those pages we mapped earlier. + for (i = KHEAP_START; i < KHEAP_START+KHEAP_INITIAL_SIZE; i += 0x1000) + alloc_frame( get_page(i, 1, kernel_directory), 0, 0); + + // Before we enable paging, we must register our page fault handler. + register_interrupt_handler(14, page_fault); + + // Now, enable paging! + switch_page_directory(kernel_directory); + + // Initialise the kernel heap. + kheap = create_heap(KHEAP_START, KHEAP_START+KHEAP_INITIAL_SIZE, 0xCFFFF000, 0, 0); + + current_directory = clone_directory(kernel_directory); + switch_page_directory(current_directory); +} + +void switch_page_directory(page_directory_t *dir) +{ + current_directory = dir; + asm volatile("mov %0, %%cr3":: "r"(dir->physicalAddr)); + u32int cr0; + asm volatile("mov %%cr0, %0": "=r"(cr0)); + cr0 |= 0x80000000; // Enable paging! + asm volatile("mov %0, %%cr0":: "r"(cr0)); +} + +page_t *get_page(u32int address, int make, page_directory_t *dir) +{ + // Turn the address into an index. + address /= 0x1000; + // Find the page table containing this address. + u32int table_idx = address / 1024; + + if (dir->tables[table_idx]) // If this table is already assigned + { + return &dir->tables[table_idx]->pages[address%1024]; + } + else if(make) + { + u32int tmp; + dir->tables[table_idx] = (page_table_t*)kmalloc_ap(sizeof(page_table_t), &tmp); + memset(dir->tables[table_idx], 0, 0x1000); + dir->tablesPhysical[table_idx] = tmp | 0x7; // PRESENT, RW, US. + return &dir->tables[table_idx]->pages[address%1024]; + } + else + { + return 0; + } +} + + +void page_fault(registers_t *regs) +{ + // A page fault has occurred. + // The faulting address is stored in the CR2 register. + u32int faulting_address; + asm volatile("mov %%cr2, %0" : "=r" (faulting_address)); + + // The error code gives us details of what happened. + int present = !(regs->err_code & 0x1); // Page not present + int rw = regs->err_code & 0x2; // Write operation? + int us = regs->err_code & 0x4; // Processor was in user-mode? + int reserved = regs->err_code & 0x8; // Overwritten CPU-reserved bits of page entry? + int id = regs->err_code & 0x10; // Caused by an instruction fetch? + + // Output an error message. + monitor_write("Page fault! ( "); + if (present) {monitor_write("present ");} + if (rw) {monitor_write("read-only ");} + if (us) {monitor_write("user-mode ");} + if (reserved) {monitor_write("reserved ");} + monitor_write(") at "); + monitor_write_hex(faulting_address); + monitor_write(" - EIP: "); + monitor_write_hex(regs->eip); + monitor_write("\n"); + PANIC("Page fault"); +} + +static page_table_t *clone_table(page_table_t *src, u32int *physAddr) +{ + // Make a new page table, which is page aligned. + page_table_t *table = (page_table_t*)kmalloc_ap(sizeof(page_table_t), physAddr); + // Ensure that the new table is blank. + memset(table, 0, sizeof(page_directory_t)); + + // For every entry in the table... + int i; + for (i = 0; i < 1024; i++) + { + // If the source entry has a frame associated with it... + if (!src->pages[i].frame) + continue; + // Get a new frame. + alloc_frame(&table->pages[i], 0, 0); + // Clone the flags from source to destination. + if (src->pages[i].present) table->pages[i].present = 1; + if (src->pages[i].rw) table->pages[i].rw = 1; + if (src->pages[i].user) table->pages[i].user = 1; + if (src->pages[i].accessed)table->pages[i].accessed = 1; + if (src->pages[i].dirty) table->pages[i].dirty = 1; + // Physically copy the data across. This function is in process.s. + copy_page_physical(src->pages[i].frame*0x1000, table->pages[i].frame*0x1000); + } + return table; +} + +page_directory_t *clone_directory(page_directory_t *src) +{ + u32int phys; + // Make a new page directory and obtain its physical address. + page_directory_t *dir = (page_directory_t*)kmalloc_ap(sizeof(page_directory_t), &phys); + // Ensure that it is blank. + memset(dir, 0, sizeof(page_directory_t)); + + // Get the offset of tablesPhysical from the start of the page_directory_t structure. + u32int offset = (u32int)dir->tablesPhysical - (u32int)dir; + + // Then the physical address of dir->tablesPhysical is: + dir->physicalAddr = phys + offset; + + // Go through each page table. If the page table is in the kernel directory, do not make a new copy. + int i; + for (i = 0; i < 1024; i++) + { + if (!src->tables[i]) + continue; + + if (kernel_directory->tables[i] == src->tables[i]) + { + // It's in the kernel, so just use the same pointer. + dir->tables[i] = src->tables[i]; + dir->tablesPhysical[i] = src->tablesPhysical[i]; + } + else + { + // Copy the table. + u32int phys; + dir->tables[i] = clone_table(src->tables[i], &phys); + dir->tablesPhysical[i] = phys | 0x07; + } + } + return dir; +} diff --git a/user_mode/src/paging.h b/user_mode/src/paging.h new file mode 100644 index 0000000..e324ae5 --- /dev/null +++ b/user_mode/src/paging.h @@ -0,0 +1,75 @@ +// paging.h -- Defines the interface for and structures relating to paging. +// Written for JamesM's kernel development tutorials. + +#ifndef PAGING_H +#define PAGING_H + +#include "common.h" +#include "isr.h" + +typedef struct page +{ + u32int present : 1; // Page present in memory + u32int rw : 1; // Read-only if clear, readwrite if set + u32int user : 1; // Supervisor level only if clear + u32int accessed : 1; // Has the page been accessed since last refresh? + u32int dirty : 1; // Has the page been written to since last refresh? + u32int unused : 7; // Amalgamation of unused and reserved bits + u32int frame : 20; // Frame address (shifted right 12 bits) +} page_t; + +typedef struct page_table +{ + page_t pages[1024]; +} page_table_t; + +typedef struct page_directory +{ + /** + Array of pointers to pagetables. + **/ + page_table_t *tables[1024]; + /** + Array of pointers to the pagetables above, but gives their *physical* + location, for loading into the CR3 register. + **/ + u32int tablesPhysical[1024]; + + /** + The physical address of tablesPhysical. This comes into play + when we get our kernel heap allocated and the directory + may be in a different location in virtual memory. + **/ + u32int physicalAddr; +} page_directory_t; + +/** + Sets up the environment, page directories etc and + enables paging. +**/ +void initialise_paging(); + +/** + Causes the specified page directory to be loaded into the + CR3 register. +**/ +void switch_page_directory(page_directory_t *new); + +/** + Retrieves a pointer to the page required. + If make == 1, if the page-table in which this page should + reside isn't created, create it! +**/ +page_t *get_page(u32int address, int make, page_directory_t *dir); + +/** + Handler for page faults. +**/ +void page_fault(registers_t *regs); + +/** + Makes a copy of a page directory. +**/ +page_directory_t *clone_directory(page_directory_t *src); + +#endif diff --git a/user_mode/src/process.s b/user_mode/src/process.s new file mode 100644 index 0000000..75ba553 --- /dev/null +++ b/user_mode/src/process.s @@ -0,0 +1,37 @@ +[GLOBAL read_eip] +read_eip: + pop eax ; Get the return address + jmp eax ; Return. Can't use RET because return + ; address popped off the stack. + +[GLOBAL copy_page_physical] +copy_page_physical: + push ebx ; According to __cdecl, we must preserve the contents of EBX. + pushf ; push EFLAGS, so we can pop it and reenable interrupts + ; later, if they were enabled anyway. + cli ; Disable interrupts, so we aren't interrupted. + ; Load these in BEFORE we disable paging! + mov ebx, [esp+12] ; Source address + mov ecx, [esp+16] ; Destination address + + mov edx, cr0 ; Get the control register... + and edx, 0x7fffffff ; and... + mov cr0, edx ; Disable paging. + + mov edx, 1024 ; 1024*4bytes = 4096 bytes + +.loop: + mov eax, [ebx] ; Get the word at the source address + mov [ecx], eax ; Store it at the dest address + add ebx, 4 ; Source address += sizeof(word) + add ecx, 4 ; Dest address += sizeof(word) + dec edx ; One less word to do + jnz .loop + + mov edx, cr0 ; Get the control register again + or edx, 0x80000000 ; and... + mov cr0, edx ; Enable paging. + + popf ; Pop EFLAGS back. + pop ebx ; Get the original value of EBX back. + ret diff --git a/user_mode/src/syscall.c b/user_mode/src/syscall.c new file mode 100644 index 0000000..be946f6 --- /dev/null +++ b/user_mode/src/syscall.c @@ -0,0 +1,57 @@ +// syscall.c -- Defines the implementation of a system call system. +// Written for JamesM's kernel development tutorials. + +#include "syscall.h" +#include "isr.h" + +#include "monitor.h" + +static void syscall_handler(registers_t *regs); + +DEFN_SYSCALL1(monitor_write, 0, const char*); +DEFN_SYSCALL1(monitor_write_hex, 1, const char*); +DEFN_SYSCALL1(monitor_write_dec, 2, const char*); + +static void *syscalls[3] = +{ + &monitor_write, + &monitor_write_hex, + &monitor_write_dec, +}; +u32int num_syscalls = 3; + +void initialise_syscalls() +{ + // Register our syscall handler. + register_interrupt_handler (0x80, &syscall_handler); +} + +void syscall_handler(registers_t *regs) +{ + // Firstly, check if the requested syscall number is valid. + // The syscall number is found in EAX. + if (regs->eax >= num_syscalls) + return; + + // Get the required syscall location. + void *location = syscalls[regs->eax]; + + // We don't know how many parameters the function wants, so we just + // push them all onto the stack in the correct order. The function will + // use all the parameters it wants, and we can pop them all back off afterwards. + int ret; + asm volatile (" \ + push %1; \ + push %2; \ + push %3; \ + push %4; \ + push %5; \ + call *%6; \ + pop %%ebx; \ + pop %%ebx; \ + pop %%ebx; \ + pop %%ebx; \ + pop %%ebx; \ + " : "=a" (ret) : "r" (regs->edi), "r" (regs->esi), "r" (regs->edx), "r" (regs->ecx), "r" (regs->ebx), "r" (location)); + regs->eax = ret; +} diff --git a/user_mode/src/syscall.h b/user_mode/src/syscall.h new file mode 100644 index 0000000..ac59b0b --- /dev/null +++ b/user_mode/src/syscall.h @@ -0,0 +1,70 @@ +// syscall.h -- Defines the interface for and structures relating to the syscall dispatch system. +// Written for JamesM's kernel development tutorials. + +#ifndef SYSCALL_H +#define SYSCALL_H + +#include "common.h" + +void initialise_syscalls(); + +#define DECL_SYSCALL0(fn) int syscall_##fn(); +#define DECL_SYSCALL1(fn,p1) int syscall_##fn(p1); +#define DECL_SYSCALL2(fn,p1,p2) int syscall_##fn(p1,p2); +#define DECL_SYSCALL3(fn,p1,p2,p3) int syscall_##fn(p1,p2,p3); +#define DECL_SYSCALL4(fn,p1,p2,p3,p4) int syscall_##fn(p1,p2,p3,p4); +#define DECL_SYSCALL5(fn,p1,p2,p3,p4,p5) int syscall_##fn(p1,p2,p3,p4,p5); + +#define DEFN_SYSCALL0(fn, num) \ +int syscall_##fn() \ +{ \ + int a; \ + asm volatile("int $0x80" : "=a" (a) : "0" (num)); \ + return a; \ +} + +#define DEFN_SYSCALL1(fn, num, P1) \ +int syscall_##fn(P1 p1) \ +{ \ + int a; \ + asm volatile("int $0x80" : "=a" (a) : "0" (num), "b" ((int)p1)); \ + return a; \ +} + +#define DEFN_SYSCALL2(fn, num, P1, P2) \ +int syscall_##fn(P1 p1, P2 p2) \ +{ \ + int a; \ + asm volatile("int $0x80" : "=a" (a) : "0" (num), "b" ((int)p1), "c" ((int)p2)); \ + return a; \ +} + +#define DEFN_SYSCALL3(fn, num, P1, P2, P3) \ +int syscall_##fn(P1 p1, P2 p2, P3 p3) \ +{ \ + int a; \ + asm volatile("int $0x80" : "=a" (a) : "0" (num), "b" ((int)p1), "c" ((int)p2), "d"((int)p3)); \ + return a; \ +} + +#define DEFN_SYSCALL4(fn, num, P1, P2, P3, P4) \ +int syscall_##fn(P1 p1, P2 p2, P3 p3, P4 p4) \ +{ \ + int a; \ + asm volatile("int $0x80" : "=a" (a) : "0" (num), "b" ((int)p1), "c" ((int)p2), "d" ((int)p3), "S" ((int)p4)); \ + return a; \ +} + +#define DEFN_SYSCALL5(fn, num) \ +int syscall_##fn(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) \ +{ \ + int a; \ + asm volatile("int $0x80" : "=a" (a) : "0" (num), "b" ((int)p1), "c" ((int)p2), "d" ((int)p3), "S" ((int)p4), "D" ((int)p5)); \ + return a; \ +} + +DECL_SYSCALL1(monitor_write, const char*) +DECL_SYSCALL1(monitor_write_hex, const char*) +DECL_SYSCALL1(monitor_write_dec, const char*) + +#endif diff --git a/user_mode/src/task.c b/user_mode/src/task.c new file mode 100644 index 0000000..a6f4fed --- /dev/null +++ b/user_mode/src/task.c @@ -0,0 +1,255 @@ +// +// task.c - Implements the functionality needed to multitask. +// Written for JamesM's kernel development tutorials. +// + +#include "task.h" +#include "paging.h" +#include "monitor.h" + +// The currently running task. +volatile task_t *current_task; + +// The start of the task linked list. +volatile task_t *ready_queue; + +// Some externs are needed to access members in paging.c... +extern page_directory_t *kernel_directory; +extern page_directory_t *current_directory; +extern void alloc_frame(page_t*,int,int); +extern u32int initial_esp; +extern u32int read_eip(); + +// The next available process ID. +u32int next_pid = 1; + +void initialise_tasking() +{ + // Rather important stuff happening, no interrupts please! + asm volatile("cli"); + + // Relocate the stack so we know where it is. + move_stack((void*)0xE0000000, 0x2000); + + // Initialise the first task (kernel task) + current_task = ready_queue = (task_t*)kmalloc(sizeof(task_t)); + current_task->id = next_pid++; + current_task->esp = current_task->ebp = 0; + current_task->eip = 0; + current_task->page_directory = current_directory; + current_task->next = 0; + current_task->kernel_stack = kmalloc_a(KERNEL_STACK_SIZE); + + // Reenable interrupts. + asm volatile("sti"); +} + +void move_stack(void *new_stack_start, u32int size) +{ + u32int i; + // Allocate some space for the new stack. + for( i = (u32int)new_stack_start; + i >= ((u32int)new_stack_start-size); + i -= 0x1000) + { + // General-purpose stack is in user-mode. + alloc_frame( get_page(i, 1, current_directory), 0 /* User mode */, 1 /* Is writable */ ); + } + + // Flush the TLB by reading and writing the page directory address again. + u32int pd_addr; + asm volatile("mov %%cr3, %0" : "=r" (pd_addr)); + asm volatile("mov %0, %%cr3" : : "r" (pd_addr)); + + // Old ESP and EBP, read from registers. + u32int old_stack_pointer; asm volatile("mov %%esp, %0" : "=r" (old_stack_pointer)); + u32int old_base_pointer; asm volatile("mov %%ebp, %0" : "=r" (old_base_pointer)); + + // Offset to add to old stack addresses to get a new stack address. + u32int offset = (u32int)new_stack_start - initial_esp; + + // New ESP and EBP. + u32int new_stack_pointer = old_stack_pointer + offset; + u32int new_base_pointer = old_base_pointer + offset; + + // Copy the stack. + memcpy((void*)new_stack_pointer, (void*)old_stack_pointer, initial_esp-old_stack_pointer); + + // Backtrace through the original stack, copying new values into + // the new stack. + for(i = (u32int)new_stack_start; i > (u32int)new_stack_start-size; i -= 4) + { + u32int tmp = * (u32int*)i; + // If the value of tmp is inside the range of the old stack, assume it is a base pointer + // and remap it. This will unfortunately remap ANY value in this range, whether they are + // base pointers or not. + if (( old_stack_pointer < tmp) && (tmp < initial_esp)) + { + tmp = tmp + offset; + u32int *tmp2 = (u32int*)i; + *tmp2 = tmp; + } + } + + // Change stacks. + asm volatile("mov %0, %%esp" : : "r" (new_stack_pointer)); + asm volatile("mov %0, %%ebp" : : "r" (new_base_pointer)); +} + +void switch_task() +{ + // If we haven't initialised tasking yet, just return. + if (!current_task) + return; + + // Read esp, ebp now for saving later on. + u32int esp, ebp, eip; + asm volatile("mov %%esp, %0" : "=r"(esp)); + asm volatile("mov %%ebp, %0" : "=r"(ebp)); + + // Read the instruction pointer. We do some cunning logic here: + // One of two things could have happened when this function exits - + // (a) We called the function and it returned the EIP as requested. + // (b) We have just switched tasks, and because the saved EIP is essentially + // the instruction after read_eip(), it will seem as if read_eip has just + // returned. + // In the second case we need to return immediately. To detect it we put a dummy + // value in EAX further down at the end of this function. As C returns values in EAX, + // it will look like the return value is this dummy value! (0x12345). + eip = read_eip(); + + // Have we just switched tasks? + if (eip == 0x12345) + return; + + // No, we didn't switch tasks. Let's save some register values and switch. + current_task->eip = eip; + current_task->esp = esp; + current_task->ebp = ebp; + + // Get the next task to run. + current_task = current_task->next; + // If we fell off the end of the linked list start again at the beginning. + if (!current_task) current_task = ready_queue; + + eip = current_task->eip; + esp = current_task->esp; + ebp = current_task->ebp; + + // Make sure the memory manager knows we've changed page directory. + current_directory = current_task->page_directory; + + // Change our kernel stack over. + set_kernel_stack(current_task->kernel_stack+KERNEL_STACK_SIZE); + // Here we: + // * Stop interrupts so we don't get interrupted. + // * Temporarily put the new EIP location in ECX. + // * Load the stack and base pointers from the new task struct. + // * Change page directory to the physical address (physicalAddr) of the new directory. + // * Put a dummy value (0x12345) in EAX so that above we can recognise that we've just + // switched task. + // * Restart interrupts. The STI instruction has a delay - it doesn't take effect until after + // the next instruction. + // * Jump to the location in ECX (remember we put the new EIP in there). + asm volatile(" \ + cli; \ + mov %0, %%ecx; \ + mov %1, %%esp; \ + mov %2, %%ebp; \ + mov %3, %%cr3; \ + mov $0x12345, %%eax; \ + sti; \ + jmp *%%ecx " + : : "r"(eip), "r"(esp), "r"(ebp), "r"(current_directory->physicalAddr)); +} + +int fork() +{ + // We are modifying kernel structures, and so cannot be interrupted. + asm volatile("cli"); + monitor_write(">> interrupts disabled\n"); + + // Take a pointer to this process' task struct for later reference. + task_t *parent_task = (task_t*)current_task; + monitor_write(">> parent task\n"); + + // Clone the address space. + page_directory_t *directory = clone_directory(current_directory); + monitor_write(">> directory\n"); + + // Create a new process. + task_t *new_task = (task_t*)kmalloc(sizeof(task_t)); + new_task->id = next_pid++; + new_task->esp = new_task->ebp = 0; + new_task->eip = 0; + new_task->page_directory = directory; + monitor_write(">> new task\n"); + current_task->kernel_stack = kmalloc_a(KERNEL_STACK_SIZE); + new_task->next = 0; + monitor_write(">> kernel stack\n"); + + // Add it to the end of the ready queue. + // Find the end of the ready queue... + task_t *tmp_task = (task_t*)ready_queue; + while (tmp_task->next) + tmp_task = tmp_task->next; + // ...And extend it. + tmp_task->next = new_task; + + // This will be the entry point for the new process. + u32int eip = read_eip(); + + // We could be the parent or the child here - check. + if (current_task == parent_task) + { + // We are the parent, so set up the esp/ebp/eip for our child. + u32int esp; asm volatile("mov %%esp, %0" : "=r"(esp)); + u32int ebp; asm volatile("mov %%ebp, %0" : "=r"(ebp)); + new_task->esp = esp; + new_task->ebp = ebp; + new_task->eip = eip; + // All finished: Reenable interrupts. + asm volatile("sti"); + + // And by convention return the PID of the child. + return new_task->id; + } + else + { + // We are the child - by convention return 0. + return 0; + } + +} + +int getpid() +{ + return current_task->id; +} + +void switch_to_user_mode() +{ + // Set up our kernel stack. + set_kernel_stack(current_task->kernel_stack+KERNEL_STACK_SIZE); + + // Set up a stack structure for switching to user mode. + asm volatile(" \ + cli; \ + mov $0x23, %ax; \ + mov %ax, %ds; \ + mov %ax, %es; \ + mov %ax, %fs; \ + mov %ax, %gs; \ + \ + \ + mov %esp, %eax; \ + pushl $0x23; \ + pushl %esp; \ + pushf; \ + pushl $0x1B; \ + push $1f; \ + iret; \ + 1: \ + "); + +} diff --git a/user_mode/src/task.h b/user_mode/src/task.h new file mode 100644 index 0000000..bcd440b --- /dev/null +++ b/user_mode/src/task.h @@ -0,0 +1,41 @@ +// +// task.h - Defines the structures and prototypes needed to multitask. +// Written for JamesM's kernel development tutorials. +// + +#ifndef TASK_H +#define TASK_H + +#include "common.h" +#include "paging.h" + +#define KERNEL_STACK_SIZE 2048 // Use a 2kb kernel stack. + +// This structure defines a 'task' - a process. +typedef struct task +{ + int id; // Process ID. + u32int esp, ebp; // Stack and base pointers. + u32int eip; // Instruction pointer. + page_directory_t *page_directory; // Page directory. + u32int kernel_stack; // Kernel stack location. + struct task *next; // The next task in a linked list. +} task_t; + +// Initialises the tasking system. +void initialise_tasking(); + +// Called by the timer hook, this changes the running process. +void task_switch(); + +// Forks the current process, spawning a new one with a different +// memory space. +int fork(); + +// Causes the current process' stack to be forcibly moved to a new location. +void move_stack(void *new_stack_start, u32int size); + +// Returns the pid of the current process. +int getpid(); + +#endif diff --git a/user_mode/src/timer.c b/user_mode/src/timer.c new file mode 100644 index 0000000..9f5be23 --- /dev/null +++ b/user_mode/src/timer.c @@ -0,0 +1,36 @@ +// timer.c -- Initialises the PIT, and handles clock updates. +// Written for JamesM's kernel development tutorials. + +#include "timer.h" +#include "isr.h" +#include "monitor.h" + +u32int tick = 0; + +static void timer_callback(registers_t *regs) +{ + tick++; + switch_task(); +} + +void init_timer(u32int frequency) +{ + // Firstly, register our timer callback. + register_interrupt_handler(IRQ0, &timer_callback); + + // The value we send to the PIT is the value to divide it's input clock + // (1193180 Hz) by, to get our required frequency. Important to note is + // that the divisor must be small enough to fit into 16-bits. + u32int divisor = 1193180 / frequency; + + // Send the command byte. + outb(0x43, 0x36); + + // Divisor has to be sent byte-wise, so split here into upper/lower bytes. + u8int l = (u8int)(divisor & 0xFF); + u8int h = (u8int)( (divisor>>8) & 0xFF ); + + // Send the frequency divisor. + outb(0x40, l); + outb(0x40, h); +} diff --git a/user_mode/src/timer.h b/user_mode/src/timer.h new file mode 100644 index 0000000..2aa1af5 --- /dev/null +++ b/user_mode/src/timer.h @@ -0,0 +1,11 @@ +// timer.h -- Defines the interface for all PIT-related functions. +// Written for JamesM's kernel development tutorials. + +#ifndef TIMER_H +#define TIMER_H + +#include "common.h" + +void init_timer(u32int frequency); + +#endif diff --git a/user_mode/test.txt b/user_mode/test.txt new file mode 100644 index 0000000..00d165e --- /dev/null +++ b/user_mode/test.txt @@ -0,0 +1 @@ +Hello, VFS world! \ No newline at end of file diff --git a/user_mode/test2.txt b/user_mode/test2.txt new file mode 100644 index 0000000..04ab8dd --- /dev/null +++ b/user_mode/test2.txt @@ -0,0 +1 @@ +My filename is test2.txt! \ No newline at end of file diff --git a/user_mode/update_image.sh b/user_mode/update_image.sh new file mode 100755 index 0000000..7fbf505 --- /dev/null +++ b/user_mode/update_image.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +sudo /sbin/losetup /dev/loop0 floppy.img +sudo mount /dev/loop0 /mnt +sudo cp src/kernel /mnt/kernel +sudo cp initrd.img /mnt/initrd +sudo umount /dev/loop0 +sudo /sbin/losetup -d /dev/loop0