Open heekyoung2000 opened 1 year ago
KERN_BASE -> USER_STACK
threads์์ all fail ๋๋ ์ด์ - call stack ๋จ๋ ์ด์
next_fd ํฌ์ธํฐ๋ฅผ ํตํด table ์ด๋์ ํ ๋ +1์ ์ค์ ํด์ค์ return ๊ฐ์ด ํ์ฌ ์ฝ์ผ๋ ค๋ ํ์ผ๊ณผ ๋ฌ๋ผ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
์ด์ ์ฝ๋
/* ํ์ผ ๊ฐ์ฒด๋ฅผ ํ์ผ ๋์คํฌ๋ฆฝํฐ ํ
์ด๋ธ์ ์ถ๊ฐ */
while (curr->next_fd < FDT_COUNT_LIMIT && fdt[curr->next_fd])
curr->next_fd++;
if (curr->next_fd >= FDT_COUNT_LIMIT)
return -1;
fdt[curr->next_fd] = f;
/* ํ์ผ ๋์คํฌ๋ฆฝํฐ์ ์ต๋๊ฐ 1 ์ฆ๊ฐ */
curr->next_fd = next_fd + 1;
/* ํ์ผ ๋์คํฌ๋ฆฝํฐ ๋ฆฌํด */
return curr->next_fd;
์์ ํ ์ฝ๋
while (curr->next_fd < FDT_COUNT_LIMIT && fdt[curr->next_fd])
curr->next_fd++;
if (curr->next_fd >= FDT_COUNT_LIMIT)
return -1;
fdt[curr->next_fd] = f;
/* ํ์ผ ๋์คํฌ๋ฆฝํฐ ๋ฆฌํด */
return curr->next_fd;
case SYS_WRITE:
f->R.rax = write(f->R.rdi, f->R.rsi, f->R.rdx);
break;
f->R.rax ์์จ์ ์๊ธด ์ค๋ฅ
โ Implement TODO
๐พ ์คํ ๊ฒฐ๊ณผ
โญ๏ธ ๋ณด์ํ ์ & ์ด๋ ค์ ๋ ์
hex_dump๋ก ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํด๋ณด๊ณ ์ ํ์ง๋ง ์ถ๋ ฅ์ด ์๋๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
file descriptor์ ์ค์ ์ค๋ฅ ์๋ก ํ ๋นํ fd์ ์ธ๋ฑ์ค๋ฅผ ๋ํ๋ด๋ next_fd๋ฅผ ์ด์ ์๋ 1์ฉ ์ฆ๊ฐํด์ฃผ๊ณ while๋ฌธ์ด ๋๋ ์ดํ์๋ +1์ ์ค์ ํด์ฃผ์๊ณ , ํ์ฌ ํ์ผ๊ณผ ๋ค๋ฅธ ๊ฐ์ ๋ฆฌํดํด์ฃผ๋ฉด์ open์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ฌ filesys์์ all fail์ด ๋์๋ค.
/ ํ์ผ ๋์คํฌ๋ฆฝํฐ์ ์ต๋๊ฐ 1 ์ฆ๊ฐ / curr->next_fd = next_fd + 1;
/ ํ์ผ ๋์คํฌ๋ฆฝํฐ ๋ฆฌํด / return curr->next_fd;
syscall์์์ ์ค๋ฅ
f->R.rax ์์จ์ ์๊ธด ์ค๋ฅ
๊น๋ถ ๋ด์ฉ์ ๋ณด๋ฉด ํจ์ ๋ฐํ ๊ฐ์ ๋ํ x86-64 ๊ท์น์ RAX ๋ ์ง์คํฐ์ ๊ฐ์ ๋ฐฐ์นํ๋ ๊ฒ์ ๋๋ค. ๊ฐ์ ๋ฐํํ๋ ์์คํ ํธ์ถ์ ๊ตฌ์กฐ์ฒด intr_frame์ rax ๋ฉค๋ฒ๋ฅผ ์์ ํ์ฌ ๊ฐ์ ๋ฐํํ ์ ์์ต๋๋ค. ๋ผ๊ณ ๋ช ์๋์ด ์๋ค.