LINUX

포스트: 477|조회수: 0|TERM
Items

Posts

477 posts

[리눅스커널] 메모리 관리: 슬럽 오브젝트 해제하는 kfree() 함수 분석하기

Guillermo Austin Kim|2019년 9월 1일

kmalloc() 함수로 동적 메모리를 할당하고 난 후 사용하지 않으면 메모리를 반환해야 합니다. 이 때 kfree() 함수를 사용하면 됩니다. 이번 시간에는 kfree() 함수를 분석하면서 커널 내부에서 반환하는 동적 메모리를 어떻게 처리하는지 살펴보겠습니다.[https://github.com/raspberrypi/linux/blob/rpi-4.19.y/source/mm/slub.c]01 void kfree(const void *x)02 {03 struct page *page;04 void *object = (void *)x;0506 trace_kfree(_RET_IP_, x);0708 if (unlikely(ZERO_OR_NULL_PTR(x)))09 return;1011 page = virt_to_h

[리눅스커널] 메모리 관리: kmalloc 캐시 슬럽 오브젝트 할당 커널 함수 분석하기

Guillermo Austin Kim|2019년 9월 1일

우리는 'kmalloc() 함수를 호출하면 동적 메모리를 할당할 수 있다.'란 사실을 알고 있습니다. 하지만 kmalloc() 함수에서 호출하는 커널 내부 함수는 거의 분석하지는 않는 듯 합니다. 이번 시간에는 kmalloc() 함수와 이 함수에서 호출하는 다음 함수를 분석합니다.kmalloc_index()kmem_cache_alloc_trace()slab_alloc()slab_alloc_node() kmalloc() 함수 분석하기 우리가 드라이버 드라이버에서 동적 메모리를 할당할 때 주로 사용하는 함수는 kmalloc()입니다. 그런데 kmalloc() 함수는 생각보다 분석하기 어렵습니다.  슬랩 캐시와 슬럽 오브젝트의 개념을 알고 있어야 분석이 가능하기 때문입니다. 이어서

[리눅스커널] 스핀락 플러그인 함수: spin_lock_irq()/spin_unlock_irq()

Guillermo Austin Kim|2019년 8월 21일

리눅스 커널 코드를 조금만 분석하면 spin_lock() 함수뿐만 아니라 spin_lock_irq() 함수를 써서 임계 영역을 보호하는 코드를 많이 볼 수 있습니다. 이렇게 커널은 스핀락 기능을 확장한 플러그인 형태 스핀락 함수들을 제공합니다. 이번 소절에서는 spin_lock() 함수 기능을 확장한 스핀락 플러그인 함수를 소개합니다. spin_lock_irq()/spin_unlock_irq() 먼저 spin_lock_irq()/spin_unlock_irq() 함수를 리눅스 커널에서 지원하는 이유를 알아보고 세부 코드를 분석하겠습니다. spin_lock_irq()/spin_unlock_irq() 함수가 생겨난 이유는 무엇일까? spin_lock_irq()/spin_unlock_irq() 함수 코드

gImageReader - 리눅스용 광학문자인식(OCR) GUI S/W

반달가면|2019년 8월 12일

gImageReader는 광학문자인식(OCR)을 위한 GUI S/W이다. 테서랙트(tesseract) OCR 엔진과 연동하여 이미지 파일로부터 문자를 추출해 준다. 테서렉트에 대한 내용은 이전 게시물을 참고하자. 여기로 우분투/데비안 기반 배포판을 기준으로 아래와 같이 설치하면 되겠다. 테서랙트가 이미 설치되어 있다는 것을 전제로 한다. gImageReader는 GUI 기반의 사용자 인터페이스가 중심이고 실제 문자인식은 테서랙트에 의해 이루어진다. # S/W 저장소 갱신 sudo apt-get update # gImageReader 설치 sudo apt-get install gimagereader # gImageReader 실행 gimagereader-gtk GUI 기반이라