컴퓨터 개론

간단 컴퓨터 개론 -2

Zoo_10th 2024. 1. 3.

1. 명령어

컴퓨터 프로그램의 기본적인 구성 요소이다. 컴퓨터 프로세서가 수행 할 수 있는 기본적인 작업 단위이다.

 

1-1. 명령어 구성

 1. 명령코드(Opcode)

: 수행해야 할 연산의 종류 ex) 덧셈, 뺄셈, 데이터 전송 등 연산

 2. 피연산자(Operand) : 연산이 적용될 데이터이다. 직접적인 값을 가질 수 있고, 데이터가 저장된 메모리 주소를 가르킬 수도 있다. 명령어에 따라 피 연산자가 없거나, 하나 이상 가지고 있을 수 있다.

 

1-2. 명령어 기능

 1. 데이터 처리 : 산술 연산 및 논리 연산을 수행한다.

 2. 데이터 전송 : 메모리와 레지스터간 데이터를 이동한다.

 3. 프로그램 제어 : 분기, 점프 및 호출 명령어를 통해 프로그램을 제어한다.

 4. 시스템 명령어 : 입출력 제어, 인터럽트 처리 등 시스템 수준의 작업을 수행한다.

 

1-3. 주소 지정 방식

컴퓨터 프로세서가 명령어의 피연산자(Operand)를 어떻게 해석하고 찾을지 결정하는 방식을 프로세서에게 데이터를 처리할 때 필요한 유연성과 효율성을 제공한다.

각 주소 지정 방식은 특정한 장단점을 가지고 있으며, 요구사항과 목적에 따라 적절한 방식을 선택해야한다.

 

1-3-1. 즉시 주소 지정 (Immediate Addressing)

 - 특징 : 피연산자가 메모리나 레지스터에 저장되지 않고 명령어에 직접 포함, 메모리 접근이 필요없어 속도가 빠름

 - 작동 방식 : 명령어 자체가 실제 사용할 데이터를 포함

 - 속도가 제일 빠르다.

 

1-3-2. 직접 주소 지정 (Direct Addressing)

 - 특징 : 메모리 접근이 필요하므로 즉시 주소 지정보다 느리지만, 더 큰 데이터 세트에 접근할 수 있다.

 - 작동 방식 : 명령어가 메모리 주소를 직접 지정하며, 해당 주소에서 데이터를 가져온다.

 - 주소 지정 중 3번째로 빠르다.

 

1-3-3. 간접 주소 지정 (Indirect Addressing)

 - 특징 : 데이터의 주소가 동적으로 변경될 수 있으므로 유연성이 높지만, 추가적인 메모리 접근이 필요하여 처리시간이 더 길다.

 - 작동 방식 : 명령어가 메모리 주소를 지정하지만, 그주소는 다른 메모리 위치에 저장된 실제 데이터 주소를 가리킨다.

 - 주소 지정 중 제일 느리다.

 

1-3-4. 레지스터 주소 지정 (Register Addressing)

 - 특징 : CPU 내부에 있으므로 데이터 접근 속도가 매우 빠르다. 하지만 CPU의 레지스터 수는 한정적이므로 큰 데이터 세트는 적합하지 않을 수 있다.

 - 작동 방식 : 피연산자가 CPU 내부의 레지스터를 직접 참조한다.

 - 주소 지정 중 2번째로 빠르다.

 

2. 명령어 처리 방식

2-1. 명령어 사이클

주어진 명령어를 실행하기 위해 반복적으로 수행해야 하는 연속적인 동작이다.

 - 명령어 가져오기(Fetch) : 메모리에서 명령어를 CPU로 가져온다.

 - 명령어 해석(Decode) : 명령코드를 해석하여 수행할 연산을 결정한다.

 - 실행(Execute) : 해석된 명령어를 수행한다.

 

2-1-1. 클럭(Clock)

 - 컴퓨터나 다른 전자기기에서 시간의 흐름을 동기화하고 조절하는 시스템이며, 주로 펄스 신호 형태로, 

전자 회로에 일정한 속도로 신호를 보내 컴퓨터의 다양한 부분이 동시 작업을 수행하도록 한다.

 - 클럭속도는 일반적으로 초당 클럭펄스의 수로 측정 되며, 헤르츠(Hz) 단위로 표현한다.

 - 가장 중요한 요소로 CPU의 클럭속도는 컴퓨터의 전반적인 성능에 큰 영향을 미친다.

 

2-1-1-1. 클럭 주요 역할

1) 동기화 : 프로세서 내부의 모든 연산들이 동시에 일어날 수 있도록 동기화한다.

2) 속도조절 : 클럭 속도는 CPU가 명령어를 처리하는 속도를 결정한다. 

속도가 높을수록 CPU는 더 많은 명령어를 빠르게 처리할 수 있다.

 

2-1-2. 명령어 인출 사이클

 - 프로그램 카운터 PC가 가리키는 메모리 주소에서 명령어를 순서대로 인출해 명령 레이스터 IR로 전송한다.

 

2-1-3. 명령어 실행 사이클

 - 명령어 레지스터 IR에 저장된 명령을 해독하고 CPU내 외부에서 명령어 실행에 필요한 제어 신호들을 발생 시킨다.

 

2-1-4. 간접 사이클

 - 오퍼랜드 필드에 포함된 간접 주소로 부터 실제 피연산자가 저장된 위치인 유효주소를 읽어오는 단계이다.

 

2-2. 인터럽트

 - 프로그램의 정상 처리 순서를 방해하는 서비스 요구를 의미한다.

 - 작동 방식 : CPU의 외부장치나 프로그램의 요청에 의해 발생하게 되며, 인터럽트 요구를 수용하려면 CPU가 진행중인

작업을 중단하게 되며, 인터럽트 처리전 복귀주소, CPU레지스터 상태, 메모리 참조 주소값등을 스택에 저장하고 

인터럽트 처리후 복원하게 된다.

3. 명령어의 병렬 처리 기법

3-1. 병렬처리

 - 작업을 동시에 병렬로 처리한다는 의미로 여러개의 처리장치로 여러개의 작업을 동시에 수행하는 방식
명령어를 여러개의 장치에 분산시켜 동시에 처리해 작업시간을 줄이도록 설계하지만 

프로세스간의 통신 문제가 발생하지 않아야한다.

 

   *비트 레벨 병렬 계산 : 반도체 CPU 프로세서 내부에서 컴퓨터 워드의 비트 수를 늘려 한번에 

처리 할 수 있는 비트수를 늘린 방법

   *명령어 레벨 병렬 계산 : 프로그램의 결과에 영향을 주지 않으면서 명령어 순서를 재배열하고 

그룹으로 묶어 병렬로 실행

   *데이터 병렬 계산 : 각 처리장치가 같은 작업을 하면서 데이터를 분산시킨 서로 다른 데이터 조각을 처라하는 구조로
처리방법은 동일 하나 많은 데이터를 가질때 유용하게 사용한다.

   *작업 병렬 계산 : 다중 프로세서를 이용한 작업 실행 장치가 서로 다른 병렬 컴퓨터에 작업을 분배하는데 중점,
같은 작업이나 서로 다른 작업을 나누어 실행한다.

 

3-2. 명령어 파이프라인

-하나의 명령어 사이클을 여러 단계로 나누고 각 단계에서 동시에 다른 명령어를 처리하도록 CPU를 설계하는 방식
각 단계는 독립적인 모듈로 구성되어 서로 다른 명령어를 다른 단계에서 동시에 처리 할 수 있다.

 

3-2-1. 4단계 파이프라인 구조

 -1단계 : 명령어 인출(Instruction Fetch, IF)
 - 2단계 : 명령어 해독(Instruction Decode, ID)
 - 3단계 : 연산 실행(Execution EX)
 - 4단계 : 연산 결과 저장(Write-Back, WB)

 

3-2-2. 파이프라인의 한계

 -단계를 늘려도 작업이 무한적 빨라지지는 않는다. 이론적인 내용과 달리 단계를 늘려도 데이터 처리하는 작업 속도가 

한계가 있다.

 

3-2-3. 파이프라인의 제약 조건

 -다른 단계에서 메모리나 입출력 장치등 시스템 자원을 먼저 차지해서 사용하고 있으면 파이프 라인이 정상적으로 

작동하지 않게 된다.

 

 

3-3. 슈퍼 스칼라(Superscalar) 구조

 - 한번에 여러 명령어 사이클을 수행 할 수 있는 여러 장치를 구성하여 병렬처리를 향상시키는 CPU 설계 방식이다.
CPU는 한 사이클에 여러 명령어를 동시에 실행할 수 있으며, 프로세서의 성능을 향상시키는 중요한 요소이다.

 

   * 여러개의 명령어 인출 장치를 사용한다.

   * 실행 순서에 관계없이 동시에 실행되어도 무관한 서로 독립적인 명령어들을 판단해 골라내는 장치가 필요하다.

   * 동시에 병렬로 처리할 수 있는 여러개의 독립적인 명령어 실행 장치가 필요하다.

   * 이전에 실행된 명령어의 결과에 종속된 명령어들은 동시에 실행되지 못하고 기다려야 하므로 속도 저하가 발생한다.

 

 

4.명령어 집합

4-1. 명령어 집합 구조(Instruction Set Architecture)

 -CPU는 기본적으로 명령어를 실행한다. CPU의 종류에 따라 명령어의 형태, 연산, 주소 지정 방식 등이 다를 수 있다.

 -명령어 집합은 CPU 언어라고 할 수 있다. 명령어는 컴퓨터 구조에도 영향을 미치며 

ISA(Instruction Set Architecture)라고 부른다

 

4-2. CISC(Complex Instruction Set Computer)

 -복잡한 명령어 집합을 활용하는 컴퓨터(CPU)이다.

 -복잡하면서도 다양한 명령어를 사용할 수 있으므로, 형태와 크기가 다양한 가변길이 명령어를 활용한다.

 - CISC의 명령어는 복잡하고 다양하여 상대적으로 적은 수의 명령어로 프로그램을 실행할 수 있다.

 

4-2-1. CISC특징

1) 복잡하고 다양한 명령어

2) 가변 길이 명령어

3) 다양한 주소 지정 방식

4) 프로그램을 이루는 명령어 수가 적음

5) 여러 클럭에 걸쳐 명령어 수행

6) 파이프라이닝 어려움

 

4-3. RISC(Reduced Instruction Set Computer)

 -종류가 적고, 짧고, 규격화된 명령어만 사용한다. 이런 짧고 규격화된 명령어는 명령어 파이프리닝에 유리하다.

 -메모리 접근을 최소화하며 레지스터를 적극적으로 활용한다.

 - 명령어가 CISC에 비해 적기 때문에 프로그램 실행에 더 많은 명령어가 필요하다.

 

4-3-1. RISC특징

1) 단순하고 적은 명령어

2) 고정 길이 명령어

3) 적은 주소 지정 방식

4) 프로그램을 이루는 명령어 수가 많음

5) 1클럭 내외로 명령어를 수행

6) 파이프라이닝 쉬움

 

5. 프로그래밍 언어

프로그램을 만들기 위해 컴퓨터가 사람생각을 처리할 수 있도록 내용을 전달하거나 명령하는 문자를 사용한다.

 

5-1. 언어의 유형

 1. 개발자가 사용하는 프로그래밍 언어를 관찰하는 관점

 2. 프로그래밍 언어로 만든 프로그램을 실행하는 매체를 관찰하는 관점

 

5-1-1. 사용자 측면

 -언어가 기계어와 관계에 따라 수준을 구분하는 방법에 있어, 관계가 1:1 수준에 가까울수록 저수준으로 분류한다.
  * 고수준 언어(고급 언어) : High Level Language
  * 저수준 언어(저급 언어) : Low Level Language

 

5-1-2. 실행 측면

 -컴파일러 언어(Compiler Language)

 -인터프리터 언어(Interpreter Language)

 -스크립트 언어(Script Language)

 

5-1-3. 세대에 따른 분류

1) 1세대 언어(1GL) : 기계어. 컴퓨터가 직접 이해하는 이진 코드로 구성

2) 2세대 언어(2GL) : 어셈블리언어 기계어에 가까우나 사람이 이해할 수 있는 기호를 사용한다.

3) 3세대 언어(3GL) : 고수준 언어. C, Java, Python 등이 포함되며, 일반적인 프로그래밍 작업에 사용된다.

4) 4세대 언어(4GL) : 초 고수준 언어. 데이터베이스 조회, 보고서 생성 등 특정 작업에 특정 작업에 최적화된 언어이다.

5) 5세대 언어(5GL) : 인공지능 프로그래밍 언어. 로직 프로그래밍, 추론에 중점을 둔 언어이다.

 

6. 저수준 언어

 - 저급 프로그래밍 언어는 컴퓨터가 이해하기 쉽게 작성된 프로그래밍 언어이다.

 - 기계어와 어셈블리어를 포함하며, 컴퓨터의 중앙 처리 장치(CPU)가 직접 이해할 수 있는 명령어로 구성되어 있다.

 - 특수한 경우를 제외하고 저수준 언어가 직접적으로 사용되는 경우가 드물다. 대신 고수준 언어를 사용하여
코드를 작성하고, 이를 저수준 언어로 변환하는 컴파일러나 인터프리터를 사용한다.

 

6-1-1. 저수준 언어 장점

1) 매우 빠른 실행 속도

2) 효율적인 메모리 사용

3) 하드웨어에 직접 접근 가능

4) 보안적인 이점

 

6-1-2. 저수준 언어 단점

1) 복잡한 코드

2) 이식성이 떨어짐

3) 에러 처리나 디버깅이 어려움

4) 하드웨어나 운영체제에 대한 깊은 이해 필요

 

6-2. 기계어

 - 가장 기본적인 단계의 개념

 - CPU가 직접 해독하고 실행할 수 있는 비트 단위의 컴퓨터 언어를 가리킨다.

 - 기계어는 어셈블리어와 1대1로 대응될 수 있다.

 - 컴퓨터 프로그래밍에서 기계어는 대부분 어셈블리어를 거쳐 작성된다.

 - 기계어는 CPU의 종류에 따라서 서로 다른 코드를 가진다.

 

6-3. 어셈블리 언어

 - 어셈블리어(영어 : assembly language) 또는 어셈블러 언어(assembler language)는 기계어와 일대일로 대응되는 

컴퓨터 프로그래밍의 저급 언어이다.

 - 컴퓨터의 구조에 따라 사용하는 기계어가 달라지므로 만들어지는 어셈블리어도 각기 다르다.

 - 컴퓨터의 CPU마다 지원하는 오퍼레이션의 타입과 개수, 레지스터의 크기와 개수, 저장된 데이터 형식의 표현은 모두 다르다.

 - 모든 범용 컴퓨터는 기본적으로 동일한 기능을 수행하지만 어떤과정을 통해 수행하는지 다를 수 있고 차이는
어셈블리어에 반영된다.

 - 명령 집합에 대해 여러 니모닉과 문법이 대응될 수 있다. 이런경우에는 제조사가 제공하는 문서에서 사용한다.

 

6-3-1. 어셈블러

 - 어셈블러는 컴퓨터 언어 번역 프로그램 중 하나로, 기본 기능은 어셈블리어를 기계어 형태 오브젝트 코드로 변환하는 것이다.
 - 컴퓨터의 기본 명령어들을 기계가 수행할 수 있는 비트 패턴으로 변환하는 작업을 포함한다.

6-3-2. 명령어 변환

어셈블러의 주요 작업 중 하나는 니모닉 기호 (mnemonics)를 opcode로 변환하고, 메모리 위치와 기타 요소에 따라 식별자를 다시 해석하여 목적 코드를 생성하는 것이다. 이와 반대로, 기계어를 어셈블리어로 변환하는 것은 “역(逆)어셈블러” (disassembler)라고 부른다.

 

6-3-3. 어셈블리어와 고급언어의 차이점

 - 어셈블리어는 간단한 문장에 대해 기계어와 일대일 대응 관계를 가진다.

 

6-3-4. 추가기능

 - 메모리 위치를 이름으로 표시하고 매크로를 통한 문장 치환 등 기능을 함께 제공한다.
 - 고급 어셈블러는 고급 제어구조, 프로시져/함수 선언 및 호출, 데이터형 추상화 등의 고급 언어 추상화 기능을 제공한다.

 

7. 고수준 언어

고급언어(Advanced Languages)는 프로그래밍 언어의 한 분류로 이해하고 사용하기 쉽도록 설계된 언어이다.

7-1-1. 고수준 언어 특징

1) 인간 친화적인 문법 : 자연언어와 비슷한 구조와 용어를 사용하여 프로그래머가 의도를 쉽게 나타낸다.

2) 추상화 수준의 증가 : 하드웨어와 직접적인 상호작용보다는 문제 해결에 집중하도록 높은 수준의 추상화를 제공한다.

3) 플랫폼 독립성 : 특정 운영체제나 하드웨어에 종속되지 않고 다양한 시스템에서 실행될 수 있도록 설계되어 있다.

4) 다양한 프로그래밍 패러다임 지원 : 객체지향, 함수형 프로그래밍, 절차적 프로그래밍 등 다양한 프로그래밍 스타일을 지원한다. 개발자가 문제를 다각도로 접근할 수 있다.

5)효율적인 개발 프로세서 : 고급 언어들은 강력한 라이브러리, 프레임워크, 개발 도구를 제공하여 개발 프로세서를 단순화하고 개발 시간을 단축 시킨다.

6)오류 감소와 안정성 증가 : 강력한 타입 체크, 예외처리 등을 통해 오류를 줄이고 안정성을 높인다.

 

7-2. 컴파일 언어

소스 코드를 직접적으로 기계어로 변환하는 프로그래밍 언어이다. 

7-2-1. 컴파일 언어의 특징

1) 높은 성능 : 소스 코드를 직접 기계어로 변환하여 실행 파일을 생성한다.

2)한번의 컴파일로 여러 번 실행 : 소스 코드는 한 번 컴파일 되어 실행 파일이 생성되면 실행할 때는 

별도의 변환 과정 없이 실행된다.

3) 플랫폼에 종속적 : 컴파일된 실행 파일은 특정 운영 체제나 하드웨어 아키텍처에 종속된다. 다른 플랫폼에서 

실행하려면 다시 컴파일 해야한다.

4) 복잡한 오류 발견 및 최적화 가능 : 컴파일 과정에서 코드 최적화와 오류 검출이 가능하다.

5) 대표적인 언어 : C, C++, Go, Rust 등

 

7-3. 인터프리터 언어

 소스 코드를 사전 컴파일 단계 없이 실시간으로 실행하는 프로그래밍 언어이다.

 인터프리터라는 프로그램을 통해 코드를 한 줄씩 읽고 실행한다.

 

7-3-1. 인터프리터 언어의 특징

1) 실시간 코드 실행 소스 코드를 사전에 컴파일 하지 않고, 실행 시점에 코드를 한 줄씩 읽어 바로 실행한다.

2) 플랫폼 독립성 : 인터프리터 언어는 대개 플랫폼에 독립적이며, 다양한 운영 체제에서 실행될 수 있다.

3) 개발과 디버깅의 용이성 : 코드 변경 후 바로 결과를 볼 수 있어 빠른 피드백과 디버깅이 가능하다.

4) 성능 저하 가능성 : 인터프리터 언어는 컴파일 언어에 비해 실행 속도가 느릴 수 있다.

5) 대표적인 언어 : 파이썬, 루비, PHP, JavaScript

 

7-3-2. 인터프리터 언어의 작동방식

언어는 일반적으로 소스 코드를 직접적으로 기계어로 변환하여 실행 파일을 생성하지 않는다.

대신, 인터프리터 언어는 프로그램을 실행하는 동안 소스 코드를 실시간으로 읽고 해석하여 직접 실행한다.

1) 실시간 해석과 실행: 인터프리터는 프로그램을 실행하는 동안 소스 코드를 한 줄씩 또는 작은 단위로 읽고, 
해석한 다음 즉시 실행한다.

2) 중간 바이트코드의 생성: 일부 인터프리터 언어는 소스 코드를 중간 바이트코드로 변환하고, 
이를 실행시키는 가상 머신을 사용하기도 한다.

3) 직접적인 기계어 변환 부재: 인터프리터 언어는 컴파일 언어와 달리 소스 코드를 기계어로 
변환하여 별도의 실행 파일을 생성하지 않는다.

728x90

'컴퓨터 개론' 카테고리의 다른 글

간단 웹(Web)  (2) 2024.01.04
간단 컴퓨터 개론 - 1  (0) 2024.01.02

댓글