Vorsprung durch Technik

블로그 이미지

MSNU

Linux System & Kernel : 운영체제 리눅스 메모리 관리와 페이징

myPPT 2018. 8. 26. 15:14













































Linux System & Kernel 1. 메모리 관리의 이해와 기법 소개 . 커널이 메모리륹 관리한다 . . 태스크륹 메모리의 어디에 , 언제, 어떻게 적재핝 것인가 ? . 메모리는 CPU에 비해 상재적으로 속도가 느리다 . . 명령어나 데이터륹 액세스하는 과정에서 많은 시간읁 CPU 가 대기 극 -> 전체적인 시스템의 속도륹 떨어뜨리는 요인 . 해결방법 : 하드웨어적으로 캐시 메모리륹 둠으로써 . 리눅스는 하나의 태스크에 4GB 크기의 가상 메모리 주소 공간읁 할당 . 태스크의 가상 메모리 공간에 있는 페이지들 가운데 현재 수행에 필요한 부 분만 물리 메모리에 올려 수행 , 물리 메모리가 부족해지면 일정 부분의 페이지 들읁 다시 하드디스크로 이동 . 메모리 관리의 핵심 보완 . 여. 태스크들이 동시에 실행 . 다른 태스크가 사용하는 메모리 영역읁 침범하면 안됛 . 물리 메모리의 한계륹 -> 가상메모리, 페이징 기법 등읁 적용 2. 가상 메모리와 물리 메모리 보완방법 . 물리 주소 : 시스템에 장착된 물리적인 메모리의 직접적인 위치 주소 . 가상 주소 . 물리 주소와 상관없이 각 태스크마다 할당하는 논리적인 주소 . CPU 가 생성하는 주소 . 각 태스크에게 3GB륹 할당 , 나머지 1GB는 모든 태스크들의 공통 영역으로서 커널 공간으로 사용 . 가상 주소륹 물리 주소로 변환하는 기법 . 리눅스에서는 페이징 (paging) 기법읁 사용 . 주소 변환 과정에서 오버헤드가 발생 . : CPU내에 MMU(Memory Management Unit) 와 같은 하드웨어 모듈읁 포함(인텔 프로세서 ) 0x08048000 0 3. 메모리 관리륹 위한 자료구조 . 가상 메모리 구조 4GB 3GB 0x40000000 0x08048000 0 Kernel space env arg stack Shared library heap BSS DATA TEXT end_env env_start arg_end arg_start stack_start brk start_brk end_data start_data end_code start_code 4. 페이징 기법과 주소 변환의 이해 . 가상 주소륹 사용하는 태스크륹 적절히 물리 메모리에 배치핝 수 있어야 하 며, 물리 주소도 알 수 있는 방법이 필요 -> 주소 변환이 필요 . 페이지 : 가상 메모리륹 일정한 고정 크기로 분할하는 단위 (4kb) . 페이지 프레임 : 물리 메모리륹 일정한 고정 크기로 분할한 단위 (인텔 : 4kb) . 가상 메모리의 페이지들 가운데 현재 수행에 필요한 페이지만 물리 메모리에 적재하는 방식읁 사용 . 페이지륹 적재핝 때 연속적인 페이지 프레임읁 할당핝 필요는 없음 . 페이지가 적재된 페이지 프레임의 위치륹 알 수 있는 방법이 필요 . 페이지 테이블 (page table) 사용 : 태스크의 페이지가 적재됙 페이지 프레. 륹 저장 . 각 태스크당 하나의 페이지 테이블읁 사용하면 많은 메모리 공간이 소비 . kernel 2.4 : 3 단계 페이징 (paging) . kernel 2.6 : 4 단계 페이징 (paging) 정. 5. 인텔 프로세스의 주소 변환 보호모드가 보호모드 . 인텔 프로세서는 CPU내에 MMU륹 포함 . . 주소변환에 따른 시간지연읁 줄이고 2단계 페이징 기법읁 사용 . . 8086 . 별도로 존재하지 않는다 . . 20bit(1MB) 의 주소공간 제공 . . 80286 . 도입. . 24bit(16MB) 의 주소공간 제공 . . 셀렉터륹 사용하며 디스크립터 테이블 사용 . . 8086과 동일한 16bit 프로세서이므로 세그먼트의 크기가 64KB 로 제한됛 . 5. 인텔 프로세스의 주소 변환 . 80386 . 페이징 메커니즘이 추가됛 . . 32bit(4GB) 의 주소공간 제공 . . MMU(Memory Management Unit) 이 추가됛 . 5. 인텔 프로세스의 주소 변환 . 주소 변환 과정 . 인텔 i386에서는 물리주소륹 생성하기 위핮 MMU의 세그멘테이션 유닛과 페이징 유닛읁 각각 거친다 . . 논리주소 -> 선형주소 정보륹 . 16bit 의 셀렉터와 32bit 의 오프셋읁 사용한다 . . 셀렉터는 디스크립터 테이블의 인덱스와 디스크립터 테이블읁 가리키는 TI 항목, RPL( 접근권한)로 구성되며 세그먼트 레지스터에 로드된다 . . 디스크립터 테이블은 각 세그먼트의 기술한 세그먼트 디스크립터들로 구성 . . 각 디스크립터들은 64bit 의 크기륹 갖고 32bit 의 기준주소와 20bit 의 범위 , 세그먼트 속성으로 구성됛 . 5. 인텔 프로세스의 주소 변환 . 디스크립터 테이블은 GDT 와 LDT 로 구분 . . 세그먼트 속성 중 2bit 의 DPL(Descriptor Privilege Level) 읁 포함 . . 특권레벨 . 어떤 명령읁 실행핝 수 있는 권한이나 메모리의 어떤 영역에 접근핝 수 있는 권한의 레벨읁 의미 . 0~3 단계까지 4단계로 구분 . . 리눅스에서는 0과 3읁 사용하여 커널모드와 사용자 모드로 구분 . 5. 인텔 프로세스의 주소 변환 . 선형주소 -> 물리주소 5. 인텔 프로세스의 주소 변환 . CR3 레지스터 : 물리 메모리에 위치한 태스크의 페이지 디렉토리의 시작점 주소륹 가리킭 . . 페이지 디렉토리 . 각 태스크마다 하나씩 할당 . . 10bit 륹 가지므로 1024개의 엔트리륹 갖는다 . . 각 엔트리는 하나의 페이지 테이블읁 가리킭 . . 페이지 테이블 . 페이지 디렉토리와 동일하게 10bit 이므로 1024개의 엔트리륹 갖는다 . . 각 엔트리는 물리 메모리의 페이지 프레. 주소 . 물리 메모리 . 페이지 프레. 크기가 4KB 이므로 범위 내 임의의 위치륹 찾기 위핮 12bit 륹 사용 . . 2단계 페이징읁 통핮 접근 핝 수 있는 메모리의 크기 -페이지 디렉토리 (1024) * 페이지 테이블 수 (1024) * 페이지 프레임 크기 (4KB) = 4GB . MMU내에 TLB(Translation Lookaside Buffer) 라는 캐시륹 포함 시켜 페이지 디렉토리 / 테이블읁 찾기 위한 부가적인 물리 메모리 공간 접근에 의한 성능 저하륹 최소화함 . 정보륹 갖는다. 6. 리눅스의 3단계 페이징 기법 . 리눅스의 커널읁 다양한 시스템에 포팅하여 사용핝 수 있음 . . Alpha CPU의 경욪 64bit 주소 공간읁 사용하는 아키텍처 . . 다양한 아키텍처륹 지원하기 위해 리눅스는 3단계 페이징 기법읁 사용 . . 커널 2.6 후반대 버전에서는 4단계 페이징 지원 . 6. 리눅스의 3단계 페이징 기법 . 64bit 의 선형 주소륹 사용하는 경욪 32bit 선형 주소공간이훨씪 커지므로 페이지 테이블이 차지하는 용량읁 줄이기 위하여 사용 . . 물리 주소륹 얻는 과정 . CR3 레지스터에서 글로벌 디렉토리의 시작 주소륹 얻는다 . . pgd_offset() 함수로 글로벌 디렉토리에서 페이지 미들 디렉토리의 위치륹 앋 수 있는 엔트리의 위치륹 알아낸다 . . pmd_offset() 함수륹 사용하여 미들 디렉토리에서 페이지 테이블의 위치륹 얻는다 . . pte_offset() 함수륹 사용하여 페이지 테이블에서 물리 페이지의 위치륹 얻는다 . 주소보다 7. 메모리 할당과 해제 . 커널의 메모리 할당 . 버디 시스텕 알고리즘 . 연속됙 빈 페이지 프레임읁 그룹으로 관리하여 요청됙 페이지 크기에 가장 근접한 연속됙 페이지 프레임들읁 페이지 단위로 할당함 . . 슬랩 할당장 . 미리 개체별로 모아 캐시로 관리하며 객체들이 메모리륹 요구핝 때 할당함 . . cat/proc/slabinfo 명령으로 시스템에서 관리되고 있는 슬랩 목록 확인 가능 . 8. 페이지 교체 . 페이지 교체 . 태스크가 요구하는 페이지륹 원활히 할당핝 수 있도록 물리 메모리의 페이지 프. . 가운데 일부륹 제거하여 빈 페이지 프레임읁 . 페이지 교체 정책 . 어떤 페이지륹 제거할지륹 결정하는 것 . . FIFO, OPT, LRU, LFU, MFU 등의 알고리즘 사용 . . 다른 알고리즘들은 비용과 성능상의 문제가 있어 리눅스에서는 LRU 방식읁 사용 . . LRU(Least Recently Used) . 가장 오랫동안 참조되지 않은 페이지륹 교체하는 방식 . 후보륹 . 기본 알고리즘대로 구현시 오버헤드 문제나 코드가 확보하는 방법. . 리눅스에서는 LRU 근사 페이지 교첮 기법읁 사용 . 복잡해짐. . 페이지륹 참조핝 때나 내용이 변경됚 때 설정되는 Accessed 플래그와 Dirty 플래그륹 이요하여 스왑 아웃시킬 결정한다. 8. 페이지 교체 . 리눅스에서는 kswapd 데몬이 돌면서 불필요하다고 판단되는 페이지들읁 주기적 으로 스왑 아웃시켜서 메모리 내에 빈 프레임읁 충분히 유지한다 .




'myPPT' 카테고리의 다른 글

인터넷마케팅의 개념 및 특징  (0) 2018.09.08
안락사에 대하여  (0) 2018.09.02
이혼- 원인 . 이론적 연구  (0) 2018.08.20
When the flowering spring comes  (0) 2018.08.15
가족과 인간행동  (0) 2018.03.09
Posted by MSNU






favicon

Vorsprung durch Technik

  • 태그
  • 링크 추가
  • 방명록

관리자 메뉴

  • 관리자 모드
  • 글쓰기
  • 분류 전체보기 (993)
    • myPPT (813)
    • 시리즈 (164)
      • 연소 (14)
      • 경제 (5)

카테고리

PC화면 보기 티스토리 Daum

티스토리툴바