ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 밑바닥부터 만드는 컴퓨팅 시스템
    기타/내용 2022. 9. 24. 20:36

    1. 

    디지털 기기는 정보를 저장하고 처리하도록 설계된 칩들을 탑재한다.

    칩 = 논리 게이트의 모음. ex. 불 게이트

    게이트 = 불 함수를 구현한 물리적 장치. 트랜지스터의 모음

    트랜지스터 = 작은 스위치 장치

     

    하드웨어 설계자들은 이러한 게이트들을 조합하여 조합 복잡한 조합 게이트를 만든다.

    = 논리설계

     

    2. 불 연산

    ALU = 컴퓨터의 모든 산술 및 논리 연산이 이루어지는 핵심 칩.

    2진 덧셈은 비트 + 비트 + 자리올림 비트이다.

    부호가 있는 2진수는 다른 쪽을 음수로 표현하면 된다.

     

    부호 있는 숫자를 표현하는 방식 중 요즘 날 대부분의 컴퓨터들이 사용하는 방법은

    2의 보수이다.

    n개의 숫자로 된 2진수 x가 있을 때 x의 보수는 2의 n 제곱 - x이다.

    더 쉬운 방식은 모든 비트를 뒤집고 1을 더한다.

     

    ALU에는 기초 산술과 논리 연산자를 담을 수 있다.

     

     

    3. 순차 논리

    1,2장에서 만든 칩(and, nand,... 반, 전, 가산기, ALU, 증분기)들은 조합 칩이었다.

    조합 칩 = 입력 값의 조합에만 의존하는 함수를 계산함 + 상태를 유지 X

    상태를 보존 = 메모리 소자 필요

    메모리 소자는 순차 칩으로 만듦

    메모리 소자 구현은 동기화, 클로킹, 피드백 루프 등 다양하고 복잡한 기술임.

      플립플롭 = 저수준의 순차 게이트.

     

    '무언가를 기억'하는 행위는 시간과 관련 있음. 따라서 정보를 '떠올리는' 칩을 만들려면

    먼저 시간 진행을 표현할 수 있는 도구를 개발해야 한다.

     

    클록  = 보통의 하드웨어는 연속적인 신호를 기반으로 시간을 기록함. EX. 틱 (START) 톡(END) 사이의 사이클

    을 모델링한 것. 2진 신호로 표현됨

    마스터 클록의 신호는 하드웨어의 회로망을 통해 컴퓨터에 있는 모든 순차 칩들에 동시 전달됨.

     

    플립플롭 = 컴퓨터에서 가장 기본적인 순차 소자.

     

    레지스터 = 시간이 지나도 값을 저장하고 로드할 수 있는 장치. 

    멀티 플렉서를 도입해 선택 비트를 주고 값을 기억한 다음 로드 비트를 1로 설정한다.

    다음 변경 때까지 내부 값을 유지하게 하려면 비트를 0으로 맞춘다.

    더 많은 비트를 기억하려면 레지스터 배열을 사용한다.

     

    메모리 = 레지스터를 통해 더 많은 비트를 저장할 수 있게 되었으니, 임기의 길이의 메모리 뱅크를

    구성할 수 있다.

    단어 = 레지스터에 저장된 멀티비트

    램 소자 = 레지스터를 여러 개 쌓아 올린 임의 접근 메모리.

    임의 접근 메모리 = 접근 순서오 관계없이 무작위로 선택된 단어를 읽고 쓸 수 있다는 말

    메모리 내의 어떤 단어든 간에 물리적 저장 장치 위치와 상관없이 읽을 수 있다.

    레지스터 모음에 주소 접근까지 있음

     

    이것이 가능한 이유 = 레지스터의 단어들마다 접근할 때 사용되는 유일한 주소를 할당.

    다음으로 N개의 레디 스터 배열을 구성하고 어떤 주서 J의 레지스터를 개별적으로 선택할 수 있도록 게이트 논리를 만든다.

    고전적인 RAM 장치는 데이터 입력, 주소 입력, 로드 비트 세 가지를 받는다.

     

     

     

    이때 주소는 현재 시간 사이클 이세 어떤 RAM 레지스터에 접근할지를 가리킨다.

     

    읽기 연산 (LOAD = 0)인 경우 레지스터의 값을 바로 출력. 쓰기 연산(LOAD=1) 다음 사이클 때

    선택된 메모리 레지스터에서 입력값을 받아, 해당 값을 출력한다.

     

    RAM 장치의 기본 변수로는 각 단어의 비트 개수를 뜻하는 데이터 폭 = 32비트 64비트

    크기 = RAM내의 단어 수

    최신 컴퓨터는 32비트나 64비트의 폭이면서 수억만의 크기를 자랑한다.

     

    계수기 = 매 시간마다 내부 상태 값을 증가시키는 순차 칩.

    일반적으로 CPU에 탑재되어 다음에 실행해야 할 프로그램 명령의 주소를 출력하는 기능을 한다.

     

    시간문제 : 위쪽의 설명한 칩들은 모두 순차적이다. DFF 게이트를 장착한 칩들이다. 

    DFF를 통해 상태를 유지(메모리 장치)하거나 상태를 조작하는(계수기) 기능을 수행한다.

    이러한 기능들은 칩 내부에 피드백 루프를 넣는 방식으로 구현된다.

    피드백 루프 = 출력 신호를 다시 입력으로 넣는 구조.

     

    조합 칩은 시간과 무관하게 입력이 바뀔 때만 출력이 변경됨

    순차 칩은 한 클록 사이클을 넘어갈 때만 출력이 바뀜 (이산화)=> 이를 통해 

    전체 컴퓨터 아키텍처를 동기화할 수 있음.

     

     

    4. 기계어. (모든 걸 가능한 한 단순하게 만들되, 지나치게 단순하게 만들지는 마라.)

    기계어 = 기계 수준의 명령어들로 이루어진 저수준 프로그램을 코딩할 수 있도록 미리 정의된 규칙

    이 명령어를 이용해 프로세서에서 산술 및 논리 연산을 하고, 메모리에서 값을 불러오거나 적재하고, 한 레지스터에서 다른 레지스터로 데이터를 옮기고, 불 조건을 검사하는 등의 작업을 할 수 있다.

     

     

    메모리 = 컴퓨터에서 데이터와 명령어를 저장하는 하드웨어 장치를 통칭

    단어나 위치라 불리는 정해진 폭의 셀들이 연속적으로 배치되어 있고, 각각에 유일한 주소가 있는 구조이다.

     

    프로세서 = 중앙 처리 장치. 특정한 기초 연산들을 수행하는 장치.

    기초 연산 = 산술 및 논리 연산, 메모리 접근 연산, 제어(분기) 연산이 포함됨

    피연산자는 메모리 위치와 레지스터에 있는 2진 값들. 결괏값은 선택된 메모리 주소나 레지스터에 저장됨

     

    레지스터 = 메모리 접근 연산은 상대적으로 느림. 긴 명령어가 필요함.

    이런 이유로 대부분의 프로세서는 값을 하나 저장할 수 있는 레지스터를 여러 개 두고 있음.

    레지스터는 프로세서의 바로 옆에 위치해서 프로세서가 명령어와 데이터를 빠르게 조작할 수 있도록 로컬 고속 메모리 역할을 한다.

    레지스터 덕에 메모리 접근 명령어의 사용을 줄일 ㅅ ㅜ있다.

    메모리 = 레지스터 배열 + 직접 접근 회로

    레지스터 = 비트를 저장하는 소자

     

     

    간접 주소 지정 방식

    명령어에 메모리 주소가 하드 코딩되지 않는다. 그 대신 필요한 주소 값을 저장하고 있는 메모리 위치를 참조하는 명령어 롤 사용한다.

    이것은 포인터를 다루는 데 사용된다.

    배열을 할당하면 x = foo [j] 일 경우 컴파일러는 배열 데이터를 저장할 메모리 세그먼트를 할당한 후에 foo 기호가 세그먼트의 시작 주소를 가리키고 j는 foo로부터 j번 떨어진 곳에 있다.

     

     

    5. 컴퓨터 아키텍처

     

    폰 노이만 구조에는 

    메모리, CPU, I/O 입력 장치가 있습니다.

     

     

    메모리

    폰 노이만 기계의 메모리 눈 데이터와 명령어 두 종류의 정보를 저장합니다.

     

    데이터 메모리

    추상적 데이터(변수, 배열, 객체 등)를 기계어로 번역하여 데이터 메모리에 저장한다.

    주소를 통해 읽기나 쓰기가 가능하다.

    단어라고 불리는 셀들의 배열로 저장된다..

     

    명령어 메모리

    고수준 명령들을 기계어로 번역하면 단어가 되고 이를 저장한다.

    cpu는 각 단계마다 명령어 메모리에서 단어를 읽어서 해석, 수행, 다음 명령어 찾기 등을 한다.

     

     

    CPU

    프로그램의 명령어를 실행하는 일을 담당.

    명령어를 통해 다양한 계산을 수행, 메모리에 값을 읽거나 쓰고, 조건에 따라 다른 명령어로 점프도 한다.

    , CPU 구성요소에는 ALU와 레지스터, 제어장치가 있다.

     

    ALU

    컴퓨터에서 지원하는 모든 저수준 산술 연산 및 노리 연산을 수행하는 장치

    더하거나 양수인지 확인하거나 등

     

    레지스터

    CPU에 매번 메모리에 가서 주소를 통해 데이터 메모리에 접근하는 것보다 근처에 레지스터가 있으면

    더 쉽고 빠르게 계산을 할 수 있다.

     

    제어장치

    컴퓨터 명령어는 보통 폭이 16,32,64 비트인 2진 코드임.

    이를 해석해서 다양한 하드웨어에 실행되도록 정보를 전달해야 함.

    명령어 해석은 제어장치가 한다.

    또 동시에 이 장치는 어떤 명령어를 인출하고 다음에 실행해야 하는지 알아내는 역할도 함

     

    I/O장치

    입출력 장치에는 스크린, 키보드, 프린터, 네트워크 인터페이스 카드, CD-ROM 등이 있다.

    이런 입출력 장치들은 컴퓨터에서 완벽히 처리된다. 메모리 매핑 I/O덕분에.

    일반적인 메모리 세그먼트처럼 보이도록 하는 것이다. 메모리에 전용 영역이 할당되는 것이다.

    키보드 메모리 맵 영역은 항상 물리적 상태를 반역하도록 되어있고

    출력장치는 지속적으로 물리적 상태를 구동하도록 만들어진다.

     

    6. 장

     

    구현 내용은 각 변수가 하나의 메모리 위치를 점유한다는 가정이다.

    실제로는 다양한 변수 타입이 있으며, 차지하는 메모리 공간도 컴퓨터마다 다르다/

    예로 c언어에서 short와 double데이터는 각 16비트, 64비트 숫자를 뜻한다.

    그리고 16비트 컴퓨터에서 실행시키면 short는 메모리 주소 하나를, double은 연속된 네 개의 주소 블록을 차지하게 된다.

     

    기계어는 보통 두 가지 형식, 즉 기호형, 2진 형식으로 정의된다.

    기호형 언어 : LOAD R3, 7

    2진 : 1011000111000111000...

    기호형 언어를 어셈블리라고 부른다. 번역기를 어셈블러.

     

    변수 : 프로그래머가 변수명으로 기호를 사용하면 번역기는 그 기호를 주소에 할당한다.

     

    기호 변환 : 기호 테이블로 구성한다. 구현은 해쉬 테이블 같

     

    어셈블러 : 어셈블리 프로그램은  2진 기계어로 번역해야만 컴퓨터에서 실행할 수 있다.

    ] 번역 작업은 어셈블러라는 프로그램이 담당한다.

    어셈블러는 어셈블리 명령 열을 입력받아, 동일한 의미의 2진 명령어로 열을 출력하고 결과 코드는 컴퓨터 메모리에 로드되어 실행된다.

     

     

    '기타 > 내용' 카테고리의 다른 글

    적정 소프트웨어 아키텍처  (0) 2023.03.16
    pdf  (0) 2023.01.01
    TCP/IP 쉽게, 더 쉽게  (0) 2022.04.23
    DDD start!  (0) 2021.04.25
    스프링 입문을 위한 자바 객체 지향의 원리와 이해  (0) 2021.03.28

    댓글

Designed by Tistory.