Linux Kernel

Memory Access Ordering(1) – Introduction

Memory Access Ordering(1) – Introduction

The original(원문) : memory-access-ordering–an-introduction Posted by ARM Lief 메모리에 대한 접근이 순차적 실행 모델(Sequential Execution Mode)에서만 이루어진다면 얼마나 머리가 덜 아프겠는가 ? 하지만, 메모리 접근에 대한 Ordering 이 개발자가 알지 못하는 사이 컴파일러나 프로세서의 다양한 최적화 기법(Out-of-order...

typeof 를 사용하는 typecheck 매크로

typeof 를 사용하는 typecheck 매크로

#define typecheck(type,x) \ ({ type __dummy; \ typeof(x) __dummy2; \ (void)(&__dummy == &__dummy2); \ 1; \ }) 위의 코드는 어떤 역할을 할까요 ? 한 라인씩 해독을 해보죠. type __dummy; 인자로 전달받은 type 과 동일한 type...

__const__ 속성

__const__ 속성

커널에서 는 __attribute__((__const__))를 __attribute_const__ 로 define 해서 사용합니다. const 속성은 gcc 매뉴얼에 설명이 나와 있습니다. gnu gcc 온라인 매뉴얼 그리고, 아래의 url 을 참고해 보시면 또한 중요한 문구가 나옵니다. http://nshipster.com/__attribute__ pure and const are both attributes that invoke...

!!smp_on_up 의 의미

!!smp_on_up 의 의미

smp_setup_processor_id 함수내에서 is_smp 함수내에 아래와 같은 코드가 있습니다. static inline bool is_smp(void) { #ifndef CONFIG_SMP return false; #elif defined(CONFIG_SMP_ON_UP) extern unsigned int smp_on_up; return !!smp_on_up; #else return true; #endif } 위에서 smp_on_up 라는 global 변수를...

__init 매크로의 __section(.init.text) __cold notrace 의 의미

__init 매크로의 __section(.init.text) __cold notrace 의 의미

init/main.c 의 start_kernel 함수를 보면 다음과 같이 선언되어 있습니다. asmlinkage void __init start_kernel(void) 위에서 __init 매크로는 한꺼번에 3 개의 속성을 함수에 부여하고 있는데요. 각각 무엇을 의미하는지 살펴보겠습니다. 가. __section(.init.text) __section 매크로는 속성 지정자인 __attribute__ 를...

asmlinkage

asmlinkage

이는 http://studyfoss.egloos.com/4951809 를 참고하면 충분한 설명이 될 것 같다. 어셈블리 코드에서 C 함수를 호출할 때 함수 인자의 전달을 스택을 이용하도록 해주는 속성지정 매크로이다. ARM 에서는 아무일도 하지 않고, x86 에서는 스택을 이용하여 인자를 전달하도록 속성을 지정해준다. x86...

ENTRY 와 ENDPROC

ENTRY 와 ENDPROC

커널 Assembly 코드를 분석하다보면 ENTRY 와 ENDPROC 매크로가 아주 많이 사용된다는 것을 알 수 있다. ENTRY 는 아래와 같이 정의되어 있다. .globl directive 통해 name label 을 외부에서도 볼 수 있도록 한 것이다. #ifndef ENTRY...

Branch Target Buffer

Branch Target Buffer

Branch Target Buffer 는 수행이 된(Taken) Branch 에 대해 instruction address + predicted PC 값을 가지고 있는 일종의 Cache 이다. 즉, instruction address (PC) 값을 이용하여 BTB Entry 검색한 결과로 predicted PC 값을 얻게 된다. processor...

Atomic vs Non-Atomic 연산

Atomic vs Non-Atomic 연산

원문 : http://preshing.com/20130618/atomic-vs-non-atomic-operations/ 단시간의 지식 습득을 위해 빠른 속도로 번역을 한 것이기 때문에 자연스럽지 못한 문구들이 많이 있을 수 있다. 애매한 문구에 연연하기 보다는 핵심적인 내용만 파악하면 될 것이다. 아래 글을 읽고도 의미가 명확하지 않은 문구들에 대해서는...

boot/compressed/head.S 코드 분석 (2)

boot/compressed/head.S 코드 분석 (2)

다음은 head.S 의 dtb_check_done 및 wont_overwrite label 의 어셈블리 코드를 분석한 것이다. 이 부분은 물리메모리에 로드된 커널 이미지가 압축이 풀린 후의 이미지 위치와 겹치는 부분이 있을 경우 재배치를 수행하는 코드이다. 문서에도 기록했지만, 로드된 이미지의 위치에...