DODONOT Dev
article thumbnail

 

CS > 컴퓨터 구조 > 추가 핵심 이론 정리 1

시스템, 메모리, 워드, 니블, 진수, 2의 보수, 부동소수점, 부울대수식, 플립플롭, CPU구성요소, 레지스터, 마이크로연산, 컴퓨터소프트웨어, 프로그래밍 언어, 파이프라인

 

컴퓨터 시스템

하드웨어 소프트웨어
IO Device
Storage
CPU
Network
Operating System(OS) 운영체제
응용 프로그램

 

메모리 Memory

내부(주기억장치) 외부(보조기억장치)
레지스터(register),
캐쉬(cache memory),
RAM, DRAM, SRAM, DDR4
SSD, HDD, USB, Bluelay

 

워드

하나의 연산을 통해 저장 장치로부터 프로세서의 레지스터에 옮겨놓을 수 있는 데이터 단위이다. 

CPU가 한 번에 처리할 수 있는 데이터의 크기

 

32bit architecture에서 워드의 길이는 32bit (4byte)이다.

64bit architecture에서 워드의 길이는 64bit (8byte)이다.

 

니블 nibble

니블(nibble)은 1바이트의 절반으로 보통 4비트를 가리키는 컴퓨터 환경의 용어이다

1nibble = 4bit

 

MSB 최상위 비트

최상위 비트(most significant bit, msb)는 최고값을 갖는 비트 위치

msb는 가장 큰 숫자를 왼쪽에 기록하는 자리 표기법의 규정 때문에 가끔 "left-most bit"를 뜻하기도 한다.

 

cf. 최하위 비트(least significant bit, LSB)

 

10진수/16진수/2진수 변환표

https://moo-you.tistory.com/329

 

10진수 / 16진수 / 2진수 변환표

10진수 16진수 2진수 10진수 16진수 2진수 10진수 16진수 2진수 10진수 16진수 2진수 0 0x00 0000 0000 64 0x40 0100 0000 128 0x80 1000 0000 192 0xC0 1100 0000 1 0x01 0000 0001 65 0x41 0100 0001 129 0x81 1000 0001 193 0xC1 1100 0001 2 0x02

moo-you.tistory.com

 

2진수를 10진수로 변환하는 법

https://ko.wikihow.com/%EC%9D%B4%EC%A7%84%EC%88%98%EB%A5%BC-%EC%8B%AD%EC%A7%84%EC%88%98%EB%A1%9C-%EB%B3%80%ED%99%98%ED%95%98%EB%8A%94-%EB%B2%95

 

이진수를 십진수로 변환하는 법 (이미지 포함) - wikiHow

이진수는 컴퓨터 내부에서 사용되는 기계 언어이다. 만약 컴퓨터 프로그래머가 되고 싶다면 먼저 이진수를 십진수로 변환하는 법을 배워야 할 것이다. 이 위키하우 글을 통해 이진수를 십진수

ko.wikihow.com

 

2의 보수

컴퓨터는 계산을 편리하게 하기위해 2의 보수를 활용한다.

2의 보수 는 일반적인 수학 문제가 구현하기 매우 간단하도록 정수를 저장하는 기술이다.

이진수 에 대한 수학 연산 이며 컴퓨팅에 사용된다.

 

대부분의 컴퓨터는 2의 보수 방식을 사용하고 있는데

왜 컴퓨팅에서 2의 보수를 사용하는지 알려면 1의 보수 방식과 장단점을 이해해야한다.

아래 블로그에서 설명이 잘 되어있으므로 참고하면 좋겠다. 

 

결론만 말하자면, 1의 보수 방식으로는

  •  캐리가 발생할때 올바른 수를 얻기 위해 따로 처리를 해줘야하고
  •  -0과 +0을 모두 인지할 수 있도록 처리해야 한다.

111...1111과 같은 -0의 문제가 발생하기 때문이다. 어떤 수 N의 비트를 뒤집으면 -N 이므로 두 수를 더할 경우 모든 비트가 1이 된다.

 

따라서 -0을 없애면 되는데 그게 2의 보수 방식이다.

 

2의 보수 방식

'1의 보수 방식에서 +1을한 값'

-0의 문제를 해결하기 위해서 음수 영역에서 각각 대응하는 수에 -1을 해주는 방식으로 처리하면 되므로

1의 보수 방식을 취한 후 (-0의 문제 발생),

+1(1의 보수 방식에서는 부호를 바꾸어 표현하기 때문)을 해주면 된다.

 

즉, 어떤 수를 2의 보수를 이용하여 변환하면

2의 보수를 이용하여 변환하는 방법

1. 어떤 수 N의 비트를 반전 시켜 -N의 비트를 만든다. (1의 보수 방식)

2. +1을 해준다.

2의 보수를 이용해서 음수를 표현한 표

표를 참고해서 확인하면

3을 2진수로 표현하면 0000 0011 

1의 보수로 반전하면 1111 1100 이지만 표에서 1111 1100에 해당하는 수는 -4이다.

표를 통해 확인해보면 -3은 1111 1100에 +1을 한 1111 1101이다.

 

아래 블로그가 정말 너무 잘 설명되어 있으므로 꼭 한 번 읽어보시길 권합니다!!

 

왜 컴퓨팅에서는 2의 보수 방식을 사용할까? (1의 보수 방식과 장단점)

https://st-lab.tistory.com/189

 

2진수의 수와 음수 표현법 [1의 보수와 2의 보수]

안녕하세요. 오늘은 프로그래밍이 아닌 컴퓨터의 연산에 대해 이해해보고자 합니다. 우리가 흔히 프로그래밍을 할 때는 그나마 사람에 가까운 언어로 된 고급언어들로 작성을 하지만 실제 컴퓨

st-lab.tistory.com

 

부동 소수점

실수를 부호, 지수부, 가수부(소수부분)으로 나누어서 표현하는 수의 표현 방식

 

 

부울대수식

논리학에서 명제의 참 거짓을 이진수 1과 0에 대응 시켜서 명제간의 관계를 수학적으로 표현한 방법 입니다.

논리회로 및 간략화 문제를 접하면서 아래 이미지와 함께 열심히 예제들을 풀어보고 익혔습니다..

처음에는 논리회로만 배운 채로 문제부터 접해서 저런 법칙들이 있는지도 모르고 계속 헤맸네요. 🥲

 

부울대수 논리회로

보면서 열심히 문제 풀다보니 맞추기는 또 맞추게 되는 거 같아요.. 파이팅!! (이게 뭐라고 엄청 뿌듯한..)

 

플립플롭의 종류

플립플롭이란

한 마디로 메모리 입니다.

플립플롭(Flip-Flop)은 1비트 정보를 유지(기억)할 수 있는 논리 회로로,

상호 보완적으로 작동하는 2개의 스위칭 소자로 구성되고 입력이 없는 한 원래 상태를 유지합니다.

 

플립플롭에는 4가지 종류가 있습니다.

아래 이미지와 참고하여 설명이 잘 되어있는 블로그를 링크하였으니 참고하면 좋을 것 같습니다.

 

 

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=hhs4040&logNo=221094078248 

 

플립플롭의 종류

플립플롭의 종류에 대해 알아 보겠습니다. 지난 시간에 올렸던 글에 래치의 종류에 대해 설명을 했는데요. ...

blog.naver.com

 

 

CPU의 구성요소

 

CPU의 구성요소에는 크게 제어 장치(CU), 연산 장치(ALU), 레지스터 가 있고

각 구성 요소들이 내부 시스템 BUS로 연결되어 있습니다.

 

제어 장치 (CU, Control Unit) 

  • 컴퓨터 시스템의 작동을 통제하고 지시하는 장치 
  • 기억 장치로부터 프로그랭 명령을 순차적으로 꺼내 해독하고, 해석에 따라서 명령어 실행에 필요한 제어 신호를 기억장치, 연산장치, 입출력 장치 등으로 보내는 장치 
  • 프로그램 카운터(PC), 명령 해독기, 부호기, 명령 레지스터 등으로 구성된다. 

 

연산 장치 (ALU, Arithmetic and Logical Unit) 

  • 명령어를 실행하기 위한 마이크로 연산을 수행하는 장치 
  • 연산에 필요한 자료를 입력받아 산술, 논리, 관계, 이동(Shift) 등 다양한 연산을 수행하는 장치 
  • 가산기, 보수기, 누산기, 데이터 레지스터 등으로 구성된다. 

 

레지스터 (Register) 

  • CPU(중앙 처리 장치)내에 있는 소규모의 고속 기억장치
  •  명령어 주소, 코드, 연산에 필요한 데이터, 연산 결과 등을 임시로 저장한다. 
  • 레지스터는 메모리 계층의 최상위에 위치하며 가장 빠른 속도로 접근 가능한 메모리이다. 
  • 용도에 따라 범용 레지스터와 특수 목적 레지스터로 구분됨

 

동작 레지스터(Working Register)

working register란 CPU가 일을 처리하기 위해 CPU만이 사용 가능한 레지스터이다.

 

상태 레지스터 (Status Register)

status register는 CPU의 상태를 나타내는 flag 정보를 저장한다.

 

범용 레지스터 (General Purpose Register)

작은 데이터의 임시 저장 공간으로, 연산 처리 및 데이터의 주소를 지정하는 역할을 한다. 컴퓨터의 장치들을 제어하는 역할 또한 수행한다.

  • EAX : 산술 연산 및 논리 연산 수행
  • EBX : 메모리 주소 저장
  • ECX : 반복문 사용 시 반복 카운터로 사용, 반복할 횟수 지정하고 반복 작업 수행
  • EDX : EAX 레지스터와 같이 쓰임, 부호 확장 명령 등에 사용, 큰 수의 곱셈 또는 나눗셈 연산
  • EDI : 복사할 때 목적지 주소 저장
  • ESI : 데이터를 조작하거나 복사할 때 데이터의 주소 저장
  • ESP : 메모리 스택의 끝 지점 주소 포인터
  • EBP : 메모리 스택의 첫 시작 주소 포인터
  • EIP : 다음에 실행해야 할 명령어의 주소 포인터

 

특수 목적 레지스터의 종류 

  • MAR (메모리 주소 레지스터) : 읽기와 쓰기 연산을 수행할 주기억장치 주소를 저장 
  • PC (프로그램 카운터) : 다음에 실행될 명령어의 주소를 저장 
  • SP (스택 포인터) : 스택의 최상위 주소를 저장 
  • IX (인덱스 레지스터) : 인덱스 주소 지정 방식에서 인덱스를 저장 
  • IR (명령어 레지스터) : 명령어를 호출해서 해독하기 위해 현재 명령어를 임시로 저장 
  • MBR (메모리 버퍼 레지스터) : 주기억장치의 내용을 임시로 저장하는 역할 
  • AC (누산기) : 산술 논리 장치의 연산 결과를 임시로 저장 
  • PSR (프로그램 상태 레지스터) : CPU의 현재 상태 정보를 저장

 

마이크로 연산(micro-operation)

레지스터에 저장된 데이터를 가지고 실행되는 동작을 마이크로 연산(micro-operation)이라고 하며, 이것은 하나의 클럭 펄스 동안에 실행되는 기본적인 동작으로서 예를들어 시프트(shift), 카운트(count), 클리어(clear), 로드(load)등이 있다.

 

마이크로 연산은 레지스터에 저장된 데이터에 대해 수행되는 기본적인 연산으로 디지털 컴퓨터에서 흔히 사용되는 마이크로 연산은 다음과 같이 네 가지로 분류된다.

  • 전송 : 레지스터 사이 이진 정보를 전송 
  • 산술 : 레지스터에 저장된 수치 데이터에 대해 산술 연산 수행 
  • 논리 : 레지스터에 저장된 비수치 데이터에 대해 비트 조작 연산 수행 
  • 시프트 : 레지스터에 저장된 데이터에 대해 시프트 연산 수행 

 

ALU에서 마이크로 연산 

ALU에서는 산술 연산과 논리 연산을 주로 처리하며 주로 정수 연산을 처리한다. 

최근에는 부동 소수 연산까지 처리한다. 

산술 연산과 논리 연산의 종류는 다음과 같다. 

 

산술연산

 

논리 연산

XOR 연산 처리하는 법

OR과 NAND 게이트에 AND 게이트를 연결하는 경우 XOR 게이트와 동일한 값을 만들 수 있음

(각 게이트에 들어간 값을 OR 값과 NAND 값으로 각각 계산한 후 AND로 한번 더 계산)

 

시프트 연산

 

컴퓨터 소프트웨어

컴퓨터 소프트웨어란, 시스템에서 특정 작업을 수행하기 위한 프로그램 및 절차입니다. 

3가지 주요 유형으로 분류됩니다.

  1. 시스템 소프트웨어 : 드라이버, 서버, OS 및 소프트웨어 구성 요소로 구성
  2. 응용 소프트웨어 : 특정 작업을 수행하는 데 사용
  3. 프로그래밍 언어 : 링커, 디버거, 컴파일러 / 인터프리터, ore 및 편집기와 같은 도구를 통해 프로그램을 작성하는 데 도움

 

시스템 소프트웨어 (System Softwares)

컴퓨터의 하드웨어 및 컴퓨터 응용 프로그램을 실행하여 시스템 리소스를 활용하고

계산 문제를 해결하는 플랫폼을 제공하는 컴퓨터 프로그램 유형입니다.

운영 체제를 설치할 때 시스템 소프트웨어가 컴퓨터에 설치됩니다.

시스템 소프트웨어들은 어셈블리 언어와 같은 저수준 언어로 작성되므로

기본 수준의 하드웨어와 쉽게 상호 작용할 수 있습니다.

시스템 소프트웨어의 일부인 프로그램에는 어셈블러, 컴파일러, 파일 관리 도구, 시스템 유틸리티 및 디버거가 포함됩니다.

  • 운영 시스템 : Windows, MacOS, 리눅스, 게임 엔진 등 
  • 파일 시스템 (FAT, NTFS 등) 
  • 하드웨어 디바이스 드라이버 
  • 어셈블러 
  • 디버거

응용 프로그램 소프트웨어(Application Software)

최종 사용자 프로그램 또는 앱이라고도 합니다.

사용자 입력을 처리하고 사용자가 작업을 완료하도록 도와주는 소프트웨어입니다.

우리가 흔히 "프로그램"이라고 부르는 소프트웨어들이 응용 소프트웨어 입니다.

응용 소프트웨어들은 흔히 오프라인으로 설치되기도 하지만, 최근에는 온라인으로 설치되거나 액세스 되기도 합니다.

  • 오피스 : Word, Excel, PowerPoint 
  • 메신저 : 카카오톡, 라인, 스카이프, 슬랙 등 
  • 그래픽 도구 : 포토샵, 일러스트레이터, CAD/CAM 등
  • 이메일 : 아웃룩, 네이버 메일, 다음 메일, 지메일 등
  • 데이터베이스

 

프로그래밍 언어

저수준 언어 & 고수준 언어 : 컴퓨터에 친화적인 언어(저수준) 사람에 친화적인 언어(고수준) 

절차적 언어 & 객체지향 언어, 함수형 언어 : 프로그래밍의 초점이 각각 절차, 객체, 함수에 있음 

명령형 언어 & 선언형 언어 : 프로그래밍의 초점이 각각 방법(명령형)과 목적(선언형)에 있음 

컴파일 언어 & 인터프리터 언어 : 빌드(build) 과정 있음(컴파일), 빌드 과정 없음(인터프리터) 

정적 언어 & 동적 언어 : 자료형이 컴파일 단계에서 결정(정적), 실행 단계에서 결정(동적)

예를 들어 C언어는 무슨 언어일까?

C언어 : 고수준 언어, 절차적 언어, 명령형 언어, 컴파일 언어, 정적 언어

 

아래 블로그 글을 꼭 읽어보시길 강력하게 추천드립니다!!! 

프로그래밍 언어에 대해 자세하게 알고 싶다면 추천하는 블로그

https://www.snugarchive.com/blog/types-of-programming-languages/

 

프로그래밍 언어 종류와 언어별 특징

프로그래밍 기초 다지기 2

www.snugarchive.com

 

파이프라인

대표적인 설계로는 산술 파이프라인명령어 파이프라인이 있다.

 

산술(arithmetic) 파이프 라인

산술 연산들을 부연산으로 나누어 파이프라인의 세그먼트에서 수행 

  • 고속 컴퓨터에서 부동 소수점 연산, 고정 소수점 수의 곱셈, 과학계산용으로 활용 
  • 파이프라인 승산기(배열 승산기 - 부분 곱 사이의 캐리(carry) 전파시간의 최소화를 위한 가산기 보유) 

 

명렁어(instruction) 파이프 라인

명령어 사이클의 fetch, 디 코드, 실행 단계를 중첩 시킴으로 명령어 흐름에 동작

  • 이전 명령어가 다른 세그먼트에서 실행되고 있는 동안 메모리에 연속적으로 저장되어 있는 다음 명령어를 읽어 옴으로서 fetc와 실행이 중첩되어 동시에 수행되는 구조. 
  • 가장 큰 취약점 😰 : 분기가 발생할 경우 현재의 파이프라인은 모두 비워져야하고, 분기명령 이후에 메모리에서 읽어온 명령어는 모두 무시 되어야 한다.

 

파이프라인의 성능

파이프라인의 성능에 관한 부분은 감은 오는데 완전 이해됐다 하기에는 부족하여 제가 이해하는데 참고했던 블로그를 첨부하겠습니다.

추후에 좀 더 이해하고 정리해보겠습니다.

https://bannavi.tistory.com/115

 

데이터의 종속성 - 병렬처리 그리고 파이프라인 2

안녕하세요 bannavi입니다^ㅅ^ 지난 시간에 이어서 병렬처리 그리고 파이프라인에 대해 살펴볼거에요 바로 시작하겠습니다 4.2 파이프라인 # 파이프라인 구조의 성능 파이프라인의 동작은 공간,시

bannavi.tistory.com

 

파이프라인의 구현

  • 하나의 프로세스를 서로 다른 기능(Function)을 가진 여러 개의 서브프로세스(Subprocess)로 나누어, 각 프로세스가 동시에 서로 다른 데이터를 취급하도록 하는 기법 
  • 세그먼트(segment)에서 수행된 연산 결과는 다음 세그먼트로 연속적으로 넘어가게 되어 데이터가 마지막 세그먼트를 통과하게 되면 최종적인 연산 결과를 얻게 된다
  • 하나의 프로세스를 다양한 연산으로 중복시킬 수 있는 근간은 각 세그먼트마다의 레지스터이다.

 

현실적 파이프라인 구조

실제 파이프라인 구조가 이론적인 최대 속도를 구현하지 못하는 이유 

  • 각 세그먼트 들이 부연산을 수행하는 시간이 서로 다르다. 
  • 또한 각 레지스터를 제어하는 클럭 사이클은 최대 전파시간을 갖는 세그먼트의 지연시간과 싱클를 맞추어야 한다.

 


나중에 다시 공부할 것

  • DRAM 동적램 과 SRAM 정적램 차이
  • 파이프라인의 성능

 

 

 

profile

DODONOT Dev

@두두나 Dev

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!