KR20080096963A - 메모리 오류 검출 방법 - Google Patents
메모리 오류 검출 방법 Download PDFInfo
- Publication number
- KR20080096963A KR20080096963A KR1020070041945A KR20070041945A KR20080096963A KR 20080096963 A KR20080096963 A KR 20080096963A KR 1020070041945 A KR1020070041945 A KR 1020070041945A KR 20070041945 A KR20070041945 A KR 20070041945A KR 20080096963 A KR20080096963 A KR 20080096963A
- Authority
- KR
- South Korea
- Prior art keywords
- memory
- block
- identification code
- allocated
- variable
- Prior art date
Links
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/16—Protection against loss of memory contents
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0751—Error or fault detection not based on redundancy
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/70—Masking faults in memories by using spares or by reconfiguring
- G11C29/76—Masking faults in memories by using spares or by reconfiguring using address translation or modifications
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/04—Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
- G11C2029/0409—Online test
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/04—Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
- G11C29/08—Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
- G11C29/12—Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
- G11C29/44—Indication or identification of errors, e.g. for repair
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
본 발명은 메모리 오류 검출 방법에 관한 것으로, 보다 구체적으로는 소프트웨어 개발 단계에서 메모리를 액세스하거나 할당받은 메모리를 해제하는 경우에 발생할 수 있는 메모리 오류를 용이하게 검출하는 방법에 관한 것이다.
본 발명에 따른 메모리 오류 검출 방법은, (a) 컴퓨터 프로그램에 포함된 변수에 대해 할당받은 할당메모리영역 중 최초의 메모리블록을 지시하기 위한 최초블록지시변수를 생성하는 단계, (b) 할당메모리영역을 액세스하기 전에, 할당메모리영역의 액세스 대상 메모리블록을 지시하는 타겟블록지시변수, 및/또는 최초블록지시변수를 이용한 소정의 연산을 수행하여, 할당메모리영역의 액세스시 발생할 수 있는 메모리 오류를 검출하는 단계, 및 (c) 검출된 메모리 오류에 관한 정보를 출력하는 단계를 포함한다.
메모리 오류 검출, 동적 메모리, 소프트웨어, 테스트
Description
도 1은 본 발명에 따른 메모리를 액세스할 때 메모리 오류를 검출하는 방법을 나타낸 순서도이다.
도 2는 본 발명에 따른 메모리 오류 검출 방법을 설명하기 위해 메모리 영역을 모식적으로 나타낸 도면이다.
도 3은 본 발명에 따른 메모리를 해제할 때 메모리 오류를 검출하는 방법을 나타낸 순서도이다.
본 발명은 메모리 오류 검출 방법에 관한 것으로, 보다 구체적으로는 소프트웨어 개발 단계에서 메모리를 액세스(access)하거나 할당받은 메모리를 해제하는 경우에 발생할 수 있는 메모리 오류를 용이하게 검출하는 방법에 관한 것이다.
소프트웨어 프로그래밍 과정에서 가장 빈번하게 발생하는 오류 중의 하나가 메모리 사용상의 오류이다. 소프트웨어가 동작하기 위해서는 통상적으로 수많은 변수가 메모리에 할당되어 사용된다. 프로그램에서 메모리를 부적절하게 액세스하거나 해제하는 경우, 프로그램 실행단계에서 치명적인 오류가 발생할 수 있다. 따라 서, 프로그램 개발자는 프로그래밍 단계에서 부적절한 메모리 오류가 발생하지 않도록 주의해야 하고, 디버깅(debugging) 또는 테스팅(testing)을 통하여 메모리 오류가 발생하지 않도록 프로그램 코드를 수정해야 한다.
그러나, 지금까지는 소프트웨어 개발시의 프로그래밍 과정에서 이러한 메모리 사용상의 오류를 제거하기 위해서는, 프로그래머가 주의해서 코딩을 하고, 코딩 후에도 프로그램 소스 코드를 직접 검토하고, 프로그램을 다양한 수행 환경에서 실행시켜 오류가 발생하는 경우에 그때마다 디버깅하는 방법 등이 사용되어 왔다. 이러한 방법에 의해서는 메모리 사용상의 오류를 검출하기 위하여 수많은 비용과 시간이 투입되어야 하고, 메모리가 부적절하게 사용되더라도 우연히 실행시 오류가 나지 않는 경우 등에는 그러한 메모리 오류를 검출하기 어려우며, 차후에 프로그램 사용단계에서 치명적인 오류가 발생하여 막대한 비용손실을 유발할 수 있는 등의 문제점이 있었다.
본 발명은 전술한 문제점을 해결하기 위한 것으로서, 프로그램 소스코드에서 메모리를 사용할 때마다 메모리 오류를 유발할 가능성은 없는지 확인하는 메모리 오류 검출 방법을 제공하는 것을 목적으로 한다.
본 발명에 따른 메모리 오류 검출 방법은, (a) 컴퓨터 프로그램에 포함된 변수에 대해 할당받은 할당메모리영역 중 최초의 메모리블록을 지시하기 위한 최초블록지시변수를 생성하는 단계, (b) 할당메모리영역을 액세스하기 전에, 할당메모리 영역의 액세스 대상 메모리블록을 지시하는 타겟블록지시변수, 및/또는 최초블록지시변수를 이용한 소정의 연산을 수행하여, 할당메모리영역의 액세스시 발생할 수 있는 메모리 오류를 검출하는 단계, 및 (c) 검출된 메모리 오류에 관한 정보를 출력하는 단계를 포함한다.
여기서, (b) 단계는, (b1) 타겟블록지시변수의 값이 널(NULL)값과 동일한지 비교하는 단계, 및 (b2) 타겟블록지시변수의 값이 널값과 동일한 경우 메모리 오류로 판단하는 단계를 포함할 수도 있다.
또한, (b) 단계는, (b1) 최초블록지시변수의 값이 초기화되었는지 여부를 판단하는 단계, 및 (b2) 최초블록지시변수의 값이 초기화되지 않은 경우 메모리 오류로 판단하는 단계를 포함할 수도 있다.
또한, (b) 단계는, (b1) 최초블록지시변수의 값이 널값인지 여부를 판단하는 단계, 및 (b2) 최초블록지시변수의 값이 널값인 경우 메모리 오류로 판단하는 단계를 포함할 수도 있다.
또한, (b) 단계는, (b1) 타겟블록지시변수가 할당메모리영역 밖의 메모리블록을 지시하는지 여부를 판단하는 단계, 및 (b2) 타겟블록지시변수가 할당메모리영역 밖의 메모리 블록을 지시하는 경우 메모리 오류로 판단하는 단계를 포함할 수도 있다.
또한, (b)단계 이전에, (d) 할당메모리영역의 메모리블록 각각에 대하여 식별부호를 할당하는 단계를 더 포함하고, (b1) 단계에서, 식별부호를 이용하여 타겟블록지시변수가 할당메모리영역 밖의 메모리블록을 지시하는지 여부를 판단할 수도 있다.
또한, 하나의 할당메모리영역에 포함된 메모리블록 각각에 대응하는 식별부호는 컴퓨터 메모리의 식별부호맵 영역에 연속적으로 저장되어 하나의 식별부호그룹을 형성하며, (d) 단계에서, 하나의 식별부호그룹 내의 식별부호는 서로 동일하고, 식별부호맵 영역에서 인접하는 식별부호그룹의 식별부호는 서로 상이하도록 식별부호를 할당하며, (b1)단계는, (b1-1) 타겟블록지시변수가 지시하는 메모리블록에 대응하는 식별부호와 최초블록지시변수가 지시하는 메모리블록에 대응하는 식별부호가 동일한지 여부를 판단하는 단계, 및 (b1-2) (b1-1)단계에서 판단결과, 식별부호가 서로 동일하지 않은 경우, 타겟블록지시변수가 할당메모리영역 밖의 메모리블록을 지시하는 것으로 판단하는 단계를 포함할 수도 있다.
또한, 식별부호그룹의 식별부호는 제1 내지 제3 비트값 중 하나이고, 식별부호맵 영역에서, 식별부호그룹이 형성되지 않은 부분은 제4 비트값이 저장될 수도 있다.
이러한 방법들을 수행하기 위한 컴퓨터 프로그램이 컴퓨터로 읽을 수 있는 기록매체에 저장될 수 있다.
또한, 본 발명의 다른 양태에 따른 메모리 오류 검출 방법은, (a) 컴퓨터 프로그램에 포함된 변수에 대해 할당받은 할당메모리영역 중 최초의 메모리블록을 지시하기 위한 최초블록지시변수를 생성하는 단계, (b) 할당메모리영역의 할당을 해제하기 전에, 할당메모리영역의 액세스 대상 메모리블록을 지시하는 타겟블록지시변수, 및/또는 최초블록지시변수를 이용한 소정의 연산을 수행하여, 할당메모리영 역의 할당 해제시 발생할 수 있는 메모리 오류를 검출하는 단계, 및 (c) 검출된 메모리 오류에 관한 정보를 출력하는 단계를 포함한다.
여기서, (b) 단계는, (b1) 타겟블록지시변수의 값이 널(NULL)값과 동일한지 비교하는 단계, 및 (b2) 타겟블록지시변수의 값이 널값과 동일한 경우 메모리 오류로 판단하는 단계를 포함할 수도 있다.
또한, (b) 단계는, (b1) 최초블록지시변수의 값이 초기화되었는지 여부를 판단하는 단계, 및 (b2) 최초블록지시변수의 값이 초기화되지 않은 경우 메모리 오류로 판단하는 단계를 포함할 수도 있다.
또한, (b) 단계는, (b1) 타겟블록지시변수가 할당메모리영역이 속하는 힙메모리 외부의 메모리 블록을 지시하는지 여부를 판단하는 단계, 및 (b2) 타겟블록지시변수가 할당메모리영역이 속하는 힙메모리 외부의 메모리 블록을 지시하는 경우 메모리 오류로 판단하는 단계를 포함할 수도 있다.
또한, (b) 단계는, (b1) 최초블록지시변수의 값이 널값인지 여부를 판단하는 단계, 및 (b2) 최초블록지시변수의 값이 널값인 경우 메모리 오류로 판단하는 단계를 포함할 수도 있다.
또한, (b) 단계는, (b1) 타겟블록지시변수가 할당메모리영역 중 최초의 메모리블록을 지시하는지 여부를 판단하는 단계, 및 (b2) 타겟블록지시변수가 할당메모리영역 중 최초의 메모리블록을 지시하지 않는 경우 메모리 오류로 판단하는 단계를 포함할 수도 있다.
또한, (b)단계 이전에, (d) 할당메모리영역의 메모리블록 각각에 대하여 식 별부호를 할당하는 단계를 더 포함하고, (b1) 단계에서, 식별부호를 이용하여 할당메모리영역 중 최초의 메모리 블록을 지시하는지 여부를 판단할 수도 있다.
또한, 하나의 할당메모리영역에 포함된 메모리블록 각각에 대응하는 식별부호는 컴퓨터 메모리의 식별부호맵 영역에 연속적으로 저장되어 하나의 식별부호그룹을 형성하며, (d) 단계에서, 하나의 식별부호그룹 내의 식별부호는 서로 동일하고, 식별부호맵 영역에서 인접하는 식별부호그룹의 식별부호는 서로 상이하도록 식별부호를 할당하며, (b1)단계는, (b1-1) 타겟블록지시변수가 지시하는 메모리블록에 대응하는 식별부호가 식별부호맵 영역에서 바로 선행하는 식별부호와 동일한지 여부를 판단하는 단계, 및 (b1-2) (b1-1)단계에서 판단결과, 식별부호가 서로 동일한 경우, 타겟블록지시변수가 할당메모리영역 중 최초의 메모리블록을 지시하지 않는 것으로 판단하는 단계를 포함할 수도 있다.
또한, 식별부호그룹의 식별부호는 제1 내지 제3 비트값 중 하나이고, 식별부호맵 영역에서, 식별부호그룹이 형성되지 않은 부분은 제4 비트값이 저장될 수도 있다.
이러한 방법들을 수행하기 위한 컴퓨터 프로그램이 컴퓨터로 읽을 수 있는 기록매체에 저장될 수 있다.
이하, 첨부된 도면을 참조하여 본 발명을 당업자가 용이하게 이해하고 재현할 수 있도록 설명한다.
우선, 본 발명이 적용될 수 있는 메모리 오류의 종류에 관해서 설명한다. 메 모리를 액세스하는 경우에 발생 가능한 메모리 오류에는 널 포인터 액세스 오류(Null pointer access error), 무효 포인터 액세스 오류(invalid pointer access error), 영역외 액세스 오류(out of bound access error) 등이 있다.
널 포인터 액세스 오류는 메모리를 액세스하기 위한 포인터 변수의 값이 널(NULL)값인데도 불구하고 그 포인터 변수를 이용하여 메모리를 액세스하는 명령을 실행하는 경우에 발생하는 오류이다. 무효 포인터 액세스 오류는, 아직 할당되지 않은 메모리를 액세스하는 경우에 발생하는 메모리 오류, 및 액세스하려는 메모리가 이미 할당 해제된 메모리인 경우 발생하는 메모리 오류를 포함한다. 다음으로, 영역외 액세스 오류는 특정 변수에 대한 연산을 위해 메모리를 액세스 하면서 해당 변수에 할당된 메모리 영역을 벗어난 메모리를 액세스하는 경우에 발생하는 메모리 오류를 의미한다.
또한, 메모리를 해제하는 경우에 발생 가능한 메모리 오류는 크게 부적법 해제 오류(illegal free error), 중복 해제 오류(duplicate free error)로 분류할 수 있다.
부적법 해제 오류에는, 할당 해제하려는 메모리를 지시하는 포인터 변수의 값이 널값인 경우에 발생하는 메모리 오류, 할당되지 않은 메모리를 해제하는 경우에 발생하는 메모리 오류, 할당 해제하려는 메모리가 힙 메모리 영역 밖의 메모리인 경우에 발생하는 메모리 오류, 할당 해제하려는 메모리를 지시하는 포인터 변수가 해당 메모리의 최초 메모리 블록을 지시하지 않는 경우에 발생하는 메모리 오류 등이 포함된다.
중복 해제 오류는 이미 해제된 메모리를 다시 해제하는 경우에 발생하는 오류이다.
이하에서는, 본 발명에 따라 전술한 각 메모리 오류를 검출하는 방법을 첨부된 도면을 참조하여 설명한다.
도 1을 참조하면, 우선, 프로그램에 포함된 변수에 관하여 메모리를 할당받는 경우, 그 할당받은 할당메모리영역 중 최초의 메모리블록을 지시하기 위한 최초블록지시변수를 생성한다(S102). 즉, 프로그램 소스코드에서 메모리 할당이 발생하는 곳마다 최초블록지시변수를 정의하고 초기화한다. 이러한 과정은 프로그램 코딩시에 개발자에 의해 수동으로 입력되거나 프로그램 코딩 완료 후 자동으로 수행될 수도 있다.
다음으로, 해당 변수에 관하여 그 할당받은 할당메모리영역을 액세스할 때마다, 할당메모리영역의 액세스 대상 메모리 블록을 지시하는 타겟블록지시변수, 및/또는 최초블록지시변수를 이용한 소정의 연산을 수행하여, 할당메모리영역의 액세스시 발생할 수 있는 메모리 오류를 검출한다(S104). 즉, 프로그램 소스코드에서 메모리 액세스의 발생이 예상되는 곳마다 메모리 액세스 발생전 이 연산이 수행되도록 API함수를 호출하는 소스코드를 추가한다. 이러한 소스코드의 추가는 프로그램 코딩시에 개발자에 의해 수동으로 입력되거나 프로그램 코딩 완료 후 자동으로 수행될 수도 있다.
검출 결과 메모리 오류가 예상되는 경우에 검출된 메모리 오류에 관한 정보를 출력한다(S106).
전술한 바와 같이, 수동 또는 자동으로 프로그램 소스코딩을 수정하고, 수정된 프로그램을 실행하여 메모리 오류 관련 정보를 출력 받아 메모리 오류가 발생하지 않도록 프로그램을 수정하여야 한다. 프로그램 개발이 완료된 이후에는 프로그램 소스코드에 추가된 내용들은 삭제되는 것이 바람직하며, 이러한 삭제는 개발자에 의해 수동으로 진행되거나 자동으로 수행될 수도 있다.
예를 들어, 프로그램에서 malloc()을 호출하는 경우 사용자가 원하는 크기만큼 메모리를 할당하고 메모리 어드레스를 반환하게 되는데, malloc()을 호출하여 메모리를 할당받을 때, 할당받은 할당메모리영역의 메모리 어드레스를 반환받는 변수가 타겟블록지시변수이고, 할당메모리영역의 최초 메모리블록을 지시하는 변수가 최초블록지시변수이다. malloc() 함수 외에도 메모리를 할당하거나 액세스하는 임의의 함수에 대해 본 발명이 적용될 수 있다. 나아가 본 발명은 특정 프로그래밍 언어에서만 적용되는 것이 아니라, 메모리 또는 이와 등가의 저장수단을 포함하는 임의의 시스템에서 그러한 저장수단을 액세스 또는 해제하는 임의의 경우에 적용될 수 있음은 당업자에게 자명하다. 이하, 메모리 오류를 검출하는 방법을 메모리 오류의 종류에 따라 상세히 설명한다.
할당메모리영역을 액세스할 때, 널 포인터 액세스 오류(Null pointer access error)를 검출하기 위하여, 타겟블록지시변수의 값이 널(NULL)값과 동일한지 비교하고, 그 결과 타겟블록지시변수의 값이 널값과 동일한 경우 메모리 오류로 판단한다(S201).
또한, 할당메모리영역을 액세스할 때, 아직 할당되지 않은 메모리를 액세스 하는 경우에 발생하는 메모리 오류를 검출하기 위하여, 최초블록지시변수의 값이 초기화되었는지 여부를 판단하고, 최초블록지시변수의 값이 초기화되지 않은 경우 무효 포인터 액세스 오류로 판단한다(S202).
또한, 액세스하려는 메모리가 이미 할당 해제된 메모리인 경우 발생하는 메모리 오류를 검출하기 위하여, 최초블록지시변수의 값이 널값인지 여부를 판단하고, 최초블록지시변수의 값이 널값인 경우, 무효 메모리 액세스 오류로 판단한다(S203).
또한, 영역외 액세스 오류를 검출한다(S204). 영역외 액세스 오류를 검출하는 방법은 도 2를 참조하여 상세히 설명한다.
우선 전술한 바와 같이, 영역외 액세스 오류는 특정 변수에 대한 연산을 위해 메모리를 액세스 하면서 해당 변수에 할당된 메모리 영역을 벗어난 메모리를 액세스하는 경우에 발생하는 메모리 오류를 의미한다. 따라서, 영역외 액세스 오류를 검출하기 위하여, 타겟블록지시변수가 할당메모리영역 밖의 메모리블록을 지시하는지 여부를 판단한다. 본 발명에 따른 오류 검출 방법에서는, 영역외 액세스 오류를 검출하기 위하여 비트맵 컬러링을 이용한다. 이하, 그 방식을 설명한다.
예를 들어, 컴퓨터 프로그램에 포함된 변수 각각에 대해 할당메모리영역(112, 114 및 116)을 할당받은 경우, 할당메모리영역의 메모리블록 각각에 대하여 식별부호를 할당한다. 예를 들어, 할당메모리영역(116)의 메모리 블록(116a 및 116b)에 대해 식별부호를 할당한다. 이때, 동일한 할당메모리 영역에 속하는 메모리블록은 동일한 식별부호를 할당받는다.
하나의 할당메모리영역(112, 114, 116)에 포함된 메모리블록(예를 들어, 116a 및 116b) 각각에 대응하는 식별부호는 컴퓨터 메모리의 식별부호맵 영역(120)에 연속적으로 저장되어 하나의 식별부호그룹(122, 124 및 126)을 형성한다. 예를 들어, 프로그램에서 변수 a, b, c가 순차적으로 메모리를 할당받은 경우, 변수 a에 대한 할당메모리영역(112)의 5개의 메모리블록에 대응하는 식별부호 "11"이 식별부호맵 영역(120)에 연속적으로 저장되어 식별부호그룹(122)를 형성하고, 변수 b에 대한 할당메모리영역(114)의 4개의 메모리블록에 대응하는 식별부호 "10"이 식별부호맵 영역(120)에 연속적으로 저장되어 식별부호그룹(124)를 형성한다. 식별부호맵 영역(120)은 식별부호그룹이 형성되기 전에는 "00"값으로 모두 초기화 되어 있다.
"11", "10", "01"의 순서는 임의로 할당될 수 있으며, 하나의 식별부호그룹 내의 식별부호는 서로 동일하고, 식별부호맵 영역에서 인접하는 식별부호그룹의 식별부호는 서로 상이하도록 식별부호를 할당한다. 인접하는 식별부호그룹의 식별부호에 서로 다른 식별부호를 할당하기 위해 3개의 식별부호가 필요하다. 또한, 식별부호맵 영역의 초기화상태를 나타내는 식별부호가 필요하다. 본 실시예에서는, 2-비트의 비트값을 식별부호로 이용하여, 이러한 4개의 식별부호를 표현하였으나, 이는 예시적인 것으로서, 비트값은 임의의 비트수를 가질 수 있으며, 나아가 식별부호는 서로 다른 4개의 식별부호이면 족하다. 각 식별부호에 대하여 컬러값을 할당하여 메모리 할당 및 이용상태를 사용자에게 디스플레이할 수도 있다. 또한, 식별부호맵 영역(120)은 식별부호를 반드시 물리적으로 연속적으로 저장할 필요는 없으므로, 논리적으로 연속적인 임의의 데이터 저장 구조를 가질 수 있다.
이러한 비트맵 컬러링을 이용하여 영역외 액세스 오류를 검출하는 방법은, 타겟블록지시변수가 지시하는 메모리블록에 대응하는 식별부호와 최초블록지시변수가 지시하는 메모리블록에 대응하는 식별부호가 동일한지 여부를 판단하는 방식을 이용한다. 식별부호가 서로 동일하지 않은 경우, 해당 변수에 대한 타겟블록지시변수가 할당메모리영역 밖의 메모리블록을 지시하는 것이므로 영역외 액세스 오류임을 검출할 수 있다.
이상의 각 메모리 오류 종류에 따른 오류 검출 방법 중 하나 이상의 방법이 순서에 무관하게 수행되어 메모리 오류를 검출할 수 있다.
다음으로, 도 3을 참조하여, 메모리를 해제하는 경우에 발생 가능한 메모리 오류를 검출하는 방법을 설명한다. 이 방법은, 컴퓨터 프로그램에 포함된 변수에 대해 할당받은 할당메모리영역 중 최초의 메모리블록을 지시하기 위한 최초블록지시변수를 생성하는 단계(S302), 할당메모리영역의 할당을 해제하기 전에, 할당메모리영역의 액세스 대상 메모리블록을 지시하는 타겟블록지시변수, 및/또는 최초블록지시변수를 이용한 소정의 연산을 수행하여, 할당메모리영역의 할당 해제시 발생할 수 있는 메모리 오류를 검출하는 단계(S304), 및 검출된 메모리 오류에 관한 정보를 출력하는 단계(S306)를 포함한다.
우선, 널값을 갖는 포인터 변수를 이용하여 메모리를 해제하는 경우를 검출하기 위하여, 타겟블록지시변수의 값이 널(NULL)값과 동일한지 비교하고, 널값과 동일한 경우 부적법 해제 오류로 판단한다(S401).
다음으로, 할당되지 않은 메모리를 해제하는 경우를 검출하기 위하여, 최초 블록지시변수의 값이 초기화되었는지 여부를 판단하고, 초기화되지 않은 경우 부적법 해제 오류로 판단한다(S402). 이 방법이 유효하기 위해서는, 메모리를 할당받을 때마다 최초블록지시변수를 생성하고 그 값을 초기화하는 것이 필요하다. 따라서, 최초블록지시변수가 초기화되지 않은 경우라면, 메모리를 할당받지 않은 것으로 판단할 수 있다.
다음으로, 할당 해제하려는 메모리가 힙 메모리 영역 밖의 메모리인 경우 치명적인 메모리 오류를 유발하게 되므로, 타겟블록지시변수가 할당메모리영역이 속하는 힙메모리 외부의 메모리 블록을 지시하는지 여부를 판단하고, 힙메모리 외부의 메모리 블록을 지시하는 경우 부적법 해제 오류로 판단한다(S403).
다음으로, 할당 해제하려는 메모리를 지시하는 포인터 변수가 적합한 값을 가지고 있는지 여부를 판단하여 메모리 오류 여부를 검출한다. 예를 들어, free() 함수를 호출하여 메모리를 해제하는 경우, 입력 포인터 변수는 해제하고자 하는 할당메모리영역의 최초블록을 지시하고 있어야 한다. 이와 관련된 메모리 오류를 검출하기 위하여, 앞서 설명한 비트맵 컬러링 방식을 이용한다. 이를 도 2를 다시 참조하여 설명하면, 변수 b에 관련된 할당메모리영역(114)을 해제하기 위하여, 타겟블록지시변수가 지시하는 메모리블록에 대응하는 식별부호(T_ADDR의 식별부호; 식별부호그룹(124)의 최초 식별부호 "10")가 그 바로 이전 식별부호(T_ADDR-1의 식별부호)와 동일한지 여부를 판단하여, 식별부호가 서로 동일한 경우, 타겟블록지시변수가 할당메모리영역 중 최초의 메모리블록을 지시하지 않는 것이므로 부적법 해제 오류임을 검출할 수 있다(S404).
다음으로, 메모리할당영역을 중복으로 해제하는 경우를 검출하기 위하여, 최초블록지시변수의 값이 널값인지 여부를 판단하고, 최초블록지시변수의 값이 널값인 경우 중복 해제 오류임을 검출한다. 이 방법이 유효하기 위해서는, 메모리할당영역을 적법하게 해제하는 경우, 그 최초블록지시변수에 널값을 할당하는 것이 필요하다(S405). 이상의 각 메모리 오류의 종류에 따른 오류 검출 방법 중 하나 이상의 방법이 순서에 무관하게 수행되어 메모리 오류를 검출할 수 있다.
이상 설명한 본 발명에 따른 메모리 오류 검출 방법에 의해 검출되는 메모리 오류의 종류는 예시적인 것으로서, 메모리 할당시 최초블록지시변수를 생성하여 그 변수에 대한 연산을 통해 발생 가능한 메모리 오류를 검출하거나, 또는 전술한 비트맵 컬러링 방식을 이용하여 메모리 오류를 검출하는 본 발명의 사상을 이용하여 더욱 다양한 메모리 오류를 검출할 수 있음이 당업자에게 자명하다.
본 발명에 의해, 컴퓨터 프로그램의 프로그래밍 과정, 컴퓨터 프로그램의 실행과정 등 메모리를 액세스 하거나 해제하는 경우에 발생가능한 메모리 오류를 자동적이고 확실하게 검출할 수 있다.
Claims (19)
- (a) 컴퓨터 프로그램에 포함된 변수에 대해 할당받은 할당메모리영역 중 최초의 메모리블록을 지시하기 위한 최초블록지시변수를 생성하는 단계;(b) 상기 할당메모리영역을 액세스(access)하기 전에, 상기 할당메모리영역의 액세스 대상 메모리블록을 지시하는 타겟블록지시변수, 및/또는 상기 최초블록지시변수를 이용한 소정의 연산을 수행하여, 상기 할당메모리영역의 액세스시 발생할 수 있는 메모리 오류를 검출하는 단계; 및(c) 검출된 상기 메모리 오류에 관한 정보를 출력하는 단계;를 포함하는, 메모리 오류 검출 방법
- 제1항에 있어서,상기 (b) 단계는,(b1) 타겟블록지시변수의 값이 널(NULL)값과 동일한지 비교하는 단계; 및(b2) 상기 타겟블록지시변수의 값이 널값과 동일한 경우 메모리 오류로 판단하는 단계;를 포함하는, 메모리 오류 검출 방법.
- 제1항에 있어서,상기 (b) 단계는,(b1) 상기 최초블록지시변수의 값이 초기화되었는지 여부를 판단하는 단계; 및(b2) 상기 최초블록지시변수의 값이 초기화되지 않은 경우 메모리 오류로 판단하는 단계;를 포함하는, 메모리 오류 검출 방법.
- 제1항에 있어서,상기 (b) 단계는,(b1) 상기 최초블록지시변수의 값이 널값인지 여부를 판단하는 단계; 및(b2) 상기 최초블록지시변수의 값이 널값인 경우 메모리 오류로 판단하는 단계;를 포함하는, 메모리 오류 검출 방법.
- 제1항에 있어서,상기 (b) 단계는,(b1) 상기 타겟블록지시변수가 상기 할당메모리영역 밖의 메모리블록을 지시하는지 여부를 판단하는 단계; 및(b2) 상기 타겟블록지시변수가 상기 할당메모리영역 밖의 메모리 블록을 지시하는 경우 메모리 오류로 판단하는 단계;를 포함하는, 메모리 오류 검출 방법.
- 제5항에 있어서,상기 (b)단계 이전에,(d) 상기 할당메모리영역의 메모리블록 각각에 대하여 식별부호를 할당하는 단계를 더 포함하고,상기 (b1) 단계에서, 상기 식별부호를 이용하여 상기 타겟블록지시변수가 상기 할당메모리영역 밖의 메모리블록을 지시하는지 여부를 판단하는, 메모리 오류 검출 방법.
- 제6항에 있어서,하나의 상기 할당메모리영역에 포함된 상기 메모리블록 각각에 대응하는 상기 식별부호는 컴퓨터 메모리의 식별부호맵 영역에 연속적으로 저장되어 하나의 식별부호그룹을 형성하며,상기 (d) 단계에서,상기 하나의 식별부호그룹 내의 상기 식별부호는 서로 동일하고, 상기 식별부호맵 영역에서 인접하는 상기 식별부호그룹의 식별부호는 서로 상이하도록 상기 식별부호를 할당하며,상기 (b1)단계는,(b1-1) 상기 타겟블록지시변수가 지시하는 메모리블록에 대응하는 식별부호와 상기 최초블록지시변수가 지시하는 메모리블록에 대응하는 식별부호가 동일한지 여부를 판단하는 단계; 및(b1-2) 상기 (b1-1)단계에서 판단결과, 상기 식별부호가 서로 동일하지 않은 경우, 상기 타겟블록지시변수가 상기 할당메모리영역 밖의 메모리블록을 지시하는 것으로 판단하는 단계를 포함하는, 메모리 오류 검출 방법.
- 제7항에 있어서,상기 식별부호그룹의 식별부호는 제1 내지 제3 비트값 중 하나이고,상기 식별부호맵 영역에서, 상기 식별부호그룹이 형성되지 않은 부분은 제4 비트값이 저장되는, 메모리 오류 검출 방법.
- 제1항 내지 제8항 중 어느 한 항에 기재된 메모리 오류 검출 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한, 컴퓨터로 읽을 수 있는 기록매체.
- (a) 컴퓨터 프로그램에 포함된 변수에 대해 할당받은 할당메모리영역 중 최초의 메모리블록을 지시하기 위한 최초블록지시변수를 생성하는 단계;(b) 상기 할당메모리영역의 할당을 해제하기 전에, 상기 할당메모리영역의 액세스 대상 메모리블록을 지시하는 타겟블록지시변수, 및/또는 상기 최초블록지시변수를 이용한 소정의 연산을 수행하여, 상기 할당메모리영역의 할당 해제시 발생할 수 있는 메모리 오류를 검출하는 단계; 및(c) 검출된 상기 메모리 오류에 관한 정보를 출력하는 단계;를 포함하는, 메모리 오류 검출 방법
- 제10항에 있어서,상기 (b) 단계는,(b1) 타겟블록지시변수의 값이 널(NULL)값과 동일한지 비교하는 단계; 및(b2) 상기 타겟블록지시변수의 값이 널값과 동일한 경우 메모리 오류로 판단하는 단계;를 포함하는, 메모리 오류 검출 방법.
- 제10항에 있어서,상기 (b) 단계는,(b1) 상기 최초블록지시변수의 값이 초기화되었는지 여부를 판단하는 단계; 및(b2) 상기 최초블록지시변수의 값이 초기화되지 않은 경우 메모리 오류로 판단하는 단계;를 포함하는, 메모리 오류 검출 방법.
- 제10항에 있어서,상기 (b) 단계는,(b1) 상기 타겟블록지시변수가 상기 할당메모리영역이 속하는 힙메모리 외부 의 메모리 블록을 지시하는지 여부를 판단하는 단계; 및(b2) 상기 타겟블록지시변수가 상기 할당메모리영역이 속하는 힙메모리 외부의 메모리 블록을 지시하는 경우 메모리 오류로 판단하는 단계;를 포함하는, 메모리 오류 검출 방법.
- 제10항에 있어서,상기 (b) 단계는,(b1) 상기 최초블록지시변수의 값이 널값인지 여부를 판단하는 단계; 및(b2) 상기 최초블록지시변수의 값이 널값인 경우 메모리 오류로 판단하는 단계;를 포함하는, 메모리 오류 검출 방법.
- 제10항에 있어서,상기 (b) 단계는,(b1) 상기 타겟블록지시변수가 상기 할당메모리영역 중 최초의 메모리블록을 지시하는지 여부를 판단하는 단계; 및(b2) 상기 타겟블록지시변수가 상기 할당메모리영역 중 최초의 메모리블록을 지시하지 않는 경우 메모리 오류로 판단하는 단계;를 포함하는, 메모리 오류 검출 방법.
- 제15항에 있어서,상기 (b)단계 이전에,(d) 상기 할당메모리영역의 메모리블록 각각에 대하여 식별부호를 할당하는 단계를 더 포함하고,상기 (b1) 단계에서, 상기 식별부호를 이용하여 상기 할당메모리영역 중 최초의 메모리 블록을 지시하는지 여부를 판단하는, 메모리 오류 검출 방법.
- 제16항에 있어서,하나의 상기 할당메모리영역에 포함된 상기 메모리블록 각각에 대응하는 상기 식별부호는 컴퓨터 메모리의 식별부호맵 영역에 연속적으로 저장되어 하나의 식별부호그룹을 형성하며,상기 (d) 단계에서,상기 하나의 식별부호그룹 내의 상기 식별부호는 서로 동일하고, 상기 식별부호맵 영역에서 인접하는 상기 식별부호그룹의 식별부호는 서로 상이하도록 상기 식별부호를 할당하며,상기 (b1)단계는,(b1-1) 상기 타겟블록지시변수가 지시하는 메모리블록에 대응하는 식별부호가 식별부호맵 영역에서 바로 선행하는 식별부호와 동일한지 여부를 판단하는 단계; 및(b1-2) 상기 (b1-1)단계에서 판단결과, 상기 식별부호가 서로 동일한 경우, 상기 타겟블록지시변수가 상기 할당메모리영역 중 최초의 메모리블록을 지시하지 않는 것으로 판단하는 단계;를 포함하는, 메모리 오류 검출 방법.
- 제17항에 있어서,상기 식별부호그룹의 식별부호는 2-비트로 표현되는 제1 내지 제3 비트값 중 하나이고,상기 식별부호맵 영역에서, 상기 식별부호그룹이 형성되지 않은 부분은 2-비트로 표현되는 제4 비트값이 저장되는, 메모리 오류 검출 방법.
- 제10항 내지 제18항 중 어느 한 항에 기재된 메모리 오류 검출 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한, 컴퓨터로 읽을 수 있는 기록매체.
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020070041945A KR100890546B1 (ko) | 2007-04-30 | 2007-04-30 | 메모리 오류 검출 방법 |
US12/036,550 US7962832B2 (en) | 2007-04-30 | 2008-02-25 | Method for detecting memory error |
JP2008106833A JP2008276763A (ja) | 2007-04-30 | 2008-04-16 | メモリエラーの検出法 |
US13/053,763 US20110173505A1 (en) | 2007-04-30 | 2011-03-22 | Method for detecting memory error |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020070041945A KR100890546B1 (ko) | 2007-04-30 | 2007-04-30 | 메모리 오류 검출 방법 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20080096963A true KR20080096963A (ko) | 2008-11-04 |
KR100890546B1 KR100890546B1 (ko) | 2009-03-27 |
Family
ID=39888489
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020070041945A KR100890546B1 (ko) | 2007-04-30 | 2007-04-30 | 메모리 오류 검출 방법 |
Country Status (3)
Country | Link |
---|---|
US (2) | US7962832B2 (ko) |
JP (1) | JP2008276763A (ko) |
KR (1) | KR100890546B1 (ko) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013100476A1 (ko) * | 2011-12-30 | 2013-07-04 | (주)네오위즈게임즈 | 클라이언트 단말, 감시 서버, 및 감시 영역 변조 방지 방법 |
WO2019231194A1 (ko) * | 2018-05-28 | 2019-12-05 | 삼성전자 주식회사 | 메모리 오류를 검출하는 방법 및 시스템 |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2010057459A1 (de) * | 2008-11-24 | 2010-05-27 | Luk Lamellen Und Kupplungsbau Beteiligungs Kg | Verfahren zur inbetriebnahme und computerprogrammprodukt und vorrichtung |
CN102385533A (zh) * | 2010-08-30 | 2012-03-21 | 鸿富锦精密工业(深圳)有限公司 | 计算机及其内存运行错误时的重启方法 |
WO2012148841A1 (en) * | 2011-04-29 | 2012-11-01 | Google Inc. | Method and apparatus for detecting memory access faults |
US9113164B1 (en) | 2012-05-15 | 2015-08-18 | Google Inc. | Constant bit rate control using implicit quantization values |
US9510019B2 (en) | 2012-08-09 | 2016-11-29 | Google Inc. | Two-step quantization and coding method and apparatus |
US9407915B2 (en) | 2012-10-08 | 2016-08-02 | Google Inc. | Lossless video coding with sub-frame level optimal quantization values |
US9904586B2 (en) | 2015-10-28 | 2018-02-27 | Intel Corporation | Interfacing with block-based storage in a processor |
US9892253B1 (en) | 2016-06-20 | 2018-02-13 | Amazon Technologies, Inc. | Buffer overflow exploit detection |
KR101850303B1 (ko) * | 2016-09-13 | 2018-05-31 | 슈어소프트테크주식회사 | 소스 코드 위배 수정 방법 및 이를 실행하기 위한 프로그램을 기록한 컴퓨터로 판독가능한 기록매체 |
KR20180126921A (ko) * | 2017-05-19 | 2018-11-28 | 에스케이하이닉스 주식회사 | 데이터 저장 장치 및 그것의 동작 방법 |
US10324659B2 (en) | 2017-05-24 | 2019-06-18 | International Business Machines Corporation | Detection of over-access of memory shared among multiple processes |
CN112486803A (zh) * | 2020-11-12 | 2021-03-12 | 珠海格力电器股份有限公司 | 一种错误处理方法、装置及设备 |
CN112331254B (zh) * | 2020-11-24 | 2024-08-06 | 北京泽石科技有限公司 | 非易失性存储器的试错表的生成方法及装置 |
US11720674B2 (en) * | 2021-01-28 | 2023-08-08 | Northrop Grumman Systems Corporation | Systems and methods for malware detection |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4949326A (en) * | 1986-12-10 | 1990-08-14 | Matsushita Electric Industrial Co., Ltd. | Optical information recording and reproducing system using optical disks having an error correction function |
US4710934A (en) * | 1985-11-08 | 1987-12-01 | Texas Instruments Incorporated | Random access memory with error correction capability |
US5557622A (en) * | 1990-10-01 | 1996-09-17 | Digital Equipment Corporation | Method and apparatus for parity generation |
JPH06282463A (ja) * | 1993-03-26 | 1994-10-07 | Matsushita Electric Ind Co Ltd | プログラムテストにおけるメモリ管理方法 |
US5590329A (en) * | 1994-02-04 | 1996-12-31 | Lucent Technologies Inc. | Method and apparatus for detecting memory access errors |
US5644709A (en) * | 1994-04-21 | 1997-07-01 | Wisconsin Alumni Research Foundation | Method for detecting computer memory access errors |
US5628016A (en) * | 1994-06-15 | 1997-05-06 | Borland International, Inc. | Systems and methods and implementing exception handling using exception registration records stored in stack memory |
US5819252A (en) * | 1996-04-10 | 1998-10-06 | Digital Equipment Corporation | Method and apparatus for handling and detecting an invalid use of a data structure |
US6243845B1 (en) * | 1997-06-19 | 2001-06-05 | Sanyo Electric Co., Ltd. | Code error correcting and detecting apparatus |
US6035432A (en) * | 1997-07-31 | 2000-03-07 | Micron Electronics, Inc. | System for remapping defective memory bit sets |
TW333648B (en) * | 1997-10-30 | 1998-06-11 | Key Technology Corp | The connection structure and algorithm for flash memory |
US6671771B2 (en) * | 1999-12-21 | 2003-12-30 | Intel Corporation | Hash CAM having a reduced width comparison circuitry and its application |
US7051264B2 (en) * | 2001-11-14 | 2006-05-23 | Monolithic System Technology, Inc. | Error correcting memory and method of operating same |
JP2005070950A (ja) * | 2003-08-21 | 2005-03-17 | Sanyo Electric Co Ltd | プログラム処理装置 |
KR100524992B1 (ko) * | 2003-11-11 | 2005-10-31 | 삼성전자주식회사 | Cd 데이터의 프레임마다 포인터를 할당하고 이를메모리에 저장하는 디스크 플레이어 및 디스크 플레이어의재생 데이터 처리 방법 |
US7370260B2 (en) * | 2003-12-16 | 2008-05-06 | Freescale Semiconductor, Inc. | MRAM having error correction code circuitry and method therefor |
KR100580071B1 (ko) * | 2004-10-05 | 2006-05-16 | 주식회사 팬택앤큐리텔 | 메모리 오류 검출방법 |
JP4734003B2 (ja) * | 2005-03-17 | 2011-07-27 | 富士通株式会社 | ソフトエラー訂正方法、メモリ制御装置及びメモリシステム |
-
2007
- 2007-04-30 KR KR1020070041945A patent/KR100890546B1/ko active IP Right Grant
-
2008
- 2008-02-25 US US12/036,550 patent/US7962832B2/en active Active
- 2008-04-16 JP JP2008106833A patent/JP2008276763A/ja active Pending
-
2011
- 2011-03-22 US US13/053,763 patent/US20110173505A1/en not_active Abandoned
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013100476A1 (ko) * | 2011-12-30 | 2013-07-04 | (주)네오위즈게임즈 | 클라이언트 단말, 감시 서버, 및 감시 영역 변조 방지 방법 |
WO2019231194A1 (ko) * | 2018-05-28 | 2019-12-05 | 삼성전자 주식회사 | 메모리 오류를 검출하는 방법 및 시스템 |
KR20190135337A (ko) * | 2018-05-28 | 2019-12-06 | 삼성전자주식회사 | 메모리 오류를 검출하는 방법 및 시스템 |
Also Published As
Publication number | Publication date |
---|---|
US7962832B2 (en) | 2011-06-14 |
JP2008276763A (ja) | 2008-11-13 |
KR100890546B1 (ko) | 2009-03-27 |
US20080270855A1 (en) | 2008-10-30 |
US20110173505A1 (en) | 2011-07-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100890546B1 (ko) | 메모리 오류 검출 방법 | |
US8245209B2 (en) | Detecting dangling pointers and memory leaks within software | |
US5355469A (en) | Method for detecting program errors | |
US9535613B2 (en) | Hardware and software methodologies for detecting illegal memory address of a memory access operation | |
US8434064B2 (en) | Detecting memory errors using write integrity testing | |
US8555255B2 (en) | Method of tracing object allocation site in program, as well as computer system and computer program therefor | |
US8073673B2 (en) | Emulated memory management | |
JP2005032259A (ja) | 共有ライブラリーシステム及び前記システム構築方法 | |
US10042752B2 (en) | Object descriptors | |
US7434020B2 (en) | Overwrite detection diagnostic for memory heap | |
US9734620B2 (en) | Apparatus and method for graphics state management | |
US20240095174A1 (en) | Method for detecting error of operating system kernel memory in real time | |
CN111506500B (zh) | 内存泄露检测方法、装置、电子设备及可读存储介质 | |
US10445020B2 (en) | Computer-implemented method and a system for encoding a stack application memory state using shadow memory | |
US20040015864A1 (en) | Method and system for testing memory operations of computer program | |
CN117785540A (zh) | 内存错误检测方法、装置、设备及介质 | |
US7350045B2 (en) | Dynamic memory heap tagging | |
US20070136547A1 (en) | Runtime detection for invalid use of zero-length memory allocations | |
US10229070B2 (en) | Computer-implemented method and a system for encoding a heap application memory state using shadow memory | |
KR100580071B1 (ko) | 메모리 오류 검출방법 | |
KR20220095986A (ko) | 임베디드 프로세서의 소스 코드의 컴파일링 방법 및 컴파일러 | |
CN109923527B (zh) | 可变类型建立器 | |
Schemmel et al. | KDAlloc: The KLEE Deterministic Allocator: Deterministic Memory Allocation during Symbolic Execution and Test Case Replay | |
CN113157513B (zh) | 一种堆内存破坏检测方法、装置、电子设备及存储介质 | |
CN117667539A (zh) | 内存检测方法、装置及控制系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20130307 Year of fee payment: 5 |
|
FPAY | Annual fee payment |
Payment date: 20140319 Year of fee payment: 6 |
|
FPAY | Annual fee payment |
Payment date: 20160203 Year of fee payment: 8 |
|
FPAY | Annual fee payment |
Payment date: 20170316 Year of fee payment: 9 |
|
FPAY | Annual fee payment |
Payment date: 20200204 Year of fee payment: 12 |