KR20240057652A - 가비지 컬렉션 방법 및 장치 - Google Patents
가비지 컬렉션 방법 및 장치 Download PDFInfo
- Publication number
- KR20240057652A KR20240057652A KR1020220138096A KR20220138096A KR20240057652A KR 20240057652 A KR20240057652 A KR 20240057652A KR 1020220138096 A KR1020220138096 A KR 1020220138096A KR 20220138096 A KR20220138096 A KR 20220138096A KR 20240057652 A KR20240057652 A KR 20240057652A
- Authority
- KR
- South Korea
- Prior art keywords
- area
- csr
- quarantined
- chunks
- register
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 19
- 230000006870 function Effects 0.000 claims abstract description 42
- 238000002955 isolation Methods 0.000 claims abstract description 29
- 238000010586 diagram Methods 0.000 description 14
- 238000007689 inspection Methods 0.000 description 7
- 238000012545 processing Methods 0.000 description 7
- 238000004891 communication Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0658—Controller construction arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
- G06F9/30116—Shadow registers, e.g. coupled registers, not forming part of the register space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7205—Cleaning, compaction, garbage collection, erase control
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Human Computer Interaction (AREA)
- Memory System (AREA)
- Sink And Installation For Waste Water (AREA)
Abstract
본 발명의 일실시예에 따른 가비지 컬렉션 방법은 표준 c 라이브러리의 malloc 함수 또는 new 연산자를 통해 동작 할당된 영역이 free 함수나 delete 연산자를 통해 반환되면, 반환된 영역을 격리 리스트에 삽입하는 단계와, 상기 격리 리스트에 삽입된 각 영역들의 시작 주소와 끝 주소를 CSR_quarantined_chunks 레지스터에 기록하는 단계와, 프로세서가 사용하는 메모리 페이지의 물리 주소를 찾고, 해당 페이지의 데이터 중 상기 CSR_quarantined_chunks 레지스터의 격리 영역에 포함되는 값이 있는지 탐색하는 단계와, 상기 CSR_quarantined_chunks 레지스터의 격리 영역에 포함되는 값이 없다고 판단되면 상기 CSR_quarantined_chunks 레지스터의 상태 플래그 비트를 0으로 설정하는 단계와, 상기 CSR_quarantined_chunks 레지스터의 상태 플래그 비트 값이 0인 영역을 상기 격리 리스트에서 삭제하고 재할당이 가능한 free 리스트에 삽입하는 단계를 포함할 수 있다.
Description
본 발명은 댕글링 포인터가 존재하는 동적 메모리 할당 영역을 격리시키고, 댕글링 포인터가 존재하지 않는 동적 메모리 영역 만을 재할당 가능하도록 하는 가비지 컬렉션 방법 및 장치에 관한 것이다.
일반적으로, C와 C++ 같은 저수준 언어로 프로그램을 작성하는 경우, 동적 메모리 할당 기능을 사용하기 위해서는 명시적으로 할당 및 반환 코드를 삽입해야 한다. 하지만. 다수의 동적 메모리 할당 및 반환을 수행하는 복잡한 프로그램을 작성하는 경우, 프로그래머는 더 이상 사용하지 않는 동적 메모리를 반환하지 않거나(memory leak), 이미 반환한 동적 메모리를 사용하거나(use after free), 이미 반환한 동적 메모리를 다시 반환(double free)하는 실수를 할 수 있다. 이러한 실수는 공격을 가능하게 하는 취약점이 될 수 있어 큰 경제적 또는 사회적 피해로 이어질 수 있다.
이 중 가장 대표적인 취약점은 use after free이다. 이미 반환된 동적 메모리 영역을 접근하는 취약점이 존재하고 반환된 동적 메모리가 다시 재할당되어 중요한 기능으로 활용될 때 취약점을 통해 중요한 기능에 접근하는 공격을 가능하게 한다.
use after free 취약점을 이용한 공격을 방어하는 대표적인 기능이 가비지 컬렉션이다. 가비지 컬렉션은 자바나 파이선 같은 상위 레벨에서 제공되는 기능으로 동적 할당된 메모리 영역 중 더 이상 사용되지 않는 영역을 찾아 반환시키는 기능이다. 이러한 가비지 컬렉션 기능으로 인해 free 함수와 같은 명시적으로 동적 메모리를 반환하는 기능이 제공되지 않으며 댕글링 포인터(dangling pointer)가 존재할 수 없게 된다. 결과적으로 자바와 파이썬 같은 언어에서는 use after free 취약점도 발생되지 않게 된다.
하지만, 가비지 컬렉션 기능은 c 나 c++ 같은 저수준 언어에서는 성능 오버헤드 등의 이유로 사용하기 어려운 문제가 있다.
본 발명은 c 나 c++ 같은 저수준 언어를 위한 가비지 컬렉션 기능을 수행하기 위한 가비지 컬렉션 방법 및 장치를 제공하는 것을 그 목적으로 한다.
상기한 목적을 달성하기 위한 실시예에 따른 가비지 컬렉션 방법은 표준 c 라이브러리의 malloc 함수 또는 new 연산자를 통해 동작 할당된 영역이 free 함수나 delete 연산자를 통해 반환되면, 반환된 영역을 격리 리스트에 삽입하는 단계와, 상기 격리 리스트에 삽입된 각 영역들의 시작 주소와 끝 주소를 CSR_quarantined_chunks 레지스터에 기록하는 단계와, 프로세서가 사용하는 메모리 페이지의 물리 주소를 찾고, 해당 페이지의 데이터 중 상기 CSR_quarantined_chunks 레지스터의 격리 영역에 포함되는 값이 있는지 탐색하는 단계와, 상기 CSR_quarantined_chunks 레지스터의 격리 영역에 포함되는 값이 없다고 판단되면 상기 CSR_quarantined_chunks 레지스터의 상태 플래그 비트를 0으로 설정하는 단계와, 상기 CSR_quarantined_chunks 레지스터의 상태 플래그 비트 값이 0인 영역을 상기 격리 리스트에서 삭제하고 재할당이 가능한 free 리스트에 삽입하는 단계를 포함할 수 있다.
상기 CSR_quarantined_chunks 레지스터는 격리된 메모리 영역의 가상 시작 주소, 가상 끝 주소 및 상태 플래그 비트로 구성될 수 있다.
상기 상태 플래그 비트는 격리 상태일 때 1을 가지며 댕글링 포인터가 없다고 판단되는 경우 0으로 변경될 수 있다.
메모리의 특정 사이즈 마다 1비트의 tag 값을 추가하거나 shadow 메모리를 할당하여 tag 값으로 이용할 수 있다.
상기 tag 값은 0으로 초기화되고, 실행 중 메모리에 CSR_HEAP_BASE 및 CSR_HEAP_END 사이의 값이 기록되면 상기 tag 값은 1로 설정될 수 있다.
힙(heap) 영역의 경우 free() 함수를 통해 특정 영역이 반환되면 상기 tag 값은 0으로 초기화될 수 있다.
스택 영역의 tag 값의 경우 함수 반환 시 스택 포인터 값을 변경하면서 더 이상 사용되지 않는 스택 영역에 대해 상기 tag 값을 초기화시킬 수 있다.
또한, 상기한 목적을 달성하기 위한 실시예에 따른 가비지 컬렉션 장치는 가비지 컬렉션을 수행하기 위한 제어 프로그램이 저장된 메모리와, 상기 메모리에 저장된 제어 프로그램을 실행하는 프로세서를 포함하고, 상기 프로세서는, 표준 c 라이브러리의 malloc 함수 또는 new 연산자를 통해 동작 할당된 영역이 free 함수나 delete 연산자를 통해 반환되면, 반환된 영역을 격리 리스트에 삽입하고, 상기 격리 리스트에 삽입된 각 영역들의 시작 주소와 끝 주소를 CSR_quarantined_chunks 레지스터에 기록하고, 프로세서가 사용하는 메모리 페이지의 물리 주소를 찾고, 해당 페이지의 데이터 중 상기 CSR_quarantined_chunks 레지스터의 격리 영역에 포함되는 값이 있는지 탐색하고, 상기 CSR_quarantined_chunks 레지스터의 격리 영역에 포함되는 값이 없다고 판단되면 상기 CSR_quarantined_chunks 레지스터의 상태 플래그 비트를 0으로 설정하고, 상기 CSR_quarantined_chunks 레지스터의 상태 플래그 비트 값이 0인 영역을 상기 격리 리스트에서 삭제하고 재할당이 가능한 free 리스트에 삽입할 수 있다.
상기 CSR_quarantined_chunks 레지스터는 격리된 메모리 영역의 가상 시작 주소, 가상 끝 주소 및 상태 플래그 비트로 구성될 수 있다.
상기 프로세서는, 상기 상태 플래그 비트는 격리 상태일 때 1을 가지며 댕글링 포인터가 없다고 판단되는 경우 0으로 변경되도록 제어할 수 있다.
상기 프로세서는, 메모리의 특정 사이즈 마다 1비트의 tag 값을 추가하거나 shadow 메모리를 할당하여 tag 값으로 이용하도록 제어할 수 있다.
상기 프로세서는, 상기 tag 값은 0으로 초기화되고, 실행 중 메모리에 CSR_HEAP_BASE 및 CSR_HEAP_END 사이의 값이 기록되면 상기 tag 값은 1로 설정되도록 제어할 수 있다.
상기 프로세서는, 힙(heap) 영역의 경우 free() 함수를 통해 특정 영역이 반환되면 상기 tag 값은 0으로 초기화되도록 제어할 수 있다.
상기 프로세서는, 스택 영역의 tag 값의 경우 함수 반환 시 스택 포인터 값을 변경하면서 더 이상 사용되지 않는 스택 영역에 대해 상기 tag 값을 초기화시키도록 제어할 수 있다.
실시예는 c 나 c++ 같은 저수준 언어를 위한 효율적인 가비지 컬렉션 기능을 제공함으로써, 힙 취약점을 이용한 공격을 방지할 수 있는 효과가 있다.
도 1은 실시예에 따른 가비지 컬렉션 장치를 나타낸 블록도이다.
도 2는 실시예에 따른 힙 메모리 관리자에서 수행되는 동작을 나타낸 순서도이다.
도 3은 실시예에 따른 댕글링 포인터 탐지기에서 수행되는 동작을 나타낸 순서도이다.
도 4는 실시예에 따른 댕글링 포인터 탐지기에서 수행되는 세부 동작을 나타낸 순서도이다.
도 5는 실시예에 따른 가비지 컬렉션 방법을 나타낸 도면이다.
도 6은 실시예에 따른 CSR_quarantined_chunks 레지스터의 일 예를 나타낸 도면이다.
도 7은 실시예에 따른 CSR_HEAP_BASE 및 CSR_HEAP_END 레지스터의 일 예를 나타낸 도면이다.
도 8은 실시예에 따른 프로그램의 일 예를 나타낸 도면이다.
도 9 내지 도 14는 프로그램에서 스택과 힙 그리고 Tag 값을 나타내고 그에 따른 CSR_quarantined_chunks 레지스터의 변화를 나타낸 도면이다.
도 15는 실시예에 따른 컴퓨터 시스템의 구성을 나타낸 블록도이다.
도 2는 실시예에 따른 힙 메모리 관리자에서 수행되는 동작을 나타낸 순서도이다.
도 3은 실시예에 따른 댕글링 포인터 탐지기에서 수행되는 동작을 나타낸 순서도이다.
도 4는 실시예에 따른 댕글링 포인터 탐지기에서 수행되는 세부 동작을 나타낸 순서도이다.
도 5는 실시예에 따른 가비지 컬렉션 방법을 나타낸 도면이다.
도 6은 실시예에 따른 CSR_quarantined_chunks 레지스터의 일 예를 나타낸 도면이다.
도 7은 실시예에 따른 CSR_HEAP_BASE 및 CSR_HEAP_END 레지스터의 일 예를 나타낸 도면이다.
도 8은 실시예에 따른 프로그램의 일 예를 나타낸 도면이다.
도 9 내지 도 14는 프로그램에서 스택과 힙 그리고 Tag 값을 나타내고 그에 따른 CSR_quarantined_chunks 레지스터의 변화를 나타낸 도면이다.
도 15는 실시예에 따른 컴퓨터 시스템의 구성을 나타낸 블록도이다.
본 발명의 이점 및 특징, 그리고 그것들을 달성하는 방법은 첨부되는 도면과 함께 상세하게 후술되어 있는 실시예들을 참조하면 명확해질 것이다. 그러나 본 발명은 이하에서 개시되는 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 구현될 것이며, 단지 본 실시예들은 본 발명의 개시가 완전하도록 하며, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 발명의 범주를 완전하게 알려주기 위해 제공되는 것이며, 본 발명은 청구항의 범주에 의해 정의될 뿐이다. 명세서 전체에 걸쳐 동일 참조 부호는 동일 구성 요소를 지칭한다.
비록 "제1" 또는 "제2" 등이 다양한 구성요소를 서술하기 위해서 사용되나, 이러한 구성요소는 상기와 같은 용어에 의해 제한되지 않는다. 상기와 같은 용어는 단지 하나의 구성요소를 다른 구성요소와 구별하기 위하여 사용될 수 있다. 따라서, 이하에서 언급되는 제1 구성요소는 본 발명의 기술적 사상 내에서 제2 구성요소일 수도 있다.
본 명세서에서 사용된 용어는 실시예를 설명하기 위한 것이며 본 발명을 제한하고자 하는 것은 아니다. 본 명세서에서, 단수형은 문구에서 특별히 언급하지 않는 한 복수형도 포함한다. 명세서에서 사용되는 "포함한다(comprises)" 또는 "포함하는(comprising)"은 언급된 구성요소 또는 단계가 하나 이상의 다른 구성요소 또는 단계의 존재 또는 추가를 배제하지 않는다는 의미를 내포한다.
다른 정의가 없다면, 본 명세서에서 사용되는 모든 용어는 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 공통적으로 이해될 수 있는 의미로 해석될 수 있다. 또한, 일반적으로 사용되는 사전에 정의되어 있는 용어들은 명백하게 특별히 정의되어 있지 않는 한 이상적으로 또는 과도하게 해석되지 않는다.
본 문서에서 “A 또는 B, “A 및 B 중 적어도 하나, “A 또는 B 중 적어도 하나”, “A,B 또는 C 중 적어도 하나”, 및 “A,B, 또는 C 중 적어도 하나”와 같은 문구들 각각은 그 문구들 중 해당하는 문구와 함께 나열된 항목들 중 어느 하나, 또는 그들의 모든 가능한 조합을 포함할 수 있다.
이하, 첨부된 도면을 참조하여 본 발명의 실시예들을 상세히 설명하기로 하며, 도면을 참조하여 설명할 때 동일하거나 대응하는 구성 요소는 동일한 도면 부호를 부여하고 이에 대한 중복되는 설명은 생략하기로 한다.
도 1은 실시예에 따른 가비지 컬렉션 장치를 나타낸 블록도이다.
도 1을 참조하면, 실시예에 따른 가비지 컬렉션 장치는 힙 메모리 관리자(100) 및 댕글링 포인터 탐지기(200)를 포함할 수 있다.
힙 메모리 관리자(100)는 반환된 메모리 영역의 격리부(110), 격리된 메모리 영역 해제부(130) 및 재할당 가능 영역 관리부(150)로 구성될 수 있다. 댕글링 포인터 탐지기(200)는 검사 대상 격리 영역 정보 관리부(210), 검사결과 관리부(230) 및 댕글링 포인터 검사부(250)로 구성될 수 있다.
힙 메모리 관리자(100)는 프로그램(P)이 free() 함수 또는 delete 연산자 등을 통해 동적 할당 메모리를 반환하면, 반환된 메모리 영역을 재할당되지 못하도록 격리 리스트에 삽입할 수 있다.
도 2는 실시예에 따른 힙 메모리 관리자에서 수행되는 동작을 나타낸 순서도이다.
도 2에 도시된 바와 같이, 힙 메모리 관리자는 격리 리스트에 영역 정보가 삽입되어 있는지 확인할 수 있다(S110). 격리 리스트에 영역 정보가 삽입되지 않았다고 판단되면 일정시간 대기할 수 있다.
힙 메모리 관리자는 격리 리스트에 영역 정보가 삽입되었다고 판단되면 검사대상 격리 영역 정보 관리부의 버퍼(CSR_quarantined_chunks)에 빈 공간이 있는지 확인할 수 있다(S130).
검사대상 격리 영역 정보 관리부의 버퍼(CSR_quarantined_chunks)에 빈 공간이 없으면, 힙 메모리 관리자는 검사대상 격리 영역 정보 관리부의 버퍼에 댕글링 포인터 상태 비트가 클리어된 격리 영역이 있는지 확인할 수 있다(S150). 댕글링 포인터 상태 비트가 클리어된 격리 영역에 없으면 일정 시간 대기할 수 있다.
댕글링 포인터 상태 비트가 클리어된 격리 영역에 있으면 댕글링 포인터 상태 비트가 클리어된 격리 영역을 격리 리스트에서 삭제하고 재할당 가능 영역 관리부로 이동할 수 있다(S170).
반면, 검사대상 격리 영역 정보 관리부의 버퍼(CSR_quarantined_chunks)에 빈 공간이 있으면 격리 리스트의 영역 정보를 검사 대상 격리 영역 정보 관리부의 버퍼 중 빈 공간에 기록하고 해당 댕글링 포인터 상태 비트를 설정할 수 있다(S190).
도 3은 실시예에 따른 댕글링 포인터 탐지기에서 수행되는 동작을 나타낸 순서도이다.
도 3에 도시된 바와 같이, 먼저 프로세서가 메모리 쓰기에 대한 명령어(instruction)을 수행하면(S210), 댕글링 포인터 탐지기는 쓰여지는 값이 힙 영역의 주소에 해당하는지 확인할 수 있다(S230). 댕글링 포인터 탐지기는 메모리 쓰기 명령어의 타겟 주소에 할당하는 tag 값을 설정할 수 있다(S250).
도 4는 실시예에 따른 댕글링 포인터 탐지기에서 수행되는 세부 동작을 나타낸 순서도이다.
도 4에 도시된 바와 같이, 댕글링 포인터 탐지기의 검사 대상 격리 영역 정보 관리부에서 격리 영역 정보를 얻을 수 있다(S310). 댕글링 포인터 검사부는 현재 프로세서가 사용중인 메모리 페이지 중 접근 가능한 페이지 정보를 얻을 수 있다(S330). 댕글링 포인터 검사부는 접근 가능한 페이지에 대해 해당 tag 값이 설정된 영역의 데이터가 격리 메모리 영역의 주소에 해당하는지 검사할 수 있다(S350). 댕글링 포인터 검사부는 모든 검사 대상 페이지에서 주소가 존재하지 않는 격리 영역의 정보를 검사 결과 관리부에 전달할 수 있다(S370).
도 5는 실시예에 따른 가비지 컬렉션 방법을 나타낸 도면이다.
도 5에 도시된 바와 같이, 표준 c 라이브러리의 malloc 함수 또는 new 연산자를 통해 동적 할당된 영역이 free 함수 또는 delete 연산자를 통해 반환되면(S410), 힙 알로게이터(Heap allocator)는 반환된 영역을 재할당 가능한 free 상태로 두는 것이 아니라 격리 리스트(quarantined)에 삽입할 수 있다(S420).
힙 메모리 관리자(100)는 격리 리스트에 삽입된 각 영역들의 시작 주소와 끝 주소를 검사대상 격리 영역 정보 관리부의 버퍼인 CSR_quarantined_chunks 레지스터에 기록할 수 있다(S430).
CSR_quarantined_chunks 레지스터는 다수의 64bit 레지스터로 구성되며, 각 레지스터는 격리된 메모리 영역의 가상 시작 주소와 가상 끝 주소 그리고 상태 플래그 비트로 구성될 수 있다. 이때, 시작 주소와 끝 주소는 전체 힙 영역의 가상 시작 주소를 가지는 CSR_HEAP_BASE 레지스터의 값을 기준으로 한 상대 주소를 의미할 수 있다.
그리고 상태 플래그 비트(D)는 격리 상태일 때는 1을 가지며 댕글링 포인터(Dangling pointer) 탐지기에 의해 댕글링 포인터가 없다고 판단되는 경우 0으로 변경될 수 있다.
도 6은 실시예에 따른 CSR_quarantined_chunks 레지스터의 일 예를 나타낸 도면이다.
도 6에 도시된 바와 같이, CSR_quarantined_chunks 레지스터 End Address, Base Address 및 상태 플래그 비트로 이루어질 수 있다.
도 5로 돌아가서, 댕글링 포인터 탐지기(200)는 페이지 테이블 탐색 등의 방법을 통해 현재 프로세스가 사용하는 메모리 페이지의 물리 주소를 탐색하고(S440), 해당 페이지의 데이터 중 CSR_quarantined_chunks 레지스터의 격리 영역에 포함되는 값이 있는지 탐색할 수 있다(S450). 모든 사용중인 페이지에서 포함되는 값이 없는 영역의 경우 댕글링 포인터가 없다고 판단하고, 해당 CSR_quarantined_chunks 레지스터의 상태 플래그 비트를 0으로 설정할 수 있다.
여기서, 댕글링 포인터의 검색 효율을 향상시키기 위해 메모리의 특정 사이즈(ex, 8 바이트) 마다 1비트 tag를 추가하거나 새도우 메모리(shadow memory)를 할당하여 tag로 활용할 수 있다(S460). tag 값은 0으로 초기화 되며, 실행 중 메모리에 CSR_HEAP_BASE 와 CSR_HEAP_END 사이의 값이 기록되면 해당 tag 가 1로 설정된다. 그리고 힙 영역의 경우 free() 함수 등을 통해 특정 영역이 반환되면 해당 tag 값은 0으로 초기화 된다. 그리고 스택 영역의 tag 값의 경우, 함수 반환 시 스택 포인터 값을 변경하면서 더 이상 사용되지 않는 스택 영역에 대해 해당 tag 값을 초기화하게 된다.
도 7은 실시예에 따른 CSR_HEAP_BASE 및 CSR_HEAP_END 레지스터의 일 예를 나타낸 도면이다.
도 7에 도시된 바와 같이, CSR_HEAP_BASE 레지스터는 64 bit 로 구성되고, CSR_HEAP_END 레지스터도 64 bit로 구성될 수 있다.
도 5로 돌아가서, 댕글링 포인터 탐지기(200)는 현재 프로세스의 사용 중인 메모리 페이지에서 댕글링 포인터를 검색할 때, tag 비트가 1로 설정된 메모리 영역의 값만 읽고 검사하면 되므로 효율이 개선될 수 있다.
힙 메모리 관리자(100)는 CSR_quarantined_chunks 중 상태 플래그 값이 0인 영역을 격리 리스트에서 삭제하고 재할당이 가능한 free 리스트에 삽입할 수 있다(S470).
힙 메모리 관리자(100)는 CSR_quarantined_chunks 중 상태 플래그 값이 0인 영역을 격리 리스트에서 삭제하고 재할당이 가능한 free 리스트에 삽입한다(S480). 상태 플래그 값이 0인 CSR_quarantined_chunks 레지스터는 격리 리스트의 다른 영역 정보로 대체될 수 있다.
일 실시예에 따른 프로그램을 예로 들어 tag 값과 CSR_quarantined_chunks 레지스터의 값이 변경되는 과정을 설명하면 다음과 같다.
도 8은 실시예에 따른 프로그램의 일 예를 나타낸 도면이고, 도 9 내지 도 14는 프로그램에서 스택과 힙 그리고 Tag 값을 나타내고 그에 따른 CSR_quarantined_chunks 레지스터의 변화를 나타낸 도면이다.
도 9에 도시된 바와 같이, 프로그램의 (1) 위치까지 실행된 시점에서 스택에는 func0의 지역변수 ma0, ma1, ma2, ptr 이 위치하고 malloc() 호출을 통해 반환된 힙 영역의 주소를 가진다. 그리고 이들의 tag 값은 1로 설정될 수 있다.
도 10에 도시된 바와 같이, 프로그램의 (2) 위치까지 실행된 시점에서 스택에는 func1의 지역변수 1ptr 이 위치하고 힙 영역의 값을 가지므로 tag 값이 1로 설정될 수 있다.
도 11에 도시된 바와 같이, 프로그램의 (3) 위치까지 실행된 시점에서는 func1 함수에서 func0으로 반환하면서 스택의 lptr 지역변수의 tag 값이 0으로 초기화 된다. 그리고 ma2의 힙 영역에 ptr의 값이 기록되면서 해당 힙 영역의 tag 값이 1로 설정될 수 있다.
도 12에 도시된 바와 같이, 프로그램의 (4) 위치까지 실행된 시점에서는 ma0, ma1, ma2의 힙 영역에 대해 free() 함수 호출한 결과로 ma2 영역의 tag 값이 0으로 초기화 되었다. 그리고 CSR_quarnatined_chunks 레지스터에 반환된 세 개의 힙 영역 정보가 삽입되었다. 이 때 세 영역 모두 상태 플래그 비트(D)는 1 이다.
도 13에 도시된 바와 같이, 프로그램의 (5) 위치까지 실행된 시점에서는 func0 함수에서 main 함수로 반환하면서 스택에 위치한 func0의 지역변수들의 tag 값들은 모두 0으로 초기화 된다. 그리고 func0의 반환 값이 스택에 위치한 main 함수의 지역변수 ptr에 써지면서 해당 tag 값이 1로 설정된다. 이 때 ptr 은 이미 반환된 ma0의 힙 영역을 가리키므로 댕글링 포인터이다. 그리고, CSR_quarnatined_chunks 레지스터의 세 영역 중 ma0 영역은 ptr에 의해 상태 플래그 비트가 1로 유지되고 나머지 두 영역은 댕글링 포인터가 존재하지 않아 0으로 초기화되고 재할당 가능한 free 리스트에 삽입된다.
도 14에 도시된 바와 같이, 프로그램의 (6) 위치까지 실행된 시점에서는 main 함수의 지역변수 ma3는 malloc 함수 호출의 결과로 ma1에 할당되었던 영역이 재할당되어 0x20030 값을 가진다. 그리고 dangling pointer ptr을 통해 힙 영역에 값이 기록되지만 재할당 되지 못하는 quarantined chunk 영역이므로 공격에 활용되지 못한다.
실시예에 따른 가비지 컬렉션 장치는 컴퓨터 판독 가능한 기록매체와 같은 컴퓨터 시스템에서 구현될 수 있다.
도 15는 실시예에 따른 컴퓨터 시스템의 구성을 나타낸 블록도이다.
도 15를 참조하면, 실시예에 따른 컴퓨터 시스템(1000)은 버스(1020)를 통하여 서로 통신하는 하나 이상의 프로세서(1010), 메모리(1030), 사용자 인터페이스 입력 장치(1040), 사용자 인터페이스 출력 장치(1050) 및 스토리지(1060)를 포함할 수 있다. 또한, 컴퓨터 시스템(1000)은 네트워크에 연결되는 네트워크 인터페이스(1070)를 더 포함할 수 있다.
프로세서(1010)는 중앙 처리 장치 또는 메모리나 스토리지에 저장된 프로그램 또는 프로세싱 인스트럭션들을 실행하는 반도체 장치일 수 있다. 프로세서(1010)는 일종의 중앙처리장치로서 가비지 컬렉션 장치의 전체 동작을 제어할 수 있다.
프로세서(1010)는 데이터를 처리할 수 있는 모든 종류의 장치를 포함할 수 있다. 여기서, '프로세서(processor)'는 예를 들어 프로그램 내에 포함된 코드 또는 명령으로 표현된 기능을 수행하기 위해 물리적으로 구조화된 회로를 갖는, 하드웨어에 내장된 데이터 처리 장치를 의미할 수 있다. 이와 같이 하드웨어에 내장된 데이터 처리 장치의 일 예로써, 마이크로프로세서(microprocessor), 중앙처리장치(central processing unit: CPU), 프로세서 코어(processor core), 멀티프로세서(multiprocessor), ASIC(application-specific integrated circuit), FPGA(field programmable gate array) 등의 처리 장치를 망라할 수 있으나, 이에 한정되는 것은 아니다.
메모리(1030)는 실시예에 따른 가비지 컬렉션 방법을 수행하기 위한 제어 프로그램 등 전반적인 동작을 위한 다양한 데이터가 저장될 수 있다. 구체적으로, 메모리에는 가비지 컬렉션 장치에서 구동되는 다수의 응용 프로그램, 가비지 컬렉션 장치의 동작을 위한 데이터 및 명령어가 저장될 수 있다.
메모리(1030) 및 스토리지(1060)는 휘발성 매체, 비휘발성 매체, 분리형 매체, 비분리형 매체, 통신 매체, 또는 정보 전달 매체 중에서 적어도 하나 이상을 포함하는 저장 매체일 수 있다. 예를 들어, 메모리(1030)는 ROM(1031)이나 RAM(1032)을 포함할 수 있다.
본 발명에서 설명하는 특정 실행들은 실시예들로서, 어떠한 방법으로도 본 발명의 범위를 한정하는 것은 아니다. 명세서의 간결함을 위하여, 종래 전자적인 구성들, 제어시스템들, 소프트웨어, 상기 시스템들의 다른 기능적인 측면들의 기재는 생략될 수 있다. 또한, 도면에 도시된 구성 요소들 간의 선들의 연결 또는 연결 부재들은 기능적인 연결 및/또는 물리적 또는 회로적 연결들을 예시적으로 나타낸 것으로서, 실제 장치에서는 대체 가능하거나 추가의 다양한 기능적인 연결, 물리적인 연결, 또는 회로 연결들로서 나타내어질 수 있다. 또한, "필수적인","중요하게" 등과 같은 구체적인 언급이 없다면 본 발명의 적용을 위하여 반드시 필요한 구성 요소가 아닐 수 있다.
따라서, 본 발명의 사상은 상기 설명된 실시예에 국한되어 정해져서는 아니되며, 후술하는 특허청구범위뿐만 아니라 이 특허청구범위와 균등한 또는 이로부터 등가적으로 변경된 모든 범위는 본 발명의 사상의 범주에 속한다고 할 것이다.
100: 힙 메모리 관리자
200: 댕글링 포인터 탐지기
300: 메모리
200: 댕글링 포인터 탐지기
300: 메모리
Claims (14)
- 표준 c 라이브러리의 malloc 함수 또는 new 연산자를 통해 동작 할당된 영역이 free 함수나 delete 연산자를 통해 반환되면, 반환된 영역을 격리 리스트에 삽입하는 단계;
상기 격리 리스트에 삽입된 각 영역들의 시작 주소와 끝 주소를 CSR_quarantined_chunks 레지스터에 기록하는 단계;
프로세서가 사용하는 메모리 페이지의 물리 주소를 찾고, 해당 페이지의 데이터 중 상기 CSR_quarantined_chunks 레지스터의 격리 영역에 포함되는 값이 있는지 탐색하는 단계;
상기 CSR_quarantined_chunks 레지스터의 격리 영역에 포함되는 값이 없다고 판단되면 상기 CSR_quarantined_chunks 레지스터의 상태 플래그 비트를 0으로 설정하는 단계; 및
상기 CSR_quarantined_chunks 레지스터의 상태 플래그 비트 값이 0인 영역을 상기 격리 리스트에서 삭제하고 재할당이 가능한 free 리스트에 삽입하는 단계;
를 포함하는 가비지 컬렉션 방법. - 제1항에 있어서,
상기 CSR_quarantined_chunks 레지스터는 격리된 메모리 영역의 가상 시작 주소, 가상 끝 주소 및 상태 플래그 비트로 구성되는 가비지 컬렉션 방법. - 제1항에 있어서,
상기 상태 플래그 비트는 격리 상태일 때 1을 가지며 댕글링 포인터가 없다고 판단되는 경우 0으로 변경되는 가비지 컬렉션 방법. - 제1항에 있어서,
메모리의 특정 사이즈 마다 1비트의 tag 값을 추가하거나 shadow 메모리를 할당하여 tag 값으로 이용하는 가비지 컬렉션 방법. - 제4항에 있어서,
상기 tag 값은 0으로 초기화되고, 실행 중 메모리에 CSR_HEAP_BASE 및 CSR_HEAP_END 사이의 값이 기록되면 상기 tag 값은 1로 설정되는 가비지 컬렉션 방법. - 제4항에 있어서,
힙(heap) 영역의 경우 free() 함수를 통해 특정 영역이 반환되면 상기 tag 값은 0으로 초기화되는 가비지 컬렉션 방법. - 제4항에 있어서,
스택 영역의 tag 값의 경우 함수 반환 시 스택 포인터 값을 변경하면서 더 이상 사용되지 않는 스택 영역에 대해 상기 tag 값을 초기화시키는 가비지 컬렉션 방법. - 가비지 컬렉션을 수행하기 위한 제어 프로그램이 저장된 메모리; 및
상기 메모리에 저장된 제어 프로그램을 실행하는 프로세서를 포함하고,
상기 프로세서는,
표준 c 라이브러리의 malloc 함수 또는 new 연산자를 통해 동작 할당된 영역이 free 함수나 delete 연산자를 통해 반환되면, 반환된 영역을 격리 리스트에 삽입하고, 상기 격리 리스트에 삽입된 각 영역들의 시작 주소와 끝 주소를 CSR_quarantined_chunks 레지스터에 기록하고, 프로세서가 사용하는 메모리 페이지의 물리 주소를 찾고, 해당 페이지의 데이터 중 상기 CSR_quarantined_chunks 레지스터의 격리 영역에 포함되는 값이 있는지 탐색하고, 상기 CSR_quarantined_chunks 레지스터의 격리 영역에 포함되는 값이 없다고 판단되면 상기 CSR_quarantined_chunks 레지스터의 상태 플래그 비트를 0으로 설정하고, 상기 CSR_quarantined_chunks 레지스터의 상태 플래그 비트 값이 0인 영역을 상기 격리 리스트에서 삭제하고 재할당이 가능한 free 리스트에 삽입하는 가비지 컬렉션 장치. - 제8항에 있어서,
상기 CSR_quarantined_chunks 레지스터는 격리된 메모리 영역의 가상 시작 주소, 가상 끝 주소 및 상태 플래그 비트로 구성되는 가비지 컬렉션 장치. - 제8항에 있어서,
상기 프로세서는,
상기 상태 플래그 비트는 격리 상태일 때 1을 가지며 댕글링 포인터가 없다고 판단되는 경우 0으로 변경되도록 제어하는 가비지 컬렉션 장치. - 제8항에 있어서,
상기 프로세서는,
메모리의 특정 사이즈 마다 1비트의 tag 값을 추가하거나 shadow 메모리를 할당하여 tag 값으로 이용하도록 제어하는 가비지 컬렉션 장치. - 제11항에 있어서,
상기 프로세서는,
상기 tag 값은 0으로 초기화되고, 실행 중 메모리에 CSR_HEAP_BASE 및 CSR_HEAP_END 사이의 값이 기록되면 상기 tag 값은 1로 설정되도록 제어하는 가비지 컬렉션 장치. - 제11항에 있어서,
상기 프로세서는,
힙(heap) 영역의 경우 free() 함수를 통해 특정 영역이 반환되면 상기 tag 값은 0으로 초기화되도록 제어하는 가비지 컬렉션 장치. - 제11항에 있어서,
상기 프로세서는,
스택 영역의 tag 값의 경우 함수 반환 시 스택 포인터 값을 변경하면서 더 이상 사용되지 않는 스택 영역에 대해 상기 tag 값을 초기화시키도록 제어하는 가비지 컬렉션 장치.
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020220138096A KR20240057652A (ko) | 2022-10-25 | 2022-10-25 | 가비지 컬렉션 방법 및 장치 |
US18/363,285 US20240232073A9 (en) | 2022-10-25 | 2023-08-01 | Garbage collection method and apparatus |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020220138096A KR20240057652A (ko) | 2022-10-25 | 2022-10-25 | 가비지 컬렉션 방법 및 장치 |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20240057652A true KR20240057652A (ko) | 2024-05-03 |
Family
ID=91077531
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020220138096A KR20240057652A (ko) | 2022-10-25 | 2022-10-25 | 가비지 컬렉션 방법 및 장치 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20240232073A9 (ko) |
KR (1) | KR20240057652A (ko) |
-
2022
- 2022-10-25 KR KR1020220138096A patent/KR20240057652A/ko unknown
-
2023
- 2023-08-01 US US18/363,285 patent/US20240232073A9/en active Pending
Also Published As
Publication number | Publication date |
---|---|
US20240134790A1 (en) | 2024-04-25 |
US20240232073A9 (en) | 2024-07-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6470436B1 (en) | Eliminating memory fragmentation and garbage collection from the process of managing dynamically allocated memory | |
US5335334A (en) | Data processing apparatus having a real memory region with a corresponding fixed memory protection key value and method for allocating memories therefor | |
US9213623B2 (en) | Memory allocation with identification of requesting loadable kernel module | |
US7930515B2 (en) | Virtual memory management | |
US10222985B2 (en) | Autonomous dynamic optimization of platform resources | |
US8245002B2 (en) | Call stack protection | |
US8073673B2 (en) | Emulated memory management | |
JP2858795B2 (ja) | 実記憶割り当て方法 | |
US9069477B1 (en) | Reuse of dynamically allocated memory | |
US20080034179A1 (en) | Guard bands in very large virtual memory pages | |
JPH08212136A (ja) | 仮想メモリ変換処理を効率的に共有する方法及び装置 | |
US11100047B2 (en) | Method, device and computer program product for deleting snapshots | |
US6961840B2 (en) | Method and apparatus for managing a dynamic alias page table | |
US10664594B2 (en) | Accelerated code injection detection using operating system controlled memory attributes | |
JPS6257044A (ja) | データ処理装置 | |
CN107590077B (zh) | 一种Spark负载访存行为追踪方法及装置 | |
US10846023B2 (en) | Storage device and storage area management method for reducing garbage collection processing | |
KR20240057652A (ko) | 가비지 컬렉션 방법 및 장치 | |
US20090031100A1 (en) | Memory reallocation in a computing environment | |
AU2021339989B2 (en) | Tri-color bitmap array for garbage collection | |
US20090327666A1 (en) | Method and system for hardware-based security of object references | |
US11803469B2 (en) | Storing data in a log-structured format in a two-tier storage system | |
US20240069797A1 (en) | Software memory tagging for heap overflow protection | |
CN116107759A (zh) | 内存空间的优化方法、内核符号访问方法、装置 | |
Theaker et al. | Memory Management—Paging Systems |