Spinlock(스핀락) - 소개
By Guillermo Austin Kim | 2017년 12월 5일 |
스핀락. 리눅스 커널 책에서 언제나 볼 수 있는 개념이죠.싱크로나이제이션, 동기화, 어쩌구. 실제 Spinlock 구현부를 좀 살펴볼께요. 아래 코드를 전처리해서 코드를 보면,[kernel/fs/jbd2/commit.c]void jbd2_journal_commit_transaction(journal_t *journal) {//snip spin_lock(&commit_transaction->t_handle_lock); 아래 순서로 함수 콜이 수행되는 걸 알 수 있죠. 실제 스핀락 구현부는 arch_spin_lock() 함수라고 할 수 있어요. 우리 눈에 보이는 spin_lock()의 실체는 arch_spin_lock()군요.spin_lock() -> _raw_spin_lock()
[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
리눅스 커널은 정말 오픈 소스 프로젝트일까(2)?
By Guillermo Austin Kim | 2018년 7월 30일 |
경험은 실력을 낳고 실력은 경험으로 이어진다. 임베디드 리눅스 개발 경험은 그 만큼 중요하다. 데이터 시트에 맞게 디바이스 드라이버 구현을 하는 작업은 코드 몽키도 할 수 있다. 초보와 고수 차이는 디바이스 드라이버를 여러 다양한 환경에서 구동할 때 생기는 문제를 해결하는 능력이다. 임베디드 리눅스 개발 도중 여러 문제를 만난다. 그럼 이 문제를 해결하기 위해서 여러 단계를 밟아야 한다. 문제는 이런 문제 해결 분석과 같은 실무 경험이 리눅스 커널 개발자끼리도 공유되고 있지 않다는 것이다. 이 이유가 뭔 지 조금 더 살펴보자. 첫 번째는 실력 있는 임베디드 리눅스 개발자들은 대부분 바쁘다. 문제 하나를 해결하면 다른 문제를 봐야 할 경우가 많다. 내 주위에 밤 낮으로 문제를 해결해야 하는 고수 개발자를
리눅스 민트 18.2 XFCE에서 도커(Docker) 설치
By 반달가면 | 2020년 4월 13일 |
리눅스 민트 18.2 XFCE에서 도커(Docker)를 설치했다. 우분투 기반의 배포판이므로 설치 과정은 우분투에서 도커를 설치하는 절차를 참고했다. 아래의 링크에 나온 내용으로 작업. Get Docker Engine - Community for Ubuntu 기존에 설치된 이전 버전의 도커를 먼저 제거하라고 되어 있는데, 설치된 것이 없으므로 설치로 바로 진행했다. 우선 필요한 다른 패키지들을 설치한다. # S/W 저장소 정보 갱신 sudo apt-get update # 필요한 패키지 설치 sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common 이