Robert Morris
27057bc9b4
interrupt-driven uart output, hopefully a nice example for teaching.
2020-08-10 11:19:10 -04:00
Robert Morris
1e72d5ca08
cpu->scheduler -> cpu->context to reduce confusion
2020-08-10 11:19:10 -04:00
Robert Morris
5494c91705
rename p->tf to p->trapframe, for consistency with p->context
2020-08-10 11:19:10 -04:00
Robert Morris
af9eb9114c
make "echo hello > x" truncate file x.
2020-08-10 11:19:10 -04:00
Takahiro
7a5fcb28b3
Write interrupt ack register in virtio_disk_intr()
2020-04-18 14:49:54 -07:00
Asami Doi
8b052656a0
update initcode to avoid using the compressed extension
2020-03-20 12:33:32 +09:00
Jonathan Kimmitt
2b040aa379
Update ramdisk.c
...
The qemu syntax for a ram disk was documented incorrectly. The documented syntax is here:
https://qemu.weilnetz.de/doc/qemu-doc.html
2020-01-16 15:05:27 +00:00
Robert Morris
028af27646
mention LRU list a bit more in comments.
2019-10-29 04:32:55 -04:00
Robert Morris
e7ffb74ad1
fix a potential memory leak
2019-10-27 13:36:46 -04:00
Robert Morris
d9160fb4b9
nits
2019-10-27 08:03:19 -04:00
Anish Athalye
f2ab0eb644
Clean up linker script
...
This patch does the following:
- Add .text.* to the .text section in the output
- Add an assertion that the trampoline does not overflow a page
- Add the .rodata section
- Make .sdata and .sdata.* (which is for small data) be absorbed into
the .data section, because we don't need to distinguish between them;
this prevents .sdata from appearing in the output
- Make the analogous change for .srodata and .sbss
- Make all the data sections 16-byte aligned
This patch also updates the .editorconfig for *.ld files.
2019-10-21 22:27:18 -04:00
Fumiya Shigemitsu
90eb90b5e2
Fix minor typos
2019-10-21 21:01:07 +09:00
Robert Morris
2821d43cc9
nits
2019-10-16 12:27:08 -04:00
Robert Morris
56583b1402
updated alarmtest
2019-10-03 15:02:19 -04:00
Robert Morris
deaff5d8a6
no buf->qnext
2019-09-24 14:41:51 -04:00
Xi Wang
9ead904afe
fix major validation
...
fileread/filewrite should validate major to avoid buffer overflows
or bogus function pointers.
2019-09-23 20:01:56 -04:00
Robert Morris
37df68e5de
story is more complex than I thought.
2019-09-23 07:24:41 -04:00
Robert Morris
d175beadf5
bug fix: reparent() sometimes deadlocked
...
bug fix: exit() sometimes released a different parent lock than it acquired
usertests
2019-09-23 06:50:25 -04:00
Robert Morris
d940fd122d
don't leak memory if exec() arguments are invalid.
2019-09-21 04:54:25 -04:00
Robert Morris
7c7ed20822
don't leak a file system block if the buf argument to write is invalid
...
and a usertest
2019-09-20 13:09:26 -04:00
Robert Morris
e1a37303c8
yet another sbrk() bug fix, and usertest
2019-09-20 12:13:57 -04:00
Robert Morris
4de161f973
don't panic if a program frees all its memory with sbrk().
...
if a program sbrk()'s to a non-page-boundary, don't free that page.
corresponding usertests.
2019-09-20 11:35:27 -04:00
Robert Morris
ca30cac702
more incorrect cast to uint
2019-09-20 10:27:03 -04:00
Robert Morris
402e7b5605
fix a potential kernel crash
...
add a regression test for it
2019-09-20 09:41:03 -04:00
Robert Morris
57e40a0204
nits
2019-09-20 06:02:47 -04:00
Robert Morris
2df42355f7
all of PTE_FLAGS
2019-09-17 06:07:58 -04:00
Robert Morris
036b5edf12
set architecture riscv:rv64 -- fix gdb trampoline disassembly, thanks jonathan
2019-09-12 10:48:48 -04:00
Frans Kaashoek
7e6c37e67e
Support exit status for exit/wait
...
One test case for returning a exit status
Passes usertests, but haven't used it to simplify tests
2019-09-10 12:30:10 -04:00
Frans Kaashoek
035cca95fe
Make the end variable be really at the end of bss, and delete + 4096 in freerange()
2019-09-08 15:19:19 -04:00
Robert Morris
e5b7fa62cc
thanks to Anthony Coulter
2019-09-08 06:51:58 -04:00
Robert Morris
25e113138d
sfence.vma in trampoline as well
2019-09-03 16:29:48 -04:00
Robert Morris
9b9e2dd0f2
fix sfence_vma comment
2019-09-03 16:25:11 -04:00
Robert Morris
86a1d4b295
sfence_vma after satp
2019-09-03 15:45:07 -04:00
Frans Kaashoek
510bcde894
Add major/minor/mkdev
...
Maybe apply this change to master
2019-08-23 19:41:53 -04:00
Frans Kaashoek
d98ddadd79
Also release buffer on failed copyout
2019-08-20 12:46:56 -04:00
Frans Kaashoek
6005ef5a1c
Release buffer also when copyin fails
2019-08-20 11:57:24 -04:00
Frans Kaashoek
d9818b89e1
512 -> BSIZE
2019-08-20 11:56:56 -04:00
Frans Kaashoek
a825f22cf8
Merge remote-tracking branch 'origin/master' into riscv
2019-08-19 19:27:29 -04:00
Frans Kaashoek
21ad8c76bc
A few now unused DOC
2019-08-19 18:12:19 -04:00
Frans Kaashoek
e10f797762
Merge remote-tracking branch 'origin/master' into riscv
2019-08-19 13:35:47 -04:00
Frans Kaashoek
2501560cd6
Cosmetic cleanup: fsinit reads sb and calls loginit. initialize icache
...
in main.c and don't make it disk specific; the icache is shared. This
doesn't matter since we have only one disk, but conceptually cleaner
and maybe helpful to students for mount lab.
2019-08-18 14:35:11 -04:00
Frans Kaashoek
e398a9815c
Wrap state of disk driver in a struct so that it is easier to support
...
several disks (e.g., in a mount lab).
2019-08-12 07:20:32 -04:00
Robert Morris
0c10cbe829
syscall lab nits
2019-08-02 11:55:26 -04:00
Frans Kaashoek
62ece4b09e
Merge branch 'riscv-bcache' into riscv
2019-08-01 15:46:50 -04:00
Robert Morris
fb8a0099d4
fences for starting
2019-08-01 14:59:20 -04:00
Robert Morris
d600026c3f
cut ramdisk
2019-07-30 16:06:00 -04:00
Frans Kaashoek
848d1906e8
Track in buf if disk "owns" buffer
2019-07-30 12:53:19 -04:00
Frans Kaashoek
f37a3e3964
Make pin/unpin explicit
2019-07-30 08:54:43 -04:00
Frans Kaashoek
f1bb53c690
The driver should free descriptors, not interrupt handler. This
...
avoids handler freeing descriptors before driver sees that the request
has completed.
2019-07-30 08:13:03 -04:00
Frans Kaashoek
5304310452
Remove B_DIRTY
...
Use refcnt to pin blocks into the cache
Replace flags/B_VALID with a boolean field valid
Use info[id].status to signal completion of disk interrupt
Pass a read/write flag to virtio_disk_rw
2019-07-29 17:33:16 -04:00
Robert Morris
47b9cfee49
separate out timer init code for clarity
2019-07-28 13:16:49 -04:00
Robert Morris
1ec50c5848
xxx
2019-07-28 07:43:22 -04:00
Robert Morris
6507da772d
argptr no longer needed, since copyin checks
2019-07-28 06:29:37 -04:00
Robert Morris
629faafa36
cleaner UART register interface
2019-07-27 06:44:24 -04:00
Robert Morris
a33f60fea3
console/uart tweaks
2019-07-27 05:47:19 -04:00
Robert Morris
cf48b24c03
beautify console.c
2019-07-27 04:15:06 -04:00
Robert Morris
281d450a08
split printf into a separate file, to make console.c more like a driver
2019-07-27 03:49:03 -04:00
Robert Morris
cc1a303d09
fetchint isn't used any more
2019-07-26 12:34:06 -04:00
Robert Morris
f0987d82dc
???
2019-07-26 11:09:54 -04:00
Robert Morris
c714e3e35c
machinevec -> timervec
2019-07-26 10:17:02 -04:00
Robert Morris
fa2e2e3c81
uservec before userret in trampoline, to match book and kernelvec
2019-07-26 09:38:22 -04:00
Robert Morris
8d30e21b59
Merge branch 'riscv' of g.csail.mit.edu:xv6-dev into riscv
2019-07-26 04:53:59 -04:00
Robert Morris
ea95a6654c
trampin -> uservec
...
trampout -> userret
2019-07-26 04:53:46 -04:00
Frans Kaashoek
47c9721d78
a few name changes in panic msg
2019-07-25 06:59:07 -04:00
Robert Morris
4e62de64cd
fix an exit/exit deadlock -> one more locking protocol violation
...
increase timer rate from 1/second to 10/second
2019-07-25 06:30:49 -04:00
Robert Morris
b19adf79f9
purge x86 stuff from defs.h
2019-07-25 05:37:35 -04:00
Robert Morris
5d5e4e065f
comments for timer setup
2019-07-25 05:35:03 -04:00
Robert Morris
9a817bd134
rationalize some vm function names
2019-07-24 15:28:37 -04:00
Robert Morris
da898a11b6
???
2019-07-24 14:40:13 -04:00
Robert Morris
a77287e924
no more PAGEBREAK
2019-07-24 13:33:43 -04:00
Robert Morris
b4f89bb529
ping-pong exercise
2019-07-24 10:39:05 -04:00
Robert Morris
8f6865d1f1
display assembly instructions, to help with first.tex exercise
2019-07-24 10:15:45 -04:00
Robert Morris
936afc6e1a
mstart -> start
2019-07-23 14:31:12 -04:00
Robert Morris
54178ad94d
simplify kernel mapping calls
2019-07-23 12:17:17 -04:00
Robert Morris
55bc96d419
a few core -> CPU
...
get rid of PDF generating support
2019-07-23 11:14:10 -04:00
Frans Kaashoek
b8a31c494c
one more TRAMPOLINE
2019-07-23 07:30:23 -04:00
Frans Kaashoek
6c78af4a57
fix mapkstack
2019-07-22 20:58:15 -04:00
Frans Kaashoek
b2e9c8eea5
Clear U bit for second stack page so that it functions as a guard page
2019-07-22 15:38:08 -04:00
Robert Morris
38b430687c
nit
2019-07-22 15:04:07 -04:00
Robert Morris
6b379e4707
-MD and TRAPFRAME
2019-07-22 14:54:40 -04:00
Frans Kaashoek
5eab649255
Allocate 2 pages per proc, with the top one unmapped.
...
The page below the last proc is unmapped by default (because the
kernel doesn't map anything right below the kernel stacks).
2019-07-22 14:30:45 -04:00
Frans Kaashoek
c5d48db045
Merge branch 'riscv-kstack' into riscv
2019-07-22 13:32:33 -04:00
Robert Morris
328204d9cc
not much
2019-07-20 18:51:31 -04:00
Robert Morris
06e49a58dc
pi for pipe, rather than p, to avoid confusion with proc's p->lock
2019-07-20 17:07:20 -04:00
Robert Morris
3333665ab6
not much
2019-07-20 10:17:26 -04:00
Robert Morris
2418ac380c
it's not clear that the release will always enable interrupts
2019-07-19 13:27:48 -04:00
Frans Kaashoek
06109901c9
x
2019-07-19 11:27:02 -04:00
Robert Morris
dbd729b32d
with per-proc locks, we don't need the intr_on() inside the loop.
2019-07-19 10:20:02 -04:00
Robert Morris
32168df609
no need to save/restore 14
2019-07-19 09:02:15 -04:00
Frans Kaashoek
9156632701
One way of supporting a guard page below kstack: allocate kstacks in
...
procinit() and map them high up (below TRAMPOLNE) with an empty
mapping below each stack. Never free a kernel stack.
Another way would be to allocate and map them dynamically, but then we
need to reload page table when switching processes in scheduler()
and/or have a kernel pagetable per proc (if we want k->stack to be the
same virtual address in each process).
One gotcha: kernel addresses are not equal to physical addresses for
stack addresses. A stack address must be translated if we need its
physical address (e.g., virtio passes a stack address to the disk).
2019-07-19 08:38:51 -04:00
Frans Kaashoek
b924e44f06
Merge branch 'riscv' of g.csail.mit.edu:xv6-dev into riscv
2019-07-17 05:53:47 -04:00
Frans Kaashoek
ce53416f49
Delete x86 comment
2019-07-17 05:53:34 -04:00
Robert Morris
ebc3937209
conservatively call sfence.vma before every satp load.
2019-07-16 17:02:21 -04:00
Robert Morris
6bbc2b2245
cosmetic changes
2019-07-11 10:38:56 -04:00
Robert Morris
7797a38423
another test, to help with locking exercises
2019-07-11 05:41:59 -04:00
Robert Morris
4bc900e78b
nits
2019-07-10 14:54:34 -04:00
Robert Morris
061e3be6f8
more comment cleanup
2019-07-10 10:13:08 -04:00
Robert Morris
c0266a877a
document which proc fields are protected by p->lock
2019-07-10 09:28:00 -04:00
Robert Morris
5eb1685700
have kill() lock before looking at p->pid
...
document wait()'s use of np->parent w/o holding lock.
2019-07-10 09:24:50 -04:00
Robert Morris
9981bb2270
tweak some comments.
2019-07-10 08:57:51 -04:00
Robert Morris
9d34838b4f
holding p->lock all the way through state=RUNNABLE means we don't need EMBRYO
2019-07-08 11:11:00 -04:00
Robert Morris
db72f3108f
eliminate ptable. ptable.lock -> pid_lock.
2019-07-07 15:20:13 -04:00
Robert Morris
4ce3a5fa21
nits
2019-07-07 14:57:16 -04:00
Robert Morris
c4f6a241cd
avoid a double-lock of initproc->lock if child of init is reparenting
2019-07-07 07:03:28 -04:00
Frans Kaashoek
dabbc348bc
Maybe fix two races identified by rtm (thx!):
...
- during exit(), hold p's parent lock and p's lock across all changes
to p and its parent (e.g., reparenting and wakeup1). the lock
ordering between concurrent exits of children, parent, and great
parent might work out because processes form a tree.
- in wakeup1() test and set p->state atomically by asking caller to
have p locked.
a correctness proof would be desirable.
2019-07-06 16:38:41 -04:00
Frans Kaashoek
fab5e7c1de
Make size in stat.h be a uint64
...
Supporting print long using %l (a bit of cheat)
Modify ls to print size using %l
We should probably update size in inode too.
2019-07-04 08:57:23 -04:00
Frans Kaashoek
6bfb078b14
x
2019-07-04 08:54:16 -04:00
Frans Kaashoek
47e69250d0
Simplify wakeup1
2019-07-03 15:38:30 -04:00
Frans Kaashoek
cee830af24
Apply some corresponding bug fixes from wq branch here
2019-07-03 15:18:55 -04:00
Frans Kaashoek
ccf299850b
Remove some debugging code
2019-07-02 20:52:30 -04:00
Frans Kaashoek
26f306113a
Fix a lost wakeup bug: the disk driver's wakeup() can run after the
...
reading process acquired p->lock and released virtio lock in sleep(),
but before the process had set p->status to SLEEPING, because the
wakeup tested p->status without holding p's lock. Thus, wakeup can
complete without seeing any process SLEEPING and then p sets p->status
to SLEEPING.
Fix some other issues:
- Don't initialize proc lock in allocproc(), because freeproc() sets
np->state = UNUSED and allocproc() can choose np and calls initlock()
on the process's lock, releasing np's lock accidentally. Move
initializing proc's lock to init.
- Protect nextpid using ptable.lock (and move into its own function)
Some clean up:
- Don't acquire p->lock when it p is used in a private way (e.g., exit()/grow()).
- Move find_runnable() back into scheduler().
2019-07-02 19:29:14 -04:00
Frans Kaashoek
1e4d7065d6
Merge branch 'riscv' into riscv-proc
2019-07-02 14:19:31 -04:00
Frans Kaashoek
84c759fc02
x
2019-07-02 14:09:38 -04:00
Frans Kaashoek
37ac6f8f4f
Don't start processes at the end of the proc table
2019-07-02 13:55:52 -04:00
Frans Kaashoek
da51735980
Avoid two cores selecting the same process to run
2019-07-02 13:40:33 -04:00
Robert Morris
f59c1bf1d8
try to continue from walk() failing to allocate a page-table page
2019-07-02 11:45:06 -04:00
Robert Morris
b27f275014
avoid allocproc() returning a struct proc with non-zero p->sz
2019-07-02 11:17:50 -04:00
Robert Morris
1540c8b15a
COW tests
2019-07-02 11:04:35 -04:00
Frans Kaashoek
67702cf706
Checkpoint switching to per-process locks, in attempt clarify xv6's
...
locking plan, which is a difficult to understand because ptable lock
protects many invariants. This implementation has a bug: once in a
while xv6 unlocks a proc lock that is locked by another core.
2019-07-02 09:14:47 -04:00
Robert Morris
40f1041a0a
don't enable interrupts until done with sstatus, scause, &c
2019-07-02 05:20:11 -04:00
Robert Morris
535ac52efa
oops, don't hold mycpu() result across intr_off()
2019-07-01 17:54:41 -04:00
Robert Morris
abfe9999f4
have fork() fail, not panic, if not enough phys mem
2019-07-01 17:46:06 -04:00
Robert Morris
18e76a6c47
sbrk() returns a pointer, so it should be 64 bits
2019-07-01 17:01:50 -04:00
Robert Morris
9b99f00743
oops, don't hold mycpu() result across intr_off()
2019-07-01 14:15:18 -04:00
Robert Morris
0498bfd159
timer interrupt in the kernel -> yield
2019-07-01 13:46:11 -04:00
Frans Kaashoek
2c0338fe42
x
2019-07-01 08:28:14 -04:00
Frans Kaashoek
af6c35e14b
Introduce alloc3_desc and UsedArea to make code easier to read
2019-07-01 08:20:35 -04:00
Robert Morris
a8305b7318
FD_DEVICE
2019-06-13 10:29:27 -04:00
Robert Morris
46744c4a13
for spinlocks, use gcc intrinsics, but say what they compile to
2019-06-13 10:00:50 -04:00
Robert Morris
ca39672a30
clean up virtio code
2019-06-13 09:40:17 -04:00
Robert Morris
4adf016925
eliminate ramdisk
2019-06-13 06:57:38 -04:00
Robert Morris
de9d72c908
virtio disk driver
2019-06-13 06:49:02 -04:00
Robert Morris
5753553213
separate source into kernel/ user/ mkfs/
2019-06-11 09:57:14 -04:00