KR102365261B1 - 전자시스템, 그 동작방법 및 그 메모리 장치의 동작방법 - Google Patents
전자시스템, 그 동작방법 및 그 메모리 장치의 동작방법 Download PDFInfo
- Publication number
- KR102365261B1 KR102365261B1 KR1020220006723A KR20220006723A KR102365261B1 KR 102365261 B1 KR102365261 B1 KR 102365261B1 KR 1020220006723 A KR1020220006723 A KR 1020220006723A KR 20220006723 A KR20220006723 A KR 20220006723A KR 102365261 B1 KR102365261 B1 KR 102365261B1
- Authority
- KR
- South Korea
- Prior art keywords
- stack
- memory area
- memory
- call
- thread
- Prior art date
Links
- 238000011017 operating method Methods 0.000 title abstract description 8
- 230000015654 memory Effects 0.000 claims abstract description 274
- 230000003068 static effect Effects 0.000 claims abstract description 13
- 230000006870 function Effects 0.000 claims description 75
- 238000000034 method Methods 0.000 claims description 30
- 238000012545 processing Methods 0.000 claims description 15
- 238000004458 analytical method Methods 0.000 claims description 11
- 238000010801 machine learning Methods 0.000 claims description 9
- 238000010586 diagram Methods 0.000 description 20
- 238000004891 communication Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 230000002093 peripheral effect Effects 0.000 description 4
- 230000001419 dependent effect Effects 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 230000004044 response Effects 0.000 description 3
- 238000013473 artificial intelligence Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 230000001537 neural effect Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000012356 Product development Methods 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 230000003190 augmentative effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000010485 coping Effects 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 239000004744 fabric Substances 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000000873 masking effect Effects 0.000 description 1
- 230000000630 rising effect Effects 0.000 description 1
- 230000026676 system process Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation 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/5016—Allocation 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- 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/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1415—Saving, restoring, recovering or retrying at system level
- G06F11/1417—Boot up procedures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/3037—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a memory, e.g. virtual memory, cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3089—Monitoring arrangements determined by the means or processing involved in sensing the monitored data, e.g. interfaces, connectors, sensors, probes, agents
- G06F11/3096—Monitoring arrangements determined by the means or processing involved in sensing the monitored data, e.g. interfaces, connectors, sensors, probes, agents wherein the means or processing minimize the use of computing system or of computing system component resources, e.g. non-intrusive monitoring which minimizes the probe effect: sniffing, intercepting, indirectly deriving the monitored data from other directly available data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
- G06F12/0646—Configuration or reconfiguration
- G06F12/0684—Configuration or reconfiguration with feedback, e.g. presence or absence of unit detected by addressing, overflow detection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0625—Power saving in storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0644—Management of space entities, e.g. partitions, extents, pools
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0658—Controller construction arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/75—Structural analysis for program understanding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/3009—Thread control instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30134—Register stacks; shift registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/504—Resource capping
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/25—Using a specific main memory architecture
- G06F2212/251—Local memory within processor subsystem
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Human Computer Interaction (AREA)
- Computing Systems (AREA)
- Debugging And Monitoring (AREA)
- Quality & Reliability (AREA)
- Mathematical Physics (AREA)
- Artificial Intelligence (AREA)
- Medical Informatics (AREA)
- Evolutionary Computation (AREA)
- Data Mining & Analysis (AREA)
- Computer Vision & Pattern Recognition (AREA)
Abstract
실시간 운영 체제(Real Time Operating System)에서의 전자 시스템 및 그 동작방법, 메모리 장치의 동작방법이 제공된다. 전자 시스템의 동작방법은 태스크에 상응하는 적어도 하나의 스레드(Thread)를 정적 코드 분석하여 콜 그래프를 산출하는 단계, 상기 콜 그래프에 대한 런타임 프로파일링을 수행하여 상기 스레드의 스택 사용량 및 노드별 호출 확률을 산출하는 단계, 상기 콜 그래프 및 상기 노드별 호출 확률 및 스택 사용량을 고려하여 제1 메모리 영역에 대한 스택 사이즈의 기준값을 할당하는 단계 및 상기 기준값과 상기 제1 메모리 영역의 스택 사용량의 비교결과에 따라 스택을 상기 제1 메모리 영역에서 제2 메모리 영역으로 확장하여 저장하는 단계 및 상기 제2 메모리 영역에서 실행이 완료되면 상기 스택을 상기 제1 메모리로 복귀하는 단계를 포함하고, 상기 전자 시스템은 상기 제1 메모리 영역 및 상기 제2 메모리 영역을 포함하는 메모리 장치를 포함한다.
Description
본 발명은 실시간 운영 체제의 전자시스템, 그 동작방법 및 메모리 장치의 동작방법에 관한 것이다.
솔리드 스테이트 드라이브(Solid State Drive; SSD)는 노트북이나 스마트폰 같은 개인 사용자 시장부터 대규모 데이터 센터, 고성능 엔터프라이즈 시장으로 점점 확대되고 있으며, 개별 제품에 적용되는 기능 요구사항 또한 점점 다양하고 복잡해지고 있다. 실시간 운영체제(Real time Operating System; 이하 RTOS)는 다양하고 복잡한 요구사항을 만족시키면서도 제품 개발과 유지보수를 보다 빠르고 원활하게 수행하기 위해 스토리지 장치에 적용될 수 있다. 스토리지 장치는 복잡한 요구사항을 개별적인 스레드(Thread)로 분리하고 스케줄링에 대한 부담을 RTOS 커널로 위임하여 처리함으로써 개발자의 부담을 줄일 수 있다.
다만, RTOS을 보다 효율적으로 활용하기 위해서는 개별 스레드마다 별도의 스택을 할당해야한다. 스레드가 코드를 실행할 때마다 할당된 스택에 개별 함수의 스택 프레임을 쌓게 되므로, 스레드가 할당받은 스택이 시스템의 메모리 계층 어디에 배치되느냐에 따라 해당 스레드의 성능이 직접적인 영향을 받게된다.
시스템 개발자는 고성능 메모리에 스택을 배치하여 스레드를 보다 효율적으로 처리하고자 하나, SSD가 속하는 임베디드 시스템에서는 고성능 메모리가 매우 한정적이어서 스택 오버플로우가 발생할 여지가 있다.
본 발명이 해결하려는 과제는 자원 제약하의 실시간 운영체제에서 효율적 스레드 관리를 위한 전자시스템 및 그 동작방법을 제공하는 것이다.
본 발명이 해결하려는 과제는 실시간 운영체제에서 자원활용의 효율성 향상, 성능 향상 및 스택 오버플로우가 발생하지 않는 전자시스템 및 그 동작방법을 제공하는 것이다.
본 발명이 해결하려는 과제들은 이상에서 언급한 과제들로 제한되지 않으며, 언급되지 않은 또 다른 과제들은 아래의 기재로부터 당업자에게 명확하게 이해될 수 있을 것이다.
상기 과제를 해결하기 위한 본 발명의 몇몇 실시예에 따른 실시간 운영 체제(Real Time Operating System)에서의 전자 시스템의 동작방법은 태스크에 상응하는 적어도 하나의 스레드(Thread)를 정적 코드 분석하여 콜 그래프를 산출하는 단계, 상기 콜 그래프에 대한 런타임 프로파일링을 수행하여 상기 스레드의 스택 사용량 및 노드별 호출 확률을 산출하는 단계, 상기 콜 그래프 및 상기 노드별 호출 확률 및 스택 사용량을 고려하여 제1 메모리 영역에 대한 스택 사이즈의 기준값을 할당하는 단계 및 상기 기준값과 상기 제1 메모리 영역의 스택 사용량의 비교결과에 따라 스택을 상기 제1 메모리 영역에서 제2 메모리 영역으로 확장하여 저장하는 단계 및 상기 제2 메모리 영역에서 실행이 완료되면 상기 스택을 상기 제1 메모리로 복귀하는 단계를 포함하고, 상기 전자 시스템은 상기 제1 메모리 영역 및 상기 제2 메모리 영역을 포함하는 메모리 장치를 포함한다.
상기 과제를 해결하기 위한 본 발명의 몇몇 실시예에 따른 전자 시스템은 호스트의 명령을 적어도 하나의 스레드(Thread)로 구분하여 처리(process)하는 RTOS 모듈, 상기 스레드를 정적 코드 분석하여 콜 그래프로 산출하는 콜 그래프 모듈, 상기 콜 그래프에 대한 런타임 프로파일링을 수행하여 노드별 스택 사용량 및 노드별 호출 확률을 산출하는 런타임 프로파일러 및 제1 메모리 영역 및 제2 메모리 영역을 포함하는 메모리 장치를 포함하고, 상기 RTOS 모듈은 상기 노드별 스택 사용량 및 노드별 호출 확률에 따른 기준값에 기초하여 상기 제1 메모리 영역에 상기 스레드에 상응하는 스택 공간을 할당하고, 상기 할당된 스택 공간에 상기 스레드에 상응하는 스택을 상기 제1 메모리 영역에 저장하고, 상기 노드별 호출 확률 및 상기 노드별 스택 사용량에 기초한 오버플로우 알람이 발생하면, 이후 스택을 상기 제2 메모리 영역으로 연결하여 저장한다.
상기 과제를 해결하기 위한 본 발명의 몇몇 실시예에 따른 실시간 운영체제에서의 메모리 장치의 동작 방법은 상기 메모리 장치는 제1 메모리 영역 및 제2 메모리 영역을 포함하고, 태스크를 컴파일링하여 멀티 스레드로 구분하고, 각 스레드마다 정적 코드 분석으로 콜 그래프를 탐색하는 단계, 상기 탐색된 콜 그래프에 대한 동적 코드 분석을 수행하여 노드별 스택 사용량 및 노드별 호출 확률을 산출하는 단계, 상기 동적 코드 분석 결과에 기초하여 상기 제1 메모리 영역의 스택 사이즈를 설정하는 단계, 상기 스레드에 상응하는 스택 프레임을 차례로 상기 제1 메모리 영역에 저장하는 단계 및 상기 제1 메모리 영역에 대한 오버플로우 알람이 발생하면, 이후 스택 프레임을 상기 제2 메모리 영역에 저장하는 단계를 포함한다.
도 1은 몇몇 실시예들에 따른 본 발명의 전자시스템의 블록도를 도시한 것이다.
도 2는 몇몇 실시예들에 따른 본 발명의 전자시스템의 블록도를 도시한 것이다.
도 3은 몇몇 실시예에 따른 스토리지 컨트롤러(20)를 구체적으로 도시한 블록도이다.
도 4는 스토리지 컨트롤러(20)에 포함된 메모리(100)를 구체적으로 도시한 것이다.
도 5는 메모리(100)에서 발생하는 스택 오버플로우를 설명하기 위한 도면이다.
도 6 및 도 7은 몇몇 실시예에 따른 스레드의 콜 그래프를 도시한 것이다.
도 8은 몇몇 실시예에 따른 전자 시스템의 동작방법을 설명하기 위해 제1 및 제2 메모리 영역을 도시한 개념도이다.
도 9는 몇몇 실시예에 따른 전자 시스템이 제1 메모리 영역에서 제2 메모리 영역으로 확장하여 동작하는 것을 설명하기 위한 개념도이다.
도 10은 몇몇 실시예에 따른 전자 시스템이 제1 메모리 영역에서 제2 메모리 영역으로 확장하여 동작하는 것을 설명하기 위한 개념도이다.
도 11은 몇몇 실시예에 따른 전자 시스템이 제1 메모리 영역에서 제2 메모리 영역으로 확장하여 동작하는 것을 설명하기 위한 개념도이다.
도 12는 몇몇 실시예에 따른 전자 시스템의 동작방법을 설명하는 흐름도이다.
도 13은 본 발명의 일 실시예에 따른 스토리지(storage) 장치가 적용된 시스템을 도시한 도면이다.
도 14은 몇몇 실시예에 따른 메모리 장치가 적용된 데이터 센터를 나타낸 도면이다.
도 2는 몇몇 실시예들에 따른 본 발명의 전자시스템의 블록도를 도시한 것이다.
도 3은 몇몇 실시예에 따른 스토리지 컨트롤러(20)를 구체적으로 도시한 블록도이다.
도 4는 스토리지 컨트롤러(20)에 포함된 메모리(100)를 구체적으로 도시한 것이다.
도 5는 메모리(100)에서 발생하는 스택 오버플로우를 설명하기 위한 도면이다.
도 6 및 도 7은 몇몇 실시예에 따른 스레드의 콜 그래프를 도시한 것이다.
도 8은 몇몇 실시예에 따른 전자 시스템의 동작방법을 설명하기 위해 제1 및 제2 메모리 영역을 도시한 개념도이다.
도 9는 몇몇 실시예에 따른 전자 시스템이 제1 메모리 영역에서 제2 메모리 영역으로 확장하여 동작하는 것을 설명하기 위한 개념도이다.
도 10은 몇몇 실시예에 따른 전자 시스템이 제1 메모리 영역에서 제2 메모리 영역으로 확장하여 동작하는 것을 설명하기 위한 개념도이다.
도 11은 몇몇 실시예에 따른 전자 시스템이 제1 메모리 영역에서 제2 메모리 영역으로 확장하여 동작하는 것을 설명하기 위한 개념도이다.
도 12는 몇몇 실시예에 따른 전자 시스템의 동작방법을 설명하는 흐름도이다.
도 13은 본 발명의 일 실시예에 따른 스토리지(storage) 장치가 적용된 시스템을 도시한 도면이다.
도 14은 몇몇 실시예에 따른 메모리 장치가 적용된 데이터 센터를 나타낸 도면이다.
이하에서, 도 1 내지 도 14을 참조하여, 본 발명의 몇몇 실시예에 따른 전자시스템에 대해서 설명한다.
도 1은 몇몇 실시예들에 따른 본 발명의 전자시스템의 블록도를 도시한 것이다.
전자 시스템(1)은 호스트(10) 및 스토리지 시스템(2)을 포함할 수 있다. 스토리지 시스템은 스토리지 컨트롤러(20-1) 및 적어도 하나의 스토리지 장치(201)를 포함할 수 있다.
몇몇의 실시예에서, 호스트(10)는 개인용 컴퓨터, 서버, 노트북 컴퓨터, 태블릿 컴퓨터, 스마트폰, 셀룰러폰 등을 비롯한 컴퓨팅 장치일 수 있으나, 본 발명의 범위가 이에 제한되는 것은 아니다.
호스트(10)는 PCI-E(Peripheral Component Interconnect - Express), ATA(Advanced Technology Attachment), SATA(Serial ATA), PATA(Parallel ATA), SAS(serial attached SCSI) 또는 CXL(Compute eXpress Link)와 같은 인터페이스 프로토콜을 사용하여 메모리 시스템과 통신할 수 있다. 또한 호스트(10)와 스토리지 시스템(2) 간의 인터페이스 프로토콜들은 상술한 예에 한정되지 않으며, USB(Universal Serial Bus), MMC(Multi-Media Card), ESDI(Enhanced Small Disk Interface), 또는 IDE(Integrated Drive Electronics) 등과 같은 다른 인터페이스 프로토콜들 중 하나일 수 있다.
몇몇 실시예에 따라 스토리지 장치(200) 각각은 플래시 메모리(Flash Memory), MRAM(Magnetoresistive Random Access Memory), PRAM(Phase-change Random Access Memory), FeRAM(Ferroelectric Random Access Memory) 등과 같은 비휘발성 메모리 장치일 수 있다.
도 2는 몇몇 실시예들에 따른 본 발명의 전자시스템의 블록도를 도시한 것이다.
도 2를 참조하면, 몇몇 실시예에 따라 전자 시스템(1)은 호스트(10) 및 메모리 장치(202)을 포함할 수 있다. 호스트(10)은 프로세서(11)와 메모리 컨트롤러(20-2)를 포함할 수 있고, 메모리 컨트롤러(20-2)는 별도의 외부 메모리 장치(202)과 연결될 수 있다. 프로세서(11)는 전자 시스템의 전반적인 동작을 제어할 수 있고, 예를 들어 전자 시스템을 구성하는 다른 구성요소들의 동작을 제어할 수 있다. 프로세서(11)는 범용 프로세서로 구현될 수도 있고, 또는 전용 프로세서, 어플리케이션 프로세서와 같은 프로세서로 구현될 수도 있다.
프로세서(11)는 하나 이상의 CPU(Centrol Processing Unit) 코어를 포함할 수 있고, 메모리 컨트롤러(20-2)는 적어도 하나의 외부 메모리 장치(202)와 연결되어, 외부 메모리 장치(202)를 제어할 수 있다. 몇몇 실시예에 따라 프로세서(11)는 AI(Aritificial Intelligence) 데이터 연산과 같은 고속 데이터 연산을 위한 전용 회로 등의 액셀러레이터 블록일 수도 있다. 예를 들어 액셀러레이터 블록은 GPU(Graphic Processing Unit), NPU (Neural Processing Unit) 및/또는 DPU (Data Processing Unit)와 같이 구현될수 있고 프로세서의 다른 구성요소와 물리적으로 독립적인 별도의 칩으로 구현될 수 있다.
외부 메모리 장치(202)는 하나 이상의 DDR SDRAM(Double Data Rate Synchronous Dynamic Random Access Memory), LPDDR(Low Power Double Data Rate) SDRAM, GDDR(Graphics Double Data Rate) SDRAM, RDRAM(Rambus Dynamic Random Access Memory) 등과 같은 동적 랜덤 액세스 메모리(Dynamic Random Access Memory; DRAM) 일 수 있다.
호스트(10)은 외부 메모리 장치(202)와 DDR(Double Data Rate), LPDDR(low power double data rate), GDDR(Graphics Double Data Rate), Wide I/O, HBM(High Bandwidth Memory), HMC(Hybrid Memory Cube) 또는 CXL(Compute eXpress Link) 등과 같은 인터페이스 표준들 중 하나에 기반하여 통신할 수 있다.
도 3은 몇몇 실시예에 따른 스토리지 컨트롤러(20)를 구체적으로 도시한 블록도이다. 도 4는 스토리지 컨트롤러(20)에 포함된 메모리(100)를 구체적으로 도시한 것이다. 도 5는 메모리(100)에서 발생하는 스택 오버플로우를 설명하기 위한 도면이다.
도 3을 참조하면, 이하에서는 스토리지 컨트롤러(20)로 호칭하나, 몇몇 실시예에 따라 도 3에 도시된 스토리지 컨트롤러(20)는 도 1의 스토리지 컨트롤러(20-1)일 수 있다. 또는 몇몇 실시예에 따라 도 3의 스토리지 컨트롤러(20)는 도 2의 메모리 컨트롤러(20-2)일 수도 있다.
몇몇 실시예에 따라 스토리지 컨트롤러(20)는 호스트 인터페이스(21), RTOS 모듈(22), 메모리(100), 런타임 프로파일러(23), 콜 그래프 모듈(24), 머신러닝 모듈(25), 및 메모리 인터페이스(26)를 포함하고, 상기 각 구성요소(21 내지 27, 100)는 시스템 버스로 연결될 수 있다.
스토리지 컨트롤러(20)는 호스트 인터페이스(21)에 의해 호스트(10)와 통신할 수 있다. 호스트 인터페이스(21)는 도 1 또는 도 2에서 상술한 인터페이스 표준에 기반하여, 통신할 수 있다.
프로세서(23)는 스토리지 컨트롤러(20)의 전반적인 동작을 제어한다. 예를 들어 호스트(10) 또는 호스트 프로세서(11)로부터 명령을 수신하면 명령을 수행하기 위한 적어도 하나의 스레드, 예를 들어 멀티 스레드(Multi-Thread)를 생성한다.
RTOS 모듈(22)는 프로세서(23)에 의해 실행된다. RTOS 모듈(22)는 여러 스레드들을 정해진 시간 안에 처리하기 위해 스케줄링을 수행할 수 있다. RTOS 모듈(22)은 대기(ready), 실행(running) 및 블록됨(blocked)과 같은 상태(state)를 갖는 스레드들이 스케줄링되어 내부 메모리(100)로 푸시된다. RTOS 모듈(22)은 전자시스템의 설계자가 정의한 스레드 개수에 따라 각 스레드가 사용하는 스택을 내부 메모리(100)에 할당한다.
내부 메모리(100)는 몇몇 실시예에 따라 적어도 하나의 메모리 계층으로 구분된다. 예를 들어 내부 메모리(100)는 도 4에 도시된 바와 같이 제1 메모리 영역(M1)과 제2 메모리 영역(M2)을 포함할 수 있다. 제1 메모리 영역(M1)은 빠른 읽기/쓰기 성능을 갖는 메모리로서, 예를 들어 SRAM(Static RAM)으로 구현될 수 있다. 제2 메모리 영역(M2)은 제1 메모리 영역(M1)에 비해 느린 읽기/쓰기 성능을 갖는 메모리로서 예를 들어 DRAM(Dynamic RAM)으로 구현될 수 있다. 이때 제1 메모리 영역에 배치되는 제1 스택 영역과 제2 메모리 영역에 배치되는 제2 스택 영역은 불연속적으로 분리될 수 있다. 이에 대한 구체적인 설명은 도 8에서 후술한다.
내부 메모리(100)는 버퍼 메모리, 즉, 스토리지 컨트롤러(20)의 동작 메모리로서 이용될 수 있다. 몇몇 실시예에 따라 내부 메모리(100)는 한 종류의 메모리일 수도 있고 또는 여러 종류의 메모리일 수도 있다. 예를 들어 내부 메모리(100)는 SRAM(Static RAM)일 수도 있고, 또는 내부 메모리(100)는 DRAM(Dynamic RAM)일 수도 있고 또는 내부 메모리(100)는 SRAM과 DRAM이 결합한 메모리일 수도 있다.
몇몇 실시예에 따라 RTOS 모듈(22)은 메모리(100)에 스레드 별 스택 사이즈를 할당하고, 스레드 처리시 메모리에 스택 프레임을 푸시 또는 팝하게 된다. 예를 들어 전자 시스템이 동작을 시작하게 되면 RTOS 모듈(22)은 먼저 제1 메모리 영역(M1)으로 스레드에 상응하는 스택 프레임들을 푸시/팝한다. 그러나 제1 메모리 영역(M1)의 사이즈는 한정적이므로, RTOS 모듈(22)은 제1 메모리 영역(M1)에서 스택 오버플로우가 발생하지 않도록 제1 메모리 영역의 스택 사이즈를 기준값에 따라 설정하고, 소정의 조건에 따라 오버플로우 알람을 발생할 수 있다. 제1 메모리 영역(M1)에 스레드가 푸시되다가 오버플로우 알람이 발생하면 이후 스레드는 제2 메모리 영역(M2)으로 연결되어 푸시된다.
몇몇 실시예에 따라 오버플로우 알람은 기준값과 현재 스택 사용량을 비교하여, 현재 스택 사용량이 기준값을 초과하면 발생한다. 일 예로 기준값을 기준으로 기설정된 범위의 레드 존 내로 스택이 사용되면 오버플로우 알람이 발생할 수 있다. 일 예로 제1 메모리 영역에서 스택 시그니처가 탐색되면, 오버플로우 알람이 발새할 수 있다. 일 예로 콜 그래프 모듈 및 런타임 프로파일러에서 산출된 콜 그래프, 노드별 콜 체인, 노드별 호출 확률과 상기 기준값을 대비하여 오버플로우가 발생하는지 기록한 콜 체인 히스토리 정보를 이용하여, 오버플로우 알람이 발생할 수도 있다. 즉 현재 사용량과 콜 체인 히스토리 정보를 비교하여 오버플로우 알람을 발생시킬 수 있다.
콜 그래프 모듈(25)은 RTOS 모듈(22)이 처리하는 스레드를 정적 코드 분석(Static Code Analysis)한다. 정적 코드 분석은 콜 그래프(Call graph), 예를 들면 스레드를 구성하는 코드를 분석하여, 스레드의 루트 함수로부터 콜 체인(call chain)을 파악한다. 즉, 콜 그래프 모듈(25)는 스레드의 루트 함수로부터 도달 가능한 모든 콜 체인을 포함한 콜 그래프를 작성하고, 콜 그래프에서 가장 긴 길이의 콜 체인, 즉 최대 콜 체인 뎁스를 추출할 수 있다.
런타임 프로파일러(24)는 콜 그래프에 대해 동적 코드 분석한다. 예를 들어 콜 그래프에 대한 런타임 프로파일링을 수행하여, 실시간으로 스레드별로 할당되어야 할 스택 사용량을 산출한다. 이에 따라 RTOS 모듈(22)은 콜 그래프 모듈(25)에서 추출된 최대 콜 체인 뎁스에 기초한 스택 사용량, 즉 최대 스택 사용량을 산출할 수 있다.
또한 런타임 프로파일러(24)는 스레드별 호출 함수의 스택 사용량을 산출하면서, 콜 그래프의 노드별 호출 확률을 산출한다. 즉 런타임 프로파일러(24)는 루트 함수에서 시작하여 여러 개의 가지 노드로 연결되는 콜 체인 별로 호출함수의 사용되는 확률을 산출하여, 수정 콜 그래프(augmented call graph)를 생성한다. 수정 콜 그래프는 이후 도 6 및 도 7에서 설명한다.
머신 러닝 모듈(26)은 콜 그래프 모듈(25)에서 생성한 콜 그래프, 런타임 프로파일러(24)에서 생성한 노드별 스택 사용량, 콜 그래프의 최대 스택 사용량을 고려하여 메모리에서 오버플로우가 발생하지 않게 하는 기준값을 미리 사전학습할 수 있다. 몇몇 실시예에 따라 머신 러닝 모듈(26)은 다양한 스레드별 호출 함수, 콜 그래프, 스택 사용량, 메모리의 스택 사이즈 등을 모두 고려하여 미리 사전학습하여 산출된 기준값을 맵 테이블로 저장할 수 있다. 또는 몇몇 실시예에 따라 머신러닝 모듈(26)은 다양한 스레드별 호출 함수, 콜 그래프, 스택 사용량, 메모리의 스택 사이즈 등의 상관관계로부터 적정한 기준값을 산출할 수 있는 연산 모듈 형태일 수도 있다.
머신 러닝 모듈(26)은 몇몇 실시예에 따라 미리 사전학습된 오버플로우 알람에 대한 정보, 예를 들어 오버플로우 예측정보를 저장할 수 있다. 예를 들어 머신 러닝 모듈(26)은 스레드, 콜 그래프, 노드별 스택 사용량 및 노드별 호출 확률에 대한 오버플로우 발생 확률을 맵테이블로 저장할 수도 있다.
메모리 인터페이스(27)는 도 1의 스토리지 장치(201) 또는 도 2의 메모리 장치(202)와 연결되는 인터페이스일 수 있다. 몇몇 실시예에 따라 메모리 인터페이스(26)는 스토리지 장치(201)와 연결되어 PCI-E(Peripheral Component Interconnect - Express), ATA(Advanced Technology Attachment), SATA(Serial ATA), PATA(Parallel ATA), SAS(serial attached SCSI) 또는 CXL(Compute eXpress Link)와 같은 인터페이스 프로토콜일 수도 있고, USB(Universal Serial Bus), MMC(Multi-Media Card), ESDI(Enhanced Small Disk Interface), 또는 IDE(Integrated Drive Electronics) 등과 같은 다른 인터페이스 프로토콜들 중 하나일 수 있다. 또는 몇몇 실시예에 따라 메모리 인터페이스(27)는 메모리 장치(202)와 연결되어 DDR(Double Data Rate), LPDDR(low power double data rate), GDDR(Graphics Double Data Rate), Wide I/O, HBM(High Bandwidth Memory), HMC(Hybrid Memory Cube) 또는 CXL(Compute eXpress Link) 등과 같은 인터페이스 표준들 중 하나에 기반하여 통신할 수 있다.
도 4를 참조하면, 내부 메모리(100)의 적어도 일부는 RTOS 모듈(22)의 동작 메모리로 이용될 수 있다. 내부 메모리(100)는 복수의 메모리 영역으로 구분될 수 있다. 예를 들어 제1 메모리 영역(M1)과 제2 메모리 영역(M2)으로 구분될 수 있다.
몇몇 실시예에 따라 제1 메모리 영역(M1)과 제2 메모리 영역(M2)은 하나의 메모리를 두 영역으로 나누어 사용하는 것일 수도 있고, 몇몇 실시예에 따라 복수의 메모리를 각각 제1 메모리 영역(M1)과 제2 메모리 영역(M2)으로 구분한 것일 수도 있다. 예를 들어 제1 메모리 영역(M1)은 SRAM(Static RAM)이고 제2 메모리 영역(M2)은 일반 동작 메모리일 수 있다. 다른 예를 들어 제1 메모리 영역(M1)은 RTOS 모듈(22)에 대한 TCM(Tightly Coupled Memory)이고 제2 메모리 영역(M2)은 일반 동작 메모리일 수 있다.
제1 메모리 영역(M1)은 제2 메모리 영역(M2)보다 보다 빠른 속도로 데이터 액세스를 할 수 있다. RTOS 모듈(22)은 스레드를 먼저 제1 메모리 영역(M1)에 푸시하고, 제1 메모리 영역(M1)에 스택 오버플로우 알람이 발생할 경우 제2 메모리 영역(M2)으로 이후 스레드를 푸시할 수 있다.
도 5를 참조하여 보다 구체적으로 설명하면, RTOS 모듈(22)은 내부 메모리(100)에 대해 스레드 별로 각각 독립적인 스택 영역을 할당한다.
몇몇 실시예에 따라 스레드 처리의 첫번째 동작(1st iteration)에서는 스레드들의 스택 사용량이 할당된 모든 구간에서 스택 사이즈(2KB, 2KB, 2KG, 2KB) 이내여서, 별 문제없이 동작할 수 있다.
몇몇 실시예에 따라 스레드 처리의 두번째 동작(2nd iteration)에서는 두번째 구간(A-②)과 같이 호출 함수의 스택 사용량이 할당된 스택 사이즈(1KB)를 초과하는 경우, 스택 오버플로우가 발생할 수 있다.
몇몇 실시예에 따라 세번째 동작(3rd iternation)에서는 보다 크게 할당된 스택 사이즈 내에서 스택을 사용하므로(A-③) 스택 오버플로우가 발생하지 않는다.
상술한 예시들과 같이 오버플로우가 일어나는 다양한 상황에 대처하여 오버플로우가 발생하지 않게 하려면, 스레드마다 콜 그래프에 기초하여 최대 콜 체인을 갖는 최대 스택 사용량을 기준으로 보수적으로 스택 사이즈를 결정해야 한다. 그러나 제1 메모리 영역(M1)은 자원이 한정되어 있고, 스레드마다 스택을 할당하기 때문에, 할당된 영역이 실제로 빈번하게 사용되지 않는 경우에도 자원을 할애해야 하기 때문에 메모리가 비효율적으로 활용될 수 있다.
따라서, RTOS 모듈(22)은 최대 스택 사용량이 아닌 적정 스택 사용량을 고려하여 제1 메모리 영역에 스레드별 스택 사이즈를 할당해야 한다. 이하 도 6 및 도 7에 따라 적정 스택 사용량을 할당하는 것에 대해 설명한다.
도 6 및 도 7은 몇몇 실시예에 따른 스레드의 콜 그래프를 도시한 것이다.
도 5 및 도 6을 참조하여 설명하면, 프로세서(23)에 의해 주어진 태스크에 대해 RTOS(22) 모듈이 적어도 하나의 스레드로 구분하였다고 하자. 콜 그래프 모듈(25)는 스레드의 호출함수들을 분석하여 도 6에 도시된 것과 같은 콜 그래프를 산출할 수 있다.
예를 들어, 스레드는 루트 함수 Root()로부터 3개 노드로 나누어진 콜 체인을 포함한다고 가정하자. 스레드는 루트 함수 Root()로부터 호출 함수 A(), 호출 함수 B(), 호출 함수 C()로 나누어지고, 각각의 호출함수는 서로 독립적인 적어도 하나의 호출 함수를 포함하는 콜 체인을 구성한다고 가정한다. 다양한 실시예에 따라 호출 함수는 서로 교차, 연계되거나 종속될 수 있으나 설명의 편의를 위해 각 콜 체인(call chain)은 서로 독립적이라고 가정하자. 도시된 예에서 호출 함수 A()는 종속되는 호출함수 Foo() 및 호출함수 Goo()와 연결된 콜 체인을 가지고, 호출 함수 B()는 별도의 종속된 호출함수가 없으며, 호출 함수 C()는 종속되는 호출함수 Hoo()에 연결된 콜체인을 갖는다.
런타임 프로파일러(24)는 콜 그래프에 대한 런타임 프로파일링을 수행하여 각 호출함수 별로 스택 사용량, 즉 메모리 사용량을 산출하면서, 각 노드별 호출 확률을 산출한다. 도시된 예에서 런타임 프로파일러(24)는 제1 노드의 스택 사용량은 [A, Foo, Goo]=[200KByte, 400KByte, 600KByte], 제2 노드의 스택사용량 [B]=[100KByte], 및 제3 노드의 스택 사용량은 [C, Hoo]=[300KByte, 400KByte]을 산출할 수 있다.
런타임 프로파일러(24)는 콜 그래프의 각 콜 체인 길이, 호출 함수 각각의 스택 사용량을 기초로 최대 콜 체인 깊이를 갖는 콜 체인을 추출할 수 있다. 도시된 예에서 호출 함수 A()에 기초한 제1 노드를 사용할 때 전체 스택 사용량은 200+400+600=1200KByte이 된다. 호출함수 B()에 기초한 제2 노드의 전체 스택 사용량은 100이 되고, 호출함수 C()에 기초한 제3 노드의 전체 스택 사용량은 300+400=700KByte이 된다. 런타임 프로파일러(24)는 전체 스택 사용량을 기준으로 최대값 1200KByte을 갖는 제1 노드를 최대 콜 체인으로 정하고, 최대 스택 사이즈를 1200KByte으로 결정할 수 있다.
런타임 프로파일러(24)는 콜 그래프를 프로파일링 하면서 각 호출 함수가 호출되는 정도를 예측하여 노드별 호출 확률을 산출할 수 있다. 전체 확률을 1이라고 할 때 도시된 예에서 호출 함수 A()에 기초한 제1 노드는 0.01의 확률로 호출되고, 호출함수 B()에 기초한 제2 노드는 0.9의 확률로 호출되며, 호출함수 C()에 기초한 제3 노드는 0.7의 확률로 호출되는 것으로 예측할 수 있다.
도 7을 참고하면, RTOS 모듈(22)은 각 노드별 호출 확률과 전체 스택 사용량을 고려하여 제1 메모리 영역(M1)에서 제2 메모리 영역(M2)으로 확장시키는 기준값을 설정할 수 있다.
예를 들어 제1 노드(A)의 전체 스택 사용량을 기준값으로 설정한다고 가정하자. 노드별 호출 확률에 기초하면 제1 노드(A)에 비해 제2 노드(B) 또는 제3 노드(C)가 보다 빈번하게 호출된다. 이 경우 스레드에 할당된 제1 메모리 영역의 스택 영역 중, 제2 노드(B) 대비 제1 노드(A)의 스택 사용량 차이(1200-100=1100), 즉 1100KByte만큼의 스택 영역이 제1 노드가 호출되기 전까지 사용되지 않는 공간으로 할당되어 비워져 있게 된다. 또는, 제3 노드(C) 대비 제1 노드(A)의 스택 사용량 차이(1200-700=500KByte), 즉 500KByte만큼의 스택 영역이 제1 노드가 호출되기 전까지 사용되지 않는 공간으로 할당되어 비워져 있게 된다. 즉 빈 공간 영역이 클수록 다른 스레드를 위한 스택 사이즈 할당에 어려움이 발생한다.
한편 노드별 호출 확률만 고려하여 제2 노드의 전체 스택 사용량을 스택 사이즈의 기준값으로 설정할 경우, 제3 노드와 제1 노드의 호출함수 실행시 기준값과 스택 사용량의 차이만큼 제1 메모리 영역에서 제2 메모리 영역으로 확장하여 실행하는 것이 보다 빈번해질 수 있다. 제2 메모리 영역은 제1 메모리 영역보다 메모리 용량은 크지만 처리성능이 낮기 때문에 제2 메모리 영역으로의 확장이 빈번하면 전자 시스템(1) 전체의 성능이 낮아질 수 있다.
따라서 스레드별 처리를 위한 공간으로 할당되더라도 따라 빈 공간이 적절하면서도 스택 오버플로우가 발생하지 않도록, RTOS 모듈(22)은 몇몇 실시예에 따라 노드별 호출 확률과 노드별 스택 사용량을 고려하여 기준값을 설정할 수 있다. 예를 들어 노드별 호출 확률이 높으면서 노드별 스택 사용량이 큰 콜 체인의 스택 사용량을 기준값으로 설정할 수 있다.
제3 노드(C)의 전체 스택 사용량을 기준값으로 설정할 경우(Th=500KByte), 제2 노드나 제3 노드가 호출되면 스택 오버플로우 발생없이 스레드가 처리될 수 있다. 다만 제1 노드(A)가 호출되는 경우 기준값 대비 초과되는 스택 사이즈는 제2 메모리 영역으로 확장하여 처리할 수 있다. 즉, 제1 노드(A)가 호출되면, 제1 메모리 영역(M1)을 우선적으로 사용하되, 제1 노드의 호출함수 Foo()의 처리시 기준값을 초과하는 스택영역은 제2 메모리 영역(M2)으로 연결하여 호출함수 Foo()의 나머지 스택 영역 및 호출함수 Goo()를 처리하여 푸시할 수 있다.
도 8은 몇몇 실시예에 따른 전자 시스템의 동작방법을 설명하기 위해 제1 및 제2 메모리 영역을 도시한 개념도이다. 도 7의 예시를 기초로 기준값을 제2 노드의 스택 사용량 500KByte으로 설정하였다고 가정하고, 제1 노드가 호출되는 경우라고 가정하자.
도 8을 참고하면, 실시간 운영 체제로 동작하는 스토리지 컨트롤러(20)는 컴파일러가 컴파일 시점에 개별함수별로 미리 생성하는 prologue 함수 및 epilogue 함수를 실행하여 스레드에 상응하는 스택을 처리한다. 상기 함수들은 기설정된 콜 컨벤션(calling convention)에 따라 기설정된 방향으로 스택을 푸시(push)하거나 팝(pop)하게 된다.
제1 메모리 영역(M1)에 제1 노드의 호출함수 A를 실행하여 데이터를 저장하고 이어서 호출함수 Foo()를 실행한다고 하자. 제1 메모리 영역에서 제2 메모리 영역으로 연결하기 위해서는 미리 지정된 제2 메모리 영역의 주소가 필요하고, 상기 지정된 주소를 알려주어 분리된 두 영역을 이어줄 수 있다.
도시된 예의 제1 메모리 영역(M1)은 아래에서 위로, 즉 어드레스가 증가하는 방향으로(Low address → High address) 데이터를 저장, 즉 팝(Pop)하는 것으로 설명하나 다양한 실시예에 따라 어드레스가 감소하는 방향(High address → Low address)로 데이터를 저장, 즉, 푸시할 수도 있다. 이하 설명에서는 스택이 자라나는 즉 어드레스가 증가하는 방향(pop)으로 설명하나, 본 발명의 범위가 이에 한정되는 것은 아니다.
특정 시점의 컨텍스트 스위칭 상황에서, 호출함수 Foo()가 실행될 때 복수의 스택 프레임이 제1 메모리 영역(M1)에 쌓이는데, 이때 기준값, 즉 스택 사이즈가 500KByte이어서, 호출함수 Foo()는 이미 사용된 호출함수 A()의 스택 사용량(200KByte)을 뺀 나머지 영역(300KByte)만으로는 제1 메모리 영역에 할당된 스택 사이즈(즉, 기준값)를 초과하여(나머지 영역 사이즈 300Kbyte < 호출함수 Foo 의 스택 사용량 400Kbyte) 오버플로우를 발생시킬 수 있다. RTOS 모듈(22)은 오버플로우를 방지하기 위해 스레드 간 컨텍스트 스위칭(context switching)이 일어날 때 제1 메모리 영역(M1)에서 제2 메모리 영역(M2)으로 확장할 수 있다. RTOS 모듈(22)은 오버플로우가 발생할 상황이 생기면 오버플로우 알람을 발생시킬 수 있다.
몇몇 실시예에 따라 RTOS 모듈(22)은 오버플로우 알람 발생시 제1 메모리 영역(M1)에서 사용되던 스택 포인터(calleee's SP, Add_x1)와 링크 레지스터 값(LR(original))을 저장하고, 제1 메모리 영역(M1)에서 가장 최근에 저장된 스택 프레임(X)을 제2 메모리 영역(M2)으로 복사한다. 이때 제1 메모리 영역(M1)에 가장 최근에 저장된 스택 프레임(X)는 어드레스 Add_x1에서부터 시작되어 어드레스 Add_x2까지의 주소를 갖는다고 하자. 스택 프레임(X)는 예를 들어 로컬 변수(local variables), 스택 R4, R5, R6 및 링크 레지스터값 LR(original))을 포함할 수 있고, 호출함수 Foo()의 복수의 스택 중 하나이므로 400KByte보다는 작은 스택 사이즈를 갖는다.
즉, RTOS 모듈(22)은 제1 메모리 영역(M1)의 스택 포인터(Callee's SP)를 제2 메모리 영역(M2)의 어드레스 Add_y1에 복사하고(Callee's SP(new)), 스택 프레임(X)를 스택 프레임(Y)로 복사한다. 예를 들어 expandTo 함수를 통해 제1 메모리 영역(M1)의 스택 포인터(Callee's SP)를 제2 메모리 영역(M2)의 어드레스 Add_y1에 복사하고, 스택 프레임(X)에 포함되어 있던 로컬 변수(local variables), 스택 R4, R5, R6 및 링크 레지스터값 LR(original))을 제2 메모리 영역(M2)에 저장한다.
제2 메모리 영역(M2)에는 복사된 스택 프레임(Y)부터 저장되기 때문에, 제1 메모리 영역(M1)에 저장된 스택들과 제2 메모리 영역(M2)에 저장된 스택들은 불연속적이다. 도시된 예에서 어드레스 Add_x1 내지 어드레스 Add_x2의 스택과 어드레스 Add_y1이후의 스택은 연속적이지 않다.
제2 메모리 영역(M2)은 스택 프레임을 복사하고, 차후 스레드 실행이 완료되었을 때 제1 메모리 영역으로 복귀하기 위해, 링크 레지스터값 LR(original)을 별도의 epilogue 함수 주소인 복귀 위치(Add_x2)로 변경한다(LR(backTo)). 이후 RTOS 모듈(22)은 호출 함수 Foo() 및 호출함수 Goo()를 어드레스 Add_y3까지 실행하고, epilogue함수를 실행하여 caller함수의 호출지점으로 실행흐름을 연결한다. 즉, 미리 저장해두었던 제1 메모리 영역(M1)의 스택 포인터(SP(caller), 즉, Add_x2)으로 돌아가면서 backTo함수를 호출하여 원래의 링크 레지스터값 LR(original)를 복원한다. RTOS 모듈(22)은 복원된 스택 포인터 및 링크 레지스터값에 기초하여 실행된 스택을 제1 메모리 영역(M1)으로 다시 복귀시킨다. 즉 RTOS 모듈(22)은 실행 흐름이 원활하도록 수행한다.
설명의 편의를 위해 epilogue 함수, backTo함수 등으로 설명하였으나 이는 일 실시예일 뿐, 다양한 실시예에 따라 호칭이 변경될 수 있음은 자명하다고 할 것이다.
도 9는 몇몇 실시예에 따른 전자 시스템이 제1 메모리 영역에서 제2 메모리 영역으로 확장하여 동작하는 것을 설명하기 위한 개념도이다.
도 9를 참조하면, 몇몇 실시예에 따른 전자 시스템은, 제1 메모리 영역(M1)의 레드 존(red zone) 내에서 스택이 사용되면, 즉 일 방향으로 스택이 쌓이다가 레드 존까지 차오르면 오버플로우 알람을 발생한다. 레드 존은 몇몇 실시예로, 스레드 별로 제1 메모리 영역에 할당되는 스택 사이즈인 기준값을 기준으로 하는 기설정된 범위의 메모리 영역을 말한다. 도시된 예에서 기준값이 어드레스 (High Address)보다 작은 지점에 설정되면, 레드 존은 기준값에서 가감되는 어드레스 범위의 영역을 의미할 수 있다.
몇몇 실시예에 따라 스레드에 포함된 호출 함수의 스택 사용량을 표시하기 위해 전자 시스템은 프레인 포인터(frame pointer)를 사용할 수 있다. RTOS 모듈(22)은 스레드에 포함된 특정 호출 함수 실행에 있어서 스택 포인터 지점(Add_x1)부터 스택을 쌓다가 상기 특정 호출 함수의 스택 사용량을 표시하는 프레임 포인터를 보고, 프레임 포인터가 레드 존 내로 들어오면, 오버플로우 알람을 발생하고 도 8에 따른 제2 메모리 영역으로 확장할 수 있다.
도 10은 몇몇 실시예에 따른 전자 시스템이 제1 메모리 영역에서 제2 메모리 영역으로 확장하여 동작하는 것을 설명하기 위한 개념도이다.
도 10을 참조하면, 몇몇 실시예에 따라 스레드에 포함된 호출 함수의 스택 사용량과 제1 메모리 영역(M1)의 스택 사이즈를 비교하기 위해 전자 시스템은 스택 시그니처를 사용할 수 있다.
몇몇 실시예에 따라 스택 시그니처는 도시된 바와 같은 기설정된 코드값(0xdeadbeef)일 수 있다. 또는 몇몇 실시예에 따라 스택 시그니처는 RTOS 모듈(22)에서 정해진 규칙에 따라 설정되는 값일 수도 있다.
RTOS 모듈(22)은 설정된 기준값을 기준으로 기설정된 위치에 스택 시그니처를 삽입할 수 있다. 일 실시예로 스택 시그니처는 도 9에서 설명한 레드 존 내에 삽입될 수 있다. 또는 다른 실시예로 스택 시그니처는 기준값에 상응하는 위치에 삽입될 수도 있다.
RTOS 모듈(22)은 스택을 쌓다가 제1 메모리 장치(M1)에서 스택 시그니처가 탐색되면, 제1 메모리 영역(M1)에서 제2 메모리 영역(M2)으로 주소를 연결하여 확장한다. 주소의 연결 및 확장에 대해서는 도 8에서 설명한 바와 같이 제2 메모리 영역으로 연결될 수 있다.
도 11은 몇몇 실시예에 따른 전자 시스템이 제1 메모리 영역에서 제2 메모리 영역으로 확장하여 동작하는 것을 설명하기 위한 개념도이다.
도 11을 참조하면, 몇몇 실시예에 따라 전자 시스템은 스레드에 포함된 호출 함수의 스택 사용량과 제1 메모리 영역(M1)의 스택 사이즈를 비교하기 위해 스택 포인터 및 기설정된 확장함수를 사용할 수 있다.
몇몇 실시예에 따라 전자 시스템의 설계자 또는 사용자는 확장함수를 호출하는 코드를 스레드에 상응하는 스택 프레임에 임의로 삽입할 수 있다. 예를 들어 RTOS 모듈(22)은 스택 프레임을 시작하는 스택 포인터를 기준으로 프레임 사이즈 이후 기설정된 확장함수를 호출하여 제1 메모리 영역(M1)에서 제2 메모리 영역(M2)으로 주소를 연결하여 확장한다. 주소의 연결 및 확장에 대해서는 도 8에서 설명한 바와 같이 제2 메모리 영역으로 연결될 수 있다.
도 12는 몇몇 실시예에 따른 전자 시스템의 동작방법을 설명하는 흐름도이다.
도 12를 참고하면, 실시간 운영 체제에서의 전자시스템의 동작 방법은, 태스크가 주어지면, 태스크에 상응하는 스레드들을 구분하고(S10), 각 스레드 별로 정적 코드 분석을 통해 콜 그래프를 탐색한다(S20). 콜 그래프가 확정되면, 전자 시스템은 동적 코드 분석, 즉, 런타임 프로파일링을 수행하여 스레드의 노드별 스택 사용량을 산출하고, 콜 그래프의 각 노드별 호출 확률을 산출한다(S30).
전자 시스템은 콜 그래프, 노드별 스택 사용량 및 노드별 호출 확률에 기초하여 스레드의 스택 사이즈를 정하는 기준값을 설정한다(S40). 스레드에 따른 호출함수들은 오버플로우 알람이 발생할 때까지(S60, N) 우선적으로 제1 메모리 영역(M1)에서 실행되고(S50), 오버플로우 알람이 발생하면(S60) 제1 메모리 영역(M1)에서 실행되던 스레드의 스택은 제2 메모리 영역(M2)으로 연결되어(S70) 호출함수들의 이후 스택들이 제2 메모리 영역에서 실행된다(S80).
제2 메모리 영역(M2)에서 해당 노드의 호출함수 실행이 모두 완료되면 확장을 위해 연결된 주소설정은 제2 메모리 영역(M2)에서 다시 제1 메모리 영역(M1)으로 복원되어(S90), 해당 노드의 콜 체인에 따른 스레드 처리가 완료된다(S100).
도 13은 본 발명의 일 실시예에 따른 스토리지(storage) 장치가 적용된 시스템을 도시한 도면이다. 도 13의 시스템(1000)은 기본적으로 휴대용 통신 단말기(mobile phone), 스마트폰(smart phone), 태블릿 PC(tablet personal computer), 웨어러블 기기, 헬스케어 기기 또는 IOT(internet of things) 기기와 같은 모바일(mobile) 시스템일 수 있다. 하지만 도 1의 시스템(1000)은 반드시 모바일 시스템에 한정되는 것은 아니고, 개인용 컴퓨터(personal computer), 랩탑(laptop) 컴퓨터, 서버(server), 미디어 재생기(media player) 또는 내비게이션(navigation)과 같은 차량용 장비(automotive device) 등이 될 수도 있다.
도 13을 참조하면, 시스템(1000)은 메인 프로세서(main processor)(1100), 메모리(1200a, 1200b) 및 스토리지 장치(1300a, 1300b)를 포함할 수 있으며, 추가로 촬영 장치(image capturing device)(1410), 사용자 입력 장치(user input device)(1420), 센서(1430), 통신 장치(1440), 디스플레이(1450), 스피커(1460), 전력 공급 장치(power supplying device)(1470) 및 연결 인터페이스(connecting interface)(1480) 중 하나 이상을 포함할 수 있다.
몇몇 실시예에 따라 메인 프로세서(1100)와 메모리(1200a 1200b)는 도 1의 호스트(10) 및 메모리 장치(202)일 수 있다. 또는 몇몇 실시예에 따라 스토리지 장치(1300a, 1300b)는 도 2의 스토리지 시스템(2)일 수 있다.
메인 프로세서(1100)는 시스템(1000)의 전반적인 동작, 보다 구체적으로는 시스템(1000)을 이루는 다른 구성 요소들의 동작을 제어할 수 있다. 이와 같은 메인 프로세서(1100)는 범용 프로세서, 전용 프로세서 또는 애플리케이션 프로세서(application processor) 등으로 구현될 수 있다.
메인 프로세서(1100)는 하나 이상의 CPU 코어(1110)를 포함할 수 있으며, 메모리(1200a, 1200b) 및/또는 스토리지 장치(1300a, 1300b)를 제어하기 위한 컨트롤러(1120)를 더 포함할 수 있다. 실시예에 따라서는, 메인 프로세서(1100)는 AI(artificial intelligence) 데이터 연산 등 고속 데이터 연산을 위한 전용 회로인 가속기(accelerator) 블록(1130)을 더 포함할 수 있다. 이와 같은 가속기 블록(1130)은 GPU(Graphics Processing Unit), NPU(Neural Processing Unit) 및/또는 DPU(Data Processing Unit) 등을 포함할 수 있으며, 메인 프로세서(1100)의 다른 구성 요소와는 물리적으로 독립된 별개의 칩(chip)으로 구현될 수도 있다.
메모리(1200a, 1200b)는 시스템(1000)의 주기억 장치로 사용될 수 있으며, SRAM 및/또는 DRAM 등의 휘발성 메모리를 포함할 수 있으나, 플래시 메모리, PRAM 및/또는 RRAM 등의 비휘발성 메모리를 포함할 수도 있다. 메모리(1200a, 1200b)는 메인 프로세서(1100)와 동일한 패키지 내에 구현되는 것도 가능하다.
스토리지 장치(1300a, 1300b)는 전원 공급 여부와 관계 없이 데이터를 저장하는 비휘발성 저장 장치로서 기능할 수 있으며, 메모리(1200a, 1200b)에 비해 상대적으로 큰 저장 용량을 가질 수 있다. 스토리지 장치(1300a, 1300b)는 스토리지 컨트롤러(1310a, 1310b)와, 스토리지 컨트롤러(1310a, 1310b)의 제어 하에 데이터를 저장하는 비휘발성(non-volatile memory, NVM) 스토리지(1320a, 1320b)를 포함할 수 있다. 비휘발성 메모리(1320a, 1320b)는 2D(2-dimensional) 구조 혹은 3D(3-dimensional) 구조의 V-NAND 플래시 메모리를 포함할 수 있으나, PRAM 및/또는 RRAM 등의 다른 종류의 비휘발성 메모리를 포함할 수도 있다.
스토리지 장치(1300a, 1300b)는 메인 프로세서(1100)와는 물리적으로 분리된 상태로 시스템(1000)에 포함될 수도 있고, 메인 프로세서(1100)와 동일한 패키지 내에 구현될 수도 있다. 또한, 스토리지 장치(1300a, 1300b)는 SSD(solid state device) 혹은 메모리 카드(memory card)와 같은 형태를 가짐으로써, 후술할 연결 인터페이스(1480)와 같은 인터페이스를 통해 시스템(1000)의 다른 구성 요소들과 탈부착 가능하도록 결합될 수도 있다. 이와 같은 스토리지 장치(1300a, 1300b)는 UFS(universal flash storage), eMMC(embedded multi-media card) 혹은 NVMe(non-volatile memory express)와 같은 표준 규약이 적용되는 장치일 수 있으나, 반드시 이에 한정되는 건 아니다.
촬영 장치(1410)는 정지 영상 또는 동영상을 촬영할 수 있으며, 카메라(camera), 캠코더(camcorder) 및/또는 웹캠(webcam) 등일 수 있다.
사용자 입력 장치(1420)는 시스템(1000)의 사용자로부터 입력된 다양한 유형의 데이터를 수신할 수 있으며, 터치 패드(touch pad), 키패드(keyboard), 키보드(keyboard), 마우스(mouse) 및/또는 마이크(microphone) 등일 수 있다.
센서(1430)는 시스템(1000)의 외부로부터 획득될 수 있는 다양한 유형의 물리량을 감지하고, 감지된 물리량을 전기 신호로 변환할 수 있다. 이와 같은 센서(1430)는 온도 센서, 압력 센서, 조도 센서, 위치 센서, 가속도 센서, 바이오 센서(biosensor) 및/또는 자이로스코프(gyroscope) 등일 수 있다.
통신 장치(1440)는 다양한 통신 규약에 따라 시스템(1000) 외부의 다른 장치들과의 사이에서 신호의 송신 및 수신을 수행할 수 있다. 이와 같은 통신 장치(1440)는 안테나, 트랜시버(transceiver) 및/또는 모뎀(MODEM) 등을 포함하여 구현될 수 있다.
디스플레이(1450) 및 스피커(1460)는 시스템(1000)의 사용자에게 각각 시각적 정보와 청각적 정보를 출력하는 출력 장치로 기능할 수 있다.
전력 공급 장치(1470)는 시스템(1000)에 내장된 배터리(도시 안함) 및/또는외부 전원으로부터 공급되는 전력을 적절히 변환하여 시스템(1000)의 각 구성 요소들에게 공급할 수 있다.
연결 인터페이스(1480)는 시스템(1000)과, 시스템(1000)에 연결되어 시스템(1000과 데이터를 주고받을 수 있는 외부 장치 사이의 연결을 제공할 수 있다. 연결 인터페이스(1480)는 ATA(Advanced Technology Attachment), SATA(Serial ATA), e-SATA(external SATA), SCSI(Small Computer Small Interface), SAS(Serial Attached SCSI), PCI(Peripheral Component Interconnection), PCIe(PCI express), NVMe(NVM express), IEEE 1394, USB(universal serial bus), SD(secure digital) 카드, MMC(multi-media card), eMMC(embedded multi-media card), UFS(Universal Flash Storage), eUFS(embedded Universal Flash Storage), CF(compact flash) 카드 인터페이스 등과 같은 다양한 인터페이스 방식으로 구현될 수 있다.
도 14은 몇몇 실시예에 따른 메모리 장치가 적용된 데이터 센터를 나타낸 도면이다.
도 14을 참조하면, 데이터 센터(2000)는 각종 데이터를 모아두고 서비스를 제공하는 시설로서, 데이터 스토리지 센터라고 지칭될 수도 있다. 데이터 센터(2000)는 검색 엔진 및 데이터 베이스 운용을 위한 시스템일 수 있으며, 은행 등의 기업 또는 정부기관에서 사용되는 컴퓨팅 시스템일 수 있다. 데이터 센터(2000)는 어플리케이션 서버들(2100 내지 2100n) 및 스토리지 서버들(2200 내지 2200m)을 포함할 수 있다. 어플리케이션 서버들(2100 내지 2100n)의 개수 및 스토리지 서버들(2200 내지 2200m)의 개수는 실시예에 따라 다양하게 선택될 수 있고, 어플리케이션 서버들(2100 내지 2100n)의 개수 및 스토리지 서버들(2200 내지 2200m)의 개수는 서로 다를 수 있다.
어플리케이션 서버(2100) 또는 스토리지 서버(2200)는 프로세서(2110, 2210) 및 메모리(2120, 2220) 중 적어도 하나를 포함할 수 있다. 몇몇 실시예에 따라 프로세서(2110, 2210) 및 메모리(2120, 2220)는 도 1의 호스트(10) 및 메모리 장치(202)일 수 있다.
스토리지 서버(2200)를 예시로 설명하면, 프로세서(2210)는 스토리지 서버(2200)의 전반적인 동작을 제어할 수 있고, 메모리(2220)에 액세스하여 메모리(2220)에 로딩된 명령어 및/또는 데이터를 실행할 수 있다. 메모리(2220)는 DDR SDRAM(Double Data Rate Synchronous DRAM), HBM(High Bandwidth Memory), HMC(Hybrid Memory Cube), DIMM(Dual In-line Memory Module), Optane DIMM 또는 NVMDIMM(Non-Volatile DIMM)일 수 있다. 실시예에 따라, 스토리지 서버(2200)에 포함되는 프로세서(2210)의 개수 및 메모리(2220)의 개수는 다양하게 선택될 수 있다. 일 실시예에서, 프로세서(2210)와 메모리(2220)는 프로세서-메모리 페어를 제공할 수 있다. 일 실시예에서, 프로세서(2210)와 메모리(2220)의 개수는 서로 다를 수도 있다. 프로세서(2210)는 단일 코어 프로세서 또는 다중 코어 프로세서를 포함할 수 있다. 스토리지 서버(2200)에 대한 상기 설명은, 어플리케이션 서버(2100)에도 유사하게 적용될 수 있다. 실시예에 따라, 어플리케이션 서버(2100)는 스토리지 장치(2150)를 포함하지 않을 수도 있다. 스토리지 서버(2200)는 적어도 하나 이상의 스토리지 장치(2250)를 포함할 수 있다. 스토리지 서버(2200)에 포함되는 스토리지 장치(2250)의 개수는 실시예에 따라 다양하게 선택될 수 있다. 몇몇 실시예에 따라 스토리지 장치(2250)는 도 2의 스토리지 시스템(2)일 수 있다
어플리케이션 서버들(2100 내지 2100n) 및 스토리지 서버들(2200 내지 2200m)은 네트워크(2300)를 통해 서로 통신할 수 있다. 네트워크(2300)는 FC(Fibre Channel) 또는 이더넷(Ethernet) 등을 이용하여 구현될 수 있다. 이 때, FC는 상대적으로 고속의 데이터 전송에 사용되는 매체이며, 고성능/고가용성을 제공하는 광 스위치를 사용할 수 있다. 네트워크(2300)의 액세스 방식에 따라 스토리지 서버들(2200 내지 2200m)은 파일 스토리지, 블록 스토리지, 또는 오브젝트 스토리지로서 제공될 수 있다.
일 실시예에서, 네트워크(2300)는 SAN(Storage Area Network)와 같은 스토리지 전용 네트워크일 수 있다. 예를 들어, SAN은 FC 네트워크를 이용하고 FCP(FC Protocol)에 따라 구현된 FC-SAN일 수 있다. 다른 예를 들어, SAN은 TCP/IP 네트워크를 이용하고 iSCSI(SCSI over TCP/IP 또는 Internet SCSI) 프로토콜에 따라 구현된 IP-SAN일 수 있다. 다른 실시예에서, 네트워크(1300)는 TCP/IP 네트워크와 같은 일반 네트워크일 수 있다. 예를 들어, 네트워크(1300)는 FCoE(FC over Ethernet), NAS(Network Attached Storage), NVMe-oF(NVMe over Fabrics) 등의 프로토콜에 따라 구현될 수 있다.
이하에서는, 어플리케이션 서버(2100) 및 스토리지 서버(2200)를 중심으로 설명하기로 한다. 어플리케이션 서버(2100)에 대한 설명은 다른 어플리케이션 서버(2100n)에도 적용될 수 있고, 스토리지 서버(2200)에 대한 설명은 다른 스토리지 서버(2200m)에도 적용될 수 있다.
어플리케이션 서버(2100)는 사용자 또는 클라이언트가 저장 요청한 데이터를 네트워크(2300)를 통해 스토리지 서버들(2200 내지 2200m) 중 하나에 저장할 수 있다. 또한, 어플리케이션 서버(2100)는 사용자 또는 클라이언트가 독출 요청한 데이터를 스토리지 서버들(2200 내지 2200m) 중 하나로부터 네트워크(2300)를 통해 획득할 수 있다. 예를 들어, 어플리케이션 서버(2100)는 웹 서버 또는 DBMS(Database Management System) 등으로 구현될 수 있다.
어플리케이션 서버(2100)는 네트워크(2300)를 통해 다른 어플리케이션 서버(2100n)에 포함된 메모리(2120n) 또는 스토리지 장치(2150n)에 액세스할 수 있고, 또는 네트워크(2300)를 통해 스토리지 서버(2200-2200m)에 포함된 메모리(2220-2220m) 또는 스토리지 장치(2250-2250m)에 액세스할 수 있다. 이로써, 어플리케이션 서버(2100)는 어플리케이션 서버들(2100-2100n) 및/또는 스토리지 서버들(2200-2200m)에 저장된 데이터에 대해 다양한 동작들을 수행할 수 있다. 예를 들어, 어플리케이션 서버(2100)는 어플리케이션 서버들(2100-2100n) 및/또는 스토리지 서버들(2200-2200m) 사이에서 데이터를 이동 또는 카피(copy)하기 위한 명령어를 실행할 수 있다. 이 때 데이터는 스토리지 서버들(2200-2200m)의 스토리지 장치로(2250-2250m)부터 스토리지 서버들(2200-2200m)의 메모리들(2220-2220m)을 거쳐서, 또는 바로 어플리케이션 서버들(2100-2100n)의 메모리(2120-2120n)로 이동될 수 있다. 네트워크(2300)를 통해 이동하는 데이터는 보안 또는 프라이버시를 위해 암호화된 데이터일 수 있다.
스토리지 서버(2200)를 예시로 설명하면, 인터페이스(2254)는 프로세서(2210)와 컨트롤러(2251)의 물리적 연결 및 NIC(2240)와 컨트롤러(2251)의 물리적 연결을 제공할 수 있다. 예를 들어, 인터페이스(2254)는 스토리지 장치(2250)를 전용 케이블로 직접 접속하는 DAS(Direct Attached Storage) 방식으로 구현될 수 있다. 또한, 예를 들어, 인터페이스(2254)는 ATA(Advanced Technology Attachment), SATA(Serial ATA), e-SATA(external SATA), SCSI(Small Computer Small Interface), SAS(Serial Attached SCSI), PCI(Peripheral Component Interconnection), PCIe(PCI express), NVMe(NVM express), IEEE 1394, USB(universal serial bus), SD(secure digital) 카드, MMC(multi-media card), eMMC(embedded multi-media card), UFS(Universal Flash Storage), eUFS(embedded Universal Flash Storage), CF(compact flash) 카드 인터페이스 등과 같은 다양한 인터페이스 방식으로 구현될 수 있다.
스토리지 서버(2200)는 스위치(2230) 및 NIC(2240)을 더 포함할 수 있다. 스위치(2230)는 프로세서(2210)의 제어에 따라 프로세서(2210)와 스토리지 장치(2250)를 선택적으로 연결시키거나, NIC(2240)과 스토리지 장치(2250)를 선택적으로 연결시킬 수 있다.
일 실시예에서 NIC(2240)는 네트워크 인터페이스 카드, 네트워크 어댑터 등을 포함할 수 있다. NIC(2240)는 유선 인터페이스, 무선 인터페이스, 블루투스 인터페이스, 광학 인터페이스 등에 의해 네트워크(2300)에 연결될 수 있다. NIC(2240)는 내부 메모리, DSP, 호스트 버스 인터페이스 등을 포함할 수 있으며, 호스트 버스 인터페이스를 통해 프로세서(2210) 및/또는 스위치(2230) 등과 연결될 수 있다. 호스트 버스 인터페이스는, 앞서 설명한 인터페이스(2254)의 예시들 중 하나로 구현될 수도 있다. 일 실시예에서, NIC(2240)는 프로세서(2210), 스위치(2230), 스토리지 장치(2250) 중 적어도 하나와 통합될 수도 있다.
스토리지 서버(2200-2200m) 또는 어플리케이션 서버(2100-2100n)에서 프로세서는 스토리지 장치(2130-2130n, 2250-2250m) 또는 메모리(2120-2120n, 2220-2220m)로 커맨드를 전송하여 데이터를 프로그램하거나 리드할 수 있다. 이 때 데이터는 ECC(Error Correction Code) 엔진을 통해 에러 정정된 데이터일 수 있다. 데이터는 데이터 버스 변환(Data Bus Inversion: DBI) 또는 데이터 마스킹(Data Masking: DM) 처리된 데이터로서, CRC(Cyclic Redundancy Code) 정보를 포함할 수 있다. 데이터는 보안 또는 프라이버시를 위해 암호화된 데이터일 수 있다.
스토리지 장치(2150-2150m, 2250-2250m)는 프로세서로부터 수신된 리드 커맨드에 응답하여, 제어 신호 및 커맨드/어드레스 신호를 NAND 플래시 메모리 장치(2252-2252m)로 전송할 수 있다. 이에 따라 NAND 플래시 메모리 장치(2252-2252m)로부터 데이터를 독출하는 경우, RE(Read Enable) 신호는 데이터 출력 제어 신호로 입력되어, 데이터를 DQ 버스로 출력하는 역할을 할 수 있다. RE 신호를 이용하여 DQS(Data Strobe)를 생성할 수 있다. 커맨드와 어드레스 신호는 WE(Write Enable) 신호의 상승 엣지 또는 하강 엣지에 따라 페이지 버퍼에 래치될 수 있다.
컨트롤러(2251)는 스토리지 장치(2250)의 동작을 전반적으로 제어할 수 있다. 일 실시예에서, 컨트롤러(2251)는 SRAM(Static Random Access Memory)을 포함할 수 있다. 컨트롤러(2251)는 기입 커맨드에 응답하여 낸드 플래시(2252)에 데이터를 기입할 수 있고, 또는 독출 커맨드에 응답하여 낸드 플래시(2252)로부터 데이터를 독출할 수 있다. 예를 들어, 기입 커맨드 및/또는 독출 커맨드는 스토리지 서버(2200) 내의 프로세서(2210), 다른 스토리지 서버(2200m) 내의 프로세서(2210m) 또는 어플리케이션 서버(2100, 2100n) 내의 프로세서(2110, 2110n)로부터 제공될 수 있다. DRAM(3253)은 낸드 플래시(2252)에 기입될 데이터 또는 낸드 플래시(2252)로부터 독출된 데이터를 임시 저장(버퍼링)할 수 있다. 또한, DRAM(3253)은 메타 데이터를 저장할 수 있다. 여기서, 메타 데이터는 사용자 데이터 또는 낸드 플래시(2252)를 관리하기 위해 컨트롤러(2251)에서 생성된 데이터이다. 스토리지 장치(2250)는 보안 또는 프라이버시를 위해 SE(Secure Element)를 포함할 수 있다.
이상 첨부된 도면을 참조하여 본 발명의 실시예를 설명하였지만, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자는 본 발명이 그 기술적 사상이나 필수적인 특징을 변경하지 않고서 다른 구체적인 형태로 실시될 수 있다는 것을 이해할 수 있을 것이다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적이 아닌 것으로 이해해야만 한다.
1: 전자 시스템
10 : 호스트 2: 스토리지 장치
20-1 : 스토리지 컨트롤러 20-2 : 메모리 컨트롤러
201 : 스토리지 장치 202 : 메모리 장치
21 : 호스트 인터페이스 22 : RTOS 모듈
23 : 프로세서 24: 런타임 프로파일러
25 : 콜그래프 모듈 26 : 머신러닝 모듈
27 : 내부 메모리 27 : 메모리 인터페이스
M1 : 제1 메모리 영역 M2 : 제2 메모리 영역
10 : 호스트 2: 스토리지 장치
20-1 : 스토리지 컨트롤러 20-2 : 메모리 컨트롤러
201 : 스토리지 장치 202 : 메모리 장치
21 : 호스트 인터페이스 22 : RTOS 모듈
23 : 프로세서 24: 런타임 프로파일러
25 : 콜그래프 모듈 26 : 머신러닝 모듈
27 : 내부 메모리 27 : 메모리 인터페이스
M1 : 제1 메모리 영역 M2 : 제2 메모리 영역
Claims (20)
- 실시간 운영 체제(Real Time Operating System)에서의 전자 시스템의 동작방법에 있어서,
태스크에 상응하는 적어도 하나의 스레드(Thread)를 정적 코드 분석하여 콜 그래프를 산출하는 단계;
상기 콜 그래프에 대한 런타임 프로파일링을 수행하여 상기 스레드의 스택 사용량 및 노드별 호출 확률을 산출하는 단계;
상기 콜 그래프 및 상기 노드별 호출 확률 및 스택 사용량을 고려하여 제1 메모리 영역에 대한 스택 사이즈의 기준값을 할당하는 단계;
상기 기준값과 상기 제1 메모리 영역의 스택 사용량의 비교결과에 따라 스택을 상기 제1 메모리 영역에서 제2 메모리 영역으로 확장하여 저장하는 단계; 및
상기 제2 메모리 영역에서 실행이 완료되면 상기 스택을 상기 제1 메모리로 복귀하는 단계를 포함하고,
상기 전자 시스템은 상기 제1 메모리 영역 및 상기 제2 메모리 영역을 포함하는 메모리 장치를 포함하는 전자 시스템의 동작방법. - 제1항에 있어서, 상기 기준값은 상기 스레드의 콜 그래프, 노드별 스택 사용량 및 상기 노드별 호출 확률에 기초하여 설정되고, 상기 설정된 기준값은 상기 콜 그래프의 최대 스택 사용량보다는 작은 사이즈를 갖는, 전자 시스템의 동작방법.
- 제1항에 있어서, 상기 제1 메모리 영역에서 상기 제2 메모리 영역으로 확장하는 것은
상기 제1 메모리 영역에서 오버플로우 알람이 발생하는 단계;
상기 제1 메모리 영역에서 가장 마지막에 실행된 스택 프레임을 상기 제2 메모리 영역으로 복사하는 단계;
상기 제2 메모리 영역에서 상기 스레드의 나머지 스택 프레임을 실행하고 저장하는 단계; 및
상기 나머지 스택에 대한 실행이 종료되면, 상기 제2 메모리 영역의 스택 포인터를 상기 제1 메모리 영역으로 복원하는 단계를 더 포함하는, 전자 시스템의 동작방법. - 제3항에 있어서, 상기 복사하는 단계는
상기 제1 메모리 영역의 스택 포인터와 링크 레지스터 값을 저장하고,
상기 제1 메모리 영역에서 가장 마지막에 실행된 스택 프레임을 상기 제2 메모리 영역으로 복사하고,
상기 저장된 링크 레지스터 값을 상기 제1 메모리 영역의 복귀 위치로 변경하는 것인, 전자 시스템의 동작방법. - 제4항에 있어서,
상기 제2 메모리 영역에서 이후 스택들을 실행하고,
상기 저장된 스택 포인터와 상기 변경된 복귀 위치를 기초로 상기 제1 메모리 영역으로 실행된 스택을 복귀시키는, 전자시스템의 동작 방법. - 제1항에 있어서, 상기 콜 그래프, 상기 스택 사용량 및 상기 노드별 호출 확률에 따른 상기 기준값을 머신러닝으로 사전학습하여 설정하는 것인, 전자 시스템의 동작방법.
- 제1항에 있어서, 상기 제1 메모리 영역에 저장되는 제1 스택과 상기 제2 메모리 영역에 저장되는 제2 스택은 불연속적인, 전자 시스템의 동작방법.
- 제1항에 있어서, 상기 저장하는 단계는 상기 제1 메모리 영역의 기설정된 레드 존 내에 상기 스택이 저장되면 이후 스택은 상기 제2 메모리 영역으로 저장되는, 전자 시스템의 동작방법.
- 제1항에 있어서, 상기 저장하는 단계는 상기 기준값에 상응하는 위치에서 스택 시그니처가 탐색되면 이후 스택을 상기 제2 메모리 영역으로 확장하여 저장하는, 전자 시스템의 동작방법.
- 제1항에 있어서, 상기 저장하는 단계는 기설정된 함수 호출을 통해 상기 스택을 상기 제2 메모리 영역으로 연결하여 저장하는, 전자 시스템의 동작방법.
- 호스트의 명령을 적어도 하나의 스레드(Thread)로 구분하여 처리(process)하는 RTOS 모듈;
상기 스레드를 정적 코드 분석하여 콜 그래프로 산출하는 콜 그래프 모듈;
상기 콜 그래프에 대한 런타임 프로파일링을 수행하여 노드별 스택 사용량 및 노드별 호출 확률을 산출하는 런타임 프로파일러; 및
제1 메모리 영역 및 제2 메모리 영역을 포함하는 메모리 장치를 포함하고,
상기 RTOS 모듈은
상기 노드별 스택 사용량 및 노드별 호출 확률에 따른 기준값에 기초하여 상기 제1 메모리 영역에 상기 스레드에 상응하는 스택 공간을 할당하고,
상기 할당된 스택 공간에 상기 스레드에 상응하는 스택을 상기 제1 메모리 영역에 저장하고,
상기 노드별 호출 확률 및 상기 노드별 스택 사용량에 기초한 오버플로우 알람이 발생하면, 이후 스택을 상기 제2 메모리 영역으로 연결하여 저장하는, 전자 시스템. - 제11항에 있어서, 상기 제1 메모리 영역에 배치되는 제1 스택 영역과 제2 메모리 영역에 배치되는 제2 스택 영역은 불연속적인, 전자 시스템.
- 제12항에 있어서, 상기 제2 메모리 영역은 상기 제1 메모리 영역에서 연결되기 전까지 상기 스레드에 사용되지 않는 것인, 전자 시스템.
- 제11항에 있어서, 상기 RTOS 모듈은
상기 오버플로우 알람이 발생하면 상기 제1 메모리 영역에서 가장 마지막에 실행된 스택 프레임을 상기 제2 메모리 영역으로 복사하고,
상기 제2 메모리 영역에서 상기 스레드의 나머지 스택을 실행하고 저장하는, 전자 시스템. - 제14항에 있어서, 상기 RTOS 모듈은
상기 제2 메모리 영역에서 상기 나머지 스택에 대한 실행이 종료되면 스택 포인터와 링크 레지스터값을 이용하여 상기 제1 메모리 영역으로 실행된 스택을 복귀시키는 전자 시스템. - 제11항에 있어서, 상기 RTOS 모듈은
상기 스레드의 루트함수로부터 도달 가능한 최대 콜 체인 뎁스를 갖는 스택 사용량을 최대 스택 사용량으로 설정하고,
상기 기준값은 상기 최대 스택 사용량 이하로 설정하는 것인, 전자 시스템. - 제11항에 있어서,
스레드별 호출 함수, 콜 그래프, 스택 사용량, 메모리의 스택 사이즈 등을 모두 고려하여 미리 사전학습하여 산출된 상기 기준값을 맵 테이블로 저장하는 머신 러닝 모듈을 더 포함하는, 전자 시스템. - 제11항에 있어서, 상기 메모리 장치는 상기 제1 메모리 영역의 스택 사용량이 상기 기준값으로부터 기설정된 범위 내로 도달하면, 상기 제2 메모리 영역으로 상기 스택을 저장하는, 전자 시스템.
- 제11항에 있어서, 상기 메모리 장치는
상기 스레드에 상응하는 스택을 상기 제1 메모리 영역 영역에 우선 저장하고,
스택 시그니처가 탐색되면 이후 스택을 상기 제2 메모리 영역으로 확장하여 저장하는, 전자 시스템. - 제11항에 있어서, 상기 RTOS 모듈은
상기 제1 메모리 영역의 사용량이 상기 기준값에 도달할 때까지 상기 스택을 상기 제1 메모리 영역에 저장하고,
상기 제1 메모리 영역의 사용량이 상기 기준값에 도달하면, 기설정된 함수를 호출하며,
이후 스택은 상기 호출된 함수에 따라 상기 제2 메모리 영역에 저장되는, 전자 시스템.
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020220006723A KR102365261B1 (ko) | 2022-01-17 | 2022-01-17 | 전자시스템, 그 동작방법 및 그 메모리 장치의 동작방법 |
US17/994,163 US20230229493A1 (en) | 2022-01-17 | 2022-11-25 | Electronic system, operating method thereof, and operating method of memory device |
CN202310075405.0A CN116450031A (zh) | 2022-01-17 | 2023-01-16 | 电子系统、电子系统的操作方法及存储器件的操作方法 |
EP23152024.8A EP4213021A1 (en) | 2022-01-17 | 2023-01-17 | Electronic system, operating method thereof, and operating method of memory device |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020220006723A KR102365261B1 (ko) | 2022-01-17 | 2022-01-17 | 전자시스템, 그 동작방법 및 그 메모리 장치의 동작방법 |
Publications (1)
Publication Number | Publication Date |
---|---|
KR102365261B1 true KR102365261B1 (ko) | 2022-02-18 |
Family
ID=80495112
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020220006723A KR102365261B1 (ko) | 2022-01-17 | 2022-01-17 | 전자시스템, 그 동작방법 및 그 메모리 장치의 동작방법 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20230229493A1 (ko) |
EP (1) | EP4213021A1 (ko) |
KR (1) | KR102365261B1 (ko) |
CN (1) | CN116450031A (ko) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2003271448A (ja) * | 2002-03-18 | 2003-09-26 | Fujitsu Ltd | スタック管理方法及び情報処理装置 |
KR20080064577A (ko) * | 2007-01-05 | 2008-07-09 | 삼성전자주식회사 | 임베디드 시스템의 스택 오버플로우 방지 방법 및 장치 |
JP2009251681A (ja) * | 2008-04-01 | 2009-10-29 | Canon Inc | スタック領域の拡張方法及びプログラム |
KR20100133463A (ko) * | 2006-06-06 | 2010-12-21 | 콸콤 인코포레이티드 | 프로세서 코어 스택 익스텐션 |
KR20110052903A (ko) * | 2009-11-13 | 2011-05-19 | 삼성전자주식회사 | 컴퓨팅 시스템 및 컴퓨팅 시스템의 메모리 관리 방법 |
CN107729240A (zh) * | 2017-09-30 | 2018-02-23 | 山东省科学院自动化研究所 | 嵌入式软件堆栈溢出检测方法和装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6968557B1 (en) * | 2000-12-18 | 2005-11-22 | Stratum8 Corporation | Reducing stack memory resources in a threaded computer system |
US7178002B2 (en) * | 2002-07-24 | 2007-02-13 | Sun Microsystems, Inc. | Methods and systems for dynamically growing multiple stacks |
-
2022
- 2022-01-17 KR KR1020220006723A patent/KR102365261B1/ko active IP Right Grant
- 2022-11-25 US US17/994,163 patent/US20230229493A1/en active Pending
-
2023
- 2023-01-16 CN CN202310075405.0A patent/CN116450031A/zh active Pending
- 2023-01-17 EP EP23152024.8A patent/EP4213021A1/en active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2003271448A (ja) * | 2002-03-18 | 2003-09-26 | Fujitsu Ltd | スタック管理方法及び情報処理装置 |
KR20100133463A (ko) * | 2006-06-06 | 2010-12-21 | 콸콤 인코포레이티드 | 프로세서 코어 스택 익스텐션 |
KR20080064577A (ko) * | 2007-01-05 | 2008-07-09 | 삼성전자주식회사 | 임베디드 시스템의 스택 오버플로우 방지 방법 및 장치 |
JP2009251681A (ja) * | 2008-04-01 | 2009-10-29 | Canon Inc | スタック領域の拡張方法及びプログラム |
KR20110052903A (ko) * | 2009-11-13 | 2011-05-19 | 삼성전자주식회사 | 컴퓨팅 시스템 및 컴퓨팅 시스템의 메모리 관리 방법 |
CN107729240A (zh) * | 2017-09-30 | 2018-02-23 | 山东省科学院自动化研究所 | 嵌入式软件堆栈溢出检测方法和装置 |
Non-Patent Citations (1)
Title |
---|
논문(2019.01.07) * |
Also Published As
Publication number | Publication date |
---|---|
EP4213021A1 (en) | 2023-07-19 |
CN116450031A (zh) | 2023-07-18 |
US20230229493A1 (en) | 2023-07-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI750176B (zh) | 對記憶體通道執行軟體調訓的電子裝置、其記憶體通道調訓方法及其系統 | |
CN115658277B (zh) | 一种任务调度方法、装置及电子设备和存储介质 | |
JP7039631B2 (ja) | アクセスリクエストを管理するための方法、装置、デバイス、および記憶媒体 | |
KR102646619B1 (ko) | 컴포지트 메모리 장치를 포함하는 전자 장치에 파일 시스템을 제공하는 시스템 및 방법 | |
CN108932154B (zh) | 一种分布式虚拟机管理器 | |
US9286199B2 (en) | Modifying memory space allocation for inactive tasks | |
US20220114086A1 (en) | Techniques to expand system memory via use of available device memory | |
US10725824B2 (en) | Thread associated memory allocation and memory architecture aware allocation | |
WO2023231345A1 (zh) | 对多个交易进行分组的方法和区块链节点 | |
US11231852B2 (en) | Efficient sharing of non-volatile memory | |
US20230028071A1 (en) | Memory module, system including the same, and operation method of memory module | |
US11836087B2 (en) | Per-process re-configurable caches | |
Kim et al. | SMT: Software-defined memory tiering for heterogeneous computing systems with CXL memory expander | |
CN118312102A (zh) | Io请求处理方法、装置、存储设备及存储介质 | |
JP2023527770A (ja) | メモリにおける推論 | |
KR102365261B1 (ko) | 전자시스템, 그 동작방법 및 그 메모리 장치의 동작방법 | |
CN116680211A (zh) | 虚拟内存管理方法、装置、电子设备和存储介质 | |
WO2019223445A1 (zh) | 硬盘读写控制方法、装置、电子设备及存储介质 | |
US11093341B1 (en) | Systems and methods of data auto-tiering using relativized discrepancy | |
TWI757741B (zh) | 安全任務處理方法和電子設備 | |
KR20220049294A (ko) | 스케줄러, 스케줄러의 동작 방법 및 이를 포함한 전자 장치 | |
US20240320061A1 (en) | Method and system for controlling access to shared resources | |
US12093528B2 (en) | System and method for managing data access in distributed systems | |
US20230214258A1 (en) | Storage controller and storage device | |
CN118113501A (zh) | 用于检查点的数据处理方法和数据处理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A302 | Request for accelerated examination | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |