๐Ÿ“€ KAIST:PINTOS | Implementation | close

์ด์ˆœ๊ฐ„ยท2025๋…„ 5์›” 22์ผ

KAIST:PINTOS

๋ชฉ๋ก ๋ณด๊ธฐ
21/23
pass tests/userprog/close-normal  
pass tests/userprog/close-twice  
pass tests/userprog/close-bad-fd  

๋ชฉํ‘œ

void sys_close(int fd);

  • ์œ ์ € ํ”„๋กœ๊ทธ๋žจ์ด close(fd)๋ฅผ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ
  • ํ•ด๋‹น fd๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์—ด๋ฆฐ ํŒŒ์ผ์„ ๋‹ซ๊ณ 
  • ์ž์›์„ ํ•ด์ œํ•˜๋ฉฐ, fd๋ฅผ ๋ฌดํšจํ™”
  • ์œ ํšจํ•˜์ง€ ์•Š์€ fd๋Š” ๋ฌด์‹œ

์ˆ˜์ •ํ•œ ํŒŒ์ผ

  • userprog/syscall.c
  • userprog/syscall.h

โ€ป open() ๊ตฌํ˜„ ์‹œ ์ƒ์„ฑํ•œ fd_table[]๊ณผ next_fd ๊ตฌ์กฐ๋ฅผ ๊ทธ๋Œ€๋กœ ํ™œ์šฉํ•จ


1. sys_close ํ•จ์ˆ˜ ๊ตฌํ˜„

ํŒŒ์ผ: userprog/syscall.c

void sys_close(int fd) {
  if (fd < 2 || fd >= FD_MAX) return; // ์œ ํšจํ•œ fd์ธ์ง€ ํ™•์ธ

  struct thread *cur = thread_current(); // ํ˜„์žฌ ์Šค๋ ˆ๋“œ ๊ฐ€์ ธ์˜ค๊ธฐ
  struct file *f = cur->fd_table[fd]; // fd์— ํ•ด๋‹นํ•˜๋Š” ํŒŒ์ผ ๊ฐ€์ ธ์˜ค๊ธฐ

  if (f == NULL) return; // ์—ด๋ ค ์žˆ๋Š” ํŒŒ์ผ์ด ์—†์œผ๋ฉด ๋ฌด์‹œ

  lock_acquire(&file_lock); // ํŒŒ์ผ ์‹œ์Šคํ…œ ๋ฝ ํš๋“
  file_close(f); // ํŒŒ์ผ ๋‹ซ๊ธฐ
  lock_release(&file_lock); // ๋ฝ ํ•ด์ œ

  cur->fd_table[fd] = NULL; // fd ํ…Œ์ด๋ธ”์—์„œ ์ œ๊ฑฐ
}

2. syscall_handler์— close ๋“ฑ๋ก

ํŒŒ์ผ: userprog/syscall.c

case SYS_CLOSE:
  sys_close((int)f->R.rdi);
  break;

3. syscall.h์— ํ•จ์ˆ˜ ์„ ์–ธ ์ถ”๊ฐ€

ํŒŒ์ผ: userprog/syscall.h

void sys_close(int fd);

ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ

ํ•ด๋‹น ๊ตฌํ˜„์„ ํ†ตํ•ด ์•„๋ž˜ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜์˜€๋‹ค.

  • close-normal
  • close-twice
  • close-bad-fd

์ด ํ…Œ์ŠคํŠธ๋“ค์€ fd๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ํŒŒ์ผ์„ ์ •ํ™•ํžˆ ๋‹ซ๋Š”์ง€,
์ค‘๋ณต close ์‹œ ์—๋Ÿฌ ์—†์ด ๋ฌด์‹œ๋˜๋Š”์ง€,
์ž˜๋ชป๋œ fd๊ฐ€ ๋“ค์–ด์™€๋„ ์ปค๋„ ํŒจ๋‹‰ ์—†์ด ๋„˜์–ด๊ฐ€๋Š”์ง€๋ฅผ ํ™•์ธํ•œ๋‹ค.


๊ฒฐ๋ก 

close ์‹œ์Šคํ…œ ์ฝœ์€ open()์—์„œ ์„ค๊ณ„ํ•œ fd_table ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•ด
์ž์› ํ•ด์ œ ๋ฐ ํŒŒ์ผ ํ•ธ๋“ค ๊ด€๋ฆฌ๋ฅผ ์™„์„ฑํ•˜๋Š” ๊ณผ์ •์ด์—ˆ๋‹ค.
๊ฐ„๋‹จํ•˜์ง€๋งŒ ๊ผญ ํ•„์š”ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํฌํ•จํ•ด์•ผ ํ•˜๋ฉฐ,
ํŒŒ์ผ ์‹œ์Šคํ…œ ์ ‘๊ทผ ์‹œ ๋™๊ธฐํ™”๋ฅผ ์ฒ ์ €ํžˆ ํ•ด์•ผ ์•ˆ์ •์ ์ธ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์ด์ œ read, write ์‹œ์Šคํ…œ ์ฝœ ๊ตฌํ˜„์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

profile
์„œํˆด์ง€์–ธ์ • ๋Š˜ ํ–‰๋™์ด ๋จผ์ €์ด๊ธฐ๋ฅผ

0๊ฐœ์˜ ๋Œ“๊ธ€