ํฌ๋ํํค ์ ๊ธ WEEK11 DAY 88 - PintOS Project3 - Memory Mapped Files ์์ฑ
๐2024.04.03
๐ซ mmap-exit ํ ์คํธ ์ผ์ด์ค ๋ฌธ์
ํด๋น ํ ์คํธ ์ผ์ด์ค๋ฅผ ํต๊ณผํ๋ ค๋ฉด process_exit ๋ฅผ ์์ ํด์ผ ํ๋ค.
void process_exit (void) {
struct thread *t = thread_current();
/* TODO: Your code goes here.
* ์ฌ๊ธฐ์ ํ๋ก์ธ์ค ์์ ์ ๋ฆฌ๋ฅผ ๊ตฌํํ๋ ๊ฒ์ ๊ถ์ฅํ๋ค.
* ํ๋ก์ธ์ค๊ฐ ์ข
๋ฃ๋๋ ๊ฒฝ์ฐ ๋ชจ๋ ํ์ผ์ ์์์ ์ผ๋ก ๋ซ๋๋ค.
*/
// ์ค๋ ๋์ ํ์ผ ๋ซ๊ธฐ
file_close(t->self_file);
for (int fd = 2; fd < FDT_SIZE; fd++) {
if (t->fdt[fd] != NULL) {
close(fd);
}
}
palloc_free_multiple(t->fdt, FDT_PAGES);
process_cleanup ();
hash_destroy(&t->spt.hash_table , NULL);
sema_up(&t->wait_sema);
sema_down(&t->exit_sema);
}
๋ฐ๋ก hash_destroy() ๋ฅผ ์ถ๊ฐํด์ผ ํ๋๋ฐ ์์๊ฐ ๊ผญ process_cleanup()์๋์ ์์ผํ๋ค.
์ด์ ๋ process_cleanup ํจ์์์ supplemental_page_table_kill ํจ์๋ฅผ ํธ์ถํ๊ณ , ์ด ํจ์ ์์์ hash_clear() ํจ์๋ก ์ธํด spt์ ๋ฆฌ์์ค๊ฐ ํด์ ๋๊ธฐ ๋๋ฌธ์ด๋ค.
๋ํ hash_destory(, NULL)์ธ ์ด์ ๋ hash_clear๋ก ์ธํด hash๊ฐ ๋ค ์ง์์ ธ ์์ด์ buckets๋ง ์ง์ฐ๋ฉด ๋๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ ๊ฒ ํ๋ฉด ๋ฌธ์ ํด๊ฒฐ~!
๐ซFAIL tests/vm/page-merge-par , FAIL tests/vm/page-merge-stk ,FAIL tests/vm/page-merge-mm
๋ค๋ฅธ ํ ์คํธ ์ผ์ด์ค๋ ๋ค ํต๊ณผํ๋๋ฐ ์ 3๊ฐ์ ํ ์คํธ ์ผ์ด์ค๋ง ๊ณ์ FAIL์ด์๋ค.
์ด์ ๋ฅผ ๋ชจ๋ฅด๊ฒ ์ด์ ๊ฒ์ํด๋ณด๋ lock์ ๊ฑธ์ด์ค์ผ ๋๋ ๋ถ๋ถ์ lock์ ์ ๊ฑธ์ด์๋ผ๊ณ ํด๋น ํ ์คํธ์ผ์ด์ค์์ ํธ์ถ๋๋ syscall์๋ ๋ค lock์ ๊ฑธ์ผ๋ผ๊ณ ํ๋ค.
์ผ๋จ create() ์ lock์ ๊ฑธ์๋๋ ์ฒซ ๋ฒ์ฌ page-merge-par ํ ์คํธ๊ฐ ํต๊ณผ๋์๋ค!
bool create(const char *file, unsigned initial_size) {
lock_acquire(&filesys_lock);
check_address(file);
bool success = filesys_create(file, initial_size);
lock_release(&filesys_lock);
return success;
}
๊ทผ๋ฐ ๋ณต๋ถ๋ณต์ผ๋ก ํต๊ณผ๊ฐ ๋๊ณ ๋๋จธ์ง 2๊ฐ๋ ์ ํ ๋ชจ๋ฅด๊ฒ ๋ค ใ ใ ใ ใ
์ด ํ ์คํธ ๊ฒฐ๊ณผ
3 of 141 tests failed