컴퓨터 구조(6)

이정훈·2025년 2월 14일

대학강의

목록 보기
17/19

이전 복습

separation Compile하는 이유는?
재사용성, 속도 효율성(컴파일 시간, 링킹 등등), 모듈성

compile된 파일안에는 무엇이 있는가?
코드와 데이터가 있다.
실제로 프로그램 크기는 코드가 아니라 데이터가 증가시키는 경우가 많다.
프로그램을 저장하는 메모리를 버츄얼 메모리 라고 한다.
이 메모리에서 텍스트 영역이 코드만 저장하고 있다.

separation Compile의 결과 각 파일들은 코드와 데이터를 가지고 있다.
그리고 separation Compile의 결과 파일들은 실행 파일의 일부분이다. 그래서 결과 파일 부분만으로는 작동하지 않을 가능성이 크다.

obj파일은 명령어와 데이터 주소를 상대적으로 알 뿐 제대로 알고 있지는 않다. 링킹하면서 상대적인 주소가 제대로된 주소로 바뀌는 것이다.

사실 아직도 모르겠다. ㅋㅋㅋ 흠...

Linking with Static Libraries

라이브러리는 오브젝트 파일의 집합이다.
라이브러리를 얼마나 알고 있느냐도 프로그래밍의 깊이를 더해줄 수 있다.
많은 라이브러리를 만나 보아라.
AR tool을 이용해서 자신만의 라이브러리를 만들 수 있다.
라이브러리를 아카이브라고도 부른다.
링커들이 라이브러리를 obj파일에 역결시켜 준다.

라이브러리의 종류
1. static library
관련된 오브젝트 모듈들의 패키지로 컴파일 시간에 링커를 통해 제공된다.
2. dynamic library
런타임에 코드에 의해 그때 그때 만들어진다.

자주 사용하는 라이브러리를 어떻게 해 놓을 것인가?
1. 하나의 파일에 모두 넣어둔다.
2. 각각의 소스파일에 나누어 둔다.
결과적으로 관련있는 것들을 하나의 모듈로 만들고 이를 하나의 파일로 처리해서 여러 파일들로 나누는 것이다.

링커는 백트래킹을 하지 않는다.
즉, unresolved된 참조(symbols)에 대해서는 이후에 처리할 파일들을 확인하면서 해결해 나간다.
만약 모든 파일을 처리한 후에도 unresolved된 심볼이 남아 있다면, 링커는 에러를 발생시킨다.

Linking with Dynamic Library

동적 라이브러리 링크는 프로그램이 실행될 때 필요한 라이브러리를 로드하여 사용하는 방식
실행 파일 크기를 줄이고, 라이브러리 업데이트를 쉽게 관리할 수 있게 만들어줌.

Computer Arithmetic

Arithmetic & Login Unit

CPU에서 연산은 아주 일부분이다.

Roles of ALU

컴퓨터의 중앙 처리 장치 내부에 있는 핵심 구성 요소
산술 연산과 논리 연산을 수행하는 장치

FPU

부동소수점 연산을 전문적으로 수행하는 프로세서의 하드웨어 장치
ALU보다 더 복잡해 FPU가 별도로 담당한다.
floating pointer register가 따로 있다.

Implemetation

일반적인 마이크로 프로세서는 ALU를 반드시 포함한다.

ALU inputs and outputs

명령어를 디코딩해서 들어오는 레지스터를 읽어서 해당 레지스트 값을 연산하고 플래그와 값을 보낸다.

Intel i9 Die Photo


각각의 하나가 코어이다. CPU이다.
코어의 일부가 ALU와 FPU이다.

Integer Representation

정수는 컴퓨터에서 0과 1만으로 표현된다.
0과 1을 통해 이진수(2의 보수)로 부호와 함께 수를 표시한다.
0은 양수, 1인 음수

Characteristics of 2's Complement

0의 표현이 하나 밖에 없다.
효율적이다.
음수, 양수 계산이 편하다.

Adder/Subtractor Hardware

Mulitiplication

곱셈은 어떻게 할 것인가?
컴퓨터도 우리가 손으로 하는 것처럼 할 수 있다.

multiplicand와 multiplier로 구분
1을 만나면 복제 0을 만나면 0000을

이렇게 만든 방식을 Adder로 더하면 곱셈 결과가 나온다.

결국 원리는 한 자리씩 쉬프트 하면서 누적으로 더해주면 된다는 것이다.

Binary Multiplier


a-Bit Adder만 있으면 된다.

lowchart for Unsigned Binary Multiplication

Signed Multiplication

음수와 양수 또는 음수와 음수의 곱은 어떻게 할 것인가?
위에서 배웠던 방법은 쓰면 안된다.

해결 방법

  1. 음수를 양수로 바꾼 뒤 곱하고 부호만 바꿔주면 된다.
    이렇게 하면 기존 알고리즘을 그대로 쓸 수 있지만 시간이 약간 더 걸린다.

  2. Booth의 알고리즘

profile
기록으로 흔적을 남깁니다.

0개의 댓글