기술 창고/CS 지식(15)
-
[컴퓨터 구조] 레지스터 (CPU)
레지스터 CPU 내부의 작은 임시저장장치 프로그램 속 명령어 와 데이터는 실행 전후로 레지스터에 저장된다. 레지스터는 다양한 레지스터들이 존재하고 각자 다른 역할을 가진다. 프로그램 카운터 메모리에서 가져올 명령어의 주소 (메모리에서 읽어들일 다음 명령어 주소) 명령어 레지스터 해석할 명령어 (CPU에 읽어들인 명령어) 메모리 주소 레지스터 메모리 주소 메모리 버퍼 레지스터 메모리와 주고받을 값 (데이터와 명령어) 프로그램 카운터 ~ 레지스터 간의 흐름 과정 프로그램 카운터에서 수행될 다음 명령어 주소를 가져온다. 프로그램 카운터에서 가져온 다음 명령어 주소를 메모리 주소 레지스터에 그대로 복사한다.(저장된다.) 주소 버스를 통해 메모리 주소 레지스터에 저장되어있는 다음 명령어 주소로 찾아간다. 다음 명..
2023.03.13 -
[컴퓨터 구조] ALU와 제어장치 (CPU)
ALU 계산하는 장치 계산을 하기 위해서는 피연산자와 수행할 연산이 필요하다. 피연산자는 레지스터에서, 수행할 연산은 제어장치로부터 제어신호로서 받아온다. 연산 결과는 레지스터에 저장한다. 플래그 : 연산 결과에 대한 부가 정보 (예 : 양수, 음수를 판단하는 구분값) 플래그를 저장하는 곳을 플래그 레지스터라고 한다. 제어장치 제어 신호를 발생시키고 명령어를 해석하는 장치 클럭 : 컴퓨터의 부품들을 움직일 수 있게 하는 시간 단위(주기) 해석할 명령어를 명령어 레지스터에서 받아온다. 플래그 레지스터에서 플래그 정보를 받아온다. 제어 신호를 발생시키는 것과 동시에 제어 버스에서 제어 신호를 받아올 수 있다. 제어 신호를 발생시킬 때 내부로 보내거나 외부로 보낼 수 있따. 내부 : 레지스터, ALU 에 신호..
2023.03.13 -
[컴퓨터 구조] 언어의 컴파일 과정
C 언어 케이스 컴파일 과정 : 전처리기 -> 컴파일러 -> 어셈블러 -> 링커 전처리 과정 본격적으로 컴파일하기 전에 처리할 작업들 외부에 선언된 다양한 소스 코드, 라이브러리 포함 프로그래밍의 편의를 위해 작성된 매크로 변환 컴파일할 영역 명시 등 컴파일 과정 전처리가 완료되어도 여전히 소스코드인 상태이다. 전처리 완료된 소스코드를 저급 언어(어셈블리어)로 변환 어셈블 과정 어셈블리어를 기계어(저급언어)로 변환 목적 코드를 포함하는 목적 파일이 된다. 링킹 각기 다른 목적코드들을 연결하여 실행할 수 있도록 만드는 과정. 예) 한 파일에 존재하는 메인 메소드에 다른 파일에 있는 더하기 메소드를 호출하고 있을 경우 컴파일 과정을 통해 두개의 목적 코드들이 따로따로 생성된 상태이다. 따라서 이 두개의 목적..
2023.03.10 -
[컴퓨터 구조] 명령어의 구조
"무엇을 구현하고, 무엇을 수행하라" 명령어 구성 연산 코드 + 오퍼랜드로 이루어져있다. 연산 코드 == 명령어 (# CPU마다 연산 코드가 각자 다양하다. 아래에 적은 입출력제어까지의 연산코드 명령어는 고정적인 것이 아니다.) 데이터 전송 MOVE : 데이터를 옮겨라 STORE : 메모리에 저장하라 LOAD(FETCH) : 메모리에서 CPU로 데이터를 가져와라 PUSH : 스택에 데이터를 넣어라 POP : 스택의 최상단 데이터를 가져와라 산술/논리 연산 ADD / SUBSTRACT / MULTIPLY / DIVIDE : 덧셈 / 뺄셈 / 곱셈 / 나눗셈 INCREMENT / DECREMENT : 오퍼랜드에 1을 더하라 / 오퍼랜드에 1을 빼라 AND / OR / NOT : and / or / not 연..
2023.03.10 -
[컴퓨터 구조] 소스 코드와 명령어
컴퓨터는 우리가 흔히 사용하는 Java, C, python 과 같은 프로그래밍 언어를 바로 이해하고 명령을 수행하는 것이 아니라 작성한 프로그래밍 언어를 변환한 후 이해하고 수행한다. 개발자 쪽에서 작성한 프로그래밍 언어를 고급 언어 라고 표현하고, 컴퓨터가 이해하고 수행하는 언어를 저급 언어라고 한다. 저급 언어 컴퓨터가 이해하고 실행하는 언어 기계어 : 이진수 0과 1로 이루어진 기계어 혹은 16진수로 이루어진 기계어 어셈블리어 : 기계어를 사람들이 읽기 편하도록 번역한 언어 [기계어] [어셈블리어] 고급 언어 개발자가 이해하기 쉽도록 이루어진 언어 고급 언어가 저급 언어로 변환되는 방식 두가지 컴파일 방식 인터프리터 방식 컴파일 언어 개발자가 작성한 소스코드 (고급 언어) 전체를 컴파일러가 컴파일하..
2023.03.09 -
[컴퓨터 구조] 0과 1로 문자를 표현하는 방법
문자 집합과 인코딩 문자 집합 컴퓨터가 이해할 수 있는 문자의 모음 인코딩 코드화하는 과정 문자를 0과 1로 이루어진 문자 코드로 변환하는 과정 디코딩 코드를 해석하는 과정 0과 1로 표현된 문자 코드(인코딩된 문자 코드)를 문자로 변환하는 과정 아스키 코드 초창기 문자 집합 중 하나 알파벳, 아라비아 숫자, 일부 특수 문자 및 제어 문자 7비트로 하나의 문자 표현 8비트 중 1비트는 오류 검출을 위해 사용되는 패리티 비트(parity bit) 간단한 인코딩 한글을 포함한 다른 언어 문자, 다양한 특수 문자 표현 불가 아스키 코드는 7비트로 하나의 문자를 표현하기 때문에 128개(2의 7승(7비트)) 보다 많은 문자를 표현할 수 없다. 8비트 확장 아스키 코드 (extended ASCII) 등장했지만 여..
2023.03.08