2007년 9월 4일 화요일

- static 키워드-
중복 함수명과 변수명의 충돌을 방지 시킬수 있다.
커널 소스에 빈번히 사용 된다.

-메모리 할당과 해제
- 이식성과 데이터형
- 시스템 별로 크기가 달라질수 있다. 그래서 변함 없는 키워드를 사용한다.
__s8, s8 8비트 (byte) | __u8, u8 8비트 (byte)
__s16, s16 16비트 ( word) | __u16 u16 16비트 (word)

- 구조체
- packed 키워드를 사용하여 실제 변수의 크기 선언(데이터를 압축해서 보낸다.)
- typedef sturct{
u16 index; //2바이트
u16 data; //2바이트
u8 data2; //1바이트
}__attribute__((packed))testctl_t // 5바이트가 된다.

- 바이트 순서

- 낮은 바이트를 먼저 저장하면 리틀 엔디안
- 높은 바이트를 먼저 저장하면 빅 엔디안
- #include //빅 엔디안 처리
- #include //리틀 엔디안 처리
- #include //호환성을 위한 매크로

-메모리 할당 -
참고 서적 * 박장수 - 커널 분석 2.4 *
* 커널에서 지연이 발생되지 않도록 다른 프로세스에 지연이 영향을 입히지 않도록 해야 한다.
- kmalloc (), kfree()
- 커널의 물리메모리 공간에서 메모리 할당.
- kmalloc 으로 할당 할수 있는 크기는 = > 128Kbyte 이하이다.
- GFP_KERNEL 동적 메모리 할당이 항상 성공하도록 요구
메모리가 충분하지 않으면 동적 메모리를 할당 할 수 없을때까지 sleep
인터럽트 서비스에서는 사용 불가
- GFP_ATOMIC 커널에 할당 가능한 메모리가 있으면 무조건, 없으면 NULL값을 즉시 전달
- GFP_USER 커널 영역에서 할당은 받지만 우선순위가 떨어진다.
- GFP_DMA 연속된 물리 메모리를 할당 받을 때 사용

- ZONE 정의
- ZONE_DMA ~16M
- ZONE_NORAML 16 ~ 846M
- ZOME_HIGHMEM 846M 이상

- Vmalloc (), vfree()
- 커널의 가상 주소 영역에서 할당한다.
- get_free_page(), free_page()
- 페이지 단위로 할당한다.

댓글 없음: