KR101334172B1 - 임베디드 시스템의 스택 오버플로우 방지 방법 및 장치 - Google Patents

임베디드 시스템의 스택 오버플로우 방지 방법 및 장치 Download PDF

Info

Publication number
KR101334172B1
KR101334172B1 KR1020070001643A KR20070001643A KR101334172B1 KR 101334172 B1 KR101334172 B1 KR 101334172B1 KR 1020070001643 A KR1020070001643 A KR 1020070001643A KR 20070001643 A KR20070001643 A KR 20070001643A KR 101334172 B1 KR101334172 B1 KR 101334172B1
Authority
KR
South Korea
Prior art keywords
stack
thread
usage
maximum
stack usage
Prior art date
Application number
KR1020070001643A
Other languages
English (en)
Other versions
KR20080064577A (ko
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 KR1020070001643A priority Critical patent/KR101334172B1/ko
Priority to US12/003,947 priority patent/US9280500B2/en
Publication of KR20080064577A publication Critical patent/KR20080064577A/ko
Application granted granted Critical
Publication of KR101334172B1 publication Critical patent/KR101334172B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/24Handling requests for interconnection or transfer for access to input/output bus using interrupt
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/504Resource capping
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Debugging And Monitoring (AREA)

Abstract

본 발명은 임베디드 시스템의 스택 오버플로우 방지 방법 및 장치에 관한 것으로서, 본 발명에 따른 스택 오버플로우 방지 방법은 커널이 제공하는 함수들 각각의 기 저장된 최대 스택 사용량 중 요청된 작업의 실행을 위한 적어도 하나의 함수의 최대 스택 사용량을 독출하는 단계; 및 독출된 최대 스택 사용량 및 요청된 작업을 위한 스택 중 사용 가능한 영역의 크기를 기초로 요청된 작업을 선택적으로 처리하는 단계를 포함하는 것을 특징으로 한다. 이와 같은 본 발명에 따르면, 런타임 오버헤드를 발생시키지 않고 스택 오버플로우를 방지할 수 있다.

Description

임베디드 시스템의 스택 오버플로우 방지 방법 및 장치{Method and appratus for preventing stack overflow in embedded system}
도 1은 본 발명의 일 실시예에 따른 임베디드 시스템의 스택 오버플로우 방지 장치의 블록도이다.
도 2는 스택 사용량 저장부에 데이터가 저장되는 형태의 일 예이다.
도 3은 본 발명의 일 실시예에 따른 인터럽트 처리시의 스택 오버플로우 방지 방법의 흐름도이다.
도 4는 본 발명의 일 실시예에 따른 드라이버의 사용 요청 처리시의 스택 오버플로우 방지 방법의 흐름도이다.
도 5는 본 발명의 일 실시예에 따른 스레드 생성시의 스택 오버플로우 방지 방법의 흐름도이다.
도 6은 본 발명의 일 실시예에 따라 스레드 이미지의 로딩 요청을 처리하는 방법을 나타낸 흐름도이다.
도 7은 본 발명의 일 실시예에 따라 디바이스 드라이버의 로딩 요청을 처리하는 방법을 나타낸 흐름도이다.
본 발명은 임베디드 시스템에 관한 것으로서, 특히 임베디드 시스템의 스택 오버플로우 방지 방법 및 장치에 관한 것이다.
임베디드 시스템은 마이크로 프로세서 혹은 마이크로 컨트롤러를 내장(embedded)하여 원래 제작자가 지정한 기능만을 수행하는 장치를 의미하여, 일반적으로 보다 큰 시스템의 일부로서 특별한 업무를 수행하기 위한 하드웨어와 소프트웨어를 포함하고 있는 특정한 응용시스템을 말한다. 임베디드 시스템은 다양한 응용분야, 예를 들면 공장자동화, 가정자동화, 로봇제어, 공정제어를 포함하는 제어분야, 핸드폰, PDA, 스마트폰, LBS 등을 포함하는 단말기기 분야, 프린터, 인터넷 냉장고, 게임기, HDTV 등을 포함하는 정보가전기기 분야, 교환기, 라우터, 홈서버, 홈 게이트웨이 등을 포함하는 네트워크 기기 분야 등 다양하게 적용되고 있다.
임베디드 시스템은 비용, 크기, 전력 소모 등에서 엄격한 제한들을 가지고 있기 때문에 예측되지 않은 미래의 요청에 대비해서 자원들을 할당하는 것은 바람직하지 않다. 따라서 최악 상황(worst-case)에서의 자원 요구는 미리 정확하게 분석되어져야 한다. 이러한 분석은 메모리와 같이 동적으로 할당되고 반환하는 것이 편리한 자원에 대해서도 마찬가지다.
이러한 임베디드 시스템의 자원들 중에서 스택은 가장 빈번하게 사용되는 자원들 중의 하나이다. 여기서 전체 시스템의 메모리 자원이 한정적이므로 스택 영역 역시 제한적일 수 밖에 없다. 따라서 특정 태스크가 자신에게 주어진 스택을 모두 사용하고 자신에게 주어지지 않은 메모리 영역을 침범하여 자신의 정보를 저장하게 되는 문제점이 발생하는데 이를 스택 오버플로우라고 한다.
스택 오버플로우를 방지하는 기법은 크게 정적 분석(static analysis) 방식과 런타임 체크(runtime check) 방식으로 나눌 수 있다. 정적 분석 방식은 어떤 프로그램을 분석할 때 그 프로그램을 실행시키지 않고 그 자체를 분석하는 방식으로서, 분석의 대상이 되는 시스템의 형태에 따라 바이너리 이미지(binary image)를 분석하는 방식과 소스 코드(source code)를 분석하는 방식으로 분류된다. 이러한 정적 분석 방식에는 CFG(Control Flow Graph)를 이용한 Stack Depth Analysis 기법과 Abstract Interpretation을 이용한 기법 등이 있다. 정적 분석 방식에 의하면 오프라인에서 스택의 사용량을 예측하기 때문에 런타임 오버헤드는 발생하지 않지만 동적으로 시스템의 구성 요소가 변경되는 시스템에는 이 방식을 적용할 수가 없다. 따라서 정적 분석 방식은 주로 시스템의 구성 요소가 변경되지 않는 Closed System에 주로 적용된다.
런타임 체크 방식은 스택 사용량을 예측하는 것이 아니라 미리 정해진 스택을 할당하고 스택 오버플로우가 발생하는지 여부를 런타임 중에 체크하는 방식이다. 런타임 체크 방식에는 Compiler-Generated Runtime Check 기법, Non-Executable Stack 기법 등이 있으며, 동적으로 시스템의 구성 요소가 변경되는 시스템에서 적용 가능하다. 그러나 이러한 런타임 체크 방식은 컴파일러나 하드웨어의 지원이 필요하며, 특히 런타임 중에 계속해서 스택 오버플로우가 발생하는지 여부를 체크하기 때문에 런타임 오버헤드가 많이 발생하게 된다.
본 발명이 이루고자 하는 기술적 과제는 임베디드 시스템에서 런타임 오버헤드를 발생시키지 않고 스택 오버플로우를 방지할 수 있는 스택 오버플로우 방지 방법 및 장치를 제공하는 데 있다. 또한, 상기된 방법을 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체를 제공하는 데 있다.
상기와 같은 기술적 과제를 해결하기 위한 본 발명의 하나의 특징은, 스택 오버플로우 방지 방법에 있어서 (a) 커널이 제공하는 함수들 각각의 기 저장된 최대 스택 사용량 중 요청된 작업의 실행을 위한 적어도 하나의 함수의 최대 스택 사용량을 독출하는 단계; 및 (b) 상기 독출된 최대 스택 사용량 및 상기 요청된 작업을 위한 스택 중 사용 가능한 영역의 크기를 기초로 상기 요청된 작업을 선택적으로 처리하는 단계를 포함하는 것이다.
또한, 상기 요청된 작업은 인터럽트의 처리이고, 상기 적어도 하나의 함수는 상기 인터럽트에 해당하는 인터럽트 핸들러 함수이며, 상기 요청된 작업을 위한 스택은 인터럽트 스택일 수 있다. 이 경우 상기 (b) 단계는 인터럽트 핸들러 함수들 각각의 스택 사용량 중 가장 큰 값이, 상기 인터럽트 스택 중 사용 가능한 영역의 크기에서 상기 인터럽트에 해당하는 인터럽트 핸들러 함수의 최대 스택 사용량이 차감된 값을 초과하는지 판단하는 단계; 및 상기 판단 결과, 상기 가장 큰 값이 상기 차감된 값을 초과하는 것으로 판단되면 추가적인 인터럽트의 발생을 금지하고 상기 인터럽트 핸들러 함수를 호출하는 단계를 포함하는 것이 바람직하다.
또한, 상기 요청된 작업은 디바이스 드라이버의 사용이고, 상기 적어도 하나 의 함수는 상기 디바이스 드라이버를 구성하는 함수들이고, 상기 요청된 작업을 위한 스택은 상기 디바이스 드라이버의 사용을 요청한 스레드에 할당된 스택일 수 있다. 이 경우 상기 (b) 단계는, 상기 디바이스 드라이버를 구성하는 함수들 각각의 최대 스택 사용량 중 가장 큰 값이 상기 디바이스 드라이버의 사용을 요청한 스레드에 할당된 스택 중 사용 가능한 영역의 크기를 초과하는지 판단하는 단계; 및 상기 판단 결과에 따라 상기 디바이스 드라이버를 선택적으로 호출하는 단계를 포함하는 것이 바람직하다.
상기와 같은 기술적 과제를 해결하기 위한 본 발명의 다른 특징은, 스택 오버플로우 방지 방법에 있어서 (a) 소정 스레드들 각각의 메인 함수의 기 저장된 최대 스택 사용량 중 생성이 요청된 스레드의 메인 함수의 최대 스택 사용량을 독출하는 단계; (b) 상기 스레드에 할당된 스택이 이미 존재하는 경우, 상기 독출된 최대 스택 사용량 및 상기 할당된 스택의 크기를 기초로 상기 스레드를 선택적으로 생성하는 단계; 및 (c) 상기 스레드에 할당된 스택이 존재하지 않는 경우, 상기 독출된 최대 스택 사용량 및 현재 사용 가능한 메모리의 용량을 기초로 선택적으로 상기 스레드에 스택을 할당하고 상기 스레드를 생성하는 단계를 포함하는 것이다.
상기와 같은 기술적 과제를 해결하기 위한 본 발명의 또 다른 특징은, 스택 오버플로우 방지 방법에 있어서 (a) 스레드 이미지의 로딩이 요청되면 상기 스레드 이미지의 메인 함수의 최대 스택 사용량이 현재 사용 가능한 메모리의 용량을 초과하는지 판단하는 단계; 및 (b) 상기 판단 결과 상기 최대 스택 사용량이 상기 현재 사용 가능한 메모리의 용량을 초과하지 않는 것으로 판단되면 상기 메인 함수의 최 대 스택 사용량을 저장하고 상기 스레드 이미지를 로딩하는 단계를 포함하는 것이다.
상기와 같은 기술적 과제를 해결하기 위하여 본 발명은 상기된 스택 오버플로우 방지 방법을 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록 매체를 제공한다.
상기와 같은 기술적 과제를 해결하기 위한 본 발명의 또 다른 특징은, 스택 오버플로우 방지 장치에 있어서, 커널이 제공하는 함수들 각각의 최대 스택 사용량을 저장하는 스택 사용량 저장부; 및 상기 함수들 각각의 최대 스택 사용량 중 요청된 작업의 실행을 위한 적어도 하나의 함수의 최대 스택 사용량 및 상기 요청된 작업을 위한 스택 중 사용 가능한 영역의 크기를 기초로 상기 요청된 작업을 선택적으로 처리하는 처리 모듈을 포함하는 것이다.
상기와 같은 기술적 과제를 해결하기 위한 본 발명의 또 다른 특징은, 스택 오버플로우 방지 장치에 있어서, 소정 스레드들 각각의 메인 함수의 최대 스택 사용량을 저장하는 스택 사용량 저장부; 및 생성이 요청된 스레드에 할당된 스택이 이미 존재하는 경우 상기 저장된 최대 스택 사용량 중 상기 스레드의 메인 함수의 최대 스택 사용량 및 상기 할당된 스택의 크기를 기초로 선택적으로 상기 스레드를 생성하고, 상기 스레드에 할당된 스택이 존재하지 않는 경우 상기 저장된 최대 스택 사용량 중 상기 스레드의 메인 함수의 최대 스택 사용량 및 현재 사용 가능한 메모리의 용량을 기초로 선택적으로 상기 스레드에 스택을 할당하고 상기 스레드를 생성하는 태스크 모듈을 포함하는 것이다.
상기와 같은 기술적 과제를 해결하기 위한 본 발명의 또 다른 특징은, 스택 오버플로우 방지 장치에 있어서, 로딩이 요청된 스레드 이미지의 메인 함수의 최대 스택 사용량을 산출하는 스택 사용량 산출부; 상기 산출된 최대 스택 사용량을 저장하는 스택 사용량 저장부; 및 상기 산출된 최대 스택 사용량 및 현재 사용 가능한 메모리의 용량을 기초로 상기 스레드 이미지를 선택적으로 로딩하는 동적 로딩 모듈을 포함하는 것이다.
이하, 첨부된 도면들을 참조하여 본 발명의 바람직한 실시예들을 상세히 설명한다.
도 1은 본 발명의 일 실시예에 따른 임베디드 시스템의 스택 오버플로우 방지 장치(100)의 블록도이다. 도 1을 참조하면 스택 오버플로우 방지 장치(100)은 스택 사용량 저장부(110), 스택 사용량 산출부(120), 판단부(130), 처리 모듈(140), 인터럽트 벡터 테이블(160), 및 커널 서비스 벡터 테이블(160)을 포함하여 이루어진다. 스택 사용량 저장부(110), 스택 사용량 산출부(120), 판단부(130) 및 처리 모듈(140)은 임베디드 시스템의 커널 내에 구비될 수 있다.
스택 사용량 저장부(110)는 커널이 제공하는 함수들의 주소와 상기 함수들 각각이 사용하는 스택의 최대 사용량 및 커널에 로드되어 있는 스레드들 각각의 메인 함수의 주소와 각 메인 함수의 최대 스택 사용량을 저장하고 있다. 스택 사용량 저장부(110)는 상기 함수들의 주소와 최대 스택 사용량을 테이블 형태로 저장할 수 있다. 커널이 제공하는 함수들에는 인터럽트 핸들러 함수와 디바이스 드라이버를 구성하는 함수들이 포함된다.
도 2는 스택 사용량 저장부(110)에 데이터가 저장되는 형태의 일 예를 나타낸다. 도 2에 도시된 바에 따르면, 스택 사용량 저장부(110)에는 커널이 제공하는 함수들(210)의 주소와 스택 사용량, 커널에 로드되어 있는 스레드들 각각의 메인 함수(220)의 주소와 스택 사용량이 테이블 형태로 저장되어 있다.
스택 사용량 산출부(120)는 새로운 스레드 이미지(190) 또는 디바이스 드라이버의 로딩이 요청되면 로드될 스레드 이미지(190)의 메인 함수의 최대 스택 사용량 또는 로드될 디바이스 드라이버를 구성하는 함수들의 최대 스택 사용량을 산출한다. 스택 사용량 산출부(120)는 스택 사용량 저장부(110)에 저장된 함수들의 최대 스택 사용량 중에서, 로드될 스레드 이미지(190)의 메인 함수를 구성하는 함수들의 최대 스택 사용량을 이용하여 정적 분석(static analysis) 기법으로, 로드될 스레드 이미지(190)의 메인 함수의 최대 스택 사용량을 산출할 수 있다. 또한 디바이스 드라이버를 구성하는 함수들의 최대 스택 사용량 역시 정적 분석 기법으로 산출할 수 있다.
한편, 스레드 이미지(190)의 최대 스택 사용량은 사전에 시뮬레이션을 이용하여 결정될 수도 있는데, 이 경우 결정된 최대 스택 사용량을 스택 사용량 산출부(120)가 미리 저장하고 있다가 해당되는 스레드 이미지(190)가 로드될 경우에 스택 사용량 저장부(110)에 저장할 수도 있다. 또한, 사전에 시뮬레이션을 이용하여 결정된 최대 스택 사용량을 스레드 이미지(190)에 저장하고, 동적 로딩 모듈(146)이 로드될 스레드 이미지(190)에 저장된 최대 스택 사용량을 읽어와서 스택 사용량 저장부(110)에 저장할 수도 있다.
처리 모듈(140)은 요청된 작업을 처리하며, 인터럽트 처리를 담당하는 인터럽트 모듈(142), 스레드의 생성을 담당하는 태스크 모듈(144), 새로운 스레드 또는 디바이스 드라이버의 로딩을 담당하는 동적 로딩 모듈(146), 디바이스 드라이버 사용 요청을 처리하는 입출력 모듈(148)을 포함하여 이루어진다. 처리 모듈(140)은 스택 사용량 저장부(110)에 저장된 각종 함수들의 최대 스택 사용량 중 요청된 작업의 실행을 위한 함수들의 최대 스택 사용량, 요청된 작업을 위한 스택 중 사용 가능한 영역의 크기, 또는 현재 사용 가능한 메모리의 용량 등을 기초로 요청된 작업을 선택적으로 처리한다.
인터럽트 모듈(142)은 인터럽트 발생시에, 인터럽트 핸들러 함수들의 목록이 저장되어 있는 인터럽트 벡터 테이블(150)을 참조하여, 발생한 인터럽트에 해당하는 인터럽트 핸들러 함수를 검색한다. 판단부(130)는 스택 사용량 저장부(110)에 저장된 인터럽트 핸들러 함수들 각각의 최대 스택 사용량 중 가장 큰 값이 인터럽트 스택(170) 중 사용 가능한 영역의 크기에서 검색된 인터럽트 핸들러 함수의 최대 스택 사용량이 차감된 값을 초과하는지 판단한다.
판단부(130)의 판단 결과, 상기 저장된 인터럽트 핸들러 함수들 각각의 최대 스택 사용량 중 가장 큰 값이 인터럽트 스택(170) 중 사용 가능한 영역의 크기에서 상기 검색된 인터럽트 핸들러 함수의 최대 스택 사용량이 차감된 값을 초과하지 않는 경우에 인터럽트 모듈(142)은 상기 검색된 인터럽트 핸들러 함수를 호출한다. 그러나 판단부(130)의 판단 결과, 상기 저장된 인터럽트 핸들러 함수들 각각의 최대 스택 사용량 중 가장 큰 값이 인터럽트 스택(170) 중 사용 가능한 영역의 크기 에서 상기 검색된 인터럽트 핸들러 함수의 최대 스택 사용량이 차감된 값을 초과하는 경우, 인터럽트 모듈(142)은 추가적인 인터럽트의 발생을 금지하고 상기 검색된 인터럽트 핸들러 함수를 호출한 후, 인터럽트 처리가 완료되면 금지된 인터럽트의 발생을 해제한다.
인터럽트 핸들러 함수들 각각의 최대 스택 사용량 중 가장 큰 값이 인터럽트 스택(170) 중 사용 가능한 영역의 크기에서 현재 발생한 인터럽트에 해당하는 인터럽트 핸들러 함수의 최대 스택 사용량이 차감된 값, 즉 추가적으로 발생할 수 있는 인터럽트의 처리를 위한 스택의 크기를 초과한다면, 현재 발생한 인터럽트의 처리 중에 추가적인 인터럽트가 발생할 경우에 인터럽트 스택의 스택 오버플로우가 발생할 수 있다. 따라서 이 경우 추가적인 인터럽트의 발생을 금지함으로써 스택 오버플로우를 방지할 수 있다.
입출력 모듈(148)은 현재 실행 중인 스레드가 디바이스 드라이버의 사용을 요청하면 판단부(130)의 판단 결과에 따라 해당하는 디바이스 드라이버를 선택적으로 호출한다. 스레드가 디바이스 드라이버의 사용을 요청하면 판단부(130)는 스택 사용량 저장부(110)에 저장된, 상기 디바이스 드라이버를 구성하는 함수들 각각의 최대 스택 사용량 중 가장 큰 값이 상기 스레드에 할당된 스택 중 사용 가능한 영역의 크기를 초과하는지 판단한다. 판단부(130)의 판단 결과, 상기 디바이스 드라이버를 구성하는 함수들 각각의 최대 스택 사용량 중 가장 큰 값이 상기 스레드에 할당된 스택 중 사용 가능한 영역의 크기를 초과하는 경우에는 해당하는 디바이스 드라이버를 호출하지 않고, 초과하지 않는 경우에만 해당하는 디바이스 드라이버를 호출한다.
사용이 요청된 디바이스 드라이버를 구성하는 함수들의 최대 스택 사용량 중 가장 큰 값이 스레드에 할당된 스택 중 사용 가능한 영역의 크기를 초과한다면 디바이스 드라이버를 호출할 경우에 스택 오버플로우가 발생할 수 있다. 따라서 이 경우 디바이스 드라이버를 호출하지 않음으로써 스택 오버플로우를 방지할 수 있다.
태스크 모듈(144)은 어플리케이션으로부터 스레드의 생성이 요청되면, 판단부(130)의 판단 결과에 따라 스레드를 선택적으로 생성한다. 이때 생성이 요청된 스레드에 스택이 할당되어 있지 않는 경우라면, 스택을 할당하고 스레드를 생성한다.
어플리케이션으로부터 스레드의 생성이 요청되면, 우선 태스크 모듈(144)은 생성이 요청된 스레드에 할당된 스택이 존재하는지 검사한다. 어플리케이션에 따라서 스레드를 생성할 때에 스택을 할당하는 경우가 있고, 미리 스택이 할당되어 있는 경우가 있다.
상기 검사 결과, 스레드에 할당된 스택(180)이 이미 존재하는 경우 판단부(130)는 스택 사용량 저장부(110)에 저장된, 스레드의 메인 함수의 최대 스택 사용량이 스레드에 할당된 스택(180)의 크기를 초과하는지 판단한다. 그리고 태스크 모듈(144)은 스레드의 메인 함수의 최대 스택 사용량이 스레드에 할당된 스택(180)의 크기를 초과하는 경우 스레드를 생성하지 않고, 초과하지 않는 경우에만 스레드를 생성한다.
또한 상기 검사 결과, 스레드에 할당된 스택이 존재하지 않는 경우 판단부(130)는 스택 사용량 저장부(110)에 저장된, 스레드의 메인 함수의 최대 스택 사용량이 현재 사용 가능한 메모리의 용량을 초과하는지 판단한다. 여기서의 판단은 곧 스레드에 최대 스택 사용량만큼 스택을 할당할 수 있는지 판단하는 것이다. 태스크 모듈(144)은 스레드의 메인 함수의 최대 스택 사용량이 현재 사용 가능한 메모리의 용량을 초과하는 경우 스레드를 생성하지 않고, 초과하지 않는 경우 스레드에 스택을 할당하고 스레드를 생성한다. 태스크 모듈(144)은 스레드에 스택을 할당할 때에 스택 사용량 저장부(110)에 저장된, 스레드의 메인 함수의 최대 스택 사용량만큼 스택을 할당하는 것이 바람직하다.
스레드의 생성이 요청되었을 때, 스레드에 할당된 스택이 존재하는 경우 스레드의 메인 함수의 최대 스택 사용량이 할당된 스택의 크기를 초과하거나, 또는 스레드에 할당된 스택이 존재하지 않아서 스레드에 스택을 할당해야 할 경우 스레드의 메인 함수의 최대 스택 사용량이 현재 사용 가능한 메모리의 용량을 초과한다면, 스택 오버플로우가 발생할 수 있다. 따라서 이 경우 스레드를 생성하지 않음으로써 스택 오버플로우를 방지할 수 있다.
동적 로딩 모듈(146)은 새로운 스레드 이미지(190) 또는 디바이스 드라이버를 커널에 위치하는 메모리에 로드한다. 특히 동적 로딩 모듈(146)은 새로운 스레드 이미지(190)를 로드하는 경우, 스레드 이미지(190)의 메인 함수의 최대 스택 사용량만큼 스택을 할당할 수 있는지에 따라서 스레드 이미지(190)를 선택적으로 로드한다. 여기서, 최대 스택 사용량만큼 스택을 할당할 수 있는지 여부는 스레드 이 미지(190)의 메인 함수의 최대 스택 사용량 및 현재 사용 가능한 메모리의 용량에 의해 결정된다.
동적 로딩 모듈(146)의 동작을 보다 구체적으로 설명하면 다음과 같다. 스레드 이미지의 로딩이 요청되면 판단부(130)는 스택 사용량 산출부(120)가 산출한, 또는 기 저장되어 있는, 스레드 이미지(190)의 메인 함수의 최대 스택 사용량이 현재 사용 가능한 메모리의 용량을 초과하는지 판단한다. 판단부(130)의 판단 결과, 상기 최대 스택 사용량이 현재 사용 가능한 메모리의 용량을 초과하지 않는 경우 동적 로딩 모듈(146)은 스레드 이미지(190)의 메인 함수의 주소와 최대 스택 사용량을 스택 사용량 저장부(110)에 저장하고 스레드 이미지(190)를 로드한다. 그러나, 상기 최대 스택 사용량이 현재 사용 가능한 메모리의 용량을 초과하는 경우, 즉 상기 최대 스택 사용량만큼 스택을 할당할 수 없는 경우에는 현재 사용 가능한 메모리 이외의 다른 영역에 스택을 할당할 수 있는지 검사한다. 예를 들어, 현재 사용 가능한 메모리가 램(RAM)인 경우에 그 이외의 플래시 메모리(flash memory) 등의 영역에 스택을 할당할 수 있는지 검사한다. 동적 로딩 모듈(146)은 검사 결과, 다른 영역에 스택을 할당할 수 있는 경우, 스레드 이미지(190)를 로드하고, 그렇지 않은 경우 스레드 이미지(190)를 로드하지 않는다. 동적 로딩 모듈(146)은 스레드 이미지(190)를 로드할 경우, 커널이 제공하는 함수들의 목록이 저장되어 있는 커널 서비스 벡터 테이블(160)을 참조하여 스레드 이미지의 메인 함수와 메인 함수를 구성하는 함수들을 연결시킨다.
디바이스 드라이버의 로딩이 요청되면, 스택 사용량 산출부(120)는 디바이스 드라이버를 구성하는 함수들의 최대 스택 사용량을 산출하고, 함수들의 주소와 산출된 최대 스택 사용량을 스택 사용량 저장부(110)에 저장하며, 동적 로딩 모듈(146)은 디바이스 드라이버를 로드한다.
도 3은 본 발명의 일 실시예에 따른 인터럽트 처리시의 스택 오버플로우 방지 방법의 흐름도이다.
310단계에서 인터럽트가 발생하면, 315단계에서 스택 오버플로우 방지 장치(100)은 인터럽트 벡터 테이블(150)을 참조하여 발생한 인터럽트에 해당하는 인터럽트 핸들러 함수를 검색한다.
320단계에서 스택 오버플로우 방지 장치(100)은 검색된 인터럽트 핸들러 함수의 최대 스택 사용량을 스택 사용량 저장부(110)로부터 독출한다.
325단계에서 스택 오버플로우 방지 장치(100)은 인터럽트 스택(170) 중 사용 가능한 영역의 크기에서 상기 독출된 최대 스택 사용량을 뺀 값 Y를 구한다.
330단계에서 스택 오버플로우 방지 장치(100)은 인터럽트 핸들러 함수들 각각의 최대 스택 사용량 중 가장 큰 값이 325단계에서 구한 Y 값을 초과하는지 판단한다. 판단 결과, 인터럽트 핸들러 함수들 각각의 최대 스택 사용량 중 가장 큰 값이 325단계에서 구한 Y 값을 초과하는 것으로 판단되면 335단계로 진행하고, 초과하지 않는 것으로 판단되면 355단계로 진행한다.
355단계에서 스택 오버플로우 방지 장치(100)은 검색된 인터럽트 핸들러 함수를 호출한다.
335단계에서 스택 오버플로우 방지 장치(100)은 추가적인 인터럽트의 발생을 금지한다. 그리고 340단계에서 검색된 인터럽트 핸들러 함수를 호출한다. 345단계에서, 호출된 인터럽트 핸들러 함수에 의해 인터럽트 처리가 완료되면 350단계에서 스택 오버플로우 방지 장치(100)은 금지된 인터럽트의 발생을 해제한다.
도 4는 본 발명의 일 실시예에 따른 드라이버의 사용 요청 처리시의 스택 오버플로우 방지 방법의 흐름도이다.
410단계에서, 스레드가 디바이스 드라이버의 사용을 요청하면 420단계에서 스택 오버플로우 방지 장치(100)은 해당하는 디바이스 드라이버를 검색한다.
430단계에서 스택 오버플로우 방지 장치(100)은 검색된 디바이스 드라이버를 구성하는 함수들 각각의 최대 스택 사용량을 스택 사용량 저장부(110)로부터 독출한다.
440단계에서 스택 오버플로우 방지 장치(100)은 검색된 디바이스 드라이버를 구성하는 함수들 각각의 최대 스택 사용량 중 가장 큰 값이 디바이스 드라이버의 사용을 요청한 스레드에 할당된 스택 중 사용 가능한 영역의 크기를 초과하는지 판단한다. 판단 결과, 검색된 디바이스 드라이버를 구성하는 함수들 각각의 최대 스택 사용량 중 가장 큰 값이 디바이스 드라이버의 사용을 요청한 스레드에 할당된 스택 중 사용 가능한 영역의 크기를 초과하는 것으로 판단되면 460단계로 진행하고, 초과하지 않는 것으로 판단되면 450단계로 진행한다.
460단계에서 스택 오버플로우 방지 장치(100)은 사용이 요청된 디바이스 드라이버를 호출하지 않는 것으로 결정한다.
450단계에서 스택 오버플로우 방지 장치(100)은 사용이 요청된 디바이스 드 라이버를 호출한다.
도 5는 본 발명의 일 실시예에 따른 스레드 생성시의 스택 오버플로우 방지 방법의 흐름도이다.
510단계에서, 스레드의 생성이 요청되면 520단계에서 스택 오버플로우 방지 장치(100)은 스레드의 메인 함수의 최대 스택 사용량을 스택 사용량 저장부(110)로부터 독출한다.
530단계에서 스택 오버플로우 방지 장치(100)은 스레드에 할당된 스택이 존재하는지 판단한다. 판단 결과, 스레드에 할당된 스택이 존재하는 것으로 판단되면 570단계로 진행하고, 존재하지 않는 것으로 판단되면 540단계로 진행한다.
540단계에서 스택 오버플로우 방지 장치(100)은 스레드의 메인 함수의 최대 스택 사용량이 현재 사용 가능한 메모리의 용량을 초과하는지 판단한다. 최대 스택 사용량이 현재 사용 가능한 메모리의 용량을 초과한다는 것은 스레드에 최대 스택 사용량만큼 스택을 할당할 수 없음을 의미한다. 판단 결과, 최대 스택 사용량이 현재 사용 가능한 메모리의 용량을 초과하지 않는 것으로 판단되면 550단계로 진행하여 스레드에 최대 스택 사용량만큼 스택을 할당하고 560단계에서 스레드를 생성한다. 그러나 판단 결과 최대 스택 사용량이 현재 사용 가능한 메모리의 용량을 초과하는 것으로 판단되면 580단계로 진행하여 스택 오버플로우 방지 장치(100)는 스레드를 생성하지 않는 것으로 결정한다.
570단계에서 스택 오버플로우 방지 장치(100)은 최대 스택 사용량이 스레드에 할당된 스택의 크기를 초과하는지 판단한다. 판단 결과, 최대 스택 사용량이 스 레드에 할당된 스택의 크기를 초과하지 않는 것으로 판단되면 560단계로 진행하여 스레드를 생성한다. 그러나 판단 결과, 최대 스택 사용량이 스레드에 할당된 스택의 크기를 초과하는 것으로 판단되면 580단계로 진행하여 스레드를 생성하지 않는 것으로 결정한다.
도 6은 본 발명의 일 실시예에 따라 스레드 이미지의 로딩 요청을 처리하는 방법을 나타낸 흐름도이다.
610단계에서 스레드 이미지의 로딩이 요청되면 620단계에서 스택 오버플로우 방지 장치(100)은 스레드 이미지의 메인 함수의 최대 스택 사용량을 산출하거나 기 결정된 최대 스택 사용량을 읽어온다.
스레드 이미지의 메인 함수의 최대 스택 사용량을 산출하는 경우, 스택 사용량 저장부(110)에 저장된 함수들의 최대 스택 사용량 중에서, 스레드 이미지의 메인 함수를 구성하는 함수들의 최대 스택 사용량을 이용하여 정적 분석 기법으로 산출할 수 있다. 한편, 스레드 이미지의 메인 함수의 기 결정된 최대 스택 사용량을 읽어오는 경우, 최대 스택 사용량이 시뮬레이션을 이용하여 기 결정되어 스택 사용량 산출부(120) 또는 스레드 이미지에 저장되어 있어서 이 값을 읽어올 수 있다.
630단계에서 스택 오버플로우 방지 장치(100)은 스레드 이미지의 메인 함수의 최대 스택 사용량이 현재 사용 가능한 메모리의 용량을 초과하는지 판단한다. 판단 결과, 최대 스택 사용량이 현재 사용 가능한 메모리의 용량을 초과하는 것으로 판단되면 660단계로 진행하고, 초과하지 않는 것으로 판단되면 640단계로 진행한다.
640단계에서 스택 오버플로우 방지 장치(100)은 스레드 이미지의 메인 함수의 주소와 최대 스택 사용량을 스택 사용량 저장부(110)에 저장한다. 그리고 650단계에서 스레드 이미지를 로드한다.
660단계에서 스택 오버플로우 방지 장치(100)은 현재 사용 가능한 메모리 이외의 다른 영역, 예를 들면 플래시 메모리(flash memory) 등의 영역에 스택을 할당할 수 있는지 판단한다. 판단 결과 현재 사용 가능한 메모리 이외의 영역에 스택을 할당할 수 있는 것으로 판단되면 650단계로 진행하고 현재 사용 가능한 메모리 이외의 영역에 스택을 할당할 수 없는 것으로 판단되면 670단계로 진행한다.
670단계에서 스택 오버플로우 방지 장치(100)은 스레드 이미지를 로드하지 않는 것으로 결정한다.
도 7은 본 발명의 일 실시예에 따라 디바이스 드라이버의 로딩 요청을 처리하는 방법을 나타낸 흐름도이다.
710단계에서 디바이스 드라이버의 로딩이 요청되면, 720단계에서 스택 오버플로우 방지 장치(100)은 디바이스 드라이버를 구성하는 함수들의 최대 스택 사용량을 산출한다.
730단계에서 스택 오버플로우 방지 장치(100)은 디바이스 드라이버를 구성하는 함수들의 주소와 산출된 최대 스택 사용량을 스택 사용량 저장부(110)에 저장한다.
740단계에서 스택 오버플로우 방지 장치(100)은 디바이스 드라이버를 로드한다.
한편, 상술한 본 발명의 실시예들은 컴퓨터에서 실행될 수 있는 프로그램으로 작성가능하고, 컴퓨터로 읽을 수 있는 기록매체를 이용하여 상기 프로그램을 동작시키는 범용 디지털 컴퓨터에서 구현될 수 있다. 또한, 상술한 본 발명의 실시예에서 사용된 데이터의 구조는 컴퓨터로 읽을 수 있는 기록매체에 여러 수단을 통하여 기록될 수 있다.
상기 컴퓨터로 읽을 수 있는 기록매체는 마그네틱 저장매체(예를 들면, 롬, 플로피 디스크, 하드 디스크 등), 광학적 판독 매체(예를 들면, 시디롬, 디브이디 등) 및 캐리어 웨이브(예를 들면, 인터넷을 통한 전송)와 같은 저장매체를 포함한다.
이제까지 본 발명에 대하여 그 바람직한 실시예들을 중심으로 살펴보았다.본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자는 본 발명이 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 변형된 형태로 구현될 수 있음을 이해할 수 있을 것이다. 그러므로 개시된 실시예들은 한정적인 관점이 아니라 설명적인 관점에서 고려되어야 한다. 본 발명의 범위는 전술한 설명이 아니라 특허청구범위에 나타나 있으며, 그와 동등한 범위 내에 있는 모든 차이점은 본 발명에 포함된 것으로 해석되어야 할 것이다.
본 발명에 따르면, 커널이 제공하는 함수들 또는 스레드의 메인 함수의 최대 스택 사용량을 저장하고, 저장된 최대 스택 사용량과 할당된 스택 또는 사용 가능한 메모리의 크기를 비교하여 선택적으로 작업을 처리하기 때문에, 런타임 중에 계 속해서 스택 오버플로우가 발생하는지 여부를 체크할 필요가 없어서 런타임 오버헤드를 발생시키지 않고 스택 오버플로우를 방지할 수 있다.
또한, 각 스레드의 메인 함수의 최대 스택 사용량을 저장하고 있어서, 스레드 생성시에 최대 스택 사용량만큼만 스택을 할당할 수 있으므로 메모리 자원을 보다 효율적으로 활용할 수 있다.

Claims (27)

  1. 삭제
  2. (a) 프로세서가, 커널이 제공하는 함수들 각각의 기 저장된 최대 스택 사용량 중 요청된 작업의 실행을 위한 적어도 하나의 함수의 최대 스택 사용량을 독출하는 단계; 및
    (b) 상기 독출된 최대 스택 사용량 및 상기 요청된 작업을 위한 스택 중 사용 가능한 영역의 크기를 기초로 상기 요청된 작업을 선택적으로 처리하는 단계를 포함하고,
    상기 요청된 작업은 인터럽트의 처리이고, 상기 적어도 하나의 함수는 상기 인터럽트에 해당하는 인터럽트 핸들러 함수이며, 상기 요청된 작업을 위한 스택은 인터럽트 스택인 것을 특징으로 하는 스택 오버플로우 방지 방법.
  3. 제2항에 있어서,
    상기 (b) 단계는
    인터럽트 핸들러 함수들 각각의 스택 사용량 중 가장 큰 값이, 상기 인터럽트 스택 중 사용 가능한 영역의 크기에서 상기 인터럽트에 해당하는 인터럽트 핸들러 함수의 최대 스택 사용량이 차감된 값을 초과하는지 판단하는 단계; 및
    상기 판단 결과, 상기 가장 큰 값이 상기 차감된 값을 초과하는 것으로 판단되면 추가적인 인터럽트의 발생을 금지하고 상기 인터럽트 핸들러 함수를 호출하는 단계를 포함하는 것을 특징으로 하는 스택 오버플로우 방지 방법.
  4. (a) 프로세서가, 커널이 제공하는 함수들 각각의 기 저장된 최대 스택 사용량 중 요청된 작업의 실행을 위한 적어도 하나의 함수의 최대 스택 사용량을 독출하는 단계; 및
    (b) 상기 독출된 최대 스택 사용량 및 상기 요청된 작업을 위한 스택 중 사용 가능한 영역의 크기를 기초로 상기 요청된 작업을 선택적으로 처리하는 단계를 포함하고,
    상기 요청된 작업은 디바이스 드라이버의 사용이고, 상기 적어도 하나의 함수는 상기 디바이스 드라이버를 구성하는 함수들이고, 상기 요청된 작업을 위한 스택은 상기 디바이스 드라이버의 사용을 요청한 스레드에 할당된 스택인 것을 특징으로 하는 스택 오버플로우 방지 방법.
  5. 제4항에 있어서,
    상기 (b) 단계는,
    상기 디바이스 드라이버를 구성하는 함수들 각각의 최대 스택 사용량 중 가장 큰 값이 상기 디바이스 드라이버의 사용을 요청한 스레드에 할당된 스택 중 사용 가능한 영역의 크기를 초과하는지 판단하는 단계; 및
    상기 판단 결과에 따라 상기 디바이스 드라이버를 선택적으로 호출하는 단계를 포함하는 것을 특징으로 하는 스택 오버플로우 방지 방법.
  6. 삭제
  7. (a) 프로세서가, 소정 스레드들 각각의 메인 함수의 기 저장된 최대 스택 사용량 중 생성이 요청된 스레드의 메인 함수의 최대 스택 사용량을 독출하는 단계;
    (b) 상기 스레드에 할당된 스택이 이미 존재하는 경우, 상기 독출된 최대 스택 사용량 및 상기 할당된 스택의 크기를 기초로 상기 스레드를 선택적으로 생성하는 단계; 및
    (c) 상기 스레드에 할당된 스택이 존재하지 않는 경우, 상기 독출된 최대 스택 사용량 및 현재 사용 가능한 메모리의 용량을 기초로 선택적으로 상기 스레드에 스택을 할당하고 상기 스레드를 생성하는 단계를 포함하고,
    상기 (b) 단계는
    상기 독출된 최대 스택 사용량이 상기 할당된 스택의 크기를 초과하는지 판단하는 단계; 및
    상기 판단 결과 상기 독출된 스택 사용량이 상기 할당된 스택의 크기를 초과하지 않는 것으로 판단되는 경우에 한하여 상기 스레드를 생성하는 단계를 포함하는 것을 특징으로 하는 스택 오버플로우 방지 방법.
  8. (a) 프로세서가, 소정 스레드들 각각의 메인 함수의 기 저장된 최대 스택 사용량 중 생성이 요청된 스레드의 메인 함수의 최대 스택 사용량을 독출하는 단계;
    (b) 상기 스레드에 할당된 스택이 이미 존재하는 경우, 상기 독출된 최대 스택 사용량 및 상기 할당된 스택의 크기를 기초로 상기 스레드를 선택적으로 생성하는 단계; 및
    (c) 상기 스레드에 할당된 스택이 존재하지 않는 경우, 상기 독출된 최대 스택 사용량 및 현재 사용 가능한 메모리의 용량을 기초로 선택적으로 상기 스레드에 스택을 할당하고 상기 스레드를 생성하는 단계를 포함하고,
    상기 (c) 단계는
    (c1) 상기 독출된 최대 스택 사용량이 상기 현재 사용 가능한 메모리의 용량을 초과하는지 판단하는 단계; 및
    (c2) 상기 판단 결과 상기 독출된 최대 스택 사용량이 상기 현재 사용 가능한 메모리의 용량을 초과하지 않는 것으로 판단되는 경우에 한하여 상기 스레드에 스택을 할당하고 상기 스레드를 생성하는 단계를 포함하는 것을 특징으로 하는 스택 오버플로우 방지 방법.
  9. (a) 프로세서가, 소정 스레드들 각각의 메인 함수의 기 저장된 최대 스택 사용량 중 생성이 요청된 스레드의 메인 함수의 최대 스택 사용량을 독출하는 단계;
    (b) 상기 스레드에 할당된 스택이 이미 존재하는 경우, 상기 독출된 최대 스택 사용량 및 상기 할당된 스택의 크기를 기초로 상기 스레드를 선택적으로 생성하는 단계; 및
    (c) 상기 스레드에 할당된 스택이 존재하지 않는 경우, 상기 독출된 최대 스택 사용량 및 현재 사용 가능한 메모리의 용량을 기초로 선택적으로 상기 스레드에 스택을 할당하고 상기 스레드를 생성하는 단계를 포함하고,
    상기 (c) 단계는 상기 스레드에 상기 독출된 최대 스택 사용량만큼 스택을 할당하는 것을 특징으로 하는 스택 오버플로우 방지 방법.
  10. (a) 프로세서가, 소정 스레드들 각각의 메인 함수의 기 저장된 최대 스택 사용량 중 생성이 요청된 스레드의 메인 함수의 최대 스택 사용량을 독출하는 단계;
    (b) 상기 스레드에 할당된 스택이 이미 존재하는 경우, 상기 독출된 최대 스택 사용량 및 상기 할당된 스택의 크기를 기초로 상기 스레드를 선택적으로 생성하는 단계; 및
    (c) 상기 스레드에 할당된 스택이 존재하지 않는 경우, 상기 독출된 최대 스택 사용량 및 현재 사용 가능한 메모리의 용량을 기초로 선택적으로 상기 스레드에 스택을 할당하고 상기 스레드를 생성하는 단계를 포함하고,
    상기 스레드의 메인 함수의 최대 스택 사용량은 정적 분석(static analysis)을 이용하여 기 결정된 값임을 특징으로 하는 스택 오버플로우 방지 방법.
  11. (a) 프로세서가, 소정 스레드들 각각의 메인 함수의 기 저장된 최대 스택 사용량 중 생성이 요청된 스레드의 메인 함수의 최대 스택 사용량을 독출하는 단계;
    (b) 상기 스레드에 할당된 스택이 이미 존재하는 경우, 상기 독출된 최대 스택 사용량 및 상기 할당된 스택의 크기를 기초로 상기 스레드를 선택적으로 생성하는 단계; 및
    (c) 상기 스레드에 할당된 스택이 존재하지 않는 경우, 상기 독출된 최대 스택 사용량 및 현재 사용 가능한 메모리의 용량을 기초로 선택적으로 상기 스레드에 스택을 할당하고 상기 스레드를 생성하는 단계를 포함하고,
    상기 스레드의 메인 함수의 최대 스택 사용량은 시뮬레이션을 이용하여 기 결정된 값임을 특징으로 하는 스택 오버플로우 방지 방법.
  12. 삭제
  13. (a) 프로세서가, 스레드 이미지의 로딩이 요청되면 상기 스레드 이미지의 메인 함수의 최대 스택 사용량이 현재 사용 가능한 메모리의 용량을 초과하는지 판단하는 단계; 및
    (b) 상기 판단 결과 상기 최대 스택 사용량이 상기 현재 사용 가능한 메모리의 용량을 초과하지 않는 것으로 판단되면 상기 메인 함수의 최대 스택 사용량을 저장하고 상기 스레드 이미지를 로딩하는 단계를 포함하고,
    상기 (a) 단계는 상기 스레드 이미지의 메인 함수의 스택 사용량을 정적 분석(static analysis)을 이용하여 산출하는 단계를 포함하는 것을 특징으로 하는 스택 오버플로우 방지 방법.
  14. (a) 프로세서가, 스레드 이미지의 로딩이 요청되면 상기 스레드 이미지의 메인 함수의 최대 스택 사용량이 현재 사용 가능한 메모리의 용량을 초과하는지 판단하는 단계; 및
    (b) 상기 판단 결과 상기 최대 스택 사용량이 상기 현재 사용 가능한 메모리의 용량을 초과하지 않는 것으로 판단되면 상기 메인 함수의 최대 스택 사용량을 저장하고 상기 스레드 이미지를 로딩하는 단계를 포함하고,
    상기 스레드 이미지의 메인 함수의 스택 사용량은 시뮬레이션을 이용하여 기 결정되어 있는 것을 특징으로 하는 스택 오버플로우 방지 방법.
  15. (a) 프로세서가, 스레드 이미지의 로딩이 요청되면 상기 스레드 이미지의 메인 함수의 최대 스택 사용량이 현재 사용 가능한 메모리의 용량을 초과하는지 판단하는 단계; 및
    (b) 상기 판단 결과 상기 최대 스택 사용량이 상기 현재 사용 가능한 메모리의 용량을 초과하지 않는 것으로 판단되면 상기 메인 함수의 최대 스택 사용량을 저장하고 상기 스레드 이미지를 로딩하는 단계를 포함하고,
    상기 판단 결과 상기 최대 스택 사용량이 상기 현재 사용 가능한 메모리의 용량을 초과하는 것으로 판단되면, 상기 현재 사용 가능한 메모리 이외의 영역에 스택을 할당할 수 있는 경우에 한하여 상기 스레드 이미지를 로딩하는 단계를 더 포함하는 것을 특징으로 하는 스택 오버플로우 방지 방법.
  16. 제2항 내지 제5항, 제7항 내지 제11항 및 제13 내지 제15항 중 어느 한 항에 기재된 스택 오버플로우 방지 방법을 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체.
  17. 삭제
  18. 커널이 제공하는 함수들 각각의 최대 스택 사용량을 저장하는 스택 사용량 저장부; 및
    상기 함수들 각각의 최대 스택 사용량 중 요청된 작업의 실행을 위한 적어도 하나의 함수의 최대 스택 사용량 및 상기 요청된 작업을 위한 스택 중 사용 가능한 영역의 크기를 기초로 상기 요청된 작업을 선택적으로 처리하는 처리 모듈을 포함하고,
    상기 요청된 작업은 인터럽트의 처리이고, 상기 적어도 하나의 함수는 상기 인터럽트에 해당하는 인터럽트 핸들러 함수이고, 상기 요청된 작업을 위한 스택은 인터럽트 스택이며,
    인터럽트 핸들러 함수들 각각의 최대 스택 사용량 중 가장 큰 값이, 상기 인터럽트 스택 중 사용 가능한 영역의 크기에서 상기 인터럽트에 해당하는 인터럽트 핸들러 함수의 최대 스택 사용량이 차감된 값을 초과하는지 판단하는 판단부를 더 포함하고,
    상기 처리 모듈은, 상기 판단부의 판단 결과 상기 가장 큰 값이 상기 차감된 값을 초과하는 것으로 판단되면 추가적인 인터럽트의 발생을 금지하고 상기 인터럽트 핸들러 함수를 호출하는 인터럽트 모듈을 포함하는 것을 특징으로 하는 스택 오버플로우 방지 장치.
  19. 커널이 제공하는 함수들 각각의 최대 스택 사용량을 저장하는 스택 사용량 저장부; 및
    상기 함수들 각각의 최대 스택 사용량 중 요청된 작업의 실행을 위한 적어도 하나의 함수의 최대 스택 사용량 및 상기 요청된 작업을 위한 스택 중 사용 가능한 영역의 크기를 기초로 상기 요청된 작업을 선택적으로 처리하는 처리 모듈을 포함하고,
    상기 요청된 작업은 디바이스 드라이버의 사용이고, 상기 적어도 하나의 함수는 상기 디바이스 드라이버를 구성하는 함수들이고, 상기 요청된 작업을 위한 스택은 상기 디바이스 드라이버의 사용을 요청한 스레드에 할당된 스택이며,
    상기 디바이스 드라이버를 구성하는 함수들 각각의 최대 스택 사용량 중 가장 큰 값이 상기 디바이스 드라이버의 사용을 요청한 스레드에 할당된 스택 중 사용 가능한 영역의 크기를 초과하는지 판단하는 판단부를 더 포함하고
    상기 처리 모듈은, 상기 판단부의 판단 결과에 따라 상기 디바이스 드라이버를 선택적으로 호출하는 입출력 모듈을 포함하는 것을 특징으로 하는 스택 오버플로우 방지 장치.
  20. 삭제
  21. 소정 스레드들 각각의 메인 함수의 최대 스택 사용량을 저장하는 스택 사용량 저장부; 및
    생성이 요청된 스레드에 할당된 스택이 이미 존재하는 경우 상기 저장된 최대 스택 사용량 중 상기 스레드의 메인 함수의 최대 스택 사용량 및 상기 할당된 스택의 크기를 기초로 선택적으로 상기 스레드를 생성하고, 상기 스레드에 할당된 스택이 존재하지 않는 경우 상기 저장된 최대 스택 사용량 중 상기 스레드의 메인 함수의 최대 스택 사용량 및 현재 사용 가능한 메모리의 용량을 기초로 선택적으로 상기 스레드에 스택을 할당하고 상기 스레드를 생성하는 태스크 모듈을 포함하고,
    상기 스레드에 할당된 스택이 이미 존재하는 경우 상기 스레드의 메인 함수의 최대 스택 사용량이 상기 할당된 스택의 크기를 초과하는지 판단하는 판단부를 더 포함하고,
    상기 태스크 모듈은 상기 판단부의 판단 결과 상기 스레드의 메인 함수의 최대 스택 사용량이 상기 할당된 스택의 크기를 초과하지 않는 것으로 판단되면 상기 스레드를 생성하고, 초과하는 것으로 판단되면 상기 스레드를 생성하지 않는 것을 특징으로 하는 스택 오버플로우 방지 장치.
  22. 소정 스레드들 각각의 메인 함수의 최대 스택 사용량을 저장하는 스택 사용량 저장부; 및
    생성이 요청된 스레드에 할당된 스택이 이미 존재하는 경우 상기 저장된 최대 스택 사용량 중 상기 스레드의 메인 함수의 최대 스택 사용량 및 상기 할당된 스택의 크기를 기초로 선택적으로 상기 스레드를 생성하고, 상기 스레드에 할당된 스택이 존재하지 않는 경우 상기 저장된 최대 스택 사용량 중 상기 스레드의 메인 함수의 최대 스택 사용량 및 현재 사용 가능한 메모리의 용량을 기초로 선택적으로 상기 스레드에 스택을 할당하고 상기 스레드를 생성하는 태스크 모듈을 포함하고,
    상기 스레드에 할당된 스택이 존재하지 않는 경우 상기 스레드의 메인 함수의 최대 스택 사용량이 상기 현재 사용 가능한 메모리의 용량을 초과하는지 판단하는 판단부를 더 포함하고,
    상기 태스크 모듈은 상기 판단부의 판단 결과 상기 스레드의 메인 함수의 최대 스택 사용량이 상기 현재 사용 가능한 메모리의 용량을 초과하지 않는 것으로 판단되면 상기 스레드에 스택을 할당하고 상기 스레드를 생성하고, 초과하는 것으로 판단되면 상기 스레드를 생성하지 않는 것을 특징으로 하는 스택 오버플로우 방지 장치.
  23. 제21항 또는 제22항에 있어서,
    상기 소정 스레드들 각각의 메인 함수의 최대 스택 사용량은 정적 분석(static analysis)을 이용하여 기 결정된 값임을 특징으로 하는 스택 오버플로우 방지 장치.
  24. 제21항 또는 제22항에 있어서,
    상기 소정 스레드들 각각의 메인 함수의 최대 스택 사용량은 시뮬레이션을 이용하여 기 결정된 값임을 특징으로 하는 스택 오버플로우 방지 장치.
  25. 삭제
  26. 로딩이 요청된 스레드 이미지의 메인 함수의 최대 스택 사용량을 산출하는 스택 사용량 산출부;
    상기 산출된 최대 스택 사용량을 저장하는 스택 사용량 저장부; 및
    상기 산출된 최대 스택 사용량 및 현재 사용 가능한 메모리의 용량을 기초로 상기 스레드 이미지를 선택적으로 로딩하는 동적 로딩 모듈을 포함하고,
    상기 스택 사용량 산출부는 정적 분석(static analysis)을 이용하여 상기 최대 스택 사용량을 산출하는 것을 특징으로 하는 스택 오버플로우 방지 장치.
  27. 로딩이 요청된 스레드 이미지의 메인 함수의 최대 스택 사용량을 산출하는 스택 사용량 산출부;
    상기 산출된 최대 스택 사용량을 저장하는 스택 사용량 저장부; 및
    상기 산출된 최대 스택 사용량 및 현재 사용 가능한 메모리의 용량을 기초로 상기 스레드 이미지를 선택적으로 로딩하는 동적 로딩 모듈을 포함하고,
    상기 스택 사용량 산출부는 로딩이 요청된 디바이스 드라이버를 구성하는 함수들의 최대 스택 사용량을 산출하는 것을 특징으로 하고,
    상기 스택 사용량 저장부는 상기 디바이스 드라이버를 구성하는 함수들의 상기 산출된 최대 스택 사용량을 저장하는 것을 특징으로 하는 스택 오버플로우 방지 장치.
KR1020070001643A 2007-01-05 2007-01-05 임베디드 시스템의 스택 오버플로우 방지 방법 및 장치 KR101334172B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020070001643A KR101334172B1 (ko) 2007-01-05 2007-01-05 임베디드 시스템의 스택 오버플로우 방지 방법 및 장치
US12/003,947 US9280500B2 (en) 2007-01-05 2008-01-03 Method and apparatus for preventing stack overflow in embedded system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020070001643A KR101334172B1 (ko) 2007-01-05 2007-01-05 임베디드 시스템의 스택 오버플로우 방지 방법 및 장치

Publications (2)

Publication Number Publication Date
KR20080064577A KR20080064577A (ko) 2008-07-09
KR101334172B1 true KR101334172B1 (ko) 2013-11-28

Family

ID=39595391

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020070001643A KR101334172B1 (ko) 2007-01-05 2007-01-05 임베디드 시스템의 스택 오버플로우 방지 방법 및 장치

Country Status (2)

Country Link
US (1) US9280500B2 (ko)
KR (1) KR101334172B1 (ko)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9928105B2 (en) * 2010-06-28 2018-03-27 Microsoft Technology Licensing, Llc Stack overflow prevention in parallel execution runtime
US8769233B2 (en) * 2011-06-14 2014-07-01 International Business Machines Corporation Adjusting the amount of memory allocated to a call stack
US8813018B1 (en) 2012-10-05 2014-08-19 Altera Corporation Method and apparatus for automatically configuring memory size
US9846717B2 (en) * 2012-10-23 2017-12-19 Galois, Inc. Software security via control flow integrity checking
KR101470162B1 (ko) * 2013-05-30 2014-12-05 현대자동차주식회사 메모리 스택 사이즈 모니터링 방법
WO2015067993A1 (en) * 2013-11-08 2015-05-14 Freescale Semiconductor, Inc. Processing system with stack management and method for stack management
FR3013869B1 (fr) * 2013-11-22 2016-01-01 Thales Sa Procede de detection des debordements de pile et processeur pour la mise en oeuvre d'un tel procede
CN103853662B (zh) * 2014-02-21 2016-08-17 北京神舟航天软件技术有限公司 一种航天软件系统溢出检测和破坏限制机制
US9817688B2 (en) * 2015-02-18 2017-11-14 Red Hat Israel, Ltd. Identifying and preventing removal of virtual hardware
JP6771272B2 (ja) * 2015-07-01 2020-10-21 日立オートモティブシステムズ株式会社 車載電子制御装置及びスタック使用方法
WO2018081629A1 (en) * 2016-10-28 2018-05-03 Tala Security, Inc. Application security service
US11157611B2 (en) * 2018-01-02 2021-10-26 Blackberry Limited Binary image stack cookie protection
US11269536B2 (en) * 2019-09-27 2022-03-08 Open Text Holdings, Inc. Method and system for efficient content transfer to distributed stores
KR102300712B1 (ko) * 2019-11-22 2021-09-13 현대오트론 주식회사 스택 결함 원인을 진단하는 방법 및 장치
CN112667460A (zh) * 2020-12-07 2021-04-16 沈阳飞机设计研究所扬州协同创新研究院有限公司 一种航空电子系统应用任务栈空间的监控方法
KR102365261B1 (ko) * 2022-01-17 2022-02-18 삼성전자주식회사 전자시스템, 그 동작방법 및 그 메모리 장치의 동작방법

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006285871A (ja) 2005-04-04 2006-10-19 Canon Inc 情報処理装置、制御方法、プログラム、及び記憶媒体

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE69628326D1 (de) * 1995-10-06 2003-06-26 Patriot Scient Corp Architektur für einen risc-mikroprozessor
JPH09198258A (ja) 1996-01-19 1997-07-31 Nec Corp タスクスタックオーバーフロー検出回路
US5950221A (en) 1997-02-06 1999-09-07 Microsoft Corporation Variably-sized kernel memory stacks
US6167488A (en) 1997-03-31 2000-12-26 Sun Microsystems, Inc. Stack caching circuit with overflow/underflow unit
US6779180B1 (en) * 1998-09-16 2004-08-17 International Business Machines Corporation Apparatus and method for preventing stack overflow from synchronous completion of asynchronous functions
US7124251B2 (en) * 2002-06-24 2006-10-17 Microsoft Corporation Stack allocation system and method
TWI220733B (en) 2003-02-07 2004-09-01 Ind Tech Res Inst System and a method for stack-caching method frames
US20100131803A1 (en) * 2008-11-25 2010-05-27 Express Logic Computation of stack usage in embedded computing systems

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006285871A (ja) 2005-04-04 2006-10-19 Canon Inc 情報処理装置、制御方法、プログラム、及び記憶媒体

Also Published As

Publication number Publication date
US20080168460A1 (en) 2008-07-10
US9280500B2 (en) 2016-03-08
KR20080064577A (ko) 2008-07-09

Similar Documents

Publication Publication Date Title
KR101334172B1 (ko) 임베디드 시스템의 스택 오버플로우 방지 방법 및 장치
JP6010540B2 (ja) 選択された実行ランタイムによる実行のためのユーザコードのランタイム非依存表現
JP2014523022A5 (ko)
US9804962B2 (en) Garbage collection control in managed code
KR20170139872A (ko) 멀티 테넌트 기반의 서비스 제공 시스템 및 방법
KR20140035416A (ko) 강화된 어플리케이션 메타데이터를 갖는 메모리 매니저
EP2585917B1 (en) Stack overflow prevention in parallel execution runtime
US10423471B2 (en) Virtualizing integrated calls to provide access to resources in a virtual namespace
CN108279976B (zh) 一种编译资源调度方法、计算机及计算机可读存储介质
US9612867B2 (en) Apparatus and method for data partition and allocation in heterogeneous multi-processor environment
EP2341441B1 (en) Methods and apparatus to perform adaptive pre-fetch operations in managed runtime environments
JP2009528589A (ja) 適応コンパイルコード
JP2007188523A (ja) タスク実行方法およびマルチプロセッサシステム
US9639391B2 (en) Scaling past the java virtual machine thread limit
KR20150070152A (ko) 외부 참조를 나타내지 않는 참조 속성 어노테이션
KR20130051076A (ko) 응용프로그램 스케줄링 방법 및 장치
US9618988B2 (en) Method and apparatus for managing a thermal budget of at least a part of a processing system
KR20090116184A (ko) 정보처리장치 및 그 동작주기 변경방법
US9396044B2 (en) Memory efficient thread-level speculation
Meyerhöfer et al. Estimating non-functional properties of component-based software based on resource consumption
Kirner et al. Optimised adaptation of mixed-criticality systems with periodic tasks on uniform multiprocessors in case of faults
US20140373009A1 (en) Thread operation across virtualization contexts
KR102497257B1 (ko) 오토사 플랫폼의 메인 기능과 태스크의 매핑 방법
CN116909940A (zh) 一种自适应内存分配方法、装置及电子设备
CN117651935A (zh) FaaS控制器及用于FaaS系统的方法

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: 20161018

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20171018

Year of fee payment: 5