ext3 파일 시스템 관련 질문입니다.
커널 초보 프로그래머 입니다.
제가 ext3에서 파일을 읽을 때 buf의 길이와 count를 알아보기 위하여
file operations 구조체의 read 부분을
read: generic_file_read --> ext3_file_read
로 변경한 후에 ext3_file_read 함수를 다음과 같이 추가 하였습니다.
static ssize_t ext3_file_read(struct file * filp, char * buf, size_t count, loff_t *ppos)
{
ssize_t ret;
ret = generic_file_read(filp, buf, count, ppos);
printk("reading: count = %d, strlen(buf) = %d\n", count, strlen(buf));
return ret;
}
이후 컴파일 후 cat 을 이용하여 4096 byte 가 넘는 파일을 읽어 본후에 로그 메시지를 살펴보면 printk 문장이 한번 출력된것을 확인할 수 있습니다.
질문 사항은
1. 쓰기의 경우에는 4096이 넘으면 위의 문장이 여러번 출력되는데 반하여 읽기의 경우 한번만 출력되는 이유가 무엇인지 궁금합니다. 미리 읽기와 관련된 문제일까요?
2. 수정후 more 명령어를 사용하여 해당 파일을 읽으면 메모리 관련 에러가 나는것 같습니다.
Unable to handle kernel paging request at virtual address 40001000
Sep 16 22:11:07 kuma kernel: printing eip:
Sep 16 22:11:07 kuma kernel: e0871128
Sep 16 22:11:07 kuma kernel: *pde = 18607067
Sep 16 22:11:07 kuma kernel: *pte = 00000000
Sep 16 22:11:07 kuma kernel: Oops: 0000
Sep 16 22:11:07 kuma kernel: CPU: 0
Sep 16 22:11:07 kuma kernel: EIP: 0010:[<e0871128>] Not tainted
Sep 16 22:11:07 kuma kernel: EFLAGS: 00010246
Sep 16 22:11:07 kuma kernel: eax: 00000000 ebx: 00000000 ecx: ffffefff edx: 00001000
Sep 16 22:11:07 kuma kernel: esi: d8f01b00 edi: 40001000 ebp: 00001000 esp: d8ebdf80
Sep 16 22:11:07 kuma kernel: ds: 0018 es: 0018 ss: 0018
Sep 16 22:11:07 kuma kernel: Process more (pid: 2003, stackpage=d8ebd000)
Sep 16 22:11:07 kuma kernel: Stack: d8f01b00 40000000 00001000 d8f01b20 ffffffea c013db1b d8f01b00 40000000
Sep 16 22:11:07 kuma kernel: 00001000 d8f01b20 00000000 00000000 d8ebc000 08053970 462909e0 bffff7a0
Sep 16 22:11:07 kuma kernel: c010724b 00000003 40000000 00001000 08053970 462909e0 bffff7a0 00000003
Sep 16 22:11:07 kuma kernel: Call Trace: [<c013db1b>] [<c010724b>]
Sep 16 22:11:07 kuma kernel:
Sep 16 22:11:07 kuma kernel: Code: f2 ae f7 d1 49 8b 7c 24 10 89 d0 83 c4 14 c3 90 90 90 90 90
ext3의 read 관련 함수 수정후에도 more 와 같은 명령어가 제대로 수행되려면 어떤 조치를 취해야 하는지 알고 싶습니다.
질문이 너무 길었던점 죄송하구요, 고수님들의 답변 기다리겠습니다.
댓글 달기