[리눅스커널][가상파일시스템] 슈퍼블록 객체란 무엇인가 - (struct super_block, struct super_operations)
By Guillermo Austin Kim | 2019년 4월 8일 |
슈퍼블락 객체란 무엇인가? 슈퍼블록 객체는 파일시스템에 대한 메타 정보와 각 파일시스템 별 슈퍼블락 함수 오퍼레이션으로 구성돼 있습니다. 구체적으로 슈퍼블록 객체는 파일시스템 마운트 정보와 실행 플래그를 저장합니다. 예를 들면 디스크 저장 기반 ext4 파일시스템과 시스템 정보를 램에서 출력하는 proc 파일시스템은 서로 다른 슈퍼블록 마운트와 실행 플래그 정보를 확인할 수 있습니다. 슈퍼 블록에 대한 이해를 돕기 위해 간단한 테스트를 해보겠습니다. 다음 경로에 가서 touch 명령어로 파일을 하나 생성합시다.root@raspberrypi:/home/pi# cd /procroot@raspberrypi:/proc# touch RPi_VFS.ctouch: cannot touch 'RPi_VFS.c': No
[리눅스커널] 가상파일시스템/소개: 함수 오퍼레이션이란 무엇인가
By Guillermo Austin Kim | 2019년 9월 3일 |
이번 절에서 소개했듯이, 각각 파일 시스템에 액세스를 하기 위해서 먼저 가상 파일시스템에 접근합니다. 이 때 가상 파일 시스템에서 지원하는 4가지 객체에서 지정한 함수 포인터를 통해 파일 시스템 세부 함수에 접근합니다. 4개 객체별로 지정한 함수 포인터 연산을 함수 오퍼레이션이라고 말합니다. 즉, 이전 소절에서 소개한 슈퍼블록, 아이노드, 파일, 덴트리 객체들은 모두 함수 오퍼레이션(연산)을 지원합니다. 슈퍼 블록 함수 오퍼레이션 코드와 동작 파악해보기 먼저 슈퍼 블록 함수 오퍼레이션 코드 분석으로 함수 오퍼레이션 동작을 소개합니다. 다음 코드를 같이 분석해봅시다.[https://github.com/raspberrypi/linux/blob/rpi-4.19.y/fs/inode.c]1
[리눅스커널][디버깅] printk에 대해서
By Guillermo Austin Kim | 2019년 3월 11일 |
printk printk는 printf와 유사한 기능입니다. printf는 윈도우 콘솔 프로그램이나 리눅스 시스템 프로그램에서 로그를 출력합니다. 마찬가지로 printk() 함수를 호출하면 커널 로그를 볼 수 있습니다. printk 를 커널 함수에 적절히 추가하면 유용한 디버깅 정보를 얻을 수 있습니다. 리눅스 커널 핵심 함수도 printk를 이용해 시스템 정보를 출력합니다. 커널 핵심 코드에서 printk를 쓰는 예시 코드를 소개합니다.[https://elixir.bootlin.com/linux/v4.14.70/source/arch/arm/kernel/process.c]01 void __show_regs(struct pt_regs *regs)02 {...03 printk("pc : [<%08l
[리눅스커널] 메모리 관리: 가상 메모리 기법의 주요 개념 소개
By Guillermo Austin Kim | 2019년 6월 1일 |
가상 메모리의 주요 개념 소개 가상 메모리의 주요 개념을 다음 그림을 보면서 배워 보겠습니다. [그림 1] 가상주소와 물리주소 및 페이지와의 관계 위 그림과 함께 가상 주소를 물리 주소로 변환하는 실행 흐름을 배워봅시다. 가장 왼쪽에 보이는 주소 맵이 가상 메모리입니다. 가장 윗 부분에 0x0000_0000 주소가 있는데 아랫 방향으로 주소가 커집니다. 가장 아랫 부분은 0FFF0_0000 주소입니다. 즉, 가상 주소 범위는 0x0~0xFFFF_FFFF 이며 전체 크기는 4GB입니다. CPU에서 구동 중인 프로세스가 보는 주소는 가상 주소입니다. 우리가 분석한 모든 커널 함수는 이 가상 물리 메모리 공간에서 실행하는 것입니다. 가상 메모리 박스 오른쪽 화살표를 눈으로 따라가면 주소 변