Blue-club / pintos_6

Other
0 stars 3 forks source link

[Project2] User Programs (heekyoung2000) #13

Open heekyoung2000 opened 1 year ago

heekyoung2000 commented 1 year ago

โœ… Implement TODO

๐Ÿ‘พ ์‹คํ–‰ ๊ฒฐ๊ณผ

image

โญ๏ธ ๋ณด์™„ํ•  ์  & ์–ด๋ ค์› ๋˜ ์ 

  1. hex_dump๋กœ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•ด๋ณด๊ณ ์ž ํ–ˆ์ง€๋งŒ ์ถœ๋ ฅ์ด ์•ˆ๋˜๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

  2. file descriptor์˜ ์„ค์ • ์˜ค๋ฅ˜ ์ƒˆ๋กœ ํ• ๋‹นํ•  fd์˜ ์ธ๋ฑ์Šค๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” next_fd๋ฅผ ์ด์ „์—๋„ 1์”ฉ ์ฆ๊ฐ€ํ•ด์ฃผ๊ณ  while๋ฌธ์ด ๋๋‚œ ์ดํ›„์—๋„ +1์„ ์„ค์ •ํ•ด์ฃผ์—ˆ๊ณ , ํ˜„์žฌ ํŒŒ์ผ๊ณผ ๋‹ค๋ฅธ ๊ฐ’์„ ๋ฆฌํ„ดํ•ด์ฃผ๋ฉด์„œ open์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ filesys์—์„œ all fail์ด ๋‚˜์™”๋‹ค.

    • ์ด์ „ ์ฝ”๋“œ
      
      /* ํŒŒ์ผ ๊ฐ์ฒด๋ฅผ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ ํ…Œ์ด๋ธ”์— ์ถ”๊ฐ€ */
      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;

    * ์ˆ˜์ •ํ•œ ์ฝ”๋“œ
    ```c
    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;
  3. syscall์—์„œ์˜ ์˜ค๋ฅ˜

case SYS_WRITE:
        f->R.rax = write(f->R.rdi, f->R.rsi, f->R.rdx);
        break;

f->R.rax ์•ˆ์จ์„œ ์ƒ๊ธด ์˜ค๋ฅ˜

๊นƒ๋ถ ๋‚ด์šฉ์„ ๋ณด๋ฉด image ํ•จ์ˆ˜ ๋ฐ˜ํ™˜ ๊ฐ’์— ๋Œ€ํ•œ x86-64 ๊ทœ์น™์€ RAX ๋ ˆ์ง€์Šคํ„ฐ์— ๊ฐ’์„ ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์‹œ์Šคํ…œ ํ˜ธ์ถœ์€ ๊ตฌ์กฐ์ฒด intr_frame์˜ rax ๋ฉค๋ฒ„๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ผ๊ณ  ๋ช…์‹œ๋˜์–ด ์žˆ๋‹ค.

heekyoung2000 commented 1 year ago

image

KERN_BASE -> USER_STACK

heekyoung2000 commented 1 year ago

image

threads์—์„œ all fail ๋‚˜๋˜ ์ด์œ  - call stack ๋œจ๋˜ ์ด์œ 

heekyoung2000 commented 1 year ago

file descriptor์˜ ์„ค์ • ์˜ค๋ฅ˜

next_fd ํฌ์ธํ„ฐ๋ฅผ ํ†ตํ•ด table ์ด๋™์„ ํ• ๋•Œ +1์„ ์„ค์ •ํ•ด์ค˜์„œ return ๊ฐ’์ด ํ˜„์žฌ ์ฝ์œผ๋ ค๋Š” ํŒŒ์ผ๊ณผ ๋‹ฌ๋ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

case SYS_WRITE:
        f->R.rax = write(f->R.rdi, f->R.rsi, f->R.rdx);
        break;

f->R.rax ์•ˆ์จ์„œ ์ƒ๊ธด ์˜ค๋ฅ˜