일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 인공지능
- mysql
- 태그를 입력해 주세요.
- 데이터베이스
- 우분투
- ubuntu 12.04
- NC 다이노스
- 프로야구
- NC다이노스
- 해외직구
- Tizen
- 애플
- 타이젠
- 문파문파
- 야구
- 국정원
- 단통법
- 조세피난처
- 김경문
- 뉴스타파
- 리뷰
- python
- 블로그
- arm
- 손민한
- 디자인 패턴
- 안드로이드
- 문파문파 공략
- Linux
- ubuntu
- Today
- Total
꿈꾸는 사람.
[Linux] BSS란 무엇인가? 본문
1. BSS란?
BSS는 block started by symbol의 약어이다.
.bss나 bss는 초기에 오직 제로 값으로 표시된 정적으로 할당된 변수가 포함된 데이터 세그먼트의 일부로 컴파일러나 링커에 의해 사용된다.
즉, 초기화되지 않은 전역 데이터를 위한 영역이다.
C언어에서 명시적으로 초기화하지 않은 정적으로 할당된 객체는 0(산술 유형인 경우)나 null 포인터(포인터 유형에 대해)로 초기화된다.
일반적으로 C의 구현은 제로 값과 null 포인터 값을 오직 제로 값 비트로 구성된 비트 패턴을 사용하여 표시한다.
따라서 BSS 영역은 일반적으로 static 키워드로 선언된 초기화되지 않은 지역 변수처럼 파일 범위로 선언된 모든 초기회되지 않은 변수를 포함한다.
일반적으로 프로그램 로더가 프로그램을 로드할 때 bss 영역에 할당된 메모리를 초기화한다.
2.1 arch/arm/kernel/vmlinux.lds.S 링커 스크립트 파일
bss 영역이 아래와 같이 __bss_start와 _end 사이의 영역이다.
.bss : { __bss_start = .; /* BSS */ *(.bss) *(COMMON) _end = .; } |
2.2 arch/arm/boot/compressed/vmlinux.lds.in 링커 스크립트 파일
bss 영역이 아래와 같이 __bss_start와 _end 사이의 영역이다.
. = BSS_START; __bss_start = .; .bss : { *(.bss) } _end = .; |
3. BSS 영역 초기화
Linux가 부팅할 때 압축된 커널 zImage의 압축을 해제하는데 이 과정에서 BSS 영역 초기화를 수행한다.
해당 코드는 아래와 같다.
arch/arm/boot/compressed/head.S
not_relocated: mov r0, #0 1: str r0, [r2], #4 @ clear bss str r0, [r2], #4 str r0, [r2], #4 str r0, [r2], #4 cmp r2, r3 blo 1b |
위 코드는 BSS 영역을 0으로 초기화한다.
mov r0, #0 str r0, [r2], #4 | r0 <- 0 (1) MEM[r2] <- r0 (2) r2 <- r2 + 4 즉, r2 레지스터 값이 100이면, 100번지에 r0 레지스터 값 0을 쓴다. 그리고 r2 레지스터 값을 4 증가 시킨다. (32비트 기준이므로.) |
이상과 같이 BSS 영역의 정의와 실제 BSS 영역을 기술하는 스크립트 파일과 사용되는 예를 기술하였다.
- 링커 스크립트 파일은 링커에 의해 참조되며, Makefile에 의해 생성된 오브젝트 파일들을 어떻게 링크하여 커널 이미지를 생성할 방법에 대한 정보를 가지고 있다. [본문으로]
'IT > Linux' 카테고리의 다른 글
[FTP Server] 우분투에 ftp 서버 설치. (0) | 2013.08.21 |
---|---|
[Linux] Ubuntu 11.04를 11.10로 upgrade. (12.04 업그레이드 중간 과정) (0) | 2013.08.20 |
VIM 플러그인 내려받고 환경 설정하기. (0) | 2013.07.08 |
Ubuntu 11.04에서 apt-get 실행하면 404 오류 나는 이유. (0) | 2013.07.04 |
apt-get update에서 발생하는 GPG public key 오류 해결 방법. (4) | 2013.07.04 |