KR101716865B1 - 주 메모리의 에러 셀 회피를 위한 스택 및 힙 메모리 관리 장치 및 그 방법 - Google Patents

주 메모리의 에러 셀 회피를 위한 스택 및 힙 메모리 관리 장치 및 그 방법 Download PDF

Info

Publication number
KR101716865B1
KR101716865B1 KR1020160053383A KR20160053383A KR101716865B1 KR 101716865 B1 KR101716865 B1 KR 101716865B1 KR 1020160053383 A KR1020160053383 A KR 1020160053383A KR 20160053383 A KR20160053383 A KR 20160053383A KR 101716865 B1 KR101716865 B1 KR 101716865B1
Authority
KR
South Korea
Prior art keywords
memory
stack frame
error cell
stack
memory management
Prior art date
Application number
KR1020160053383A
Other languages
English (en)
Inventor
김선욱
백윤아
전재영
Original Assignee
고려대학교 산학협력단
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 고려대학교 산학협력단 filed Critical 고려대학교 산학협력단
Priority to KR1020160053383A priority Critical patent/KR101716865B1/ko
Application granted granted Critical
Publication of KR101716865B1 publication Critical patent/KR101716865B1/ko
Priority to US15/748,003 priority patent/US20180217774A1/en
Priority to CN201780002586.7A priority patent/CN107851051A/zh
Priority to PCT/KR2017/003813 priority patent/WO2017188620A1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • G06F3/0631Configuration or reconfiguration of storage systems by allocating resources to storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1048Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using arrangements adapted for a specific error detection or correction feature
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error 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/0706Error 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 the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/073Error 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 the processing taking place on a specific hardware platform or in a specific software environment in a memory management context, e.g. virtual memory or cache management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/16Protection against loss of memory contents
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0619Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/52Protection of memory contents; Detection of errors in memory contents
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1032Reliability improvement, data loss prevention, degraded operation etc

Abstract

본 발명은 주 메모리의 에러 셀 회피를 위한 스택 및 힙 메모리 관리 장치 및 그 방법을 개시한다. 즉, 본 발명은 스택 영역의 경우 에러 셀을 포함하는 블록이 스택 프레임 사이에 위치하도록 스택 프레임을 할당하고 해제하며, 힙 영역의 경우 에러 셀을 포함하는 블록을 힙 영역 메모리 관리 데이터 구조에 할당 상태로 처리함으로써 프로세서가 주 메모리의 에러 셀을 사용함으로써 발생할 수 있는 데이터 손실 또는 오동작을 방지할 수 있다.

Description

주 메모리의 에러 셀 회피를 위한 스택 및 힙 메모리 관리 장치 및 그 방법{Stack and heap management apparatus for avoiding using fault cells in main memory and method thereof}
본 발명은 주 메모리의 에러 셀 회피를 위한 스택 및 힙 메모리 관리 장치 및 그 방법에 관한 것으로, 특히 스택 영역의 경우 에러 셀을 포함하는 블록이 스택 프레임 사이에 위치하도록 스택 프레임을 할당하고 해제하며, 힙 영역의 경우 에러 셀을 포함하는 블록을 힙 영역 메모리 관리 데이터 구조에 할당 상태로 처리하는 주 메모리의 에러 셀 회피를 위한 스택 및 힙 메모리 관리 장치 및 그 방법에 관한 것이다.
메모리에서 에러가 발생하는 경우, 프로그램에서 저장한(write) 값이 그대로 저장되지 않아서 데이터 손실이 발생할 수 있으며, 저장한 값과 다르게 읽혀져 프로그램이 오동작할 수 있다.
이러한 문제를 해결하기 위해서 하드웨어 또는 소프트웨어에서의 메모리의 에러를 감지/정정 또는 회피하는 방법이 사용되고 있다.
즉, 하드웨어적인 방법으로는, 여분의 메모리 공간을 사용하여 에러가 발생한 공간을 여분의 공간으로 대체하거나 여분의 메모리 공간에 에러를 감지 또는 정정할 수 있는 코드(예를 들어 Error Correction Code)를 저장하여 에러를 감지 또는 정정함으로써, 데이터 손실과 오동작을 방지할 수 있으나, 이러한 하드웨어적인 방법은 여분의 메모리 공간이 필요하기 때문에 이에 대한 비용이 증가하게 된다.
또한, 소프트웨어적인 방법으로는, 운영 체제의 메모리 관리 시스템에서 에러가 있는 메모리 공간(또는 페이지)을 프로그램에 할당하지 않는 방법으로 에러 셀에 대한 접근을 회피할 수 있으나, 운영 체제의 메모리 관리가 페이지 단위로 이루어지기 때문에 페이지 내에 에러가 있더라도 페이지 전체를 사용할 수 없게 된다.
한국공개특허 제10-2007-0098133호 [명칭: 플래시 메모리의 오류블록 관리 방법]
본 발명의 목적은 소프트웨어가 에러가 발생한 메모리 영역에 접근하지 않도록 방지하는 주 메모리의 에러 셀 회피를 위한 스택 및 힙 메모리 관리 장치 및 그 방법을 제공하는 데 있다.
본 발명의 다른 목적은 스택 영역의 경우 에러 셀을 포함하는 블록이 스택 프레임 사이에 위치하도록 스택 프레임을 할당하고 해제하며, 힙 영역의 경우 에러 셀을 포함하는 블록을 힙 영역 메모리 관리 데이터 구조에 할당 상태로 처리하는 주 메모리의 에러 셀 회피를 위한 스택 및 힙 메모리 관리 장치 및 그 방법을 제공하는 데 있다.
본 발명의 실시예에 따른 주 메모리의 에러 셀 회피를 위한 스택 메모리 관리 방법은 주 메모리의 에러 셀 회피를 위한 스택 메모리 관리 방법에 있어서, 메모리 관리부를 통해, 상기 주 메모리의 에러 셀에 대한 정보를 확인하는 단계; 상기 메모리 관리부를 통해, 스택 프레임 할당 시, 피호출 함수의 스택 프레임을 할당할 공간에 에러 셀이 위치하는지 여부를 확인하는 단계; 및 상기 확인 결과, 상기 피호출 함수의 스택 프레임을 할당할 공간에 에러 셀이 위치할 때, 상기 메모리 관리부를 통해, 상기 피호출 함수의 스택 프레임의 위치를 상기 에러 셀을 포함하는 블록 다음으로 조절하여 호출 함수의 스택 프레임과 상기 피호출 함수의 스택 프레임 사이에 에러 셀이 위치하도록 구성하는 단계를 포함할 수 있다.
본 발명과 관련된 일 예로서 상기 호출 함수의 스택 프레임과 상기 피호출 함수의 스택 프레임 사이에 에러 셀이 위치하도록 구성하는 단계는, 상기 메모리 관리부를 통해, 상기 호출 함수의 스택 프레임의 마지막 지점에 대응하는 스택 포인터를 상기 에러 셀에 대응하는 크기 및 상기 피호출 함수의 스택 프레임으로 할당할 공간에 대응하는 크기만큼 감소시켜, 상기 피호출 함수의 스택 프레임을 할당할 수 있다.
본 발명과 관련된 일 예로서 상기 확인 결과, 상기 피호출 함수의 스택 프레임을 할당할 공간에 에러 셀이 위치하지 않을 때, 상기 메모리 관리부를 통해, 상기 호출 함수의 스택 프레임의 마지막 지점에 대응하는 스택 포인터를 상기 피호출 함수의 스택 프레임으로 할당할 공간에 대응하는 크기만큼 감소시켜 상기 피호출 함수의 스택 프레임을 할당하는 단계를 더 포함할 수 있다.
본 발명과 관련된 일 예로서 상기 피호출 함수에 할당된 스택 프레임을 해제할 때, 상기 메모리 관리부를 통해, 상기 피호출 함수의 스택 프레임의 마지막 지점에 위치한 스택 포인터를 상기 피호출 함수를 호출한 호출 함수의 스택 프레임 끝 지점으로 이동시키는 단계를 더 포함할 수 있다.
본 발명의 실시예에 따른 주 메모리의 에러 셀 회피를 위한 힙 메모리 관리 방법은 주 메모리의 에러 셀 회피를 위한 힙 메모리 관리 방법에 있어서, 메모리 관리부를 통해, 상기 주 메모리의 에러 셀에 대한 정보를 확인하는 단계; 상기 메모리 관리부를 통해, 빈 청크 목록(free chunk list)에 포함된 복수의 청크 중에서 에러 셀이 포함된 청크의 존재 여부를 판단하는 단계; 상기 판단 결과, 상기 빈 청크 목록에 포함된 복수의 청크 중에서 에러 셀이 포함된 청크가 존재할 때, 상기 메모리 관리부를 통해, 상기 빈 청크 목록에서 상기 에러 셀이 포함된 블록을 할당 상태로 설정하는 단계; 상기 메모리 관리부를 통해, 상기 에러 셀이 포함된 블록의 할당 상태 설정에 따라, 상기 빈 청크 목록에서 상기 에러 셀이 포함된 블록을 삭제하여 새로운 빈 청크 목록을 생성하는 단계; 및 상기 메모리 관리부를 통해, 상기 새로운 빈 청크 목록을 근거로 프로그램의 호출 함수에 힙 메모리를 할당하는 단계를 포함할 수 있다.
본 발명과 관련된 일 예로서 상기 빈 청크 목록은, 힙 메모리 영역에서 동적 메모리 할당에 사용 가능한 메모리 공간에 대한 정보를 포함할 수 있다.
본 발명과 관련된 일 예로서 상기 호출 함수에 할당된 힙 메모리를 해제할 때, 상기 메모리 관리부를 통해, 상기 호출 함수에 할당된 힙 메모리에 대응하는 청크를 상기 새로운 빈 청크 목록에 등록하여 상기 호출 함수에 할당된 힙 메모리를 사용 가능한 상태로 전환하는 단계를 더 포함할 수 있다.
본 발명의 실시예에 따른 주 메모리의 에러 셀 회피를 위한 스택 메모리 관리 장치는 주 메모리의 에러 셀 회피를 위한 스택 메모리 관리 장치에 있어서, 주 메모리; 및 상기 주 메모리의 에러 셀에 대한 정보를 확인하고, 스택 프레임 할당 시, 피호출 함수의 스택 프레임을 할당할 공간에 에러 셀이 위치할 때, 상기 피호출 함수의 스택 프레임의 위치를 상기 에러 셀을 포함하는 블록 다음으로 조절하여 호출 함수의 스택 프레임과 상기 피호출 함수의 스택 프레임 사이에 에러 셀이 위치하도록 구성하는 메모리 관리부를 포함할 수 있다.
본 발명과 관련된 일 예로서 상기 메모리 관리부는, 상기 피호출 함수에 할당된 스택 프레임을 해제할 때, 상기 피호출 함수의 스택 프레임의 마지막 지점에 위치한 스택 포인터를 상기 피호출 함수를 호출한 호출 함수의 스택 프레임 끝 지점으로 이동시킬 수 있다.
본 발명의 실시예에 따른 주 메모리의 에러 셀 회피를 위한 힙 메모리 관리 장치는 주 메모리의 에러 셀 회피를 위한 힙 메모리 관리 장치에 있어서, 주 메모리; 및 상기 주 메모리의 에러 셀에 대한 정보를 확인하고, 빈 청크 목록에 포함된 복수의 청크 중에서 에러 셀이 포함된 청크가 존재할 때, 상기 빈 청크 목록에서 상기 에러 셀이 포함된 블록을 할당 상태로 설정하고, 상기 에러 셀이 포함된 블록의 할당 상태 설정에 따라, 상기 빈 청크 목록에서 상기 에러 셀이 포함된 블록을 삭제하여 새로운 빈 청크 목록을 생성하고, 상기 새로운 빈 청크 목록을 근거로 프로그램의 호출 함수에 힙 메모리를 할당하는 상기 메모리 관리부를 포함할 수 있다.
본 발명과 관련된 일 예로서 상기 메모리 관리부는, 상기 호출 함수에 할당된 힙 메모리를 해제할 때, 상기 호출 함수에 할당된 힙 메모리에 대응하는 청크를 상기 새로운 빈 청크 목록에 등록하여 상기 호출 함수에 할당된 힙 메모리를 사용 가능한 상태로 전환할 수 있다.
본 발명은 소프트웨어가 에러가 발생한 메모리 영역에 접근하지 않도록 방지함으로써, 프로세서가 주 메모리의 에러 셀을 사용함으로써 발생할 수 있는 데이터 손실 또는 오동작을 방지할 수 있는 효과가 있다.
또한, 본 발명은 스택 영역의 경우 에러 셀을 포함하는 블록이 스택 프레임 사이에 위치하도록 스택 프레임을 할당하고 해제하며, 힙 영역의 경우 에러 셀을 포함하는 블록을 힙 영역 메모리 관리 데이터 구조에 할당 상태로 처리함으로써, 기존의 소프트웨어적 해결 방법에 비해 프로그램에 할당 가능한 메모리를 최대화할 수 있으며, 추가적인 메모리를 사용하지 않음에 따른 비용을 절감할 수 있는 효과가 있다.
도 1은 본 발명의 실시예에 따른 주 메모리의 에러 셀 회피를 위한 스택 및 힙 메모리 관리 장치의 구성을 나타낸 블록도이다.
도 2는 본 발명의 기술적 특징이 고려되지 않은 시스템에서 스택 프레임을 할당하는 경우를 나타낸 메모리 구성도이다.
도 3은 본 발명의 실시예에 따른 스택 프레임을 할당하는 경우를 나타낸 메모리 구성도이다.
도 4는 본 발명의 기술적 특징이 고려되지 않은 시스템에서 스택 프레임을 할당 및 해제하는 경우를 나타낸 코드 구성도이다.
도 5는 본 발명의 실시예에 따른 스택 프레임을 할당 및 해제하는 경우를 나타낸 코드 구성도이다.
도 6은 본 발명의 제 1 실시예에 따른 주 메모리의 에러 셀 회피를 위한 스택 메모리 관리 방법을 나타낸 흐름도이다.
도 7 내지 도 9는 본 발명의 제 1 실시예에 따른 주 메모리의 에러 셀 회피를 위한 스택 메모리 관리를 나타낸 도이다.
도 10은 본 발명의 제 2 실시예에 따른 주 메모리의 에러 셀 회피를 위한 힙 메모리 관리 방법을 나타낸 흐름도이다.
도 11 내지 도 14는 본 발명의 제 2 실시예에 따른 주 메모리의 에러 셀 회피를 위한 힙 메모리 관리를 나타낸 도이다.
본 발명에서 사용되는 기술적 용어는 단지 특정한 실시예를 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아님을 유의해야 한다. 또한, 본 발명에서 사용되는 기술적 용어는 본 발명에서 특별히 다른 의미로 정의되지 않는 한, 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 의미로 해석되어야 하며, 과도하게 포괄적인 의미로 해석되거나, 과도하게 축소된 의미로 해석되지 않아야 한다. 또한, 본 발명에서 사용되는 기술적인 용어가 본 발명의 사상을 정확하게 표현하지 못하는 잘못된 기술적 용어일 때에는 당업자가 올바르게 이해할 수 있는 기술적 용어로 대체되어 이해되어야 할 것이다. 또한, 본 발명에서 사용되는 일반적인 용어는 사전에 정의되어 있는 바에 따라, 또는 전후 문맥상에 따라 해석되어야 하며, 과도하게 축소된 의미로 해석되지 않아야 한다.
또한, 본 발명에서 사용되는 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한 복수의 표현을 포함한다. 본 발명에서 "구성된다" 또는 "포함한다" 등의 용어는 발명에 기재된 여러 구성 요소들 또는 여러 단계를 반드시 모두 포함하는 것으로 해석되지 않아야 하며, 그 중 일부 구성 요소들 또는 일부 단계들은 포함되지 않을 수도 있고, 또는 추가적인 구성 요소 또는 단계들을 더 포함할 수 있는 것으로 해석되어야 한다.
또한, 본 발명에서 사용되는 제 1, 제 2 등과 같이 서수를 포함하는 용어는 구성 요소들을 설명하는데 사용될 수 있지만, 구성 요소들은 용어들에 의해 한정되어서는 안 된다. 용어들은 하나의 구성 요소를 다른 구성 요소로부터 구별하는 목적으로만 사용된다. 예를 들어, 본 발명의 권리 범위를 벗어나지 않으면서 제 1 구성 요소는 제 2 구성 요소로 명명될 수 있고, 유사하게 제 2 구성 요소도 제 1 구성 요소로 명명될 수 있다.
이하, 첨부된 도면을 참조하여 본 발명에 따른 바람직한 실시예를 상세히 설명하되, 도면 부호에 관계없이 동일하거나 유사한 구성 요소는 동일한 참조 번호를 부여하고 이에 대한 중복되는 설명은 생략하기로 한다.
또한, 본 발명을 설명함에 있어서 관련된 공지 기술에 대한 구체적인 설명이 본 발명의 요지를 흐릴 수 있다고 판단되는 경우 그 상세한 설명을 생략한다. 또한, 첨부된 도면은 본 발명의 사상을 쉽게 이해할 수 있도록 하기 위한 것일 뿐, 첨부된 도면에 의해 본 발명의 사상이 제한되는 것으로 해석되어서는 아니 됨을 유의해야 한다.
도 1은 본 발명의 실시예에 따른 주 메모리의 에러 셀 회피를 위한 스택 및 힙 메모리 관리 장치(10)의 구성을 나타낸 블록도이다.
도 1에 도시한 바와 같이, 스택 및 힙 메모리 관리 장치(10)는 주 메모리(100) 및 메모리 관리부(200)로 구성된다. 도 1에 도시된 스택 및 힙 메모리 관리 장치(10)의 구성 요소 모두가 필수 구성 요소인 것은 아니며, 도 1에 도시된 구성 요소보다 많은 구성 요소에 의해 스택 및 힙 메모리 관리 장치(10)가 구현될 수도 있고, 그보다 적은 구성 요소에 의해서도 스택 및 힙 메모리 관리 장치(10)가 구현될 수도 있다.
상기 주 메모리(100)는 운영 체제(또는 상기 메모리 관리부(200))의 제어에 의해, 임의의 프로그램에서 사용하고자 하는 메모리 영역을 스택(stack) 메모리, 힙(heap) 메모리 등에 할당한다.
상기 메모리 관리부(또는 CPU(Central Processing Unit))(200)는 상기 메모리 관리 장치(10)의 전반적인 제어 기능을 수행한다.
또한, 상기 메모리 관리부(200)는 상기 주 메모리(100)에서의 에러 셀에 대한 정보를 확인한다.
또한, 프로그램의 임의의 호출 함수(caller) 내에서 피호출 함수(callee)를 호출하여 상기 피호출 함수에 대한 주 메모리(100) 내의 스택 프레임을 할당해야 하는 경우, 상기 메모리 관리부(200)는 상기 주 메모리(100) 내에서 해당 피호출 함수의 스택 프레임을 할당할 공간에 에러 셀이 위치하는지(또는 존재하는지) 여부를 확인(또는 판단)한다.
즉, 프로그램의 임의의 호출 함수 내에서 피호출 함수를 호출하여 상기 피호출 함수에 대한 주 메모리(100) 내의 스택 프레임을 할당해야 하는 경우, 상기 메모리 관리부(200)는 상기 확인된 에러 셀이 있는 영역 중에서 상기 피호출 함수의 스택 프레임을 할당할 공간에 포함된 에러 셀이 존재하는지 여부를 확인한다.
확인 결과(또는 판단 결과), 해당 피호출 함수의 스택 프레임을 할당할 공간에 에러 셀이 위치(또는 존재)하지 않는 경우, 상기 메모리 관리부(200)는 상기 호출 함수의 스택 프레임에 대응하는 스택 포인터(또는 상기 호출 함수의 스택 프레임의 마지막 지점에 대응하는 스택 포인터)를 상기 피호출 함수의 스택 프레임으로 할당할 공간에 대응하는 크기만큼 감소시켜, 해당 피호출 함수의 스택 프레임을 할당한다.
즉, 상기 확인된 에러 셀이 있는 영역 중에서 상기 피호출 함수의 스택 프레임을 할당할 공간에 포함된 에러 셀이 존재하지 않는 경우, 상기 메모리 관리부(200)는 상기 호출 함수의 스택 프레임에 대응하는 스택 포인터(또는 상기 호출 함수의 스택 프레임의 마지막 지점에 대응하는 스택 포인터)를 상기 피호출 함수의 스택 프레임으로 할당할 공간에 대응하는 크기만큼 감소시켜, 해당 피호출 함수의 스택 프레임을 할당한다.
또한, 확인 결과(또는 판단 결과), 해당 피호출 함수의 스택 프레임을 할당할 공간에 에러 셀이 위치(또는 존재)하는 경우, 상기 메모리 관리부(200)는 상기 피호출 함수의 스택 프레임의 위치를 해당 에러 셀을 포함하는 블록 다음으로 조절하여, 상기 호출 함수의 스택 프레임과 상기 피호출 함수의 스택 프레임 사이에 에러 셀(또는 에러 셀이 포함된 블록)이 위치(또는 존재)하도록 구성한다.
즉, 해당 피호출 함수의 스택 프레임을 할당할 공간에 에러 셀이 위치(또는 존재)하는 경우, 상기 메모리 관리부(200)는 상기 호출 함수의 스택 프레임의 마지막 지점에 대응하는 스택 포인터를 상기 에러 셀이 포함된 블록에 대응하는 크기 및 상기 피호출 함수의 스택 프레임으로 할당할 공간에 대응하는 크기만큼 감소시켜, 해당 피호출 함수의 스택 프레임을 할당한다.
도 2에 도시된 바와 같이, 본 발명의 기술적 특징이 고려되지 않은 시스템에서 스택 프레임을 할당하는 경우, 호출한 함수와 피호출 함수의 스택 프레임이 연속적으로 위치하며, 에러 셀이 피호출 함수의 스택 프레임에 위치한다. 이 경우, 에러 셀이 저장된 데이터는 손실되어 프로그램의 오동작을 유발하게 된다.
도 3에 도시된 바와 같이, 본 발명의 기술적 특징이 고려된 시스템에서 스택 프레임을 할당하는 경우, 에러 셀은 호출한 함수와 피호출 함수의 스택 프레임 사이에 위치한다. 이 경우, 에러 셀은 접근되지 않기 때문에 데이터의 손실 및 프로그램의 오동작을 방지할 수 있다.
또한, 해당 피호출 함수에 할당된 스택 프레임을 해제(free)하는 경우, 상기 메모리 관리부(200)는 현재 상태에서 상기 피호출 함수의 스택 프레임의 마지막 지점에 위치한 스택 포인터를 상기 피호출 함수를 호출한 호출 함수의 스택 프레임 끝 지점으로 이동시킨다.
도 4에 도시된 바와 같이, 본 발명의 기술적 특징이 고려되지 않은 시스템에서 스택 프레임을 할당 및 해제 시의 컴파일러의 코드 생성의 경우, 컴파일러(또는 메모리 관리부(200))는 호출 함수를 피호출 함수를 위해서 스택 프레임으로 할당할 공간(예를 들어 a)만큼 스택 포인터를 이동시켜 스택 프레임을 할당한다. 또한, 컴파일러(또는 메모리 관리부(200))는 스택 프레임 해제 시에는 스택 프레임으로 할당한 공간(예를 들어 a)만큼 스택 포인터를 올린다(또는 이동시킨다).
도 5에 도시된 바와 같이, 본 발명의 기술적 특징이 고려된 시스템에서 스택 프레임을 할당 및 해제 시의 컴파일러의 코드 생성의 경우, 컴파일러(또는 메모리 관리부(200))는 스택 프레임으로 할당할 공간(예를 들어 a)과 에러 셀이 있는 블록까지의 공간(예를 들어 b)만큼 스택 포인터를 이동시켜 스택 프레임을 할당한다. 또한, 컴파일러(또는 메모리 관리부(200))는 스택 프레임 해제 시에는 스택 포인터를 프레임 포인터의 위치로 변경함으로써 수행된다.
이와 같이, 본 발명의 실시예에서는, 운영 체제에서 에러 셀을 포함하는 물리적 메모리 영역(또는 페이지)를 스택 공간으로 할당하고, 스택 영역에서 스택 프레임 사이에 에러 셀이 포함된 블록이 위치하도록 스택 프레임을 조절하여 상기 주 메모리(100)의 에러 셀을 회피할 수 있다.
본 발명의 실시예에서는, 메모리 관리부(200)에서 스택 메모리에 저장할 공간을 할당하기 위해서 스택 포인터 값을 감소시키는 것으로 설명하고 있으나, 이에 한정되는 것은 아니며, 스택 메모리의 관리 방법은 프로세서(또는 메모리 관리부(200))에 따라 다를 수 있다.
즉, 호출 함수가 피호출 함수를 호출할 때, 상기 메모리 관리부(200)는 스택의 공간을 할당하기 위해서 스택 포인터 값을 증가시킬 수도 있다
또한, 프레임 포인터 레지스터가 정의되지 않는 경우, 상기 메모리 관리부(200)는 일반적인 레지스터를 할당하여 사용할 수도 있다.
또한, 본 발명의 실시예에 따른 에러 회피 방법은 기존 힙 영역의 메모리 관리에서 힙 메모리 할당 또는 해제하는 단계를 변경하지 않고 사용한다.
여기서, 상기 힙 영역은 동적 메모리 할당에 사용되는 메모리 공간을 나타낸다. 상기 힙 영역은 시스템 라이브러리에 의해서 관리되며, 프로그램은 라이브러리가 제공하는 함수를 통해서 메모리를 할당(예를 들어 malloc)/해제(예를 들어 free)할 수 있다. 상기 라이브러리는 할당되는 메모리 공간을 내부 데이터 구조인 청크(chunk) 단위의 목록으로 관리한다.
또한, 상기 메모리 관리부(200)는 빈 청크 목록(free chunk list)에 포함된 복수의(또는 하나 이상의) 청크 중에서 에러 셀이 포함된 청크의 존재 여부를 판단(또는 확인)한다. 여기서, 상기 빈 청크 목록은 힙 메모리 영역에서 동적 메모리 할당에 사용 가능한 메모리 공간에 대한 정보를 포함한다. 또한, 메모리 청크 목록은 힙 메모리 영역에서 동적 메모리 할당에 사용 가능한 메모리 공간과, 프로그램에 할당된 메모리 공간을 포함한다.
즉, 상기 메모리 관리부(200)는 힙 메모리 영역에서 동적 메모리를 할당할 수 있는 사용 가능한 메모리 공간에 대한 정보인 빈 청크 목록에 포함된 복수의 청크 중에서 상기 확인된 에러 셀이 포함된 청크가 존재하는지 여부를 판단한다.
판단 결과(또는 확인 결과), 상기 빈 청크 목록에 포함된 복수의 청크 중에서 에러 셀이 포함된 청크가 존재하지 않는 경우, 상기 메모리 관리부(200)는 상기 빈 청크 목록을 근거로 프로그램의 임의의 호출 함수(예를 들어 malloc 함수)에 힙 메모리를 할당한다.
또한, 판단 결과(또는 확인 결과), 상기 빈 청크 목록에 포함된 복수의 청크 중에서 에러 셀이 포함된 청크가 존재하는 경우, 상기 메모리 관리부(200)는 상기 빈 청크 목록에서 해당 에러 셀이 포함된 블록(또는 청크)을 할당 상태로 설정한다.
또한, 상기 메모리 관리부(200)는 상기 에러 셀이 포함된 블록의 할당 상태 설정에 따라, 상기 빈 청크 목록에서 해당 에러 셀이 포함된 블록(또는 청크)을 삭제(또는 제외)하여 새로운 빈 청크 목록을 생성(또는 빈 청크 목록을 업데이트)한다.
이와 같이, 힙 영역에서의 메모리 할당은 빈 청크 목록에 등록된 청크를 프로그램에 전달함으로써 수행된다. 또한, 할당 상태로 표시된 청크는 빈 청크 목록에서 제외되기 때문에, 해제되어 다시 빈 청크 목록에 등록되기 이전까지는 다시 할당되지 않는다.
또한, 상기 메모리 관리부(200)는 상기 새로운 빈 청크 목록(또는 에러 셀이 포함된 블록이 삭제된 빈 청크 목록)을 근거로 프로그램의 임의의 호출 함수(예를 들어 malloc 함수)에 힙 메모리를 할당한다.
또한, 상기 호출 함수에 할당된 힙 메모리를 해제하는 경우, 상기 메모리 관리부(200)는 상기 호출 함수에 할당된 힙 메모리에 대응하는 청크를 최신의 빈 청크 목록(또는 상기 새로운 빈 청크 목록)에 등록하여, 상기 호출 함수에 할당된 힙 메모리를 사용 가능한 상태로 전환한다.
이와 같이, 본 발명의 실시예에서는, 운영 체제에서 에러 셀을 포함하는 물리적 메모리 영역(또는 페이지)를 힙 공간으로 할당하고, 힙 영역에서 에러가 있는 블록을 힙 영역 메모리 관리 데이터 구조(chunk list)에 할당 상태로 표시함으로써, 에러 셀에 대한 접근이 발생하지 않아 데이터의 손실과 프로그램의 오동작이 발생하지 않게 되어, 상기 주 메모리(100)의 에러 셀을 회피할 수 있다.
본 발명의 실시예에서는, 주 메모리의 에러 셀을 회피하기 위해서 스택 메모리 관리 및 힙 메모리 관리를 각각 수행하는 것을 설명하고 있으나, 이에 한정되는 것은 아니며, 상기 메모리 관리부(200)는 현재 실행하려고 하는 또는 실행 중인 프로그램과 관련하여, 스택 메모리 할당 및 힙 메모리 할당 중 어느 메모리 할당이 필요한지 여부를 확인하고, 상기 확인 결과에 따라 스택 메모리 할당 기능 및 힙 메모리 할당 기능 중 어느 하나의 기능을 수행할 수도 있다.
즉, 상기 메모리 관리부(200)는 프로그램 실행에 따라 스택 프레임 할당 및 힙 프레임 할당 중 어느 하나를 확인(또는 구분)하고, 상기 확인 결과(또는 구분 결과)를 근거로 앞서 기재된 스택 프레임 할당 방법에 따라 스택 프레임을 할당하거나 또는, 힙 프레임 할당 방법에 따라 힙 프레임을 할당할 수 있다.
이와 같이, 소프트웨어가 에러가 발생한 메모리 영역에 접근하지 않도록 방지할 수 있다.
또한, 이와 같이, 스택 영역의 경우 에러 셀을 포함하는 블록이 스택 프레임 사이에 위치하도록 스택 프레임을 할당하고 해제하며, 힙 영역의 경우 에러 셀을 포함하는 블록을 힙 영역 메모리 관리 데이터 구조에 할당 상태로 처리할 수 있다.
이하에서는, 본 발명에 따른 주 메모리의 에러 셀 회피를 위한 스택 및 힙 메모리 관리 방법을 도 1 내지 도 14를 참조하여 상세히 설명한다.
도 6은 본 발명의 제 1 실시예에 따른 주 메모리의 에러 셀 회피를 위한 스택 메모리 관리 방법을 나타낸 흐름도이다.
먼저, 메모리 관리부(200)는 주 메모리(100)에서의 에러 셀에 대한 정보를 확인한다.
일 예로, 상기 메모리 관리부(200)는 주 메모리(100)에서 에러 셀이 있는 영역을 확인한다(S610).
이후, 프로그램의 임의의 호출 함수(caller) 내에서 피호출 함수(callee)를 호출하여 상기 피호출 함수에 대한 주 메모리(100) 내의 스택 프레임을 할당해야 하는 경우, 상기 메모리 관리부(200)는 상기 주 메모리(100) 내에서 해당 피호출 함수의 스택 프레임을 할당할 공간에 에러 셀이 위치하는지(또는 존재하는지) 여부를 확인(또는 판단)한다.
즉, 프로그램의 임의의 호출 함수 내에서 피호출 함수를 호출하여 상기 피호출 함수에 대한 주 메모리(100) 내의 스택 프레임을 할당해야 하는 경우, 상기 메모리 관리부(200)는 상기 확인된 에러 셀이 있는 영역 중에서 상기 피호출 함수의 스택 프레임을 할당할 공간에 포함된 에러 셀이 존재하는지 여부를 확인한다.
일 예로, 도 7에 도시된 바와 같이, 상기 주 메모리(100) 내에서 상기 호출 함수의 스택 프레임(710)이 할당된 상태에서 상기 피호출 함수에 대한 스택 프레임을 할당해야할 때, 상기 메모리 관리부(200)는 상기 피호출 함수의 스택 프레임을 할당할 공간(720)에 에러 셀이 존재하는지 여부를 확인한다(S620).
확인 결과(또는 판단 결과), 해당 피호출 함수의 스택 프레임을 할당할 공간에 에러 셀이 위치(또는 존재)하지 않는 경우, 상기 메모리 관리부(200)는 상기 호출 함수의 스택 프레임에 대응하는 스택 포인터(또는 상기 호출 함수의 스택 프레임의 마지막 지점에 대응하는 스택 포인터)를 상기 피호출 함수의 스택 프레임으로 할당할 공간에 대응하는 크기만큼 감소시켜, 해당 피호출 함수의 스택 프레임을 할당한다.
즉, 상기 확인된 에러 셀이 있는 영역 중에서 상기 피호출 함수의 스택 프레임을 할당할 공간에 포함된 에러 셀이 존재하지 않는 경우, 상기 메모리 관리부(200)는 상기 호출 함수의 스택 프레임에 대응하는 스택 포인터(또는 상기 호출 함수의 스택 프레임의 마지막 지점에 대응하는 스택 포인터)를 상기 피호출 함수의 스택 프레임으로 할당할 공간에 대응하는 크기만큼 감소시켜, 해당 피호출 함수의 스택 프레임을 할당한다.
일 예로, 상기 도 7에 도시된 상기 피호출 함수의 스택 프레임을 할당할 공간(720)에 에러 셀이 존재하지 않을 때, 도 8에 도시된 바와 같이, 상기 메모리 관리부(200)는 상기 호출 함수의 스택 프레임(810) 이후의 다음 영역에 상기 피호출 함수의 스택 프레임(820)을 할당한다. 이때, 상기 메모리 관리부(200)는 상기 호출 함수의 스택 프레임(810)의 마지막 지점(또는 끝 지점)에 대응하는 스택 포인터(예를 들어 sp)를 상기 피호출 함수의 스택 프레임으로 할당할 공간에 대응하는 크기(예를 들어 a)만큼 감소시켜(예를 들어 sp - a), 해당 피호출 함수의 스택 프레임(820)을 할당하며, 해당 피호출 함수의 스택 프레임(820)의 마지막 지점에 대응하는 스택 포인터(예를 들어 sp - a)를 설정한다(S630).
또한, 확인 결과(또는 판단 결과), 해당 피호출 함수의 스택 프레임을 할당할 공간에 에러 셀이 위치(또는 존재)하는 경우, 상기 메모리 관리부(200)는 상기 피호출 함수의 스택 프레임의 위치를 해당 에러 셀을 포함하는 블록 다음으로 조절하여, 상기 호출 함수의 스택 프레임과 상기 피호출 함수의 스택 프레임 사이에 에러 셀(또는 에러 셀이 포함된 블록)이 위치(또는 존재)하도록 구성한다.
즉, 해당 피호출 함수의 스택 프레임을 할당할 공간에 에러 셀이 위치(또는 존재)하는 경우, 상기 메모리 관리부(200)는 상기 호출 함수의 스택 프레임의 마지막 지점에 대응하는 스택 포인터를 상기 에러 셀이 포함된 블록에 대응하는 크기 및 상기 피호출 함수의 스택 프레임으로 할당할 공간에 대응하는 크기만큼 감소시켜, 해당 피호출 함수의 스택 프레임을 할당한다.
일 예로, 상기 도 7에 도시된 상기 피호출 함수의 스택 프레임을 할당할 공간(720)에 에러 셀이 존재할 때, 도 9에 도시된 바와 같이, 상기 메모리 관리부(200)는 상기 호출 함수의 스택 프레임(910) 이후의 다음의 에러 셀이 포함된 블록(920)을 제외하고, 그 다음 영역에 상기 피호출 함수의 스택 프레임(930)을 할당한다. 이때, 상기 메모리 관리부(200)는 상기 호출 함수의 스택 프레임(910)의 마지막 지점에 대응하는 스택 포인터(예를 들어 sp)를 상기 에러 셀이 포함된 블록에 대응하는 크기(예를 들어 b) 및 상기 피호출 함수의 스택 프레임으로 할당할 공간에 대응하는 크기(예를 들어 a)만큼 감소시켜(예를 들어 sp - a - b), 해당 피호출 함수의 스택 프레임(930)을 할당하며, 해당 피호출 함수의 스택 프레임(930)의 마지막 지점에 대응하는 스택 포인터(예를 들어 sp - a - b)를 설정한다(S640).
이후, 해당 피호출 함수에 할당된 스택 프레임을 해제(free)하는 경우, 상기 메모리 관리부(200)는 현재 상태에서 상기 피호출 함수의 스택 프레임의 마지막 지점에 위치한 스택 포인터를 상기 피호출 함수를 호출한 호출 함수의 스택 프레임 끝 지점으로 이동시킨다.
일 예로, 상기 도 8 및 상기 도 9에서의 상기 피호출 함수의 스택 프레임(820, 930)을 해제할 때, 상기 메모리 관리부(200)는 현재 위치의 스택 포인터(예를 들어 도 8에서의 sp-a, 도 9에서의 sp-a-b)를 상기 피호출 함수를 호출한 호출 함수의 스택 프레임 끝 지점(예를 들어 sp)으로 이동시킨다(S650).
도 10은 본 발명의 제 2 실시예에 따른 주 메모리의 에러 셀 회피를 위한 힙 메모리 관리 방법을 나타낸 흐름도이다.
먼저, 메모리 관리부(200)는 주 메모리(100)에서의 에러 셀에 대한 정보를 확인한다.
일 예로, 상기 메모리 관리부(200)는 주 메모리(100)에서 에러 셀이 있는 영역을 확인한다(S1010).
이후, 상기 메모리 관리부(200)는 빈 청크 목록(free chunk list)에 포함된 복수의(또는 하나 이상의) 청크 중에서 에러 셀이 포함된 청크의 존재 여부를 판단(또는 확인)한다. 여기서, 상기 빈 청크 목록은 힙 메모리 영역에서 동적 메모리 할당에 사용 가능한 메모리 공간에 대한 정보를 포함한다. 또한, 메모리 청크 목록은 힙 메모리 영역에서 동적 메모리 할당에 사용 가능한 메모리 공간과, 프로그램에 할당된 메모리 공간을 포함한다.
즉, 상기 메모리 관리부(200)는 힙 메모리 영역에서 동적 메모리를 할당할 수 있는 사용 가능한 메모리 공간에 대한 정보인 빈 청크 목록에 포함된 복수의 청크 중에서 상기 확인된 에러 셀이 포함된 청크가 존재하는지 여부를 판단한다.
일 예로, 도 11에 도시된 바와 같이, 상기 메모리 관리부(200)는 메모리 청크 목록에 포함된 빈 청크 목록 중에서 에러 셀이 포함된 청크가 존재하는지 여부를 판단한다. 여기서, 청크(또는 블록)의 첫 번째 칸의 숫자는 이전 청크의 사이즈(Byte)를 나타내며, 상기 청크의 두 번째 칸의 숫자는 해당 청크의 사이즈를 나타낸다(S1020).
판단 결과(또는 확인 결과), 상기 빈 청크 목록에 포함된 복수의 청크 중에서 에러 셀이 포함된 청크가 존재하지 않는 경우, 상기 메모리 관리부(200)는 상기 빈 청크 목록을 근거로 프로그램의 임의의 호출 함수(예를 들어 malloc 함수)에 힙 메모리를 할당한다.
일 예로, 상기 메모리 청크 목록에 포함된 빈 청크 목록 중에서 에러 셀이 포함된 청크가 존재하지 않을 때, 도 12에 도시된 바와 같이, 상기 메모리 관리부(200)는 상기 빈 청크 목록을 근거로 malloc 함수에 힙 메모리를 할당(예를 들어 A 블록)한다(S1030).
또한, 판단 결과(또는 확인 결과), 상기 빈 청크 목록에 포함된 복수의 청크 중에서 에러 셀이 포함된 청크가 존재하는 경우, 상기 메모리 관리부(200)는 상기 빈 청크 목록에서 해당 에러 셀이 포함된 블록(또는 청크)을 할당 상태로 설정한다.
또한, 상기 메모리 관리부(200)는 상기 에러 셀이 포함된 블록의 할당 상태 설정에 따라, 상기 빈 청크 목록에서 해당 에러 셀이 포함된 블록(또는 청크)을 삭제(또는 제외)하여 새로운 빈 청크 목록을 생성(또는 빈 청크 목록을 업데이트)한다.
일 예로, 도 13에 도시된 바와 같이, 상기 메모리 청크 목록에 포함된 빈 청크 목록 중에서 에러 셀이 포함된 청크(1310)가 존재할 때, 상기 메모리 관리부(200)는 상기 에러 셀이 포함된 블록(예를 들어 B 블록)을 할당 상태로 설정하며, 상기 빈 청크 목록에서 상기 에러 셀이 포함된 블록을 제외하여 새로운 빈 청크 목록을 생성한다(S1040).
이후, 상기 메모리 관리부(200)는 상기 새로운 빈 청크 목록(또는 에러 셀이 포함된 블록이 삭제된 빈 청크 목록)을 근거로 프로그램의 임의의 호출 함수(예를 들어 malloc 함수)에 힙 메모리를 할당한다.
일 예로, 도 14에 도시된 바와 같이, 상기 메모리 관리부(200)는 상기 새로운 빈 청크 목록을 근거로 malloc 함수에 힙 메모리를 할당(예를 들어 C 블록)한다(S1050).
이후, 상기 호출 함수에 할당된 힙 메모리를 해제하는 경우, 상기 메모리 관리부(200)는 상기 호출 함수에 할당된 힙 메모리에 대응하는 청크를 최신의 빈 청크 목록(또는 상기 새로운 빈 청크 목록)에 등록하여, 상기 호출 함수에 할당된 힙 메모리를 사용 가능한 상태로 전환한다.
일 예로, 상기 malloc 함수에 할당된 힙 메모리를 해제할 때, 상기 메모리 관리부(200)는 상기 malloc 함수에 할당된 힙 메모리에 대응하는 청크(예를 들어 도 12에서의 A 블록, 도 14에서의 C 블록)를 상기 새로운 빈 청크 목록에 등록한다(S1060).
본 발명의 실시예는 앞서 설명된 바와 같이, 소프트웨어가 에러가 발생한 메모리 영역에 접근하지 않도록 방지하여, 프로세서가 주 메모리의 에러 셀을 사용함으로써 발생할 수 있는 데이터 손실 또는 오동작을 방지할 수 있다.
또한, 본 발명의 실시예는 앞서 설명된 바와 같이, 스택 영역의 경우 에러 셀을 포함하는 블록이 스택 프레임 사이에 위치하도록 스택 프레임을 할당하고 해제하며, 힙 영역의 경우 에러 셀을 포함하는 블록을 힙 영역 메모리 관리 데이터 구조에 할당 상태로 처리하여, 기존의 소프트웨어적 해결 방법에 비해 프로그램에 할당 가능한 메모리를 최대화할 수 있으며, 추가적인 메모리를 사용하지 않음에 따른 비용을 절감할 수 있다.
전술된 내용은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자라면 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 수정 및 변형이 가능할 것이다. 따라서, 본 발명에 개시된 실시예들은 본 발명의 기술 사상을 한정하기 위한 것이 아니라 설명하기 위한 것이고, 이러한 실시예에 의하여 본 발명의 기술 사상의 범위가 한정되는 것은 아니다. 본 발명의 보호 범위는 아래의 청구범위에 의하여 해석되어야 하며, 그와 동등한 범위 내에 있는 모든 기술 사상은 본 발명의 권리범위에 포함되는 것으로 해석되어야 할 것이다.
본 발명은 스택 영역의 경우 에러 셀을 포함하는 블록이 스택 프레임 사이에 위치하도록 스택 프레임을 할당하고 해제하며, 힙 영역의 경우 에러 셀을 포함하는 블록을 힙 영역 메모리 관리 데이터 구조에 할당 상태로 처리함으로써 프로세서가 주 메모리의 에러 셀을 사용함으로써 발생할 수 있는 데이터 손실 또는 오동작을 방지할 수 있는 것으로, 동적 메모리 장치 분야, 메모리 분야 등에서 광범위하게 이용될 수 있다.
10: 스택 및 힙 메모리 관리 장치 100: 주 메모리
200: 메모리 관리부

Claims (11)

  1. 주 메모리의 에러 셀 회피를 위한 스택 메모리 관리 방법에 있어서,
    메모리 관리부를 통해, 상기 주 메모리의 에러 셀에 대한 정보를 확인하는 단계;
    상기 메모리 관리부를 통해, 스택 프레임 할당 시, 피호출 함수의 스택 프레임을 할당할 공간에 에러 셀이 위치하는지 여부를 확인하는 단계; 및
    상기 확인 결과, 상기 피호출 함수의 스택 프레임을 할당할 공간에 에러 셀이 위치할 때, 상기 메모리 관리부를 통해, 상기 피호출 함수의 스택 프레임의 위치를 상기 에러 셀을 포함하는 블록 다음으로 조절하여 호출 함수의 스택 프레임과 상기 피호출 함수의 스택 프레임 사이에 에러 셀이 위치하도록 구성하는 단계를 포함하는 주 메모리의 에러 셀 회피를 위한 스택 메모리 관리 방법.
  2. 제 1 항에 있어서,
    상기 호출 함수의 스택 프레임과 상기 피호출 함수의 스택 프레임 사이에 에러 셀이 위치하도록 구성하는 단계는,
    상기 메모리 관리부를 통해, 상기 호출 함수의 스택 프레임의 마지막 지점에 대응하는 스택 포인터를 상기 에러 셀에 대응하는 크기 및 상기 피호출 함수의 스택 프레임으로 할당할 공간에 대응하는 크기만큼 감소시켜, 상기 피호출 함수의 스택 프레임을 할당하는 것을 특징으로 하는 주 메모리의 에러 셀 회피를 위한 스택 메모리 관리 방법.
  3. 제 1 항에 있어서,
    상기 확인 결과, 상기 피호출 함수의 스택 프레임을 할당할 공간에 에러 셀이 위치하지 않을 때, 상기 메모리 관리부를 통해, 상기 호출 함수의 스택 프레임의 마지막 지점에 대응하는 스택 포인터를 상기 피호출 함수의 스택 프레임으로 할당할 공간에 대응하는 크기만큼 감소시켜 상기 피호출 함수의 스택 프레임을 할당하는 단계를 더 포함하는 것을 특징으로 하는 주 메모리의 에러 셀 회피를 위한 스택 메모리 관리 방법.
  4. 제 1 항에 있어서,
    상기 피호출 함수에 할당된 스택 프레임을 해제할 때, 상기 메모리 관리부를 통해, 상기 피호출 함수의 스택 프레임의 마지막 지점에 위치한 스택 포인터를 상기 피호출 함수를 호출한 호출 함수의 스택 프레임 끝 지점으로 이동시키는 단계를 더 포함하는 것을 특징으로 하는 주 메모리의 에러 셀 회피를 위한 스택 메모리 관리 방법.
  5. 주 메모리의 에러 셀 회피를 위한 힙 메모리 관리 방법에 있어서,
    메모리 관리부를 통해, 상기 주 메모리의 에러 셀에 대한 정보를 확인하는 단계;
    상기 메모리 관리부를 통해, 빈 청크 목록(free chunk list)에 포함된 복수의 청크 중에서 에러 셀이 포함된 청크의 존재 여부를 판단하는 단계;
    상기 판단 결과, 상기 빈 청크 목록에 포함된 복수의 청크 중에서 에러 셀이 포함된 청크가 존재할 때, 상기 메모리 관리부를 통해, 상기 빈 청크 목록에서 상기 에러 셀이 포함된 블록을 할당 상태로 설정하는 단계;
    상기 메모리 관리부를 통해, 상기 에러 셀이 포함된 블록의 할당 상태 설정에 따라, 상기 빈 청크 목록에서 상기 에러 셀이 포함된 블록을 삭제하여 새로운 빈 청크 목록을 생성하는 단계; 및
    상기 메모리 관리부를 통해, 상기 새로운 빈 청크 목록을 근거로 프로그램의 호출 함수에 힙 메모리를 할당하는 단계를 포함하는 주 메모리의 에러 셀 회피를 위한 힙 메모리 관리 방법.
  6. 제 5 항에 있어서,
    상기 빈 청크 목록은,
    힙 메모리 영역에서 동적 메모리 할당에 사용 가능한 메모리 공간에 대한 정보를 포함하는 것을 특징으로 하는 주 메모리의 에러 셀 회피를 위한 힙 메모리 관리 방법.
  7. 제 5 항에 있어서,
    상기 호출 함수에 할당된 힙 메모리를 해제할 때, 상기 메모리 관리부를 통해, 상기 호출 함수에 할당된 힙 메모리에 대응하는 청크를 상기 새로운 빈 청크 목록에 등록하여 상기 호출 함수에 할당된 힙 메모리를 사용 가능한 상태로 전환하는 단계를 더 포함하는 것을 특징으로 하는 주 메모리의 에러 셀 회피를 위한 힙 메모리 관리 방법.
  8. 주 메모리의 에러 셀 회피를 위한 스택 메모리 관리 장치에 있어서,
    주 메모리; 및
    상기 주 메모리의 에러 셀에 대한 정보를 확인하고, 스택 프레임 할당 시, 피호출 함수의 스택 프레임을 할당할 공간에 에러 셀이 위치할 때, 상기 피호출 함수의 스택 프레임의 위치를 상기 에러 셀을 포함하는 블록 다음으로 조절하여 호출 함수의 스택 프레임과 상기 피호출 함수의 스택 프레임 사이에 에러 셀이 위치하도록 구성하는 메모리 관리부를 포함하는 주 메모리의 에러 셀 회피를 위한 스택 메모리 관리 장치.
  9. 제 8 항에 있어서,
    상기 메모리 관리부는,
    상기 피호출 함수에 할당된 스택 프레임을 해제할 때, 상기 피호출 함수의 스택 프레임의 마지막 지점에 위치한 스택 포인터를 상기 피호출 함수를 호출한 호출 함수의 스택 프레임 끝 지점으로 이동시키는 것을 특징으로 하는 주 메모리의 에러 셀 회피를 위한 스택 메모리 관리 장치.
  10. 주 메모리의 에러 셀 회피를 위한 힙 메모리 관리 장치에 있어서,
    주 메모리; 및
    상기 주 메모리의 에러 셀에 대한 정보를 확인하고, 빈 청크 목록에 포함된 복수의 청크 중에서 에러 셀이 포함된 청크가 존재할 때, 상기 빈 청크 목록에서 상기 에러 셀이 포함된 블록을 할당 상태로 설정하고, 상기 에러 셀이 포함된 블록의 할당 상태 설정에 따라, 상기 빈 청크 목록에서 상기 에러 셀이 포함된 블록을 삭제하여 새로운 빈 청크 목록을 생성하고, 상기 새로운 빈 청크 목록을 근거로 프로그램의 호출 함수에 힙 메모리를 할당하는 메모리 관리부를 포함하는 주 메모리의 에러 셀 회피를 위한 힙 메모리 관리 장치.
  11. 제 10 항에 있어서,
    상기 메모리 관리부는,
    상기 호출 함수에 할당된 힙 메모리를 해제할 때, 상기 호출 함수에 할당된 힙 메모리에 대응하는 청크를 상기 새로운 빈 청크 목록에 등록하여 상기 호출 함수에 할당된 힙 메모리를 사용 가능한 상태로 전환하는 것을 특징으로 하는 주 메모리의 에러 셀 회피를 위한 힙 메모리 관리 장치.
KR1020160053383A 2016-04-29 2016-04-29 주 메모리의 에러 셀 회피를 위한 스택 및 힙 메모리 관리 장치 및 그 방법 KR101716865B1 (ko)

Priority Applications (4)

Application Number Priority Date Filing Date Title
KR1020160053383A KR101716865B1 (ko) 2016-04-29 2016-04-29 주 메모리의 에러 셀 회피를 위한 스택 및 힙 메모리 관리 장치 및 그 방법
US15/748,003 US20180217774A1 (en) 2016-04-29 2017-04-07 Virtual memory management apparatus for avoiding error cell in main memory and method therefor
CN201780002586.7A CN107851051A (zh) 2016-04-29 2017-04-07 避免主存储器中的错误单元的虚拟存储器管理装置及其方法
PCT/KR2017/003813 WO2017188620A1 (ko) 2016-04-29 2017-04-07 주 메모리의 에러 셀 회피를 위한 가상 메모리 관리 장치 및 그 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020160053383A KR101716865B1 (ko) 2016-04-29 2016-04-29 주 메모리의 에러 셀 회피를 위한 스택 및 힙 메모리 관리 장치 및 그 방법

Publications (1)

Publication Number Publication Date
KR101716865B1 true KR101716865B1 (ko) 2017-03-15

Family

ID=58403070

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020160053383A KR101716865B1 (ko) 2016-04-29 2016-04-29 주 메모리의 에러 셀 회피를 위한 스택 및 힙 메모리 관리 장치 및 그 방법

Country Status (4)

Country Link
US (1) US20180217774A1 (ko)
KR (1) KR101716865B1 (ko)
CN (1) CN107851051A (ko)
WO (1) WO2017188620A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108733312A (zh) * 2017-04-17 2018-11-02 伊姆西Ip控股有限责任公司 存储管理方法和设备

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117435440B (zh) * 2023-12-20 2024-04-05 麒麟软件有限公司 一种程序堆空间的动态分析方法及系统

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09106347A (ja) * 1995-10-12 1997-04-22 Fujitsu Ltd 情報処理装置及び情報処理装置のスタック記憶方法
KR20070098133A (ko) 2006-03-31 2007-10-05 모딘코리아 유한회사 차량의 전기히터
KR20080076918A (ko) * 2005-11-08 2008-08-20 쌘디스크 코포레이션 타겟 재지정 메모리 셀 중복성을 갖는 메모리
KR20110057646A (ko) * 2009-11-24 2011-06-01 삼성전자주식회사 메모리 장치, 이를 포함하는 메모리 시스템 및 메모리 장치의 제어 방법
KR20150068679A (ko) * 2013-12-12 2015-06-22 삼성전자주식회사 메모리 시스템 및 이를 포함하는 컴퓨팅 시스템

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2002023345A1 (en) * 2000-09-13 2002-03-21 Geodesic Systems, Incorporated Conservative garbage collectors that can be used with general memory allocators
US7434105B1 (en) * 2005-11-07 2008-10-07 Symantec Operating Corporation Selective self-healing of memory errors using allocation location information
US20070204142A1 (en) * 2006-02-27 2007-08-30 Dieffenderfer James N Method and apparatus for repairing a link stack
US7444566B2 (en) * 2006-03-06 2008-10-28 Verigy (Singapore) Pte. Ltd. Memory device fail summary data reduction for improved redundancy analysis
US8954816B2 (en) * 2011-11-28 2015-02-10 Sandisk Technologies Inc. Error correction coding (ECC) decode operation scheduling
DE102013202961A1 (de) * 2013-02-22 2014-08-28 Robert Bosch Gmbh Verfahren zum Überwachen eines Stackspeichers in einem Betriebssystem eines Steuergeräts eines Kraftfahrzeuges
US9189214B2 (en) * 2013-10-30 2015-11-17 International Business Machines Corporation Code stack management
US9990249B2 (en) * 2015-12-24 2018-06-05 Intel Corporation Memory integrity with error detection and correction
US9606855B1 (en) * 2016-01-06 2017-03-28 International Business Machines Corporation Caller protected stack return address in a hardware managed stack architecture
US10241856B2 (en) * 2016-09-09 2019-03-26 Oracle International Corporation Memory quarantine

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09106347A (ja) * 1995-10-12 1997-04-22 Fujitsu Ltd 情報処理装置及び情報処理装置のスタック記憶方法
KR20080076918A (ko) * 2005-11-08 2008-08-20 쌘디스크 코포레이션 타겟 재지정 메모리 셀 중복성을 갖는 메모리
KR20070098133A (ko) 2006-03-31 2007-10-05 모딘코리아 유한회사 차량의 전기히터
KR20110057646A (ko) * 2009-11-24 2011-06-01 삼성전자주식회사 메모리 장치, 이를 포함하는 메모리 시스템 및 메모리 장치의 제어 방법
KR20150068679A (ko) * 2013-12-12 2015-06-22 삼성전자주식회사 메모리 시스템 및 이를 포함하는 컴퓨팅 시스템

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108733312A (zh) * 2017-04-17 2018-11-02 伊姆西Ip控股有限责任公司 存储管理方法和设备
CN108733312B (zh) * 2017-04-17 2021-05-28 伊姆西Ip控股有限责任公司 存储管理方法和设备
US11093406B2 (en) 2017-04-17 2021-08-17 EMC IP Holding Company LLC Method and device for storage management

Also Published As

Publication number Publication date
CN107851051A (zh) 2018-03-27
US20180217774A1 (en) 2018-08-02
WO2017188620A1 (ko) 2017-11-02

Similar Documents

Publication Publication Date Title
EP2557498B1 (en) Updating method and computer system for hypervisor components
EP2798491B1 (en) Method and device for managing hardware errors in a multi-core environment
US9430236B2 (en) Code stack management
US8627140B2 (en) Failure management method and computer
US7451387B2 (en) Autonomous method and apparatus for mitigating soft-errors in integrated circuit memory storage devices at run-time
US9146682B2 (en) Method and apparatus for storing data
US20150026508A1 (en) Moving objects in a primary computer based on memory errors in a secondary computer
JP2014522052A (ja) ハードウェア故障の軽減
US20120198431A1 (en) Method for upgrading hypervisor component and computer system
WO2012134641A2 (en) Techniques and mechanisms for live migration of pages pinned for dma
KR101716865B1 (ko) 주 메모리의 에러 셀 회피를 위한 스택 및 힙 메모리 관리 장치 및 그 방법
KR20180081575A (ko) 가상 컴퓨터의 성능을 향상시키는 방법, 단말기, 기기 및 컴퓨터 판독 가능 저장 매체
CN112667422A (zh) 内存故障处理方法及装置、计算设备、存储介质
WO2022193768A1 (zh) 内存读写指令的执行方法及计算设备
US8725974B2 (en) Page-protection based memory access barrier traps
CN116126581B (zh) 内存故障处理方法、装置、系统、设备及存储介质
CN106354560B (zh) 一种系统的维护进程运行方法及装置
US11334444B2 (en) Method, device and computer program product for managing a storage system
CN111949384B (zh) 任务调度方法、装置、设备及计算机可读存储介质
CN105100901A (zh) 一种虚拟存储卡配置方法及系统
CN115658368B (zh) 一种故障处理方法、装置、存储介质及电子设备
CN111159786B (zh) 一种元数据保护方法、装置及电子设备和存储介质
WO2023157128A1 (ja) リソース計画装置、リソース計画方法、及び、リソース計画プログラム
JP7131324B2 (ja) ストレージアクセス制御装置、ストレージアクセス制御方法、及び、ストレージアクセス制御プログラム
JP2009294758A (ja) 仮想計算機システム及びホストバスアダプタ用ドライバプログラム

Legal Events

Date Code Title Description
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: 20200128

Year of fee payment: 4