KR102185294B1 - Apparatus and method for analyzing source code of concurrent program and computer readible storage medium therefor - Google Patents
Apparatus and method for analyzing source code of concurrent program and computer readible storage medium therefor Download PDFInfo
- Publication number
- KR102185294B1 KR102185294B1 KR1020190002270A KR20190002270A KR102185294B1 KR 102185294 B1 KR102185294 B1 KR 102185294B1 KR 1020190002270 A KR1020190002270 A KR 1020190002270A KR 20190002270 A KR20190002270 A KR 20190002270A KR 102185294 B1 KR102185294 B1 KR 102185294B1
- Authority
- KR
- South Korea
- Prior art keywords
- source code
- syntax
- information
- memory
- work list
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/865—Monitoring of software
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
일 실시예에 따른 병렬 프로그램의 소스 코드 분석 장치는, 병렬 프로그램의 소스 코드로부터 분석에 필요한 정보를 추출하는 구문 분석부, 공유 자원에 대한 정보를 저장하는 글로벌 메모리, 상기 공유 자원에 대한 접근 제어를 동기화하기 위한 정보를 저장하는 접근 제어 메모리 및 적어도 하나 이상의 동적으로 생성되는 워크 리스트- 상기 워크 리스트는 구문을 저장하는 구문 영역 및 상기 구문 영역의 구문의 실행 결과를 저장하는 메모리 영역을 포함함-를 포함하는 메모리부, 상기 추출된 정보 및 상기 접근 제어 메모리의 값에 기초하여 상기 병렬 프로그램의 실행 흐름을 시뮬레이션 하여 상기 소스 코드 중 다음에 실행될 구문을 결정하고, 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 구문 영역에 상기 결정된 구문을 추가하는 할일 관리부, 상기 결정된 구문을 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역에 저장되어 있는 정보 및 상기 글로벌 메모리에 저장되어 있는 정보에 기초하여 기호 실행하고 기호 실행한 결과를 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역 또는 상기 글로벌 메모리에 저장하는 기호 실행부, 및 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역의 상태 및 상기 글로벌 메모리의 상태에 기초하여 상기 소스 코드에서 문제를 일으킬 수 있는 결함에 관한 정보를 검출하는 결함 검출부를 포함한다.The source code analysis apparatus of a parallel program according to an embodiment includes a parsing unit for extracting information necessary for analysis from the source code of the parallel program, a global memory storing information on a shared resource, and access control for the shared resource. Access control memory for storing information for synchronization and at least one dynamically generated work list- The work list includes a syntax area for storing a syntax and a memory area for storing execution results of the syntax of the syntax area. A memory unit including, based on the extracted information and the value of the access control memory, the execution flow of the parallel program is simulated to determine the next statement to be executed among the source codes, and a work list for the thread to which the determined statement belongs A to-do management unit that adds the determined syntax to the syntax area of, and the determined syntax is a preference based on information stored in the memory area of a work list for a thread to which the determined syntax belongs and information stored in the global memory. A symbol execution unit that stores the execution and symbol execution result in the memory area of the work list or the global memory for the thread to which the determined syntax belongs, and the state of the memory area of the work list for the thread to which the determined syntax belongs, and And a defect detector configured to detect information on a defect that may cause a problem in the source code based on the state of the global memory.
Description
본 발명은 병렬 프로그램의 소스 코드 분석 장치 및 방법에 관한 것으로, 보다 자세하게는 병렬 프로그램의 실행 흐름을 추적하여 병렬 프로그램의 소스 코드에서 문제를 일으킬 수 있는 결함을 검출하는 소스 코드 분석 장치 및 방법에 관한 것이다.The present invention relates to an apparatus and method for analyzing a source code of a parallel program, and more particularly, to a source code analysis apparatus and method for detecting a defect that may cause a problem in the source code of a parallel program by tracking the execution flow of the parallel program. will be.
프로그램 소스 코드의 정적 분석은 컴퓨터 소프트웨어를 분석하는 여러 가지 방법 중 하나이다. 이 방법의 특징은 소프트웨어를 직접 실행하지 않고 개발 중인 소프트웨어의 소스 코드를 대상으로 분석을 수행한다는 점이다. 이 방법의 목적은 분석을 통해 소프트웨어가 잠재적으로 가지고 있는 결함이나 보안 취약점을 사전에 찾아내 소프트웨어의 품질 및 보안성을 향상시키는 것이다. 만약 이러한 결함이나 취약점이 고쳐지지 않은 소프트웨어의 경우 잘못된 동작을 수행하거나 해커들이 시스템에 침입하는데 이용될 수 있다.Static analysis of program source code is one of several methods of analyzing computer software. The feature of this method is that the analysis is performed on the source code of the software being developed without directly executing the software. The purpose of this method is to improve the quality and security of software by finding potential flaws or security vulnerabilities in software through analysis. If such flaws or vulnerabilities are not fixed, software may perform incorrect operations or be used by hackers to infiltrate the system.
정적 분석 도구(Static Analysis Tool)는 정적 프로그램 분석을 사람의 손이 아닌 소프트웨어를 이용하여 자동적으로 수행하도록 개발된 프로그램이다. 일반적으로 소스 코드의 크기는 매우 방대하므로 수동으로 정적 프로그램 분석을 수행하는 것은 거의 불가능하다고 볼 수 있다. 따라서 이러한 분석을 자동화하여 수행할 수 있도록 해주는 것이 정적 분석 도구의 역할이라고 할 수 있다. 정적 분석 도구는 종류에 따라 소스 코드에서 다양한 종류의 결함이나 취약점을 검출할 수 있으며, 분석을 통해 검출된 결함을 사용자에게 알려준다. 검출된 결함을 통해 사용자는 문제가 되는 부분을 보다 쉽게 찾을 수 있다.Static Analysis Tool is a program developed to automatically perform static program analysis using software rather than human hands. In general, the size of the source code is very large, so it is almost impossible to manually perform static program analysis. Therefore, it can be said that it is the role of static analysis tools to automate and perform such analysis. The static analysis tool can detect various types of defects or vulnerabilities in the source code depending on the type, and informs the user of the detected defect through analysis. The detected defect makes it easier for the user to find the problematic part.
병렬 프로그램은 프로그램의 실행이 순차적으로 이뤄지지 않고 병렬적으로 소스 코드의 여러 지점이 실행에 개입될 수 있으므로 일반적인 프로그램보다 정적 분석으로 결함에 대한 정확한 정보를 찾기가 어렵다. 따라서 병렬 프로그램을 위한 소스 코드 분석 방법에 대한 필요성이 대두되고 있다.In a parallel program, execution of the program is not performed sequentially, and multiple points of the source code may be involved in execution in parallel, so it is more difficult to find accurate information about a defect through static analysis than a general program. Therefore, there is a need for a source code analysis method for parallel programs.
본 발명의 해결하고자 하는 과제는 소스 코드의 여러 부분이 병렬적으로 실행되는 병렬 프로그램의 특성을 반영한 소스 코드의 분석 장치 및 방법을 제공하는 것이다.An object to be solved of the present invention is to provide an apparatus and method for analyzing a source code reflecting characteristics of a parallel program in which several parts of the source code are executed in parallel.
또한, 병렬 프로그램의 소스 코드는 그대로 두고 병렬 프로그램의 실행 흐름을 시뮬레이션 하여 소스 코드의 정적 분석을 하는 소스 코드의 분석 장치 및 방법을 제공한다.In addition, it provides a source code analysis apparatus and method for static analysis of the source code by simulating the execution flow of the parallel program while leaving the source code of the parallel program as it is.
다만, 본 발명의 해결하고자 하는 과제는 이상에서 언급한 것으로 제한되지 않으며, 언급되지 않은 또 다른 해결하고자 하는 과제는 아래의 기재로부터 본 발명이 속하는 통상의 지식을 가진 자에게 명확하게 이해될 수 있을 것이다.However, the problem to be solved of the present invention is not limited to the ones mentioned above, and another problem to be solved that is not mentioned can be clearly understood by those of ordinary skill in the art from the following description. will be.
일 실시예에 따른 병렬 프로그램의 소스 코드 분석 장치는, 병렬 프로그램의 소스 코드로부터 분석에 필요한 정보를 추출하는 구문 분석부, 공유 자원에 대한 정보를 저장하는 글로벌 메모리, 상기 공유 자원에 대한 접근 제어를 동기화하기 위한 정보를 저장하는 접근 제어 메모리 및 적어도 하나 이상의 동적으로 생성되는 워크 리스트- 상기 워크 리스트는 구문을 저장하는 구문 영역 및 상기 구문 영역의 구문의 실행 결과를 저장하는 메모리 영역을 포함함-를 포함하는 메모리부, 상기 추출된 정보 및 상기 접근 제어 메모리의 값에 기초하여 상기 병렬 프로그램의 실행 흐름을 시뮬레이션 하여 상기 소스 코드 중 다음에 실행될 구문을 결정하고, 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 구문 영역에 상기 결정된 구문을 추가하는 할일 관리부, 상기 결정된 구문을 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역에 저장되어 있는 정보 및 상기 글로벌 메모리에 저장되어 있는 정보에 기초하여 기호 실행하고 기호 실행한 결과를 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역 또는 상기 글로벌 메모리에 저장하는 기호 실행부, 및 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역의 상태 및 상기 글로벌 메모리의 상태에 기초하여 상기 소스 코드에서 문제를 일으킬 수 있는 결함에 관한 정보를 검출하는 결함 검출부를 포함하며, 상기 기호 실행부는 상기 결정된 구문이 상기 공유 자원에 대한 접근 제어를 동기화하는 명령인 경우 상기 접근 제어 메모리의 정보를 갱신한다.The source code analysis apparatus of a parallel program according to an embodiment includes a parsing unit for extracting information necessary for analysis from the source code of the parallel program, a global memory storing information on a shared resource, and access control for the shared resource. Access control memory for storing information for synchronization and at least one dynamically generated work list- The work list includes a syntax area for storing a syntax and a memory area for storing execution results of the syntax of the syntax area. A memory unit including, based on the extracted information and the value of the access control memory, the execution flow of the parallel program is simulated to determine the next statement to be executed among the source codes, and a work list for the thread to which the determined statement belongs A to-do management unit that adds the determined syntax to the syntax area of, and the determined syntax is a preference based on information stored in the memory area of a work list for a thread to which the determined syntax belongs and information stored in the global memory. A symbol execution unit that stores the execution and symbol execution result in the memory area of the work list or the global memory for the thread to which the determined syntax belongs, and the state of the memory area of the work list for the thread to which the determined syntax belongs, and And a defect detection unit for detecting information on a defect that may cause a problem in the source code based on the state of the global memory, and the symbol execution unit is a command in which the determined syntax is a command for synchronizing access control to the shared resource. In this case, information in the access control memory is updated.
또한, 상기 분석에 필요한 정보는 상기 소스 코드의 라인 수, 상기 소스 코드의 위치 정보 및 상기 소스 코드의 구문 구조에 관한 정보 중 적어도 하나를 포함한다.In addition, the information necessary for the analysis includes at least one of the number of lines of the source code, location information of the source code, and information on the syntax structure of the source code.
또한, 상기 결함에 관한 정보는 상기 소스 코드내의 상기 결함의 위치 정보, 상기 결함의 유형, 상기 결함의 원인에 관한 정보, 상기 결함이 발생하게 된 상기 소스 코드의 흐름에 관한 정보 중 적어도 하나를 포함한다.In addition, the information on the defect includes at least one of information on the location of the defect in the source code, the type of the defect, information on the cause of the defect, and information on the flow of the source code where the defect occurs. do.
또한, 상기 글로벌 메모리는 전역 변수의 값 또는 동적으로 힙에 할당된 영역의 값을 저장한다.Also, the global memory stores a value of a global variable or a value of an area dynamically allocated to the heap.
또한, 상기 접근 제어를 동기화하는 명령은 공유 자원 공간에 대한 접근 시간을 제어하는 명령이다.In addition, the command for synchronizing the access control is a command for controlling the access time to the shared resource space.
일 실시예에 따른 병렬 프로그램의 소스 코드 분석 방법은, 병렬 프로그램의 소스 코드로부터 분석에 필요한 정보를 추출하는 단계, 상기 추출된 정보 및 공유 자원에 대한 접근 제어를 동기화하기 위한 정보에 기초하여 상기 병렬 프로그램의 실행 흐름을 시뮬레이션 하여 상기 소스 코드 중 다음에 실행될 구문을 결정하고, 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트에 상기 결정된 구문을 추가하는 단계- 상기 워크 리스트는 구문을 저장하는 구문 영역 및 상기 구문 영역의 구문의 실행 결과를 저장하는 메모리 영역을 포함함-, 상기 결정된 구문을 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역에 저장되어 있는 정보 및 글로벌 메모리에 저장되어 있는 상기 공유 자원에 대한 정보에 기초하여 기호 실행하고 기호 실행한 결과를 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역 또는 상기 글로벌 메모리에 저장하는 단계, 및 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역의 상태 및 상기 글로벌 메모리의 상태에 기초하여 상기 소스 코드에서 문제를 일으킬 수 있는 결함에 관한 정보를 검출하는 단계를 포함하며, 상기 저장하는 단계는 상기 결정된 구문이 상기 공유 자원에 대한 접근 제어를 동기화하는 명령인 경우 상기 명령의 실행에 따라 상기 접근 제어를 동기화하기 위한 정보를 갱신한다.According to an embodiment, a method for analyzing a source code of a parallel program includes the steps of extracting information necessary for analysis from a source code of a parallel program, and the parallel program based on information for synchronizing the extracted information and access control to a shared resource. Simulating the execution flow of a program to determine a statement to be executed next among the source code, and adding the determined statement to a work list for a thread to which the determined statement belongs-The work list includes a syntax area for storing a statement and the Including a memory area for storing the execution result of the syntax in the syntax area-, information stored in the memory area of the work list for the thread to which the determined syntax belongs, and the shared resource stored in the global memory Based on the information on the symbol execution and storing the result of symbol execution in the memory area or the global memory of the work list for the thread to which the determined syntax belongs, and the work list for the thread to which the determined syntax belongs And detecting information on a defect that may cause a problem in the source code based on a state of a memory area and a state of the global memory, and the storing step includes controlling access to the shared resource by the determined syntax In the case of a command to synchronize, information for synchronizing the access control is updated according to the execution of the command.
일 실시예에 따른 컴퓨터 판독 가능한 기록매체에 저장된 프로그램은 병렬 프로그램의 소스 코드로부터 분석에 필요한 정보를 추출하는 단계, 상기 추출된 정보 및 공유 자원에 대한 접근 제어를 동기화하기 위한 정보에 기초하여 상기 병렬 프로그램의 실행 흐름을 시뮬레이션 하여 상기 소스 코드 중 다음에 실행될 구문을 결정하고, 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트에 상기 결정된 구문을 추가하는 단계- 상기 워크 리스트는 구문을 저장하는 구문 영역 및 상기 구문 영역의 구문의 실행 결과를 저장하는 메모리 영역을 포함함-, 상기 결정된 구문을 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역에 저장되어 있는 정보 및 글로벌 메모리에 저장되어 있는 상기 공유 자원에 대한 정보에 기초하여 기호 실행하고 기호 실행한 결과를 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역 또는 상기 글로벌 메모리에 저장하는 단계, 및 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역의 상태 및 상기 글로벌 메모리의 상태에 기초하여 상기 소스 코드에서 문제를 일으킬 수 있는 결함에 관한 정보를 검출하는 단계를 포함하며, 상기 저장하는 단계는 상기 결정된 구문이 상기 공유 자원에 대한 접근 제어를 동기화하는 명령인 경우 상기 명령의 실행에 따라 상기 접근 제어를 동기화하기 위한 정보를 갱신하는 병렬 프로그램의 소스 코드 분석 방법을 프로세서가 수행하도록 하는 명령어를 포함한다.A program stored in a computer-readable recording medium according to an embodiment includes the steps of extracting information necessary for analysis from a source code of a parallel program, and the parallel program based on information for synchronizing access control to the extracted information and shared resources. Simulating the execution flow of a program to determine a statement to be executed next among the source code, and adding the determined statement to a work list for a thread to which the determined statement belongs-The work list includes a syntax area for storing a statement and the Including a memory area for storing the execution result of the syntax in the syntax area-, information stored in the memory area of the work list for the thread to which the determined syntax belongs, and the shared resource stored in the global memory Based on the information on the symbol execution and storing the result of symbol execution in the memory area or the global memory of the work list for the thread to which the determined syntax belongs, and the work list for the thread to which the determined syntax belongs And detecting information on a defect that may cause a problem in the source code based on a state of a memory area and a state of the global memory, and the storing step includes controlling access to the shared resource by the determined syntax In the case of a command for synchronizing the command, the processor includes an instruction for causing the processor to perform a source code analysis method of a parallel program that updates information for synchronizing the access control according to the execution of the command.
일 실시예에 따르면 소스 코드의 여러 부분이 병렬적으로 실행되는 병렬 프로그램의 특성을 반영함으로써 보다 정확하게 병렬 프로그램의 결함을 검출할 수 있다.According to an exemplary embodiment, defects of a parallel program may be more accurately detected by reflecting characteristics of a parallel program in which several parts of a source code are executed in parallel.
또한, 병렬 프로그램의 소스 코드는 그대로 두고 병렬 프로그램의 실행 흐름을 시뮬레이션 하여 소스 코드의 정적 분석을 수행함으로써 메모리를 많이 차지하지 않고 용이하게 병렬 프로그램의 소스 코드를 분석할 수 있다.In addition, it is possible to analyze the source code of the parallel program easily without taking up a lot of memory by performing static analysis of the source code by simulating the execution flow of the parallel program while leaving the source code of the parallel program as it is.
도 1은 본 발명의 실시예에 따른 병렬 프로그램의 소스 코드 분석 장치의 기능 블록도이다.
도 2는 본 발명의 실시예에 따른 병렬 프로그램의 소스 코드 분석 방법의 실행 단계를 보여주는 흐름도이다.
도 3은 병렬 프로그램이 아닌 단일 프로세스로 이루어진 프로그램의 예시를 보여주는 도면이다.
도 4는 도 3의 프로그램의 제어 흐름을 보여주는 그래프이다.
도 5는 본 발명의 실시예에 따른 병렬 프로그램의 소스 코드 분석 방법에 의해 도 3의 소스 코드의 정적 분석이 수행되는 과정에서의 워크 리스트의 변화를 보여주는 도면이다.
도 6은 병렬 프로그램의 예시를 보여주는 도면이다.
도 7은 도 6의 프로그램의 제어 흐름을 보여주는 그래프이다.
도 8은 도 6의 병렬 프로그램의 실행 순서를 보여주는 도면이다.
도 9 내지 도 13은 도 6의 병렬 프로그램에 대해 본 발명의 실시예에 다른 소스 코드 분석 방법이 수행되는 과정에서 워크 리스트의 변화를 보여주는 도면이다.1 is a functional block diagram of an apparatus for analyzing a source code of a parallel program according to an embodiment of the present invention.
2 is a flowchart showing an execution step of a method for analyzing a source code of a parallel program according to an embodiment of the present invention.
3 is a diagram showing an example of a program consisting of a single process rather than a parallel program.
4 is a graph showing the control flow of the program of FIG. 3.
FIG. 5 is a diagram showing a change in a work list in a process in which static analysis of the source code of FIG. 3 is performed by a method of analyzing a source code of a parallel program according to an embodiment of the present invention.
6 is a diagram showing an example of a parallel program.
7 is a graph showing the control flow of the program of FIG. 6.
8 is a diagram illustrating an execution sequence of the parallel program of FIG. 6.
9 to 13 are diagrams showing changes in a work list in a process of performing a source code analysis method according to an embodiment of the present invention for the parallel program of FIG. 6.
본 발명의 이점 및 특징, 그리고 그것들을 달성하는 방법은 첨부되는 도면과 함께 상세하게 후술되어 있는 실시예들을 참조하면 명확해질 것이다. 그러나 본 발명은 이하에서 개시되는 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 구현될 수 있으며, 단지 본 실시예들은 본 발명의 개시가 완전하도록 하고, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 발명의 범주를 완전하게 알려주기 위해 제공되는 것이며, 본 발명은 청구항의 범주에 의해 정의될 뿐이다.Advantages and features of the present invention, and a method of achieving them will become apparent with reference to the embodiments described below in detail together with the accompanying drawings. However, the present invention is not limited to the embodiments disclosed below, but may be implemented in a variety of different forms, and only these embodiments make the disclosure of the present invention complete, and are common knowledge in the technical field to which the present invention pertains. It is provided to completely inform the scope of the invention to those who have, and the invention is only defined by the scope of the claims.
본 발명의 실시예들을 설명함에 있어서 공지 기능 또는 구성에 대한 구체적인 설명이 본 발명의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우에는 그 상세한 설명을 생략할 것이다. 그리고 후술되는 용어들은 본 발명의 실시예에서의 기능을 고려하여 정의된 용어들로서 이는 사용자, 운용자의 의도 또는 관례 등에 따라 달라질 수 있다. 그러므로 그 정의는 본 명세서 전반에 걸친 내용을 토대로 내려져야 할 것이다.In describing the embodiments of the present invention, if it is determined that a detailed description of a known function or configuration may unnecessarily obscure the subject matter of the present invention, a detailed description thereof will be omitted. In addition, terms to be described later are terms defined in consideration of functions in an embodiment of the present invention, which may vary according to the intention or custom of users or operators. Therefore, the definition should be made based on the contents throughout this specification.
도 1은 본 발명의 실시예에 따른 병렬 프로그램의 소스 코드 분석 장치의 기능 블록도이다.1 is a functional block diagram of an apparatus for analyzing a source code of a parallel program according to an embodiment of the present invention.
본 발명의 실시예에 따른 병렬 프로그램의 소스 코드 분석 장치(100)는 병렬 프로그램의 실행 흐름을 파악하여 그 실행 흐름에 따라 소스 코드의 구문의 실행을 시뮬레이션 함으로써 병렬 프로그램에서 문제를 일으킬 수 있는 결함을 추출하는 장치이다. 병렬 프로그램의 소스 코드 분석 장치(100)는 구문 분석부(110), 할일 관리부(120), 기호 실행부(130), 메모리부(140) 및 결함 검출부(150)로 구성될 수 있다. The source
구문 분석부(110)는 병렬 프로그램의 소스 코드에서 정적 분석에 필요한 정보, 가령 소스 코드의 라인 수, 소스 코드의 위치 정보 및 소스 코드의 구문 구조에 관한 정보 등을 추출하여 이후의 소스 코드 분석의 필요에 따라 이들 정보들을 재구성한다. The
메모리부(140)는 전역 변수 또는 동적으로 힙에 할당된 영역과 같은 공유 자원의 값을 저장하는 글로벌 메모리(142), 공유 자원에 대한 접근 제어를 동기화하기 위한 정보를 저장하는 접근 제어 메모리(144), 및 구문을 저장하는 구문 영역 및 구문 영역의 구문의 실행 결과를 저장하는 메모리 영역으로 구성되는 적어도 하나 이상의 동적으로 생성되는 워크 리스트(work list)(146)를 포함한다.The
할일 관리부(120)는 구문 분석부(110)에 의해 추출된 정보에 기초하여 병렬 프로그램의 실행 흐름을 시뮬레이션 하여 소스 코드 중 다음에 실행될 구문을 결정하고, 결정된 구문을 그 구문이 속한 쓰레드(thread)를 위한 워크 리스트의 구문 영역에 저장한다. 할일 관리부(120)는 병렬 프로그램의 실행 흐름을 따라가면서 새로운 쓰레드를 만날 때마다 그 쓰레드를 위한 워크 리스트를 생성하고, 다음에 실행될 구문을 그 구문이 속하는 쓰레드를 위한 워크 리스트에 저장한다. 따라서 병렬 프로그램을 분석하는 동안 하나 이상의 워크 리스트가 생성될 수 있다. The to-
기호 실행부(130)는 할일 관리부(120)에 의해 다음에 실행될 구문으로 결정된 구문을 그 구문이 속하는 쓰레드를 위한 워크 리스트의 메모리 영역에 저장되어 있는 정보 및 글로벌 메모리에 저장되어 있는 전역 변수 등의 값에 기초하여 기호 실행하고 기호 실행한 결과를 해당 워크 리스트의 메모리 영역에 저장한다. 기호 실행부(130)는 실행할 구문이 공유 자원에 대한 접근 제어를 동기화하는 명령인 경우 접근 제어 메모리(144)에 저장되어 있는 공유 자원에 대한 접근 제어를 동기화하기 위한 정보를 갱신함으로써 전역 변수 등 복수의 쓰레드에 의해 공유되는 공유 자원에 대하여 한번에 하나의 쓰레드만이 해당 공유 자원에 액세스하도록 동기화시킬 수 있다. 공유 자원에 대한 접근 제어 동기화 명령은 전역 변수와 같은 공유 자원에 대한 접근을 시간적 또는 공간적으로 동기화하는 메커니즘을 구현하는 명령으로, 예를 들어 멀티 쓰레드(multi thread) 환경에서 mutex를 이용하여 공유 자원 영역에 대한 접근 시간을 제어하는 명령들을 포함할 수 있다. 구체적으로 pthread_mutex_lock(&mutex)는 mutex에 lock을 걸어 해당 mutex를 원하는 다른 쓰레드의 실행을 막는 명령이고, pthread_mutex_unlock(&mutex)는 mutex를 unlock하여 해당 mutex를 원하는 다른 쓰레드의 실행을 허용하는 명령이다. 이러한 공유 자원에 대한 접근 제어를 동기화하기 위한 정보, 예를 들어 mutex가 특정 쓰레드에 의해 lock된 상태인지 또는 mutex가 unlock 상태인지 등에 대한 정보는 메모리부(140)의 접근 제어 메모리(144)에 저장된다.The
결함 검출부(150)는 기호 실행부(130)에 의해 기호 실행된 구문이 속하는 쓰레드의 워크 리스트(146)의 메모리 영역의 상태 및/또는 글로벌 메모리(142)의 상태에 기초하여 소스 코드에서 문제를 일으킬 수 있는 결함에 관한 정보를 검출한다. 소스 코드의 결함이란 해당 프로그램의 실행 시 에러가 발생할 수 있는 부분 또는 보안상 취약할 수 있는 부분 등을 포함한다. 결함 검출부(150)는 검출되는 결함에 관하여 결함이 검출된 소스 코드의 파일명, 소스 코드내에서 해당 결함이 어느 위치에서 검출되었는지에 관한 정보 (소스 코드내의 라인 번호 등), 결함이 어떤 유형의 것인지에 관한 정보, 결함의 원인이 무엇인지에 관한 정보, 소스 코드 내에서 결함이 발생하게 된 실행 흐름에 관한 정보 등을 포함할 수 있다.The
도 2는 도 1의 소스 코드 분석 장치가 동작하는 과정을 보여주는 흐름도이다.2 is a flowchart illustrating a process of operating the source code analysis apparatus of FIG. 1.
본 발명의 실시예에 따른 병렬 프로그램의 소스 코드 분석 장치(100)의 구문 분석부(110)는 분석하고자 하는 병렬 프로그램의 소스 코드로부터 정적 분석에 필요한 정보, 예를 들어 추상 구문 트리(Abstract Syntax Tree)나 소스 코드의 라인 수, 소스 코드의 파일명 및 소스 코드가 어디에 존재하는지에 대한 위치 정보 등을 추출하여 정제한다(S210). The
구문 분석부(110)가 추출한 정보 및/또는 공유 자원에 대한 접근 제어를 동기화하기 위한 정보를 저장하고 있는 접근 제어 메모리(144)의 값에 기초하여, 할일 관리부(120)는 병렬 프로그램의 실행 흐름을 시뮬레이션하고 실행 흐름상 다음에 실행될 구문을 결정하여 결정된 구문을 그 구문이 속하는 쓰레드를 위한 워크 리스트(146)의 구문 영역에 추가한다(S220). 할일 관리부(120)는 병렬 프로그램의 실행 흐름을 시뮬레이션 할 때 접근 제어 메모리(144)에 전역 변수 등의 공유 자원에 대해 lock을 걸고 있는 쓰레드가 있는지를 파악하여 그런 쓰레드가 존재하는 경우 lock을 걸고 있는 쓰레드의 소스 코드에 대한 분석을 계속 진행하고 동일한 공유 자원에 접근하고자 하는 다른 쓰레드의 분석은 수행하지 않는다. 또한, pthread_join(thread1,NULL)과 같이 'thread1'이 지시하는 쓰레드의 종료를 대기하라는 명령 구문을 만나면 thread1의 소스 코드 분석이 완료될 때까지 thread1의 소스 코드 분석을 진행하고, thread1의 소스 코드 분석이 완료되면 다른 쓰레드의 소스 코드 분석을 진행한다. 할일 관리부(120)는 실행 흐름을 시뮬레이션 할 때 복수 개의 쓰레드 중 어느 것을 먼저 실행할지에 대해 순서가 상관없는 경우 임의의 쓰레드의 워크 리스트를 선택하여 다음에 실행할 구문을 결정할 수 있다.Based on the information extracted by the
기호 실행부(130)는 할일 관리부(120)에 의해 결정된, 다음에 수행할 구문을, 그 구문이 속하는 쓰레드의 워크 리스트(146)의 메모리 영역에 저장되어 있는 정보 및/또는 글로벌 메모리(142)에 저장되어 있는 정보에 기초하여 기호 실행하고, 기호 실행한 결과를 워크 리스트(146)의 메모리 영역 또는 글로벌 메모리(142)에 저장한다(S230 내지 S250). 기호 실행되는 구문이 전역 변수 등 공유 자원을 사용하는 경우 글로벌 메모리(142)로부터 공유 자원의 값을 읽고 구문을 기호 실행한 후의 공유 자원의 값을 글로벌 메모리(142)에 저장한다. 기호 실행부(130)는 결정된 구문이 공유 자원에 대한 접근 제어를 동기화하는 명령인 경우(S240의 '예') 접근 제어 메모리(144)의 정보를 갱신한다. 예를 들어, 도 9에 도시된 바와 같이 실행되는 구문이 mythread1이라는 쓰레드를 위한 워크 리스트(500)의 pthread_mutex_lock(mutex)(505)인 경우, 기호 실행부(130)는 mutex가 lock이 걸려있는지를 접근 제어 메모리(144)의 값으로 판정하고, 접근 제어 메모리(144)가 비어 있으면 mutex가 lock이 걸려있지 않다고 판정하여 도 10에 도시된 바와 같이 접근 제어 메모리(144)에 mutex에 lock을 건 쓰레드로 mythread1을 기록한다. 이렇게 접근 제어 메모리(144)에 mythread1이 기록되어 있는 동안은 mythread1이 아닌 다른 쓰레드가 mutex에 lock을 요청하고 공유 자원에 접근하는 것을 대기시킨다. 한편, 도 11에 도시된 바와 같이 실행되는 구문이 mythread1이라는 쓰레드의 워크 리스트(500)의 pthread_mutex_unlock(mutex)(525)인 경우, 기호 실행부(130)는 접근 제어 메모리(144)에 기록되어 있는 mythread1을 삭제함으로써 mutex를 unlock한다. The
기호 실행부(130)에 의한 기호 실행(S230 내지 S250)후 결함 검출부(150)는 워크 리스트(146)의 메모리 영역의 상태 및/또는 글로벌 메모리(144)의 상태에 기초하여 소스 코드에서 문제를 일으킬 수 있는 결함이 존재하는지를 검출하고(S260), 결함이 존재하는 경우(S270의 '예') 결함에 관한 정보를 제공한다(S280). 결함이 검출되지 않는 경우(S270의 '아니오') 소스 코드의 마지막 구문을 분석할 때까지(S290의 '아니오') S220 내지 S290 단계를 반복 수행한다.After the symbol execution by the symbol execution unit 130 (S230 to S250), the
이하에서는 도 3 내지 도 5를 참조하여 본 발명의 실시예에 따른 소스 코드 분석 방법에 의해 병렬 프로그램이 아닌 단일 프로세스로 이루어진 프로그램이 분석되는 과정을 살펴보겠다.Hereinafter, a process in which a program composed of a single process rather than a parallel program is analyzed by the source code analysis method according to an embodiment of the present invention will be described with reference to FIGS. 3 to 5.
도 3과 같은 소스 코드의 프로그램의 제어 흐름을 그래프로 나타내면 도 4와 같다. 도 4의 제어 흐름에 따라 소스 코드의 구문을 분석하면 도 5와 같이 워크 리스트의 값이 변화하게 된다. 이를 이하에서 상세하게 살펴보도록 한다.4 is a graph showing the control flow of the program of the source code as shown in FIG. 3. When the syntax of the source code is analyzed according to the control flow of FIG. 4, the work list value changes as shown in FIG. 5. This will be described in detail below.
본 발명의 실시예에 따른 소스 코드 분석 방법에 따라 소스 코드를 분석하는 경우 도 5의 310과 같이 함수 caller의 시작 구문을 워크 리스트의 구문 영역(312)에, 빈 메모리를 워크 리스트의 메모리 영역(314)에 추가함으로써 함수 caller의 소스 코드 분석을 시작한다. 메모리 영역(314)의 'true' 부분은 현재 메모리 영역의 상태가 유효할 조건을, '{}' 부분은 메모리의 상태를 나타내는 것으로, 'true'는 메모리의 상태가 항상 유효함을, '{}' 는 빈 메모리 상태를 나타낸다. 할일 관리부(120)가 다음에 수행될 구문 'n:=1'을 워크 리스트의 구문 영역(322)에 추가하고, 기호 실행부(130)가 구문 영역(322)의 'n:=1' 구문을 메모리 영역(324)의 상태에 기초하여 기호 실행하고 그 결과를 메모리 영역(334)의 변수 n에 '1'로 저장한다. 할일 관리부(120)는 다음에 실행될 구문인 'if(x>0)'을 워크 리스트의 구문 영역(332)에 삽입한다. 기호 실행부(13)가 구문 영역(332)의 'if(x>0)' 구문을 기호 실행하면 if 문에서 분기가 일어나고, 할일 관리부(120)는 조건문이 참일 경우 (x>0인 경우)에 실행되는 구문 'n=10/n'과 조건문이 거짓일 경우 (x<=0인 경우) 실행되는 구문 'return n'을 모두 워크 리스트의 구문 영역 (342, 346)에 추가하고, 기호 실행부(130)는 메모리 영역(344, 348)의 현재 메모리 상태가 유효한 조건으로 각각 'x>0'와 'x<=0'을 추가한다. 도 5의 342 및 346과 같이 기호 실행할 구문이 2개 이상일 경우 기호 실행부(130)는 임의로 하나를 선택하여 기호 실행할 수 있다. 도 5의 350에서는 구문 영역 342의 구문 'n=10/n'이 먼저 기호 실행된 결과를 도시하고 있다. 이제 다음에 실행될 구문이 없으므로 결함 검출부(150)는 이 때의 워크 리스트(350)의 메모리 영역(354, 358)의 상태로 함수 caller의 하는 일을 요약할 수 있다. 즉 caller라는 함수는 x가 0보다 크면 10을 리턴하며 x가 0 이하이면 1을 리턴한다. 그리고 워크 리스트의 메모리 영역(354, 358)의 최종 상태에 기초할 때caller라는 함수에서는 결함이 검출되지 않음을 알 수 있다.When analyzing the source code according to the source code analysis method according to an embodiment of the present invention, as shown in 310 of FIG. 5, the start syntax of the function caller is assigned to the
이제 본 발명의 실시예에 따른 병렬 프로그램의 소스 코드 분석 방법에 따라 도 6과 같은 병렬 프로그램의 분석이 수행되는 과정을 살펴보도록 한다. 도 6에서 함수 runner를 일반 프로그램이라고 가정하면 이 함수에서 변수 'keep'은 '5+n'이 할당되어 'n=100/(keep-n)' 구문에서 'keep-n'이 5가 되므로 'n=100/(keep-n)'의 실행 결과는 '100/5'가 되어 전혀 결함이 없는 프로그램으로 분석된다. 그러나 함수 runner는 병렬 프로그램으로 이를 실제로 실행하면 mythread1이라는 쓰레드와 mythread2라는 쓰레드가 병렬적으로 실행되므로 어떤 경우 함수 runner의 'n=100/(keep-n)' 구문은 '100/0'이 되어 '0'으로 나누는 에러가 발생하게 된다. 도 6의 함수 runner를 본 발명의 실시예에 따른 소스 코드 분석 방법으로 분석하면 'n=100/(keep-n)' 구문에서 '0'으로 나누는 결함이 검출됨을 살펴보겠다.Now, a process in which the parallel program analysis as shown in FIG. 6 is performed according to the method for analyzing the source code of the parallel program according to the embodiment of the present invention will be described. Assuming that the function runner is a general program in FIG. 6, the variable'keep' is assigned to '5+n' in this function, and'keep-n' becomes 5 in the syntax'n=100/(keep-n)'. The execution result of n=100/(keep-n)' becomes '100/5', which is analyzed as a program with no defects. However, the function runner is a parallel program, and when it is actually executed, a thread called mythread1 and a thread called mythread2 are executed in parallel. In some cases, the syntax'n=100/(keep-n)' of the function runner becomes '100/0' An error dividing by 0'occurs. When analyzing the function runner of FIG. 6 by the source code analysis method according to an embodiment of the present invention, it will be described that a defect divided by '0' in the syntax'n=100/(keep-n)' is detected.
도 7은 도 6의 프로그램의 제어 흐름을 그래프로 나타낸 것이고, 도 8은 이러한 제어 흐름에서 도 6의 병렬 프로그램에 대하여 thread 관련 함수들의 의미를 고려해서 각 구문의 실행 순서를 일련 번호로 표시한 도면이다. 여기서 상대적으로 높은 숫자를 갖는 구문은 상대적으로 낮은 숫자를 갖는 구문보다 항상 나중에 실행되고, 같은 숫자를 갖는 구문들은 실행되는 순서가 결정적이지 않다. 예를 들어, 도 8에서 10번 구문('n=100/(keep-n)')을 실행하기 전에 그보다 번호가 작은 구문들이 먼저 실행되게 된다. 따라서, 함수 runner의 10번 구문이 실행되기 전에 함수 runner의 1번 내지 4번 구문이 실행되고, 5번 구문에서 pthread_join(thread1, NULL)을 만나면 mythread1의 실행이 완료될 때까지 대기하게 되므로, mythread1의 4번 내지 7번이 실행될 수 있다. 이후 mythread2의 6번 내지 9번 구문이 실행될 수 있다. 함수 runner의 2번 구문이 실행되면 'keep'의 값은 '5'가 되고, mythread1의 5번 구문이 실행되면 'n'의 값은 '10'이 되고, mythread2의 7번 구문이 실행되면 'n'의 값은 '5'가 된다. 따라서 함수 runner의 10번 구문에서 'keep-n'은 항상 0이 되어 10번 구문에서는 항상 0으로 나누기 오류가 발생하게 된다.FIG. 7 is a graph showing the control flow of the program of FIG. 6, and FIG. 8 is a diagram showing the execution order of each statement in serial numbers in consideration of the meaning of thread-related functions for the parallel program of FIG. 6 in this control flow. to be. Here, statements with a relatively high number are always executed later than statements with a relatively low number, and the order in which statements with the same number are executed is not critical. For example, before executing the 10th statement ('n=100/(keep-n)') in FIG. 8, statements with a smaller number are executed first. Therefore, before the 10th statement of the function runner is executed, the 1st to 4th statements of the function runner are executed, and when pthread_join(thread1, NULL) is encountered in the 5th statement, it waits until the execution of mythread1 is completed, so
이하에서는 도 9 내지 도 13을 참조하여 도 6의 병렬 프로그램에 대해 본 발명의 실시예에 다른 소스 코드 분석 방법이 수행되는 과정에서 워크 리스트의 변화를 살펴보도록 한다.Hereinafter, with reference to FIGS. 9 to 13, changes in the work list will be described in the process of performing a source code analysis method different from the embodiment of the present invention for the parallel program of FIG. 6.
본 발명의 실시예에 따른 소스 코드 분석 방법에 의해 도 6과 같은 병렬 프로그램을 분석할 경우 처음에는 일반 프로그램 분석과 같이 하나의 워크 리스트(도 9의 400)를 사용한다. 공유 자원은 여러 쓰레드가 같이 사용할 수 있으므로 글로벌 메모리(142)에 저장한다. 'n'과 같은 전역 변수 또는 동적으로 힙에 할당된 영역에 접근할 때는 글로벌 메모리(142)를 참조한다. 소스 코드 분석 중 pthread_create 같은 쓰레드 생성 함수를 만나면 할일 관리부(120)는 해당하는 쓰레드를 관리하기 위한 워크 리스트를 추가로 생성한다. 워크 리스트가 복수 개일 경우 특별한 조건이 없는 한 다음에 실행할 구문은 워크 리스트가 존재하는 임의의 쓰레드로 결정할 수 있다.When analyzing a parallel program as shown in FIG. 6 by a source code analysis method according to an embodiment of the present invention, one work list (400 in FIG. 9) is initially used as in general program analysis. Shared resources are stored in the
도 9는 함수 runner의 소스 코드 분석 중 3번 구문 'pthread_create(&thread1, NULL, mythread1, NULL)'이 기호 실행된 후 함수 runner의 다음에 실행될 구문이 mythread2 쓰레드를 생성하는 'pthread_create(&thread2, NULL, mythread2, NULL)'(405)이고, mythread1의 다음에 실행될 구문이 'pthread_mutex_lock(mutex)'(505)인 경우를 보여주는 도면이다. 본 발명의 실시예에 따른 소스 코드 분석 장치(100)의 기호 실행부(130)가 mythread1의 다음에 실행될 구문(505)을 선택하는 경우 'pthread_mutex_lock(mutex)'을 기호 실행하게 되고 이 경우 접근 제어 메모리(144)를 참조하여 mutex가 이미 lock 되어 있는지를 확인하여 이미 다른 쓰레드에 의해 lock이 걸려있다면 'pthread_mutex_lock(mutex)'을 기호 실행하지 않고 대기한다. mutex가 다른 쓰레드에 의해 lock 되어 있지 않다면 mutex에 lock을 요청한 mythread1을 접근 제어 메모리(144)에 기록(도 10의 144)하고 계속 소스 코드 분석을 진행한다 (도 10의 515). 기호 실행부(130)가 mythread1의 5번 구문 'n+=10'(515)을 기호 실행하려면 전역 변수 'n'을 사용해야 하고 이 경우 'n+=10' 구문(515)의 기호 실행 결과로 글로벌 메모리(142)에 변수 'n'의 값이 10으로 되었음을 저장한다(도10의 142). mythread1의 소스 코드 분석 중 'pthread_mutex_unlock(mutex)'과 같이 mutex를 unlock하는 함수를 만나면 접근 제어 메모리의 mutex에 기록되어 있던 mythread1을 삭제한다(도 12의 144). 소스 코드 분석 중 'pthread_join'과 같이 해당 쓰레드의 수행 종료를 기다리는 함수를 만나면 해당 쓰레드의 실행이 끝날 때까지 기다린다. 따라서 함수 runner의 5번 구문 'pthread_join(thread1, NULL)'의 기호 실행에 따라 도 12에 도시된 바와 같이 mythread1의 실행이 완료될 때까지 함수 runner의 워크 리스트에서 다음에 실행할 구문이 선택되지 않는다. mythread1의 실행이 완료되면 함수 runner의 워크 리스트에서 다음에 실행될 구문이 선택되고, 도 13에 도시된 바와 같이 mythread2를 위한 워크 리스트(600)가 생성되고 mythread2의 소스 코드 분석이 진행된다.FIG. 9 shows the statement to be executed next to the function runner after the third statement'pthread_create(&thread1, NULL, mythread1, NULL)' is symbolically executed during the source code analysis of the function runner, and then the statement to be executed is'pthread_create(&thread2, NULL,' mythread2, NULL)' (405), and the statement to be executed next to mythread1 is'pthread_mutex_lock(mutex)' (505). When the
100: 병렬 프로그램의 소스 코드 분석 장치
110: 구문 분석부
120: 할일 관리부
130: 기호 실행부
140: 메모리부
150: 결함 검출부100: parallel program source code analysis device
110: parsing unit
120: To-Do Management Department
130: symbol execution unit
140: memory unit
150: defect detection unit
Claims (12)
공유 자원에 대한 정보를 저장하는 글로벌 메모리, 상기 공유 자원에 대한 접근 제어를 동기화하기 위한 정보를 저장하는 접근 제어 메모리 및 적어도 하나 이상의 동적으로 생성되는 워크 리스트- 상기 워크 리스트는 구문을 저장하는 구문 영역 및 상기 구문 영역의 구문의 실행 결과를 저장하는 메모리 영역을 포함함-를 포함하는 메모리부;
상기 추출된 정보 및 상기 접근 제어 메모리의 값에 기초하여 상기 병렬 프로그램의 실행 흐름을 시뮬레이션 하여 상기 소스 코드 중 다음에 실행될 구문을 결정하고, 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 구문 영역에 상기 결정된 구문을 추가하는 할일 관리부;
상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역에 저장되어 있는 정보 및 상기 글로벌 메모리에 저장되어 있는 정보에 기초하여, 상기 결정된 구문을 기호 실행하고, 기호 실행한 결과를 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역 또는 상기 글로벌 메모리에 저장하는 기호 실행부; 및
상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역의 상태 및 상기 글로벌 메모리의 상태에 기초하여, 상기 소스 코드에서 문제를 일으킬 수 있는 결함에 관한 정보를 검출하는 결함 검출부를 포함하며,
상기 기호 실행부는 상기 결정된 구문이 상기 공유 자원에 대한 접근 제어를 동기화하는 명령인 경우 상기 접근 제어 메모리의 정보를 갱신하는
병렬 프로그램의 소스 코드 분석 장치.A parsing unit for extracting information necessary for analysis from the source code of the parallel program;
A global memory for storing information on shared resources, an access control memory for storing information for synchronizing access control for the shared resource, and at least one dynamically generated work list-the work list is a syntax area for storing a phrase And a memory area for storing a result of execution of the syntax in the syntax area;
Based on the extracted information and the value of the access control memory, the execution flow of the parallel program is simulated to determine the next statement to be executed among the source codes, and in the syntax area of the work list for the thread to which the determined statement belongs A to-do management unit for adding the determined phrase;
Based on the information stored in the memory area of the work list for the thread to which the determined syntax belongs and information stored in the global memory, the determined syntax is symbolically executed, and the result of symbolic execution is determined to which the determined syntax belongs. A symbol execution unit that stores the memory area of a work list for threads or the global memory; And
A defect detection unit configured to detect information on a defect that may cause a problem in the source code, based on the state of the memory area of the work list for the thread to which the determined syntax belongs and the state of the global memory,
The symbol execution unit updates information of the access control memory when the determined syntax is a command to synchronize access control to the shared resource.
Source code analysis device for parallel programs.
상기 분석에 필요한 정보는
상기 소스 코드의 라인 수, 상기 소스 코드의 위치 정보 및 상기 소스 코드의 구문 구조에 관한 정보 중 적어도 하나를 포함하는
병렬 프로그램의 소스 코드 분석 장치.The method of claim 1,
The information required for the above analysis is
Including at least one of the number of lines of the source code, location information of the source code, and information on the syntax structure of the source code
Source code analysis device for parallel programs.
상기 결함에 관한 정보는
상기 소스 코드내의 상기 결함의 위치 정보, 상기 결함의 유형, 상기 결함의 원인에 관한 정보, 상기 결함이 발생하게 된 상기 소스 코드의 흐름에 관한 정보 중 적어도 하나를 포함하는
병렬 프로그램의 소스 코드 분석 장치.The method of claim 1,
Information on the above defects
Including at least one of information on the location of the defect in the source code, the type of the defect, information on the cause of the defect, and information on the flow of the source code that caused the defect
Source code analysis device for parallel programs.
상기 글로벌 메모리는 전역 변수의 값 또는 동적으로 힙에 할당된 영역의 값을 저장하는
병렬 프로그램의 소스 코드 분석 장치.The method of claim 1,
The global memory stores the values of global variables or dynamically allocated areas on the heap.
Source code analysis device for parallel programs.
상기 접근 제어를 동기화하는 명령은 공유 자원 공간에 대한 접근 시간을 제어하는 명령인
병렬 프로그램의 소스 코드 분석 장치.The method of claim 1,
The command to synchronize the access control is a command to control the access time to the shared resource space.
Source code analysis device for parallel programs.
상기 추출된 정보 및 공유 자원에 대한 접근 제어를 동기화하기 위한 정보에 기초하여 상기 병렬 프로그램의 실행 흐름을 시뮬레이션 하여 상기 소스 코드 중 다음에 실행될 구문을 결정하고, 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트에 상기 결정된 구문을 추가하는 단계- 상기 워크 리스트는 구문을 저장하는 구문 영역 및 상기 구문 영역의 구문의 실행 결과를 저장하는 메모리 영역을 포함함-;
상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역에 저장되어 있는 정보 및 글로벌 메모리에 저장되어 있는 상기 공유 자원에 대한 정보에 기초하여, 상기 결정된 구문을 기호 실행하고, 기호 실행한 결과를 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역 또는 상기 글로벌 메모리에 저장하는 단계; 및
상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역의 상태 및 상기 글로벌 메모리의 상태에 기초하여, 상기 소스 코드에서 문제를 일으킬 수 있는 결함에 관한 정보를 검출하는 단계를 포함하며,
상기 저장하는 단계는 상기 결정된 구문이 상기 공유 자원에 대한 접근 제어를 동기화하는 명령인 경우 상기 명령의 실행에 따라 상기 접근 제어를 동기화하기 위한 정보를 갱신하는
병렬 프로그램의 소스 코드 분석 방법.Extracting information necessary for analysis from the source code of the parallel program;
Based on the extracted information and information for synchronizing access control to shared resources, the execution flow of the parallel program is simulated to determine the next statement to be executed among the source codes, and a work list for the thread to which the determined statement belongs Adding the determined syntax to the work list, the work list including a syntax area storing a syntax and a memory area storing execution results of the syntax of the syntax area;
Based on the information stored in the memory area of the work list for the thread to which the determined syntax belongs and information on the shared resource stored in the global memory, the determined syntax is symbolically executed, and the symbol execution result is displayed. Storing in the memory area or the global memory of a work list for a thread to which the determined statement belongs; And
And detecting information on a defect that may cause a problem in the source code, based on a state of the memory area of a work list for a thread to which the determined statement belongs and a state of the global memory,
In the storing step, when the determined syntax is a command for synchronizing access control to the shared resource, updating information for synchronizing the access control according to execution of the command
How to analyze the source code of parallel programs.
상기 분석에 필요한 정보는
상기 소스 코드의 라인 수, 상기 소스 코드의 위치 정보 및 상기 소스 코드의 구문 구조에 관한 정보 중 적어도 하나를 포함하는
병렬 프로그램의 소스 코드 분석 방법.The method of claim 6,
The information required for the above analysis is
Including at least one of the number of lines of the source code, location information of the source code, and information on the syntax structure of the source code
How to analyze the source code of parallel programs.
상기 저장하는 단계는
상기 워크 리스트가 2개 이상인 경우 임의로 소정의 워크 리스트를 선택하는
병렬 프로그램의 소스 코드 분석 방법.The method of claim 6,
The storing step
If there are two or more work lists, randomly selecting a predetermined work list
How to analyze the source code of parallel programs.
상기 결함에 관한 정보는
상기 소스 코드내의 상기 결함의 위치 정보, 상기 결함의 종류, 상기 결함의 원인에 관한 정보, 상기 결함이 발생하게 된 상기 소스 코드의 흐름에 관한 정보 중 적어도 하나를 포함하는
병렬 프로그램의 소스 코드 분석 방법.The method of claim 6,
Information on the above defects
Including at least one of information on the location of the defect in the source code, the type of the defect, information on the cause of the defect, and information on the flow of the source code in which the defect occurs
How to analyze the source code of parallel programs.
상기 글로벌 메모리는 전역 변수의 값 또는 동적으로 힙에 할당된 영역의 값을 저장하는
병렬 프로그램의 소스 코드 분석 방법.The method of claim 6,
The global memory stores the values of global variables or dynamically allocated areas on the heap.
How to analyze the source code of parallel programs.
상기 접근 제어를 동기화하는 명령은 공유 자원 공간에 대한 접근 시간 제어 명령인
병렬 프로그램의 소스 코드 분석 방법.The method of claim 6,
The command for synchronizing the access control is an access time control command for the shared resource space.
How to analyze the source code of parallel programs.
상기 추출된 정보 및 공유 자원에 대한 접근 제어를 동기화하기 위한 정보에 기초하여 상기 병렬 프로그램의 실행 흐름을 시뮬레이션 하여 상기 소스 코드 중 다음에 실행될 구문을 결정하고, 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트에 상기 결정된 구문을 추가하는 단계- 상기 워크 리스트는 구문을 저장하는 구문 영역 및 상기 구문 영역의 구문의 실행 결과를 저장하는 메모리 영역을 포함함-;
상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역에 저장되어 있는 정보 및 글로벌 메모리에 저장되어 있는 상기 공유 자원에 대한 정보에 기초하여, 상기 결정된 구문을 기호 실행하고, 기호 실행한 결과를 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역 또는 상기 글로벌 메모리에 저장하는 단계; 및
상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역의 상태 및 상기 글로벌 메모리의 상태에 기초하여, 상기 소스 코드에서 문제를 일으킬 수 있는 결함에 관한 정보를 검출하는 단계를 포함하며,
상기 저장하는 단계는 상기 결정된 구문이 상기 공유 자원에 대한 접근 제어를 동기화하는 명령인 경우 상기 명령의 실행에 따라 상기 접근 제어를 동기화하기 위한 정보를 갱신하는 병렬 프로그램의 소스 코드 분석 방법을 프로세서가 수행하도록 하는 명령어를 포함하는 프로그램이 기록된
컴퓨터 판독 가능한 기록매체.Extracting information necessary for analysis from the source code of the parallel program;
Based on the extracted information and information for synchronizing access control to shared resources, the execution flow of the parallel program is simulated to determine the next statement to be executed among the source codes, and a work list for the thread to which the determined statement belongs Adding the determined syntax to the work list, the work list including a syntax area storing a syntax and a memory area storing execution results of the syntax of the syntax area;
Based on the information stored in the memory area of the work list for the thread to which the determined syntax belongs and information on the shared resource stored in the global memory, the determined syntax is symbolically executed, and the symbol execution result is displayed. Storing in the memory area or the global memory of a work list for a thread to which the determined statement belongs; And
And detecting information on a defect that may cause a problem in the source code, based on a state of the memory area of a work list for a thread to which the determined statement belongs and a state of the global memory,
In the storing step, if the determined syntax is a command for synchronizing access control to the shared resource, the processor performs a source code analysis method of a parallel program updating information for synchronizing the access control according to execution of the command. A program containing instructions to cause
Computer-readable recording medium.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020190002270A KR102185294B1 (en) | 2019-01-08 | 2019-01-08 | Apparatus and method for analyzing source code of concurrent program and computer readible storage medium therefor |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020190002270A KR102185294B1 (en) | 2019-01-08 | 2019-01-08 | Apparatus and method for analyzing source code of concurrent program and computer readible storage medium therefor |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20200086093A KR20200086093A (en) | 2020-07-16 |
KR102185294B1 true KR102185294B1 (en) | 2020-12-01 |
Family
ID=71839670
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020190002270A KR102185294B1 (en) | 2019-01-08 | 2019-01-08 | Apparatus and method for analyzing source code of concurrent program and computer readible storage medium therefor |
Country Status (1)
Country | Link |
---|---|
KR (1) | KR102185294B1 (en) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112328334A (en) * | 2020-10-30 | 2021-02-05 | 腾讯科技(深圳)有限公司 | Message interaction-based card punching method and device and computer readable storage medium |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100205071B1 (en) | 1996-05-02 | 1999-06-15 | 정선종 | Method for recognizing execution errors of a parallel program |
JP2016170707A (en) | 2015-03-13 | 2016-09-23 | 株式会社東芝 | Control program division apparatus, control program division method, computer program, and division source code production method |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101862799B1 (en) * | 2011-12-12 | 2018-05-31 | 삼성전자주식회사 | Memory controller and memory control method |
KR20140147318A (en) * | 2013-06-19 | 2014-12-30 | 한국전자통신연구원 | Apparatus and method for detecting concurrency error of parallel program for multicore |
KR101507469B1 (en) | 2015-01-06 | 2015-04-03 | (주)싸이버텍 | Method for providing source code analysis service |
KR20180120966A (en) * | 2017-04-28 | 2018-11-07 | 코드마인드(주) | Method and device for defect tracking |
-
2019
- 2019-01-08 KR KR1020190002270A patent/KR102185294B1/en active IP Right Grant
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100205071B1 (en) | 1996-05-02 | 1999-06-15 | 정선종 | Method for recognizing execution errors of a parallel program |
JP2016170707A (en) | 2015-03-13 | 2016-09-23 | 株式会社東芝 | Control program division apparatus, control program division method, computer program, and division source code production method |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112328334A (en) * | 2020-10-30 | 2021-02-05 | 腾讯科技(深圳)有限公司 | Message interaction-based card punching method and device and computer readable storage medium |
Also Published As
Publication number | Publication date |
---|---|
KR20200086093A (en) | 2020-07-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6954747B1 (en) | Methods for comparing versions of a program | |
US6593940B1 (en) | Method for finding errors in multithreaded applications | |
US6922827B2 (en) | Iterative software development environment with prioritized build rules | |
US10489150B2 (en) | Software dependency shading | |
US7530056B1 (en) | Method and system for detecting runtime defects in a program by comparing correct and incorrect runs | |
CN107704382B (en) | Python-oriented function call path generation method and system | |
US7844971B2 (en) | Method and apparatus for detecting cross-thread stack access in multithreaded programs | |
US7536678B2 (en) | System and method for determining the possibility of adverse effect arising from a code change in a computer program | |
US20110302565A1 (en) | Implicit workspace dependencies | |
US8276118B2 (en) | Depicting changes to structures in an integrated development environment | |
US9785416B2 (en) | Presenting a custom view in an integrated development environment based on a variable selection | |
CN111796831A (en) | Compiling method and device for multi-chip compatibility | |
JP2004530236A (en) | Verification Language Synthesis | |
JPH07191865A (en) | Analysis method of interblock in operating system | |
CN109614325A (en) | A kind of method and device, electronic equipment and the storage medium of determining control property | |
CN112860312A (en) | Method and device for detecting item dependency relationship change | |
KR102185294B1 (en) | Apparatus and method for analyzing source code of concurrent program and computer readible storage medium therefor | |
US8769498B2 (en) | Warning of register and storage area assignment errors | |
US20140095937A1 (en) | Latent defect indication | |
CN105550575A (en) | Method and device for obtaining un-exported function address and data structure offset | |
JP2019109688A (en) | Software evaluation system | |
KR102156845B1 (en) | Apparatus and method for performing symbolic execution | |
US7185318B1 (en) | Method, system and computer program for comparing a first specification with a second specification | |
CN116361182B (en) | Symbol execution method for error state guidance | |
JP2006092149A (en) | Document file copy movement monitoring system, method and program |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |