Computer Architecture(1)

노정훈·2023년 6월 1일
0

CE

목록 보기
22/24

von Neumann vs Havard Architecture

  • CPU 외부에서는 von Neumann architecture를 따르며 내부에선 Havard architecture

von Neumann architecture

  • EDVAC 관련 보고서에서 등장하고, EDSAC에서 최초로 구현된 컴퓨터 구조
  • stored program 방식으로도 불리며 data와 program이 동일한 공간에 저장되고 동일한 bus 사용

Harvard architecture

  • Mark 1 컴퓨터가 채택한 방식으로 program과 data가 저장되는 memory와 bus가 분리된 것을 제외하면 von Neumann 구조와 매우 유사
  • 분리된 memory와 bus를 통해 동시에 program과 data 접근이 가능하므로 von Neumann보다 빠른 성능이 가능하다는 장점

Function in the Programming

  • Programming에서 function은 재사용성가독성을 위해 사용됨.
  • 수학에서의 function은 입력과 출력 간의 mapping에 좀 더 초점을 두는 반면, programming에서의 function은 입력들을 받아 출력(return value)을 만들어내는 처리에 초점을 둠.

Programming에서의 Function

  • SW에서 특정 동작을 수행하는 일정 code들의 모임을 의미
  • 입력(parameter) 및 그에 따른 출력(return value)을 가지며 이들 사이에서 입력을 바탕으로 출력을 만들기 위한 처리부분으로 구성
  • Programming에서 function은 입력이 없거나 출력이 없는 것도 가능함. (둘 다 없을 수도)

Function 종류

1. built-in function

  • Programming language 등이 기본적으로 제공하는 함수들을 가리킴.
  • 파일 입출력 등과 같이 많은 경우에 공통적으로 필요한 다양한 함수들이 built-in function으로 제공됨.

2. custom function

  • 프로그래머가 built-in function을 기반으로 작성한 고유 함수들.
  • 프로그래밍을 한다는 것은 많은 function을 만들어내는 작업을 포함하는 것

Function call을 instruction set으로 나누기

Example

# Python
def cube(x):
	tmp=x**3
    return tmp
a= cube(3)
  • cube function을 실행한 다음 return되는 address를 계산해야 함.
  • 이 과정에서 instruction을 사용하고 cube 함수를 호출하는 code가 차지하는 address도 감안해야 함.
  • 따라서 반환 주소는 프로그램 시작(100)으로부터 5개의 명령어가 지난 다음이며 이를 200에 저장함.
  • 고정된 주소에 저장하기 때문에 recursive function call(재귀함수호출)을 지원할 수 없음. (때문에 실제로 stack이라는 data structure가 사용됨)
  • 함수를 호출하면 함수가 실행되고 함수 안에 모든 code를 실행하고 나면 200에 있는 값을 사용해 branch indirect(간접 분기)를 함.
  • 그 결과는 200105가 들어가 있기에 105임.

  • Function call은 stack에 argument와 return address를 저장하기 때문에 추가적인 부하가 발생함
  • 추가적인 부하를 없애기 위해 function을 사용하지 않을 경우 중복되는 code들일 너무 많아져 버그에 취약해지고 가독성을 잃게 되어 가급적 중복 처리는 function으로 만들어서 사용

재귀함수와 자료 구조에 대한 더 자세한 내용은 다음 url 참조
More about Recursive Call and Data Structure

Function call과 stack

  • 프로그램이 수행될 때, function call이 이루어지면 function이 저장되어 있는 memory의 address로 PC가 가르킴에 따라 수행되는 주소의 branching이 이루어짐.
  • function 수행이 끝나면 function call이 이루어진 다음 주소로 돌아와야 하기 때문에 해당 address가 저장되어야 함.
  • 이 돌아올 address 및 function에서 사용할 local variables은 stack에 저장됨. 이와 같이 stack에 저장된 데이터들의 모음을 Stack Frame이라고 함.
  • Stack Frame에는 다음과 같은 데이터가 있음
    • function으로 전달하는 parameter
    • local variables
    • 복귀 주소

Stack

  • 자료구조의 하나로서 FILO(First-In-Last-Out)로 동작함.
  • Stack에 저장되는 데이터 단위를 element라 하며 새로운 element가 stack에 추가되는 것을 push, 현재 stack에서 element를 빼내는 동작을 pop이라 함.
  • Stack을 class로 구현 시 push와 pop은 method로 구현됨.
  • Function call, memory allocation 등에서 기본적으로 사용되기 때문에 대부분 CPU들은 instruction set에서 stack을 위한 instruction을 따로 제공함
  • SW적으로는 expression evaluation이나 programming에서 curly brackets 등을 열고 닫았는지 등의 check에서도 자주 사용됨.

Interrupt and Polling

  • CPU에게 어떤 event들이 발생했음을 알리고 이들을 처리하기 위해 제안된 두가지 방법
  • event가 발생했을 때 CPU는 대개 어떤 process를 처리하고 있을 경우가 많음. 즉, CPU는 어떤 process를 처리하고 있는 도중이라도 특정 event들이 발생했는지 여부를 알 수 있어야 하고 이를 처리할 수 있어야 함.

Polling

  • CPU는 일정시간 간격으로 현재 수행 중인 process를 잠시 멈추고 event들이 발생했는지를 점검함.
  • 점검해야할 모든 event들을 주기적으로 체크하는 방식이기 때문에 점검해야 하는 event의 수가 많아질수록 CPU에 걸리는 부하가 커짐.
  • 현재는 interrupt 방식이 더 많이 사용되며 실제로 HW적으로 구현된 interrupt system이 사용됨.
  • polling은 SW적으로 구현하여 특정 처리 등을 할 때 사용함.

Interrupt

  • event가 발생된 경우 해당 event와 관련된 device 등이 CPU에게 event가 발생되었다고 알려줌.
  • 주변기기에서 발생한 interrupt의 처리과정을 예를 들어 살펴보면 다음과 같음
    1. 주변기기에서 CPU가 attention해야 하는 event 발생 시, interrupt request(IRQ)을 생성하여 CPU에게 보냄
    2. 이를 받은 CPU(or processor)는 현재 작업 수행의 상태를 저장하고 수행을 멈춤.
    3. 해당 interruptinterrupt vector를 참고하여 처리를 수행할 interrupt handler(or interrupt service routine(ISR))를 호출
    4. interrupt handler는 해당 interrupt를 처리하는 작업을 수행. interrupt handler는 특정 interrupt에 해당하는 event 시 처리되어야 할 작업을 구현한 function 이라고 생각하면 됨.
    5. interrupt handler가 처리를 끝내면, processor는 중단시킨 작업을 다시 재개함.

Stack과 interrupt

  • 현재 실행 중이었던 process 상태를 저장하고 interrupt handler가 종료되고 하면 돌아올 주소 등이 저장하기 위해 사용되는 자료구조가 stack으로 오늘날 processor들은 이를 위한 stack을 hardware로 구현하고 있음.
  • 이같은 상태 저장은 interrupt handler가 책임지고 수행

Interrupt vector

  • Interrupt handler가 위치하고 있는 memory address등을 가지고 있음.
  • 발생한 interrupt의 종류와 이를 처리할 interrupt handler의 memory address등을 가지고 있음.

Interrupt Mask, Priority and Timer

  • 특정 interrupt를 켜고 끌 수 있으며 이에 대한 정보를 가지고 있는 mask가 존재
  • interrupt들은 우선순위(priority)를 가지며 높은 우선순위의 interrupt가 우선적으로 처리됨.
  • interrupt 처리에 많은 시간을 줄 수 없으며 이같은 시간 제한을 위한 timer interrupt도 존재함.

OS와 Signal handler system

  • SW적 관점에서 OS는 hardware interrupt를 모방한 virtual or software interrupt system을 가지고 있음.
  • User application에서 system call을 통해 Kernel mode로 동작을 요청할 때 software interrupt가 발생하며 이후 kernel mode가 되어 해당 처리가 완료된 이후 원래의 User application의 user mode로 돌아와 작업 재개
  • UNIX에서 이같은 software interrupt를 주로 signal(or event)이라 부르며 해당 처리 방식을 signal mechanism이라 부름. (Ctrl+C도 대표적 signal)

자세한 내용은 다음 링크 참조 : More about Interrupt

References:
1) https://dsaint31.me/mkdocs_site/CE
2) https://dsaint31.tistory.com/entry/CE-Stack

profile
노정훈

0개의 댓글