Study/TIL(Today I Learned)

24.11.11 CS

에린_1 2024. 11. 11. 22:44
728x90

CS

이것이 컴퓨터 과학이다.

컴퓨터가 이해하는 정보

  • CPU는 기본적으로 0과 1만을 이해할 수 있다. 이것을 비트라고 한다. N 비트는 2^N개의 정보를 표현할 수 있다.
  • 워드란 CPU가 한 번에 처리할 수 있는 데이터의 크기를 의미한다. CPU는 프로그램을 워드 단위로 읽어 들이고 처리한다. 워드의 크기는 CPU마다 다르지만, 현대컴퓨터 대부분의 워드 크기는 32비트, 혹인 64비트이다.
  • 컴퓨터 내부에서는 소수점을 나타내기 위해 대표적으로 부동소수점 표현 방식을 이용한다. 하지만 이 방식은 정밀도에 한계가 있다. 부동소수점은 소수점이 고정되어 있지 않은 소수 표현 방식으로, 필요에 따라 소수점의 위치가 이동할 수 있고 유동적이라는 의미에서 부동소수점이라는 이름이 붙었다. 오늘날 컴퓨터는 2진수의 지수와 가수를 다음과 같은 형식으로 저장하는데, 이와 같은 부동소수점 저장 방식을 IEEE754 라고 한다.
  • 컴퓨터가 이해할 수 있는 문자들의 집합은 문자 집합이라고 한다. 그리고 문자 집합에 속한 문자를 컴퓨터가 이해하는 0과 1로 이루어진 문자 코드로 변환하는 과정을 문자 인코딩이라고 한다. 반대로, 0과 1로 표현된 문자를 사람이 이해하는 문자로 변환하는 과정은 문자 디코딩이라고 한다. 가장 기본적인 문자 집합에는 아스키가 있다. 아스키는 초창기 컴퓨터에서 사용하던 문자 집합 중 하나이다. 하나의 아스키 문자를 표현하기 위해서는 8비트를 사용한다. 8비트 중 1비트는 패리티 비트라고 불리는데, 이는 오류 검출을 위해 사용되는 비트이기 때문에 실질적으로 문자 표현을 위해 사용되는 비트는 7비트이다.

명령어

  • 명령어가 수행할 동작은 연산 코드라고 하고, 동작에 사용된 데이터 혹은 동작에 사용될 데이터가 저장된 위치는 오퍼랜드라고 한다. 즉 하나의 명령어는 연산 코드와 0개 이상의 오퍼랜드로 구성되어 있으며, 명령어에서 연산코드가 담기는 영역은 연산 코드 필드, 오퍼랜드가 담기는 영역은 오퍼랜드 필드라고 한다.
  • 오퍼랜드 필드에는 숫자나 문자와 같이 연산 코드에 사용될 데이터가 직접 명시되기 보다는 많은 경우 연산 코드에 사용될 데이터가 저장된 위치, 메모리 주소나 레지스터 이름이 명시된다. 그래서 오퍼랜드 필드를 주소 필드라고 부르기도 한다.
  • 연산 코드의 유형에는 데이터 전송, 산술/논리 연산, 제어흐름 변경, 입출력 제어가 있다.

기계어와 어셈블리어

  • CPU가 이해할 수 있도록 0과 1로 표현된 정보를 있는 그대로 표현한 언어를 기계어라고 한다. 어셈블리어는 기계어를 읽기 편한 형태로 단순 번역한 언어이다.

명령어 사이클

  • CPU가 명령어를 처리하는 과정에서 프로그램 속 각각의 명령어들은 일정한 주기를 반복하며 실행하는데, 이 주기를 명령어 사이클이라고 한다.
  • 메모리에서 저장된 명령어 하나를 실행하고 싶을 때 메모리에 있는 명령어를 가져와야 한다. 가지고 오는 단계를 인출 사이클이라고 한다. 그 다음 실행을 해야 하는데, 그 단계를 실행 사이클이라고 한다.
  • 명령어를 실행하기 위해 한 번 더 메모리에 접근하는 단계를 간접 사이클이라고 한다.

레지스터

  • CPU안에는 다양한 레지스터들이 있고, 각기 다른 이름과 역할이 있다. 프로그램을 이루는 데이터와 명령어가 프로그램의 실행 전 후로 레지스터에 저장되기 때문에 레지스터에 저장된 값만 잘 관찰해도 비교적 낮은 프로그램이 어떻게 동작하는지 파악할 수 있다.
  • 프로그램 카운터는 메모리에서 다음으로 읽어들일 명령어의 주소를 저장한다.
  • 명령어 레지스터는 해석할 명령어를 저장하는 레지스터이다.
  • 범용 레지스터는 이름 그대로 다양하고 일반적인 상황에서 자유롭게 사용할 수 있는 레지스터이다.
  • 플래그 레지스터는 연산의 결과 혹은 CPU 상태에 대한 부가 정보인 플래그 값을 저장하는 레지스터이다.
  • 스택 포인터는 메모리내 스택 영역 최상단 스택 데이터 위치를 가리키는 특별한 레지스터를 말한다.

인터럽트

  • CPU의 작업을 방해시키는 신호를 의미한다. 크게 동기 인터럽트와 비동기 인터럽트로 나뉘는데 동기 인터럽트는 CPU에 의해 발생하는 인터럽트이다. CPU가 프로그래밍 오류와 같은 예외적인 상황을 마주쳤을 때 발생하는 인터럽트다. 예외라고도 불린다.
  • 비동기 인터럽트는 주로 입출력 장치에 의해 발생하는 인터럽트이다. 알림과 같은 역할을 하며 하드웨어 인터럽트라고도 한다.
  • 입출력 작업에서 폴링이란 입출력 장치의 상태가 어떤지, 처리할 데이터가 있는지 주기적으로 확인하는것을 말한다.
  • 인터럽트는 CPU의 정상적인 실행 흐름을 끊는 것이기 때문에 인터럽트 하기 전에 CPU에게 인터럽트의 가능 여부를 확인해야 한다. 이를 위한 신호를 인터럽트 요청 신호라고 한다. 이때 CPU가 인터럽트 요청을 수용하기 위해서는 플래그 레지스터의 인터럽트 플래그가 활성화 되어 있어야 한다. 인터럽트 플래그는 하드웨어 인터럽트를 받아들일지, 무시할지를 결정하는 플래그이다.
728x90

'Study > TIL(Today I Learned)' 카테고리의 다른 글

24.11.13 CS  (1) 2024.11.13
24.11.12 CS, C++  (3) 2024.11.12
24.11.07 CS, VV  (2) 2024.11.08
24.11.04 VV. 장애물, UI 구현, 점수 구현  (0) 2024.11.04
24.10.30 VV, UE5  (3) 2024.10.30