rtm [Sat, 26 Aug 2006 16:31:05 +0000 (16:31 +0000)]
consistently ignore more than 14 chars in path component
forbid create or write of existing directory
mkdir("d1/d2/d3"), .. should refer to d2, not cwd
mkdir increase parent link count
kaashoek [Wed, 23 Aug 2006 01:09:24 +0000 (01:09 +0000)]
i/o redirection in sh
better parsing of sh commands (copied from jos sh)
cat: read from 1 if no args
sbrk system call, but untested
getpid system call
moved locks in keyboard intr, but why do we get intr w. null characters from keyboard?
rtm [Tue, 15 Aug 2006 22:18:20 +0000 (22:18 +0000)]
no more proc[] entry per cpu for idle loop
each cpu[] has its own gdt and tss
no per-proc gdt or tss, re-write cpu's in scheduler (you win, cliff)
main0() switches to cpu[0].mpstack
kaashoek [Mon, 14 Aug 2006 21:22:13 +0000 (21:22 +0000)]
user-level programs: mkdir and rm
shell parses arguments (very simplistic)
readme version of README (sh doesn't deal with capital characters)
printf recognizes %c
nicer output format for ls
rtm [Sun, 13 Aug 2006 12:22:44 +0000 (12:22 +0000)]
namei returns locked parent dir inode for create / unlink
don't hold fd table lock across idecref() (latter does block i/o)
idecref calls iput() in case last ref -> freeing inode
dir size is 512 * # blocks, so readi/writei &c work
unlink deletes dirent even if ip->nlink > 0
kaashoek [Sun, 13 Aug 2006 05:28:04 +0000 (05:28 +0000)]
zero freed blocks
multi-block directories
track size of directory (size = number entries in use)
should namei (and other code that scans through directories) scan through all blocks of a directory and not use size?
rtm [Thu, 10 Aug 2006 02:07:10 +0000 (02:07 +0000)]
low-level keyboard input (not hooked up to /dev yet)
fix acquire() to cli() *before* incrementing nlock
make T_SYSCALL a trap gate, not an interrupt gate
sadly, various crashes if you hold down a keyboard key...
rtm [Tue, 8 Aug 2006 19:58:06 +0000 (19:58 +0000)]
fix race in holding() check in acquire()
give cpu1 a TSS and gdt for when it enters scheduler()
and a pseudo proc[] entry for each cpu
cpu0 waits for each other cpu to start up
read() for files
Also remove all calls to memcpy in favor of
memmove, which has defined semantics when
the ranges overlap. The fact that memcpy was
working in console.c to scroll the screen is not
guaranteed by all implementations.
Change fetchint, fetcharg, and putint to return -1 on error, 0 on success.
They had been returning 0 on error, 1 on success, but all the callers
were checking for return value < 0.
no more recursive locks
wakeup1() assumes you hold proc_table_lock
sleep(chan, lock) provides atomic sleep-and-release to wait for condition
ugly code in swtch/scheduler to implement new sleep
fix lots of bugs in pipes, wait, and exit
fix bugs if timer interrupt goes off in schedule()
console locks per line, not per byte
i think my cmpxchg use was wrong in acquire
nesting cli/sti: release shouldn't always enable interrupts
separate setup of lapic from starting of other cpus, so cpu() works earlier
flag to disable locking in console output
make locks work even when curproc==0
(still crashes in clock interrupt)