익명 사용자
로그인하지 않음
계정 만들기
로그인
youngwiki
검색
Exceptional Control Flow 문서 원본 보기
youngwiki
이름공간
문서
토론
더 보기
더 보기
문서 행위
읽기
원본 보기
역사
←
Exceptional Control Flow
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
사용자
.
문서의 원본을 보거나 복사할 수 있습니다.
상위 문서: [[컴퓨터 시스템]] ==개요== [[파일:Control Flow.png|섬네일|200x200px]]프로세서는 한번에 하나씩 instruction을 읽고 실행한다. 이때 프로세서가 실행하는 instruction의 순서를 control flow라고 한다. ==Altering the Control Flow== Control FLow를 수정하는 메커니즘은 두가지가 존재한다. # Jumps and Branches #* Jump: unconditional branch (ex: goto) #* Branches: 조건문, 반복문 # Call and Return: program state<ref>프로그램이 실행 중일 때의 상태를 의미한다. 주로 프로그램 내의 변수 값, 레지스터 값, 프로그램 카운터(PC), 스택 포인터 등과 관련이 있다. 즉, 프로그램이 현재 어떤 명령어를 실행하고 있고, 실행 중인 함수나 연산의 중간 결과 등이 프로그램 상태에 포함된다.</ref>에서의 변화에 반응한다. #* Call: Call 명령은 함수나 서브루틴을 호출할 때 사용되며 호출된 함수로 Control Flow가 이동한다. #** Call 명령어는 호출위치를 기억하기 위해 스택에 저장한 반환 주소(return address)를 저장한다. 호출된 함수가 끝나면 Return 명령을 통해서 호출한 위치로 돌아온다. #* Return: 함수가 종료되면 Return 명령이 실행되어 제어 흐름이 호출 지점으로 돌아간다. #** Return은 스택에 저장된 반환 주소를 참조하여 정확한 위치로 제어 흐름을 되돌린다. * Jumps/Branches와 Call/Return의 차이점 ** Call/Return은 함수 호출 및 반환에 특화된 흐름 변경으로, 흐름을 함수 레벨에서 관리한다. 즉 함수 호출 시, 호출 위치를 기억하고 결과가 반환되면 그 지점으로 돌아오는 방식이다. 이를 통해서 control flow를 구조적으로 변화시킬 수 있다. ** Jumps/Branches 방식은 프로그램 내에서 흐름을 일시적으로 변경, 호출/반환과 같은 기능은 없다. 하지만 위의 두 메커니즘은 system state<ref>운영체제와 하드웨어의 상태를 의미한다. 이는 CPU, 메모리, 디스크, 네트워크, 장치 드라이버 상태, 그리고 시스템이 외부 이벤트에 어떻게 반응하고 있는지 등과 관련이 있다. 예를 들어, 네트워크에서 데이터가 수신되는 상태, 디스크 읽기/쓰기 상태, 시스템 시간 등이 시스템 상태에 포함된다.</ref>에서의 모든 변화에 대응하기에는 불충분하다. 아래는 그 예시이다. # disk, network adapter 등으로부터 Data를 받을 때<ref>CPU가 disk보다 100만배는 빠르므로 disk에 작업을 요청한 후 다른 작업을 실행함</ref> # 0 나누기를 시도할 때 # Ctrl - C 를 시도할 때 # System Timer가 만료되었을 때(expire)<ref>S.T 만료 -> 인터럽트 발생 -> 현재 프로그램 중단 후 스케줄링 처리 -> 다음 프로그램 실행</ref> # 오버플로우(언더플로우)가 발생할 때<ref>Exceptional Control Flow가 필요함</ref> ==Exceptional Control Flow== Exceptional Control Flow는 컴퓨터 시스템의 모든 levels에 존재한다. *Low level mechanisms *# [[Exception|Exceptions]]: system event에 대한 변화에 따라 control flow를 변화시킨다. *#* 하드웨어와 OS의 결합을 통해서 구현된다. *#* 0나누기, 잘못된 메모리 접근 등... *Higher level mechanisms *# Process context switch: 프로세스가 실행중인 상태에서 다른 프로세스로 제어가 넘어갈 때 발생한다. *#* OS와 하드웨어 타이머를 통해서 구현된다. *# Signals: 프로세스 간의 통신을 위해서 사용된다. *#* OS 소프트 웨어에서 구현됨 *#* Ctrl - C를 눌렀을 때 프로세스에 인터럽트를 보내기 *# Nonlocal jumps *#* C runtime 라이브러리에서 예외 처리나 비정상적인 흐름 제어를 처리하는 데 사용 *#* setjmp()로 현재 상태를 저장하고 / longjmp()로 저장된 지점으로 점프를 진행 ===Exceptions and Processes=== 자세한 내용은 [[Exceptions and Processes]]을 참조하십시오. ==각주== [[분류:컴퓨터 시스템]]
Exceptional Control Flow
문서로 돌아갑니다.
둘러보기
둘러보기
대문
최근 바뀜
임의의 문서로
미디어위키 도움말
위키 도구
위키 도구
특수 문서 목록
문서 도구
문서 도구
사용자 문서 도구
더 보기
여기를 가리키는 문서
가리키는 글의 최근 바뀜
문서 정보
문서 기록