(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

by 민트앤라떼 2011. 9. 27. 13:34