proxy-lab์์ ์์ผํต์ ์ ๊ตฌํํ๊ธฐ ์ํ reading
10. ์์คํ ์์ค ์ ์ถ๋ ฅ
- ์ ์ถ๋ ฅ์ ๋ฉ์ธ๋ฉ๋ชจ๋ฆฌ, ํฐ๋ฏธ๋, ๋์คํฌ์ ๊ฐ์ ์ฅ์น๋ค ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ณต์ ํ๋ ๊ฒ์ด๋ค.
- C์์๋ printf, scanf๊ฐ์ ๊ฒ๋ค์ด ์ฌ์ฉ์ ์์ค ์ ์ถ๋ ฅ์ ์ ๊ณตํ๋ค.
- ํ์ง๋ง Unix์์ ์ฌ์ฉ๋๋ ์์คํ
์ฝ ์์ค์ ์
์ถ๋ ฅ (Unix I/O)์ ์์์ผ ํ๋ค.
- ์ฌ์ฉ์ ์์ค ์ ์ถ๋ ฅ์ ๋ฌธ์ ๊ฐ ๋ง๋ค. ๋ฐ๋ผ์ ๋คํธ์ํฌ ํ๋ก๊ทธ๋๋ฐ์ ์ธ ์ ์๋ค.
- Unix I/O๋ฅผ ์ดํดํ๋ฉด ๋ค๋ฅธ ์์คํ ์ ์ดํดํ ์ ์๋ค.
10.1. Unix I/O
๋คํธ์ํฌ, ๋์คํฌ, ํฐ๋ฏธ๋์ ๋ชจ๋ 'ํ์ผ'๋ก ๋ณผ ์ ์๋ค. (ํ์ผ๋ก ๋ชจ๋ธ๋ง๋๋ค?) ๋คํธ์ํฌ๋ฅผ ๋์์ผ๋ก ํ ํ์ผ ์ ์ถ๋ ฅ์ด ๊ฒฐ๊ตญ ํต์ .. ์ด๋ค.
๐ Unix ํ์ผ ์์คํ
์ ์ข
๋ฅext
๊ฐ ํ์ผ ์์คํ
์ด๋ค. ์ฌ๋ฌ ๋ฒ์ ์ด ์๋ค.
๐ File Descriptor
ํ์ผ์ ์๋ณํ๋ ์์ ๋น์์ ์ ์๊ฐ. ํ๋ก์ธ์ค๊ฐ ํ์ผ์ ์ด๋ฉด ์ปค๋์ด ์ด๋ฅผ ํ ๋นํด์ค๋ค. ํ์ผ์ด ๋ซ์ผ๋ฉด ํ ๋น๋์๋ ์๋ณ์๊ฐ ๊ฐ์ฉ ์๋ณ์ ํ๋ก ๋๋์๊ฐ๋ค. ์ ๋์ค์์ ์๋ณ์ 0์ ํ์ค์
๋ ฅ, 1๋ ํ์ค์ถ๋ ฅ, 2์ ํ์ค์๋ฌ๋ค. ํ์ผ์ด ์ด๋ฆฌ๋ฉด ์ปค๋์ ํ๋ก์ธ์ค๋ง๋ค ๊ฐ์ง๊ณ ์๋ ํ๋ก์ธ์ค ํ
์ด๋ธ์ ์๋ณ์์ ํ์ผ์ ์ฃผ์, ํ์ผ์ ํ์ฌ ์์น(์คํ์
)๋ฅผ ์ ์ฅํ๋ค. (์๋ณ์๋ ํ์ผ์ ์ฃผ์๋ฅผ ์ฐธ์กฐํ๋ ์ธ๋ฑ์ค ์ญํ ์ ํ๋ค.) ๋ฐ๋ผ์ ์คํ ๊ฐ๋ฅํ ํ์ผ ๋์คํฌ๋ฆฝํฐ์ ์๋ ๋ณดํต ์ ํ๋์ด์๋ค. (๋ด ์ปดํจํฐ์์๋ 1048576๊ฐ)
- Open File: ์๋ณ์ (descriptor) ๋ผ๋ ๋น์์ ์ ์๊ฐ์ ๋ฐํํ๋ค.
- Changing the current file position: ํ์ผ์ ์์ ์ฃผ์ ๋๋น ํ์ฌ ํ์ผ์ ์์น์ด๋ค. ํ์ผ์ ์ฝ๊ณ ์ธ ๋ ๋ณํํ๋ค.
- Reading and Writing files: ํ์ฌ ํ์ผ ์์น์์ n๋งํผ ํ์ผ์ ์ฝ๊ฑฐ๋ ์ด๋ค.
- Closing files: ํ์ผ ์ ๊ทผ์ด ์ข ๋ฃ๋๋ฉด, ์ปค๋์ ํ์ผ์ ๋ซ์์ค ๊ฒ์ ์์ฒญํ๊ณ ์ปค๋์ ํ์ผ ์๋ณ์๋ฅผ ๋ค์ ๊ฐ์ฉ์ํ๋ก ๋ง๋ ๋ค.
10.2. File
- ์ผ๋ฐ ํ์ผ: ์์์ ๋ฐ์ดํฐ์ด๋ค. ํ ์คํธ ๋๋ ๋ฐ์ด๋๋ฆฌ์ง๋ง ์ปค๋์ ๊ด์ ์์๋ ๋์ง์ ํ์ผ์ด๋ค.
- ๋๋ ํ ๋ฆฌ: ๋งํฌ๋ค์ ๋ฐฐ์ด๋ก ๊ตฌ์ฑ๋๋ค. ๊ฐ๊ฐ์ ๋๋ ํ ๋ฆฌ๋ ์ต์ํ ์๊ธฐ ์์ ๊ณผ ์๊ธฐ ๋ถ๋ชจ๋ผ๋ ๋ ๊ฐ์ ์ํธ๋ฆฌ๋ฅผ ๊ฐ๋๋ค. (
./
,../
) - ์์ผ: ๋คํธ์ํฌ์์ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ํต์ ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ํ์ผ์ด๋ค.
๐ ๋๋ ํ ๋ฆฌ๊ฐ ๋งํฌ๋ค์ ๋ฐฐ์ด๋ก ๊ตฌ์ฑ๋๋ค?
์ฌ๊ธฐ์ ๋งํ๋ ๋งํฌ๋ ๋ค๋ฅธ ๋ง๋ก '๋๋ ํ ๋ฆฌ ์ํธ๋ฆฌ'์ด๋ค. ์ฆ, ๋๋ ํ ๋ฆฌ๋ ๋๋ ํ ๋ฆฌ ์ํธ๋ฆฌ(ํ)๋ค์ ๋ฐฐ์ด์ด๋ค. ๋๋ ํ ๋ฆฌ ์ํธ๋ฆฌ์๋ ํ์ผ ์ด๋ฆ ๋๋ ๋๋ ํ ๋ฆฌ ์ด๋ฆ, ์ฐ๊ฒฐ๋ inode ๋ฒํธ๊ฐ ์ ํ์ ธ ์๋ค. ํ์ผ์ ์ฝ๊ณ ์ ํ๋ค๋ฉด (์๋ฅผ ๋ค์ด cat ๋ช
๋ น์ด๋ก ํ
์คํธ ํ์ผ์ ์ฝ๋๋ค๋ฉด) ์์คํ
์ ๋จผ์ ํ์ผ์ ์ด๋ฆ์ ๊ธฐ์ค์ผ๋ก ํด๋น ๋๋ ํ ๋ฆฌ ์ํธ๋ฆฌ ๋ฐฐ์ด์์ inode๋ฒํธ๋ฅผ ์ฐพ๊ณ , ๊ทธ ์ฃผ์๋ฅผ ์ฐธ์กฐํ์ฌ ์ค์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ๋ธ๋ก์ผ๋ก ๊ฐ๊ฒ ๋๋ค. ๋ฐ์ดํฐ๋ ์ผ๋ฐ์ ์ผ๋ก 4KB๋จ์๋ก ์ฐ์๋์ด ์ ์ฅ๋๋ฏ๋ก (ํ์ด์ง) inode๋ ํ๋์ ํ์ผ์ ์ฝ์ด์ค๊ธฐ ์ํ ๋ค์์ ๋ฐ์ดํฐ ๋ธ๋ก ์ฃผ์๊ฐ์ ๊ณ์ธต์ ๊ตฌ์กฐ๋ก ๊ฐ์ง๊ณ ์๋ค. (Direct Block๊ณผ Indirect Block) -- ๊ทธ๋์ ํ๋์ ๋๋ ํ ๋ฆฌ ์์๋ ๋์ผํ ์ด๋ฆ์ ํ์ผ์ ๊ฐ์ง ์ ์๋ ๊ฒ์ด๋ค.
๐ ๋๋ ํ ๋ฆฌ์ inode์๋ ๋ญ๊ฐ ์์๊น?
๋๋ ํ ๋ฆฌ์ inode์๋ ๋ฉํ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ค. (๋๋ ํ ๋ฆฌ๋ฅผ ๋ง๋ ์๊ฐ, ์ด๋ฆ, ๋ฑ๋ฑ..) inode์ ์ ์ฅ๋ ๋ธ๋ก ์ฃผ์๊ฐ์ผ๋ก ๊ฐ๋ฉด ๋๋ ํ ๋ฆฌ ์ํธ๋ฆฌ ๋ฐฐ์ด์ด ์๋ค.
๐ inode์ (์ฃผ์๊ฐ์ด ์๋) ๋ฒํธ๋ง์ผ๋ก ์ด๋ป๊ฒ ์ฝ์ด์ฌ ์ ์์๊น?
์ด๋ Unix ์คํ์ผ ํ์ผ ์์คํ
์์๋ ๋๋ถ๋ถ inode๋ฅผ ๋น๋กฏํ ํ์ผ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐ์ ์์์ฃผ์์ ์ฌ์ด์ฆ๊ฐ ๊ณ ์ ๋์ด ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ๋ค. ํ์ผ ์์คํ
๋ง๋ค ํ๋์ inode๋ธ๋ก ํฌ๊ธฐ๋ ๋ชจ๋ ๊ฐ๊ณ , ๋ฉํ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๊ณต๊ฐ์ ํฌ๊ธฐ (์ผ๋ฐ์ ์ผ๋ก ์ ์ฒด ํ์ผ์์คํ
์ 1%)๋ ์ ํด์ ธ ์๊ธฐ ๋๋ฌธ์ inode์ ๋ฒํธ๋ง์ผ๋ก ์ฝ์ด์ฌ ์ ์๋ ๊ฒ์ด๋ค. +) ํ์ผ ์์คํ
์์ฒด์ ๋ํ ์ฃผ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐ์ '์ํผ๋ธ๋ก'์ด๋ผ๊ณ ํ๋ค.
๋ฆฌ๋
์ค ๋๋ ํ ๋ฆฌ ๊ณ์ธต๊ตฌ์กฐ
10.3. ํ์ผ ์ด๊ธฐ์ ๋ซ๊ธฐ
open()
& close()
int open(char* filename, int flags, mode_t mode);
int close(int fd);
ํ์ผ ์ด๊ธฐ ํจ์๋ ํ์ผ ์ด๋ฆ filename
๊ณผ ์ด๊ธฐ ๋ชจ๋ flag
, ์ ๊ทผ ๊ถํ์ ์ค์ ํ๋ mode
๋ฅผ ์ธ์๋ก ๋ฐ์ ํ์ผ ์๋ณ์ file descriptor๋ฅผ ๋ฐํํ๋ค. ๊ตฌ์ฒด์ ์ผ๋ก๋, ํ์ผ ์ด๋ฆ์ผ๋ก inode๋ฅผ ์ฐพ๊ณ , ๊ทธ inode ๋ธ๋ก ์ฃผ์๋ฅผ ํ๋ก์ธ์ค์ File Descriptor Table์ ์ํธ๋ฆฌ๋ก ์์ฑํ๋ค.
flag์ mode์ธ์๋ฅผ ์ค์ ํ๊ธฐ ์ํด ๋นํธ๋ง์คํฌ๊ฐ ์ด์ฉ๋๋ค.
๐ umask?
๋ช
๋ น์ค์์ ls -l
์ ์น๋ฉด ํ์ผ ์ด๋ฆ ์์ drwx..๋ก ๋ 10์๋ฆฌ ๋ฌธ์๋ฅผ ๋ณผ ์ ์๋ค.
์ฐ์ต๋ฌธ์ 10.1.
#include "csapp.c"
int main() {
int fd1, fd2;
umask(DEF_UMASK);
fd1 = Open("foo.txt", O_RDONLY | O_CREAT, DEF_MODE);
Close(fd1);
fd2 = Open("hello.txt", O_RDONLY | O_CREAT, DEF_MODE);
printf("fd2 = %d\n", fd2);
Close(fd2);
return 0;
}
fd2 = 3
์ ์ถ๋ ฅํ๋ค. 0, 1, 2๋ ํ์ค์
๋ ฅ, ์ถ๋ ฅ, ์๋ฌ๋ฅผ ์ํด ์์ฝ๋์ด ์๋ค.
10.4. ํ์ผ ์ฝ๊ธฐ์ ์ฐ๊ธฐ
read()
& write()
ssize_t read(int fd, void* buf, size_t n);
ssize_t write(int fd, const void *buf, size_t n);
์ฝ๊ธฐ ํจ์๋ ์ธ์๋ก ํ์ผ ๋์คํฌ๋ฆฝํฐ์ ํ์ผ์ ์ฝ์ด์ฌ ๋ฒํผ์ ํฌ์ธํฐ, ์ฝ์ ์ฌ์ด์ฆ๋ฅผ ๋ฐ์ดํธ ๋จ์๋ก ๋ฐ์ ์ ์์ ์ผ๋ก ์ฝ์ด์จ ๊ฒฝ์ฐ ์ฝ์ ๋ฐ์ดํธ์๋ฅผ ๋ฆฌํดํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด -1์ ๋ฆฌํดํ๋ค. ์ฐ๊ธฐ ํจ์๋ ์ธ์๋ก ํ์ผ ๋์คํฌ๋ฆฝํฐ, ํ์ผ์ ์ธ ๋ด์ฉ์ด ๋ด๊ธด ๋ฒํผ์ ํฌ์ธํฐ, ์ธ ์ฌ์ด์ฆ๋ฅผ ๋ฐ์์ ํ์ผ์ ์ฐ๊ณ , ์ด ๋ฐ์ดํธ์๋ฅผ ๋ฆฌํดํ๋ค. ๋น์ ์์ ์ผ๋ก ์ข ๋ฃ๋ ๊ฒฝ์ฐ ๋ง์ฐฌ๊ฐ์ง๋ก -1์ด๋ค.
Short Count
์์ฒญํ ๊ฒ ๋ณด๋ค ๋ ์งง์ ๋ฐ์ดํธ๋ง ์ฝ๊ฑฐ๋ ์ฐ๋ ๊ฒ. ์ด๋ค ๊ฒฝ์ฐ์ ๋ฐ์ํ ๊น?
- EOF๋ฅผ ๋ง๋๋ฉด ๊ฑฐ๊ธฐ๊น์ง๋ง ์ฝ๋๋ค. ๋ฐ๋ผ์ 50์ ์์ฒญํด๋ 20 ํ์ EOF๊ฐ ์๋ค๋ฉด 20๋ง ์ฝ๋๋ค.
- ํฐ๋ฏธ๋์์ ํ ์คํธ ์ค์ ์ฝ๊ณ ์ ํ ๋, ๋ฒํผ ์ฌ์ด์ฆ๊ฐ ๋ด๊ฐ ์์ฒญํ ๊ฒ๋ณด๋ค ์์ผ๋ฉด ์งง์ ์นด์ดํธ๊ฐ ๋ฐ์ํ ์ ์๋ค.
- ๋คํธ์ํฌ ์์ผ์ ์ฝ๊ฑฐ๋ ์ธ ๋. ๋ด๋ถ ๋ฒํผ๋ง ์ ์ฝ๊ณผ ๊ธด ๋คํธ์ํฌ ์ง์ฐ์ผ๋ก ์ธํด ์งง์ ์นด์ดํธ๊ฐ ๋ฐ์ํ ์ ์๋ค.
10.5. RIO Package
Robust I/O Package. ์งง์ ์นด์ดํธ๋ฅผ ์๋์ผ๋ก ์ฒ๋ฆฌํ๋ IOํจํค์ง๋ฅผ ๋ง๋ค์ด๋ณด์.
1) ์ดํ๋ฆฌ์ผ์ด์ ์์ค์ ๋ฒํผ๊ฐ ์๋ ์ ๋ ฅ/์ถ๋ ฅ ํจ์
ssize_t rio_readn(int fd, void* usrbuf, size_t n) {
size_t nleft = n;
ssize_t nread;
char* bufp = usrbuf;
while (nleft > 0) {
if ((nread = read(fd, bufp, nleft)) < 0) {
if (errno == 4) /* read๊ฐ ์ฝ์ด์ค์ง ๋ชปํ ๊ฒฝ์ฐ */
nread = 0;
else
return -1;
} else if (nread == 0) /* end of file */
break;
nleft -= nread;
bufp += nread;
}
return (n - nleft); /* ์ฝ์ด์จ ๋ฐ์ดํธ์*/
}
ssize_t rio_writen(int fd, void* usrbuf, size_t n) {
size_t nleft = n;
ssize_t nwritten;
char* bufp = usrbuf;
while (nleft > 0) {
if ((nwritten = write(fd, bufp, nleft)) < 0) {
if (errno == 4)
nwritten = 0;
else
return -1;
}
nleft -= nwritten;
bufp += nwritten;
}
return n;
}
2) ๋ฒํผ๋ฅผ ์ฌ์ฉํ๋ ์ ๋ ฅ ํจ์
typedef struct {
int rio_fd; // ํ์ผ ๋์คํฌ๋ฆฝํฐ
int rio_cnt; // ํ์ฌ๊น์ง ๋ฒํผ์ ์ฝ์ด์จ ๋ฐ์ดํธ์
char* rio_bufptr; // ํ์ฌ IO์์น
char rio_buf[RIO_BUFSIZE]; // ๋ด๋ถ๋ฒํผ
} rio_t;
// rp ์ด๊ธฐํ
void rio_readinitb(rio_t* rp, int fd) {
rp->rio_fd = fd; // ํ์ผ ๋์คํฌ๋ฆฝํฐ
rp->rio_cnt = 0; // ์์ง ์ฝ์ง ๋ชปํจ
rp->rio_bufptr = rp->rio_buf; // ๋ฒํผ๋ ์์ ์ง์ ์ ๊ฐ๋ฆฌํด
}
// size_n ์ ์ฝ์ด์ผ ํ ์
// buf_size ํ๋ฒ์ ์ฝ์ ์ ์๋ ์
ssize_t rio_read(rio_t* rp, void* usrbuf, size_t n) {
int cnt;
while (rp->rio_cnt <= 0) {
rp->rio_cnt = read(rp->rio_fd, rp->rio_buf,
sizeof(rp->rio_buf)); // ๋ฒํผ ์ฌ์ด์ฆ๋งํผ
if (rp->rio_cnt < 0) {
if (errno == 4) return -1; // ๋ง์ฝ errno == 4์ด๋ฉด ๋ฐ๋ณต๋ฌธ์ ๋๋ค
} else if (rp->rio_cnt == 0) // ์ฝ์ ๊ฒ ์์
return 0;
else
rp->rio_bufptr = rp->rio_buf; // usrbuf๋ก ๋ณต์ ๋ฅผ ์์ํด์ผ ํ ์์น๋ก ์ด๋
}
cnt = n;
if (rp->rio_cnt < n) cnt = rp->rio_cnt; // cnt๋ ์ค์ ์ฝ์ด์จ ์
memcpy(usrbuf, rp->rio_bufptr, cnt);
rp->rio_bufptr += cnt;
rp->rio_cnt -= cnt;
return cnt;
}
ssize_t rio_readnb(rio_t* rp, void* usrbuf, size_t n) {
size_t nleft = n;
ssize_t nread;
char* bufp = usrbuf;
while (nleft > 0) {
if ((nread = rio_read(rp, bufp, nleft)) < 0) {
return -1; // 4๋ฒ์ค๋ฅ ๋ฐ์ ์ ์ฌ์์์ rio_read์์ ์ฒ๋ฆฌ
} else if (nread == 0)
break;
nleft -= nread;
bufp += nread;
}
return (n - nleft);
}
๐ ๋ฒํผ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ญ๊ฐ ์ข์๊ฐ?
read, write๋ ์์คํ
์ฝ์ด๋ฏ๋ก ํ๋ฒ์ ๋๋ฌด ๋ง์ ์ฌ์ด์ฆ๋ฅผ ์์ฒญํ๊ฑฐ๋, ๋๋ฌด ์์ฃผ ์์ฒญํ ์ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ค. ๋ฐ๋ผ์ ์ ์ฒด ์ฌ์ด์ฆ๋ฅผ ์ ์ ํ๊ฒ ๋๋์ด์ ๋ฒํผ์ ์ฎ๊ธฐ๊ณ , ๊ทธ๊ฑธ ๋ค์ usrbuf, ์ฆ ๋ณต์ ๊ฐ ๋์ด์ผ ํ๋ ๋ชฉ์ ์ง๋ก ์ฎ๊ธฐ๋ ๊ฒ์ด I/O์ ํจ์จ์ฑ์ ํฅ์์ํฌ ์ ์๋ค.
๐ ์ค๋ฒํค๋?
์ด๋ค ์ผ์ ํ๊ธฐ ์ํ ๊ฐ์ ์ ์ธ ์ฒ๋ฆฌ ๋น์ฉ(์๊ฐ ๋๋ ๋ฉ๋ชจ๋ฆฌ)
๐ while๋ฌธ์ ์ ์์๊น?
์์คํ
์ฝ read๋ ์ฌ๋ฌ ์์ธ๋ค๋ก ์ธํด ์ฝ์ด์ผ ํ ๊ฒ์ '๋ค ๋ชป ์ฝ๋' ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๋ค. ์ด๋ฌํ read ์์คํ
ํธ์ถ์ ํน์ฑ์ ๊ณ ๋ คํด์, ๋ง์ฝ errno == EINTR
์ธ ๊ฒฝ์ฐ, ์ฆ 4๋ฒ ์ค๋ฅ์ธ ๊ฒฝ์ฐ์ while๋ฌธ์ด ๋์์ ๋ค์ ์ฝ์ด์จ๋ค.
๐ 4๋ฒ ์ค๋ฅ?
์์คํ
์ฝ์ด ์ธํฐ๋ฝํธ ์๊ทธ๋์ ์ํด ์ค๋จ๋์์์ ๋ํ๋ด๋ ์ค๋ฅ ์ฝ๋์ด๋ค. ์๋ฅผ ๋ค์ด ํค๋ณด๋ ํค๋ฅผ ๋๋ ์ ๋๋ ๋คํธ์ํฌ ์นด๋(NIC)์ ๋ฐ์ดํฐ ํจํท์ด ๋์ฐฉํ๋ฉด ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๋ค. ์ธํฐ๋ฝํธ๋ก ์ธํด ์์คํ
์ฝ์ ์ค๋จ์ ์์ฒญํ๋ ์๊ทธ๋์ด ๋ฐ์ํ ๊ฒฝ์ฐ, ๋จผ์ ์ธํฐ๋ฝํธ๋ฅผ ์ฒ๋ฆฌํ ํ read, write๋ฅผ ์ฌ์์ํ๋๋ก ์ค๊ณํ ์ ์๋ค.
๐ ์์ผ์ ์๋ณ์์ ์ฝ๊ฑฐ๋ ์ฐ๋ฉด ๋ฌด์จ ์ผ์ด ์ผ์ด๋ ๊น?
ํ์ผ๊ณผ ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ์ด์ฉํ์ง๋ง, ์์ผ์ ์ผ๋ฐ ํ์ผ์ ์๋๋ค. ๋์ , ์์ผ ๋์คํฌ๋ฆฝํฐ์ writeํ๋ฉด ์ปค๋ ๋ฉ๋ชจ๋ฆฌ๋ก ๋ฒํผ ๋ด์ฉ์ด ๋ณต์ ๋๋ค. ์ปค๋์ ์์ผ์ ์ฐ๊ฒฐ ์ํ, ํ๋กํ ์ฝ์ ๋ฐํ์ผ๋ก writeํ ๋ด์ฉ์ ํจํทํ, ํ๋ ์ํํ์ฌ ๋คํธ์ํฌ ์ด๋ํฐ์ ๋ฒํผ๋ก ๋ณต์ ํ๋ค. (Direct Memory Access๋ฅผ ํ๋ค.) ๋คํธ์ํฌ ์ด๋ํฐ์์๋ถํฐ ๋คํธ์ํฌ์์ผ๋ก ์ ์ก๋๋ค. (๋จผ์ ๋ผ์ฐํฐ๋ก ์ ๋ฌ๋๊ณ , ๋ผ์ฐํฐ๊ฐ ๋ค์ ํ๋ ์์ ๊น์ ์ด๋๋ค ๋ณด๋ผ์ง ๊ฒฝ๋ก์ง์ ํ๊ณ ..)
'DevLog ๐จ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[DevLog][PintOS] PRJ1 Threads/Scheduling Algorithms (0) | 2023.10.03 |
---|---|
[DevLog][PintOS] PRJ1 Threads/Priority Scheduling (0) | 2023.09.27 |
[DevLog][CSAPP] 9์ฅ 9.9 malloc lab ๋์ ํ ๋น๊ธฐ ๊ตฌํ (0) | 2023.09.24 |
[DevLog][CSAPP] 9์ฅ ๊ฐ์๋ฉ๋ชจ๋ฆฌ (9.1~9.4) (0) | 2023.09.10 |
[DevLog] 2์ง์ ํํ์์ 1์ ๊ฐ์ ์ธ๊ธฐ (0) | 2023.08.30 |