글
(1) 메모리 관리를 위한 자료구조
○ 태스크는 메모리관리를 사용하는 주체다.
- 태스크가 사용하는 Memory에 대한 정보를 유지하기 위한 자료구조가 필요하다.
- task_struct 구조체안에 struct mm_struct *mm 으로 선언되어 있다.
- mm_struct 를 메모리 디스크립터라고 한다.
(2) 가상메모리 관리 구조체
○ struct vm_area_struct *mmap : 가상 메모리 영역을 관리하기 위해 사용
- vm_area_struct 들은 리스트로 연결되어 있고, mmap 변수는 리스트의 시작이다.
- vm_area_struct의 멤버
struct mm_struct *vm_mm : 태스크의 메모리 디스크립터를 가리키는 변수
unsigned long vm_start : 영역의 시작 주소
unsigned long vm_end : 영역의 끝 주소
struct vm_area_struct *vm_next : 다음 가상 메모리블록을 가리킨다. 마지막 블록은 NULL을 가리킴.
unsigned long vm_flags : 접근 제어들을 담는 플래그
○ pgd_t *pgd : 글로벌 디렉토리의 시작주소, page global directory는 가상 주소를 물리주소로 변환하기 위한 최상위 테이블.
○ start_code, end_code : 코드 세그먼트 영역[프로그램 명령들이 들어가는영역]을 가리킨다. (영역의 시작과 끝)
○ start_data, end_data : 데이터 세그먼트 영역을 가리킨다.
- 데이터 세그먼트 - 프로그램에 선언된 전역변수로 구성된다.
데이터영역 : 초기화된 변수가 들어감
BSS영역 : 초기화 안된 변수가 들어감(Block Started by Symbol)
○ start_brk, brk : 힙의 시작과 끝을 가지는 변수
○ start_stack : 스택의 시작위치
○ env_start, env_end, arg_start, arg_end
- 3GB부터 시작하는 env_start와 env_end사이에 환경변수(env)가 들어간다.
- 바로 다음에 arg_start와 arg_end 사이에 태스크의 초기화인자(argv)가 들어간다.
※ 출처 : http://idkkangjs.blog.me/30091117058
'L inux > Kernel' 카테고리의 다른 글
메모리 관리 - 리눅스 페이징 기법 (0) | 2011.09.27 |
---|---|
메모리 관리 - 페이징기법 & 주소변환 (0) | 2011.09.27 |
메모리 관리 - 가상메모리 & 물리메모리 (0) | 2011.09.27 |
메모리 관리 - 이해와 기법 (0) | 2011.09.27 |
프로세스 - 스케줄링과 시그널 (0) | 2011.09.27 |
RECENT COMMENT