CS/컴퓨터구조

프로그램이 실행되려면 소스 코드가 컴파일러에서 컴파일되고, 어셈블러가 기계어로 바꾼 다음 링커에서 실행 가능한 파일로 만들어야 한다. 그 중에서 링킹 과정에 대해서 자세히 알아보자. 링커는 하나의 실행 가능한 파일로 만들어주는 일이다. 아래 명령어를 통해 컴파일을 하면 아래 그림과 같은 과정으로 실행 가능한 형태로 만들어 준다. 링커에는 relocatable object file이 input으로 들어가고 링커에서 executable object file로 변경되어 나온다.gcc -Og -o prog main.c sum.c./prog  링커에서 나온 executable object file은 메모리에 올라간다. 즉 메모리의 일부에 locate되고 실행할 수 있는 형태인 것이다. linking 과정은 lin..
RISC-V에서 함수를 호출하는 규약이 존재한다. 꼭 지켜야 하는 규칙은 아니지만 대부분 이렇게 사용한다고 보면 된다. 함수 호출 과정은 약간 복잡하다. 아래와 같은 함수가 있을 때 main()에서 f1, f2로 argument x와 y를 적절하게 전달해야 한다. 메모리 공간을 할당해 함수를 실행하고, 실행 후에는 기존의 PC 값으로 돌아와야 한다.  일반 분기문과 달리, 명령어의 진행 순서가 연속적이지 않고 함수를 수행하고 나서는 꼭 원래 위치로 돌아가야 한다. 또한 아래 예시처럼 함수 수행 후 return 값이 main 함수에서 다시 사용될 수 있다. 이러한 복잡한 과정에서 아키텍쳐에서는 어떻게 구현되어 있는지 알아보자. 아래는 main에서 j 명령어를 사용해 myfn으로 이동하는 과정이다. myfn..
RISC-V ISA사람이 내린 명령어는 컴퓨터 내부에서 숫자의 연속으로 저장된다. 숫자들이 모여 명령어로 해석되며 RISC-V에서는 32bit 고정된 명령어 길이를 갖는다. 명령어 길이를 모두 동일하게 고정하고, 명령어 종류에 따라 형식은 다르게 설정하였다. 대략 6개 타입으로 분류할 수 있다. R TypeArithmetic3개의 operand를 가지고 있다. 예를 들어 add a, b, c라는 명령어는 b와 c의 레지스터에 저장된 값을 더해서 a에 저장하라는 의미이다. RISC-V의 Arithmetic 명령어는 메모리에 있는 데이터를 직접 사용하지 않는다. 그 이유는 당연하게도, 레지스터에서 값을 가져오는 게 훨씬 빠르기 때문이다. 예를 들어, a = b + c + d - e;라는 C언어를 어셈블리어로..
Instruction Set Architecture(ISA) 명령어는 컴퓨터가 이해할 수 있는 언어이자 프로세서가 돌아가게 하기 위한 최소 단위이다. 소프트웨어와 하드웨어의 인터페이스라고 할 수 있다. 여기에서 잠시 생각해보자. 인텔 CPU와 AMD CPU는 같을까? 동일한 아키텍쳐를 가진다. 그 이유는 OS를 설치해보면 알 수 있는데, 동일한 명령어 집합을 공유하고 있기 때문이다. 그러나 마이크로아키텍쳐는 다르다. 동일한 명령어 집합을 사용하면서, 회사마다 회로 설계방식은 다를 수 있기 때문이다. 지난 글에서 언급했듯 마이크로아키텍쳐는 CPU의 하드웨어 설계를 말한다. 컴퓨터는 2개의 상태를 가지는데, register와 memory이다. 우리는 명령어를 사용해서 각각의 상태를 관리해주어야 한다. 관리하..
컴퓨터란?컴퓨터란 계산하는 기계라는 의미로, 수학적 논리적 계산을 수행하는 기계다. Von Neumann Architecture은 모든 현대 컴퓨터의 시초라고 할 수 있다. 초기 컴퓨터는 기능에 따라 회로를 하나하나 바꿔야 했다. 그러나 효율성이 크게 떨어지는 문제로 모든 프로그램을 메모리 안에 저장하기 시작했다. 이것이 Stored Program Computer(내장형 프로그램 컴퓨터)이다. 대부분 Sequential로 동작한다. Processing Unit은 산술 논리 장치와 레지스터를 의미하고 Control Unit은 명령 레지스터와 Program Counter를 의미한다. 메모리에는 프로그램에 필요한 데이터와 명령어가 저장된다.그러나 이 아키텍쳐는 병목현상이라는 문제점이 있다. 이는 CPU와 메모..
소-은
'CS/컴퓨터구조' 카테고리의 글 목록