[리눅스커널] 메모리관리: 가상 주소 변환 과정 전체 구조 파악하기
By Guillermo Austin Kim | 2019년 7월 14일 |
이번 절에서는 가상 주소를 물리 주소로 바꾸는 전반적인 흐름과 세부 개념에 대해 상세히 알아봅니다. 가상 주소를 물리 주소로 변환하는 과정은 리눅스 커널에서 CPU 아키텍처에 의존적입니다. 다음은 라즈베리파이에서 ‘/proc/cpuinfo’ 파일로 확인한 CPU정보입니다. [https://www.raspberrypi.org/forums/viewtopic.php?t=155181]pi@raspberrypi:~ $ less /proc/cpuinfo processor : 0model name : ARMv7 Processor rev 4 (v7l)BogoMIPS : 38.40Features : half thumb fastmult vfp edsp neon vfpv3 tls
[Kernel] 슬랩 페이지(slab page)가 관리하는 슬랩 오브젝트 갯수
By Guillermo Austin Kim | 2018년 4월 25일 |
슬랩 페이지 디스크립터가 관리하는 슬랩 오브젝트의 실제 메모리 덤프를 어떻게 접근할까요? 예를 들어 현재 페이지 디스크립터 주소가 0xEC778540 이라고 가정하겠습니다.그리고 각 멤버는 다음과 같구요. 눈으로 잠깐 봐도 kmalloc-64 타입의 슬랩 페이지임을 알 수 있겠죠. (struct page *) (struct page*)0xEC778540 = 0xEC778540 -> ( (long unsigned int) flags = 0x80, (struct address_space *) mapping = 0x0, (void *) s_mem = 0x0, (long unsigned int) index = 0xC518EC00, (void *) freelist = 0xC518E
[리눅스커널][시그널] 커널에서 시그널을 전달하는 진입점은 어디일까?
By Guillermo Austin Kim | 2019년 4월 4일 |
시그널 전달 진입점 시그널 생성 과정에서 스케줄러에게 시그널을 받을 프로세스 실행 요청을 했습니다. 리눅스 커널은 언제 시그널을 타겟 프로세스에게 전달할까요?출발점은 두 가지 실행 흐름입니다.1> 시스템 콜 핸들러 실행 마무리 후 ret_fast_syscall 레이블2> 인터럽트 핸들링 후 __irq_usr 레이블 이 동작은 리눅스 커널보다 ARM 프로세스가 많은 관여를 합니다. ret_fast_syscall 레이블 분석 유저 프로세스가 시스템 콜 핸들러 실행을 마치면 ret_fast_syscall 레이블로 복귀합니다. ret_fast_syscall와 slow_work_pending 레이블에서 프로세스에게 시그널이 전달됐는지 점검합니다. 해당 코드 분석을 시작하겠습니다.[https:/
[리눅스커널] 메모리 관리: kmalloc 캐시 슬럽 오브젝트 할당 커널 함수 분석하기
By Guillermo Austin Kim | 2019년 9월 1일 |
우리는 'kmalloc() 함수를 호출하면 동적 메모리를 할당할 수 있다.'란 사실을 알고 있습니다. 하지만 kmalloc() 함수에서 호출하는 커널 내부 함수는 거의 분석하지는 않는 듯 합니다. 이번 시간에는 kmalloc() 함수와 이 함수에서 호출하는 다음 함수를 분석합니다.kmalloc_index()kmem_cache_alloc_trace()slab_alloc()slab_alloc_node() kmalloc() 함수 분석하기 우리가 드라이버 드라이버에서 동적 메모리를 할당할 때 주로 사용하는 함수는 kmalloc()입니다. 그런데 kmalloc() 함수는 생각보다 분석하기 어렵습니다. 슬랩 캐시와 슬럽 오브젝트의 개념을 알고 있어야 분석이 가능하기 때문입니다. 이어서