Commit graph

135 commits

Author SHA1 Message Date
Frans Kaashoek 96e4e2f4d1 thanks eyalz800 2018-08-30 13:46:48 -04:00
Robert Morris 4638cabf8c fix runoff complaints about pagination and long lines 2017-08-29 14:11:59 -04:00
Frans Kaashoek 4f14d8d1e5 Commit to running on an SMP (perhaps with only 1 core). Remove most code
from picirq.c and remove timer.c completely.  Update runoff.list.
2017-08-09 07:44:51 -04:00
Frans Kaashoek ed396c068b Eliminate code for gs trick to track per-cpu state. We rely on lapiccpunum()
to find a per-cpu id with which we locate a cpu's cpu struct.
2017-02-01 18:04:13 -05:00
Frans Kaashoek abf847a083 Start of an experiment to remove the use of gs for cpu local variables. 2017-01-31 17:47:16 -05:00
Frans Kaashoek 5bf3fbee00 Make runoff happy 2016-09-02 15:27:28 -04:00
Frans Kaashoek ae15515d80 APIC IDs may not be consecutive and start from zero, so we cannot really use it
as a direct index into cpus.  Record apicid in struct cpu and have cpunum() look
for it. Replace cpu->id with cpunum() everywhere, and replace cpu->id with cpu->apicid.
Thanks to Xi Wang.
2016-09-02 08:31:13 -04:00
Frans Kaashoek 7894fcd217 Remove trailing white space with:
for f in *.{h,c}; do sed -i .sed 's/[[:blank:]]*$//' $f; done
(Thanks to Nicolás Wolovick)
2016-08-25 09:13:00 -04:00
Robert Morris a7c03bd914 p2v -> P2V 2016-08-24 13:40:06 -04:00
Robert Morris c779cc2be1 main comments 2016-08-11 13:55:13 -04:00
Robert Morris 3431cd4927 more comments in entryother.S 2016-08-10 11:35:28 -04:00
Frans Kaashoek 8320d61be5 Pick up where i left off in april:
- move log into metadata part of disk, so that marking
that the log's blocks are in use falls out for free
- superblock describes the whole disk (sizes and offets)
- sizes and offsets are computed in one place (mkfs) and
the rest of the code refers to the superblock for these values,
instead of recomputing them.
2015-06-27 12:39:13 -04:00
Frans Kaashoek 74c77da6f8 Nice layout for a printout of the code 2014-08-29 17:06:49 -04:00
Frans Kaashoek 70c555574a Remove unused argument from lapicinit (thanks to Peter Froehlich) 2012-08-22 20:13:43 -04:00
Austin Clements 1e6f0146d2 Use | instead of + for entrypgdir. Linker doesn't get in our way here. 2011-09-14 13:47:04 -04:00
Robert Morris c092540e39 eliminate enter_alloc -- use kalloc for everything 2011-09-13 13:14:52 -04:00
Frans Kaashoek e25b74ca80 Fix layout issues for printed version 2011-09-01 10:25:20 -04:00
Robert Morris 5e08357827 enterpgdir -> entrypgdir 2011-08-30 20:50:19 -04:00
Austin Clements a7061b4f97 Style nits; indentation and tabs 2011-08-29 16:12:01 -04:00
Frans Kaashoek d10d324e79 Remove sys_init syscall
Invoke initlog from forkret on first user process
2011-08-22 20:05:15 -04:00
Frans Kaashoek a4b213cf49 Avoid "boot" in xv6 2011-08-15 20:11:13 -04:00
Frans Kaashoek 9449646853 Use 4Mbyte pages during boot 2011-08-15 17:41:58 -04:00
Frans Kaashoek c60a3551c2 Separate more clearly bootloader from xv6 by renaming multiboot.S to entry.S etc.
Maybe the string boot shouldn't appear in xv6 code?
2011-08-15 12:02:59 -04:00
Frans Kaashoek c95ce31c59 Oops 2011-08-12 12:02:17 -04:00
Frans Kaashoek e577a62f0d Some comments 2011-08-12 07:31:52 -04:00
Frans Kaashoek bd71a45046 Make AP processors boot using bootpgdir
Remove device mapping from bootpgdir
Remove unnecessary vmenable
Set CPUS back to 2 in Makefile
Passes all usertests
2011-08-11 12:25:10 -04:00
Frans Kaashoek 832af025a3 Remove jmpkstack 2011-08-09 21:47:40 -04:00
Frans Kaashoek 66ba8079c7 Use static page table for boot, mapping first 4Mbyte; no more segment trick
Allocate proper kernel page table immediately in main using boot allocator
Remove pginit
Simplify address space layout a tiny bit
More to come (e.g., superpages to simplify static table)
2011-08-09 21:37:35 -04:00
Frans Kaashoek 9aa0337dc1 Map kernel high
Very important to give qemu memory through PHYSTOP :(
2011-07-29 07:31:27 -04:00
Frans Kaashoek 13a96baefc Dirt simple logging
Passes usertests and stressfs
Seems to recover correctly in a number of simple cases
2011-07-27 20:35:46 -04:00
Russ Cox cf4b1ad90b xv6: formatting, cleanup, rev5 (take 2) 2011-02-19 21:17:55 -05:00
Russ Cox 1a81e38b17 make new code like old code
Variable declarations at top of function,
separate from initialization.

Use == 0 instead of ! for checking pointers.

Consistent spacing around {, *, casts.

Declare 0-parameter functions as (void) not ().

Integer valued functions return -1 on failure, 0 on success.
2011-01-11 13:01:13 -05:00
Robert Morris faad047ab2 change some comments, maybe more informative
delete most comments from bootother.S (since copy of bootasm.S)
ksegment() -> seginit()
move more stuff from main() to mainc()
2010-09-13 15:34:44 -04:00
Austin Clements b0751a3e9b Space police 2010-09-01 00:41:25 -04:00
Robert Morris 8d774afb2d no more pminit, or ELF header at 0x10000
kinit() knows about end and PHYSTOP
map all of kernel read/write (rather than r/o instructions)
thanks, austin
2010-08-31 15:39:25 -04:00
Robert Morris 7d7dc9331b kalloc/kfree now only a page at a time
do not keep sorted contiguous free list
2010-08-31 12:54:47 -04:00
Robert Morris ac090078c6 xx 2010-08-30 10:13:49 -04:00
Robert Morris 5ab868fd90 set only PG and WP in vminit; the rest don't seem to be needed and are confusing 2010-08-30 06:38:58 -04:00
Robert Morris 1afc9d3fca add some comments
find out the hard way why user and kernel must have separate segment descriptors
2010-08-05 21:16:55 -04:00
Robert Morris 2cf6b32d4d move jkstack to main.c
replace jstack with asm()s
2010-08-05 14:15:03 -04:00
Frans Kaashoek 4714c20521 Checkpoint page-table version for SMP
Includes code for TLB shootdown (which actually seems unnecessary for xv6)
2010-07-23 07:41:13 -04:00
Frans Kaashoek 40889627ba Initial version of single-cpu xv6 with page tables 2010-07-02 14:51:53 -04:00
Russ Cox 7e0cc8e36e another attempt at cpu-local variables.
this time do it ourselves instead of piggybacking on TLS.
add -fno-pic to Makefile; pic code breaks our fake TLS.
2009-09-02 10:07:59 -07:00
Russ Cox 48755214c9 assorted fixes:
* rename c/cp to cpu/proc
 * rename cpu.context to cpu.scheduler
 * fix some comments
 * formatting for printout
2009-08-30 23:02:08 -07:00
rsc 19333efb9e Some proc cleanup, moving some of copyproc into allocproc.
Also, an experiment: use "thread-local" storage for c and cp
instead of the #define macro for curproc[cpu()].
2009-05-31 00:28:45 +00:00
rsc 2157576107 be consistent: no underscores in function names 2009-03-08 22:07:13 +00:00
rsc b7f653dc49 xv6: boot loader adjustments
do Bochs breakpoint and spin in bootasm.S.
not needed in bootmain too.
fix readseg bug (rounding of va).
zero segments when memsz > filesz.
no need to clear BSS in kernel main.
make bootother.S like bootasm.S
2009-03-08 21:41:30 +00:00
kolya 5c5470a2fa fix obvious printf nits after reading through code 2008-08-21 23:24:02 +00:00
rsc 943fd378a1 Incorporate new understanding of/with Intel SMP spec.
Dropped cmpxchg in favor of xchg, to match lecture notes.

Use xchg to release lock, for future protection and to
keep gcc from acting clever.
2007-10-01 20:43:15 +00:00
rsc 9fd9f80431 Re: why cpuid() in locking code?
rtm wrote:
> Why does acquire() call cpuid()? Why does release() call cpuid()?

The cpuid in acquire is redundant with the cmpxchg, as you said.
I have removed the cpuid from acquire.

The cpuid in release is actually doing something important,
but not on the hardware.  It keeps gcc from reordering the
lock->locked assignment above the other two during optimization.
(Not that current gcc -O2 would choose to do that, but it is allowed to.)
I have replaced the cpuid in release with a "gcc barrier" that
keeps gcc from moving things around but has no hardware effect.

On a related note, I don't think the cpuid in mpmain is necessary,
for the same reason that the cpuid wasn't needed in release.

As to the question of whether

  acquire();
  x = protected;
  release();

might read protected after release(), I still haven't convinced
myself whether it can.  I'll put the cpuid back into release if
we determine that it can.

Russ
2007-09-30 14:30:04 +00:00