1 / 17

Linux System & Kernel Study_04

Linux System & Kernel Study_04. 도성준 , 차재우. 1. 메모리 관리의 이해와 기법 소개. 커널이 메모리를 관리한다 . 태스크를 메모리의 어디에 , 언제 , 어떻게 적재할 것인가 ? 메모리는 CPU 에 비해 상재적으로 속도가 느리다 . 명령어나 데이터를 액세스하는 과정에서 많은 시간을 CPU 가 대기 -> 전체적인 시스템의 속도를 떨어뜨리는 요인 해결방법 : 하드웨어적으로 캐시 메모리를 둠으로써 보완

stu
Download Presentation

Linux System & Kernel Study_04

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Linux System & Kernel Study_04 도성준, 차재우

  2. 1. 메모리 관리의 이해와 기법 소개 • 커널이 메모리를 관리한다. • 태스크를 메모리의 어디에, 언제, 어떻게 적재할 것인가? • 메모리는 CPU에 비해 상재적으로 속도가 느리다. • 명령어나 데이터를 액세스하는 과정에서 많은 시간을 CPU가 대기 -> 전체적인 시스템의 속도를 떨어뜨리는 요인 • 해결방법 : 하드웨어적으로 캐시 메모리를 둠으로써 보완 • 리눅스는 하나의 태스크에 4GB 크기의 가상 메모리 주소 공간을 할당 • 태스크의 가상 메모리 공간에 있는 페이지들 가운데 현재 수행에 필요한 부분만 물리 메모리에 올려 수행, 물리 메모리가 부족해지면 일정 부분의 페이지들을 다시 하드디스크로 이동 • 메모리 관리의 핵심 • 여러 태스크들이 동시에 실행 • 다른 태스크가 사용하는 메모리 영역을 침범하면 안됨 • 물리 메모리의 한계를 극복 -> 가상메모리, 페이징 기법 등을 적용

  3. 2. 가상 메모리와 물리 메모리 • 물리 주소 : 시스템에 장착된 물리적인 메모리의 직접적인 위치 주소 • 가상 주소 • 물리 주소와 상관없이 각 태스크마다 할당하는 논리적인 주소 • CPU가 생성하는 주소 • 각 태스크에게 3GB를 할당, 나머지 1GB는 모든 태스크들의 공통 영역으로서 커널 공간으로 사용 • 가상 주소를 물리 주소로 변환하는 기법 • 리눅스에서는페이징(paging) 기법을 사용 • 주소 변환 과정에서 오버헤드가 발생 • 보완방법 : CPU내에 MMU(Memory Management Unit)와같은 하드웨어 모듈을 포함(인텔 프로세서)

  4. 3. 메모리 관리를 위한 자료구조 • 가상 메모리 관리 Virtual memory 4GB vm_area_struct task_struct mm_struct vm_area_struct Kernel space 3GB structmm_struct *mm unsigned long vm_end unsigned long vm_end structvm_area_struct *mmap unsigned long env_end . . Unsigned long start_code unsigned long vm_start unsigned long vm_start structvm_area_struct *vm_next structvm_area_struct *vm_next Area 2 Area 1 0x08048000 0

  5. 3. 메모리 관리를 위한 자료구조 • 가상 메모리 구조 4GB Kernel space 3GB end_env env env_start arg_end arg arg_start stack_start stack Shared library 0x40000000 heap brk start_brk BSS end_data DATA start_data end_code TEXT start_code 0x08048000 0

  6. 4. 페이징 기법과 주소 변환의 이해 • 가상 주소를 사용하는 태스크를 적절히 물리 메모리에 배치할 수 있어야 하며, 물리 주소도 알 수 있는 방법이 필요 -> 주소 변환이 필요 • 페이지 : 가상 메모리를 일정한 고정 크기로 분할하는 단위(4kb) • 페이지 프레임 : 물리 메모리를 일정한 고정 크기로 분할한 단위 (인텔 : 4kb) • 가상 메모리의 페이지들 가운데 현재 수행에 필요한 페이지만 물리 메모리에 적재하는 방식을 사용 • 페이지를 적재할 때 연속적인 페이지 프레임을 할당할 필요는 없음 • 페이지가 적재된 페이지 프레임의 위치를 알 수 있는 방법이 필요 • 페이지 테이블(page table) 사용 : 태스크의 페이지가 적재된 페이지 프레임 정보를 저장 • 각 태스크당 하나의 페이지 테이블을 사용하면 많은 메모리 공간이 소비 • kernel 2.4 : 3단계 페이징(paging) • kernel 2.6 : 4단계 페이징(paging)

  7. 5. 인텔 프로세스의 주소 변환 • 인텔 프로세서는 CPU내에 MMU를 포함. • 주소변환에 따른 시간지연을 줄이고 2단계 페이징 기법을 사용. • 8086 • 보호모드가 별도로 존재하지 않는다. • 20bit(1MB)의 주소공간 제공. • 80286 • 보호모드 도입. • 24bit(16MB)의 주소공간 제공. • 셀렉터를 사용하며 디스크립터 테이블 사용. • 8086과 동일한 16bit 프로세서이므로 세그먼트의 크기가 64KB로 제한됨.

  8. 5. 인텔 프로세스의 주소 변환 • 80386 • 페이징 메커니즘이 추가됨. • 32bit(4GB)의 주소공간 제공. • MMU(Memory Management Unit)이 추가됨.

  9. 5. 인텔 프로세스의 주소 변환 • 주소 변환 과정 • 인텔 i386에서는 물리주소를 생성하기 위해 MMU의 세그멘테이션 유닛과페이징유닛을 각각 거친다. • 논리주소 -> 선형주소 • 16bit의 셀렉터와 32bit의 오프셋을 사용한다. • 셀렉터는디스크립터 테이블의 인덱스와 디스크립터 테이블을 가리키는 TI 항목,RPL(접근권한)로 구성되며 세그먼트 레지스터에 로드된다. • 디스크립터 테이블은 각 세그먼트의 정보를 기술한 세그먼트 디스크립터들로 구성. • 각 디스크립터들은64bit의 크기를 갖고 32bit의 기준주소와 20bit의 범위, 세그먼트속성으로 구성됨.

  10. 5. 인텔 프로세스의 주소 변환 • 디스크립터 테이블은 GDT와 LDT로 구분. • 세그먼트 속성 중 2bit의 DPL(Descriptor Privilege Level)을 포함. • 특권레벨 – 어떤 명령을 실행할 수 있는 권한이나 메모리의 어떤 영역에 접근할 수 있는권한의 레벨을 의미. 0~3단계까지 4단계로 구분. • 리눅스에서는0과 3을 사용하여 커널모드와 사용자 모드로 구분.

  11. 5. 인텔 프로세스의 주소 변환 • 선형주소 -> 물리주소

  12. 5. 인텔 프로세스의 주소 변환 • CR3 레지스터 : 물리 메모리에 위치한 태스크의 페이지 디렉토리의 시작점 주소를 가리킴. • 페이지 디렉토리 • 각 태스크마다 하나씩 할당. • 10bit를 가지므로 1024개의 엔트리를 갖는다. • 각 엔트리는 하나의 페이지 테이블을 가리킴. • 페이지 테이블 • 페이지 디렉토리와 동일하게 10bit이므로 1024개의 엔트리를 갖는다. • 각 엔트리는 물리 메모리의 페이지 프레임 주소 정보를 갖는다. • 물리 메모리 • 페이지 프레임 크기가 4KB이므로 범위 내 임의의 위치를 찾기 위해 12bit를 사용. • 2단계 페이징을 통해 접근 할 수 있는 메모리의 크기- 페이지 디렉토리(1024) * 페이지 테이블 수(1024) * 페이지 프레임 크기(4KB) = 4GB • MMU내에 TLB(Translation Lookaside Buffer)라는 캐시를 포함 시켜 페이지 디렉토리/테이블을 찾기 위한 부가적인 물리 메모리 공간 접근에 의한 성능 저하를 최소화함.

  13. 6. 리눅스의3단계 페이징 기법 • 리눅스의커널을 다양한 시스템에 포팅하여 사용할 수 있음. • Alpha CPU의 경우 64bit 주소 공간을 사용하는 아키텍처. • 다양한 아키텍처를 지원하기 위해 리눅스는3단계 페이징 기법을 사용. • 커널2.6 후반대 버전에서는 4단계 페이징 지원.

  14. 6. 리눅스의3단계 페이징 기법 • 64bit의 선형 주소를 사용하는 경우 32bit 선형 주소보다 주소 공간이 훨씬커지므로 페이지 테이블이 차지하는 용량을 줄이기 위하여 사용. • 물리 주소를 얻는 과정 • CR3 레지스터에서 글로벌 디렉토리의 시작 주소를 얻는다. • pgd_offset() 함수로 글로벌 디렉토리에서 페이지 미들 디렉토리의 위치를 알 수 있는엔트리의 위치를 알아낸다. • pmd_offset() 함수를 사용하여 미들 디렉토리에서 페이지 테이블의 위치를 얻는다. • pte_offset() 함수를 사용하여 페이지 테이블에서 물리 페이지의 위치를 얻는다.

  15. 7. 메모리 할당과 해제 • 커널의 메모리 할당 • 버디 시스템 알고리즘 • 연속된 빈 페이지 프레임을 그룹으로 관리하여 요청된 페이지 크기에 가장 근접한연속된 페이지 프레임들을 페이지 단위로 할당함. • 슬랩할당장 • 미리 개체별로 모아 캐시로 관리하며 객체들이 메모리를 요구할 때 할당함. • cat/proc/slabinfo명령으로 시스템에서 관리되고 있는 슬랩 목록 확인 가능.

  16. 8. 페이지 교체 • 페이지 교체 • 태스크가 요구하는 페이지를 원활히 할당할 수 있도록 물리 메모리의 페이지 프레임 가운데 일부를 제거하여 빈 페이지 프레임을 확보하는 방법. • 페이지 교체 정책 • 어떤 페이지를 제거할지를 결정하는 것. • FIFO, OPT, LRU, LFU, MFU등의 알고리즘 사용. • 다른 알고리즘들은 비용과 성능상의 문제가 있어 리눅스에서는LRU 방식을 사용. • LRU(Least Recently Used) • 가장 오랫동안 참조되지 않은 페이지를 교체하는 방식. • 기본 알고리즘대로 구현시 오버헤드 문제나 코드가 복잡해짐. • 리눅스에서는LRU 근사 페이지 교체 기법을 사용. • 페이지를 참조할 때나 내용이 변경될 때 설정되는 Accessed 플래그와Dirty 플래그를 이요하여스왑아웃시킬 후보를 결정한다.

  17. 8. 페이지 교체 • 리눅스에서는kswapd데몬이 돌면서 불필요하다고 판단되는 페이지들을 주기적으로 스왑아웃시켜서 메모리 내에 빈 프레임을 충분히 유지한다.

More Related