A ship in harbor is safe, but that is not what ships are built for.

STUDY/컴퓨터구조&운영체제

Week02(데이터&명령어)

플리피나리 2023. 3. 29. 15:58
반응형

컴퓨터의 정보단위

  • 비트(bit) : 0 또는 1로 표현되는 가장 작은 정보 단위
  • 바이트(byte) : 8개의 bit를 묶은 정보 단위 -> 2^8(=256)개의 정보 표현 가능
  • 킬로바이트(kB) : 1byte x 1000개 = 1000byte
  • 메가바이트(MB) : 1kB x 1000개 = 1000kB
  • 기가바이트(GB) : 1MB x 1000개 = 1000MB
  • 테라바이트(TB) : 1GB x 1000개 = 1000GB
  • 워드(word) : CPU가 한 번에 처리할 수 있는 데이터 크기
    -> half word, full word, double word
    -> 인텔 x86 CPU는 32비트 word, 인텔 x64 CPU는 64비트 word

 

이진법

  • 1을 넘어가는 시점에서 자리 올림을 하여 0과 1만으로 수를 표현하는 방법
  • 음수는 2의 보수(two's complement)로 표현
    -> 어떤 수를 그보다 큰 2^n에서 뺸 값
    -> 모든 0과 1을 뒤집고, 거기에 1을 더한 값
  • 양수, 음수 구분을 위해 플래그(flag) 사용
  • 한계 : 0이나 2^n 형태의 이진수에 2의 보수를 취하면 원하는 음수값을 얻을 수 없음

 

십육진법

  • 수가 15를 넘어가는 시점에 자리 올림을 하는 숫자 표현 방법
  • 이진법만을 이용해 수를 표기 시 숫자의 길어기 너무 길어진다는 단점을 보완하기 위해 사용 -> 또한 서로 변환이 용이
  • 0~9, A~F의 16문자 사용
  • 16진수 -> 2진수 : 16진수의 각 글자를 4비트의 2진수로 간주해 변환 후 붙임
  • 2진수 -> 16진수 : 4개씩 끊고, 끊어 준 4개의 숫자를 하나의 16진수로 변환 후 붙임

 

용어정리 part1

  • 문자 집합(character set) : 컴퓨터가 인식하고 표현할 수 있는 문자의 모음
  • 문자 인코딩(character encoding) : 문자를 0과 1로 변환하는 과정
  • 문자 디코딩(character decoding) : 0과 1로 이루어진 문자 코드를 사람이 이해할 수 있는 문자로 변환하는 과정

 

아스키코드(ASCII)

  • 초창기 문자 집합 중 하나
  • 영어 알파벳과 아라비아 숫자, 일부 특수문자 포함
  • 각 문자는 1비트의 패리티비트(parity bit)와 7비트로 표현해 표현 가능한 정보의 가짓수는 2^7개로, 총 128개 문자 표현 가능
  • 패리티비트는 오류 검출을 위해 사용되는 비트로 실질적 문자 표현에 사용되지 않음
  • 128개 이외 다른 문자 표현 불가
  • 한국을 포함한 비영어권 국가들은 자신만의 고유한 문자 집합과 인코딩 방식 개발 -> 한국은 EUC-KR

 

EUC-KR

  • 완성형 인코딩 : 초성, 중성, 종성 조합의 완성된 하나의 글자에 고유한 코드를 부여
  • 조합형 인코딩 : 초성, 중성, 종성 각각을 위한 비트열 할당
  • EUC-KR은 완성형 인코딩 방식으로 각 단어에 2바이트 크기 코드 부여(=16비트=4자리 16진수 표현)

 

유니코드

  • EUC-KR보다 훨씬 다양한 한글 및 대부분 나라의 문자, 특수문자, 화살표나 이모티콘 코드 표현 가능
  • 다양한 인코딩 방법 존재 -> utf-8, utf-16, utf-32
  • utf-8이 가장 대중적 -> 유니코드 문자에 부여된 값의 범위에 따라 1~4바이트 중 표현

 

용어정리 part2

  • 고급언어 : 사람이 이해하고 작성하기 쉽게 만들어진 언어 -> c, c++, java, python
  • 저급언어 : 컴퓨터가 직접 이해하고 실행할 수 있는 언어 -> 기계어, 어셈블리어
  • 기계어 : 0과 1의 명령어 비트로 이루어진 언어
  • 어셈블리어 : 0과 1로 이루어진 기계어를 읽기 편한 형태로 번역한 저급언어
  • 컴파일 : 소스 코드 전체가 컴파일러에 의해 저급언어로 변환 -> 컴파일 중 오류가 발생하면 소스 코드 전체 실행 불가
  • 인터프리트 : 소스 코드를 한줄씩 차례로 저급언어로 변환 -> 인터프리트 중 오류가 발생하면 오류 발생 전까지의 코드는 실행
    * 일반적으로 인터프리터 언어는 컴파일 언어보다 느림
  • 목적파일 : 소스코드를 컴파일한 목적코드로 이루어진 파일
  • 실행파일 : 목적 파일에 링킹 작업을 수행한 파일 -> 라이브러리 참조 등

 

연산코드(operation)와 오퍼랜드(operand)

  • 명령어 = 연산코드 + 오퍼랜드
  • 연산코드(연산자) : 명령어가 수행할 연산
    -> 데이터 전송 : MOVE, STORE, LOAD, PUSH, POP
    -> 산술/논리 연산 : ADD/SUBTRACT/MULTIPLY/DIVIDE, INCREMENT/DECREMENT, AND/OR/NOT, COMPARE
    -> 제어 흐름 변경 : JUMP, CONDITION JUMP, HALT, CALL, RETURN
    -> 입출력 제어 : READ, WRITE, START IO, TEST IO
  • 오퍼랜드(피연산자) : 연산에 사용할 데이터 or 연산에 사용할 데이터가 저장된 위치
    -> 데이터를 직접 명시하기보다 연산에 사용할 데이터가 저장된 위치, 즉 메모리 주소나 레지스터 이름을 주로 표기
    -> 오퍼랜드 개수에 따라 0-주소 명령어, 1-주소 명령어, 2-주소 명령어, 3-주소 명령어

 

주소 지정 방식

  • 유효 주소(effective address) : 연산 코드에 사용할 데이터가 저장된 위치, 즉 연산의 대상이 되는 데이터가 저장된 위치
  • 주소 지정 방식 : 연산에 사용할 데이터 위치를 찾는 방법
  • 즉시 주소 지정 방식(immediate addressing mode) : 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시 -> 표현 가능한 데이터의 크기가 작지만, 가장 속다가 빠름
  • 직접 주소 지정 방식(direct addressing mode) : 유효 주소를 오퍼랜드 필드에 직접 명시 -> 오퍼레이션 필드가 연산 코드 길이만큼 짧아져 표현 가능한 유효 주소에 제한

  • 간접 주소 지정 방식(indirect addressing mode) : 유효 주소의 주소를 오퍼랜드 필드에 명시 -> 표현 가능한 유효 주소의 범위가 넓어졌지만 두 번의 메모리 접근으로 속다가 느림

  • 레지스터 주소 지정 방식(register addressing mode) : 연산에 사용할 데이터를 저장한 레지스터를 오퍼랜드에 직접 명시 -> 직접 주소 지정 방식과 유사하나 레지스터이기 때문에 속도가 더 빠름

  • 레지스터 간접 주소 지정 방식(register indirect addressing mode) : 연산에 사용할 데이터를 메모리에 저장하고, 그 주소(유효 주소)를 저장한 레지스터를 오퍼랜드 필드에 명시 -> 간접 주소 지정 방식과 유사하나 메모리 접근 횟수가 한 번 줄어 속도가 더 빠름

 

스택과 큐

  • 스택 : 한쪽 끝이 막혀 있어 막혀있지 않은 쪽으로 데이터를 차례로 저장하고, 저장한 자료를 빼낼 때는 마지막으로 저장한 데이터부터 뺌 -> '나중에 저장한 데이터를 가장 먼저 빼내는 데이터 관리 방식(후입선출, LIFO)'
  • 큐 : 한쪽으로는 데이터를 저장하고, 다른 한쪽으로는 먼저 저장한 순서대로 데이터를 빼냄 -> '가장 먼저 저장된 데이터부터 빼내는 데이터 관리 방식(선입선출), FIFO'

 

반응형