์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- ๋ค์ต์คํธ๋ผ
- ์๊ณ ๋ฆฌ์ฆ
- ์ถ์ํด๋์ค์์ธํฐํ์ด์ค
- ํฌ๋ํํค ์ ๊ธ 4๊ธฐ
- ํฌ๋ํํค์ ๊ธ
- TiL
- ์ ์-์ ํฌ
- ์ฐ๊ฒฐ๋ฆฌ์คํธ
- BFS
- c#
- ์ด๋ฒคํธ ํจ์ ์คํ ์์
- C
- ๋ฐฑ์ค
- kraftonjungle
- ์๊ณ ๋ฆฌ์ฆ์์ -๋๋น์ฐ์ ํ์2
- ํฌ๋ํํค์ ๊ธ4๊ธฐ
- anonymous page
- ์ค๋ธ์
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- project3
- KRAFTON JUNGLE
- ๋คํธ์ํฌ
- ํฌ๋ํํค ์ ๊ธ
- ํ์ด์ฌ
- ์ ๋ํฐ
- User Stack
- pintos
- Unity
- 4๊ธฐ
- ํํ ์ค
Archives
- Today
- Total
๋ง๊ฐ๋ก๊ทธ
ํฌ๋ํํค ์ ๊ธ WEEK09 DAY71 - PintOS Project2 open, process_add_file ๋ณธ๋ฌธ
Krafton jungle
ํฌ๋ํํค ์ ๊ธ WEEK09 DAY71 - PintOS Project2 open, process_add_file
habbn 2024. 3. 18. 23:48728x90
๐2024.3.18
1. system call - open(), process_add_file() ๊ตฌํ
System Call
1. open()
file ์ ์ด๊ธฐ ์ํด์๋ ์์คํ ์ฝ open() ํจ์๋ฅผ ๊ตฌํํด์ผ ํ๋ค.
open์ ๊ตฌํํ๊ธฐ ์ํด์๋
1. file์ด ์ ํจํ ์ฃผ์๊ฐ์ธ์ง๋ฅผ ๊ฒ์ฆํด์ผ ํ๋ค.
2. filesys_open๋ฅผ ํธ์ถํด์ ํ์ผ์ openํ๋ค.
3. process_add_file ํจ์๋ฅผ ํธ์ถํด์ ํ์ผ ๋์คํฌ๋ฆฝํฐ ํ ์ด๋ธ์ ํ์ผ์ ์ถ๊ฐํ๊ณ fd๋ฅผ ๋ฐํํ๋ค.
4. ํ์ผ๋์คํฌ๋ฆฝํฐ ํ ์ด๋ธ์ ์ถ๊ฐํ ์ ์๋ ๊ฒฝ์ฐ(fd == -1)์ธ ๊ฒฝ์ฐ์ ํ์ผ์ ๋ซ๊ณ -1์ ๋ฆฌํดํ๋ค.
5. ์คํํ ํ์ผ์ fd๋ฅผ ๋ฐํํ๋ค.
int open (const char *file)
{
check_address(file);
struct file *f = filesys_open(file);
if(f != NULL)
{
int fd = process_add_file(f);
return fd;
}
else
return -1;
}
1-2 process_add_file()
ํ์ฌ ์ค๋ ๋์ ํ์ผ๋์คํฌ๋ฆฝํฐ์ ํ์ฌ ํ์ผ์ ์ถ๊ฐํ๋ค.
ํด๋น ํ์ผ์ ํ์ผ ๋์คํฌ๋ฆฝํฐ ๋ฒํธ๋ฅผ ๋ฐํํ๋ค.
int process_add_file(struct file *file)
{
struct thread *curr = thread_current();
struct file_discrpitor *cur_fd = malloc(sizeof(struct file_discrpitor));
struct list *fd_list = &thread_current()->fd_list;
cur_fd->file = file;
cur_fd->fd_num = (curr->last_create_fd)++;
list_push_back(fd_list, &cur_fd->fd_elem);
return cur_fd->fd_num;
}
728x90