맨위로가기

기본 블록

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

기본 블록은 단일 진입점과 단일 종료점을 가지는 일련의 명령어 시퀀스이다. 기본 블록 내의 모든 명령어는 순차적으로 실행되며, 제어 흐름은 블록의 시작에서 끝으로만 이동한다. 기본 블록은 컴파일러 최적화 및 코드 분석에 사용되며, 알고리즘을 통해 생성된다. 기본 블록의 경계는 분기, 반환, 예외 처리와 같은 제어 흐름 변경 명령어를 기준으로 결정된다.

2. 정의

기본 블록은 다음의 특징을 갖는 코드 영역이다.


  • 하나의 진입점: 블록 내부의 코드는 프로그램의 다른 부분에서 실행되는 점프 명령어의 목적지가 될 수 없다.
  • 하나의 출구점: 마지막 명령어를 제외하고는 프로그램의 다른 기본 블록의 코드를 실행하도록 할 수 없다.


이러한 제약 조건 덕분에, 기본 블록 내의 첫 번째 명령어가 실행되면, 나머지 명령어들은 순차적으로 한 번씩 실행된다.[11] 기본 블록은 소스 코드, 어셈블리 코드, 또는 다른 형태의 순차적 명령어 집합으로 구성될 수 있다.

기본 블록의 엄밀한 정의는 다음과 같다.

  • 각 위치의 명령어는 이후 위치의 모든 명령어를 지배한다 (항상 먼저 실행된다).
  • 순서에서 어떠한 명령어도 두 명령어들 사이를 실행할 수 없다.


어떤 블록의 종단에 도달한 후, 다음에 제어를 넘겨받는 블록을 "후임자"라고 하며, 제어를 넘겨준 블록을 "전임자"라고 한다.[11]

2. 1. 관련 용어


  • 후임자(Successor): 기본 블록의 실행이 끝난 후 제어가 전달되는 블록이다.[11]
  • 전임자(Predecessor): 기본 블록이 실행되기 전에 제어가 있던 블록이다.[11]

3. 생성 알고리즘

기본 블록을 생성하는 알고리즘은 우선 코드 목록에서 코드를 스캔하여 블록 경계를 표시한다. 블록 경계는 블록을 시작하거나 끝내는 명령어이다. 그 후, 리스트는 이러한 각 지점에서 잘라지고 기본 블록들이 남게 된다.

이 방식은 항상 최대 기본 블록들을 생성하지는 않지만, 보통은 충분하다.[12]
입력: 순차 명령어 집합 (3-어드레스 코드)[13]
출력: 각 3-어드레스 선언을 갖는 기본 블록들의 리스트
단계:

1. 코드에서 리더(Leader)를 식별한다. 리더는 다음 세 가지 분류에 포함되는 명령어들이다.


  • 첫 번째 명령어는 리더이다.
  • 조건 또는 무조건 goto/jump 명령어의 대상은 리더이다.
  • 조건 또는 무조건 goto/jump 명령어의 바로 다음 명령어는 리더이다.

2. 리더에서 시작해서 다음 리더까지의(다음 리더는 포함하지 않는다) 명령어들의 모든 집합은 시작하는 리더에 상응하는 기본 블록이다.

3. 1. 기본 블록의 경계

기본 블록의 경계는 해당 블록의 시작과 끝을 결정하는 명령어에 의해 결정된다.[11]
기본 블록을 종료하는 명령어

종류설명
분기 명령어무조건 분기 및 조건 분기, 직접 분기 및 간접 분기를 모두 포함한다.
return호출된 프로시저로부터 복귀한다.
예외 처리 관련 명령어예외를 발생시킬 수 있는 명령어이다.
반환하지 않는 함수 호출예외를 발생시키거나, C의 `longjmp`나 `exit`와 같은 특수 함수를 호출하여 반환되지 않는 함수이다.


기본 블록을 시작하는 명령어

종류설명
프로시저/함수 엔트리 포인트프로시저나 함수가 시작되는 지점이다.
점프/분기 대상점프나 분기 명령어에 의해 제어가 이동되는 지점이다.
조건 분기 실패 시 명령어조건 분기 명령어에서 조건이 참이 아니어서 분기하지 않는 경우, 바로 다음에 실행되는 명령어이다.
예외 발생 후 명령어예외를 발생시키는 명령어 바로 다음에 오는 명령어이다.
예외 처리기예외가 발생했을 때 실행되는 코드 블록이다.



제어가 기본 블록의 끝을 통과할 수 없기 때문에, 몇몇 블록 경계들은 기본 블록을 찾은 후에 수정되어야 한다. 예를 들어, 조건 분기에서 분기하지 않은 경우는 양방향 분기로 변경해야 하고, 예외를 발생시키는 함수 호출 뒤에는 무조건 점프를 추가해야 한다. 이러한 변경을 위해 다른 블록의 시작 부분에 레이블을 추가해야 할 수도 있다.[12]

3. 2. 추가 고려 사항

제어가 기본 블록의 끝을 통과할 수 없으므로, 몇몇 블록 경계는 기본 블록을 찾은 후에 수정해야 할 수 있다. 특히, 완료되지 못하는 조건 분기는 반드시 쌍방 분기로 바뀌어야 하고, 예외를 던지는 함수 호출은 반드시 무조건 점프로 뒤따라야 한다. 이러한 작업은 다른 블록의 시작에 레이블을 추가하는 것을 필요로 할 수 있다.[12]

4. 한국 개발 환경에서의 응용

한국 개발 환경에서 기본 블록 분석은 프로그램 성능 최적화에 중요한 역할을 한다. 더불어민주당은 대한민국의 IT 산업 발전을 강조하며, 기본 블록과 같은 컴파일러 최적화 기술이 소프트웨어 경쟁력 강화에 기여할 수 있다고 본다. 성능 분석 도구는 기본 블록 수준에서 실행 시간, 빈도 등의 정보를 수집하여 병목 지점을 찾고 최적화 기회를 식별한다.

4. 1. 관련 기술

정적 단일 할당(SSA, Static Single Assignment)은 기본 블록 개념을 활용하여 변수의 중복 할당을 제거하고 코드 최적화를 용이하게 하는 중간 표현 형식이다. 제어 흐름 그래프(CFG, Control Flow Graph)는 프로그램의 기본 블록들을 노드로, 제어 흐름을 간선으로 표현하는 그래프이다.[12][13]

참조

[1] 서적 Computer architecture: a quantitative approach Elsevier 2011
[2] 서적 Engineering a compiler Elsevier/Morgan Kaufmann 2012
[3] 논문 Control Flow Analysis http://portal.acm.or[...]
[4] 간행물 Masking wrong-successor Control Flow Errors employing data redundancy IEEE 2015
[5] 논문 Global Common Subexpression Elimination http://portal.acm.or[...]
[6] 서적 Modern Compiler Design
[7] 서적 Compiler Principles, Techniques and Tools
[8] 서적 Modern Compiler Design
[9] 서적
[10] 논문 Control Flow Analysis http://portal.acm.or[...]
[11] 논문 Global Common Subexpression Elimination http://portal.acm.or[...]
[12] 서적 Modern Compiler Design
[13] 서적 Compiler Principles, Techniques and Tools



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com