CS

데이터와 명령어, 명령어 구조

2023. 7. 6. 22:48
목차
  1. 컴퓨터 구조
  2. 컴퓨터가 이해하는 정보
  3. 컴퓨터의 4가지 핵심부품
  4. 0과1로 문자를 표현하는 방법
  5. 정보단위
  6. 이진법
  7. 이진법의 음수표현
  8. 십육진법
  9. 문자 집함과 인코딩
  10. 유니코드
  11. 소스코드와 명령어
  12. 고급언어
  13. 저급언어
  14. 컴파일 언어
  15. 인터프리터 언어
  16. 명령어 구조
  17. 주소 지정방식
  18. 스터디 질문
  19. 컴파일언어와 인터프리터언어에 대해 설명해주세요
  20. 명령어가 어떤 구조로 이루어져있는지 설명하고 각각의 역할을 설명해주세요
  21. 인덱스란 무엇이고 일반적인 원리는 어떠한지 설명?
  22. 특정데이터 조회시
  23. 인덱스 사용경우

컴퓨터 구조

  • 컴퓨터 구조를 알게되면 좋은점 : 코드를 깊이있게 파악하고 오류가 어디서 났는지 파악 => 문제해결 능력 향상
  • 성능, 비용 ,용량을 상황에 맞게 고려하며 개발

컴퓨터가 이해하는 정보

  • 데이터 : 컴퓨터는 0과 1만 이해할 수 있음 숫자, 문자, 이미지 ,동영상은 모두 0과1로 이루어진 데이터 덩어리
  • 명령어 : 컴퓨터를 작동시킴

컴퓨터의 4가지 핵심부품

cpu

  • 컴퓨터의 두뇌 , 계산과 연산을담당
  • 메모리에 저장된 데이터와 명령어를 해석하고 실행함
  • ALU: 계산만 실행하는 계산기
  • 레지스터 : CPU 내부의 임시저장 장치, 여러가지 용도의 레지스터 존재
  • CU : 제어장치, 전기신호를 내보내 명령어를 해석

메모리

  • 현재 실행되는 프로그램의 명령어와 데이터를 저장하는 부품
  • 프로그램이 실행되려면 메모리에 명령어와 데이터 저장
  • 메모리에 저장된 명령어와 데이터를 찾기위해 "주소"라는 개념 사용
  • 데이터와 명령어는 모두 0과 1로만 표현됨
  • 프로그래밍 언어를 컴퓨터가 이해할 수 있는 0과 1로 변환하는 과정을 컴파일 이라고함

입출력장치

  • 마우스,키보드 ,모니터, 스피커 등

보조기억장치

  • 전원이 꺼져도 실행중인 프로그램을 저장하는 장치
  • HDD, SSD, USB 등
  • 메모리는 실행되는 프로그램 저장, 보조기억 장치는 보관할 프로그램 저장

메인보드

  • 핵심부품 4가지를 시스템 버스라는 통로로 연결함
  • 주소버스, 데이터버스 ,제어버스등 여러용도의 버스존재

0과1로 문자를 표현하는 방법

정보단위

  • 0과1을 나타내는 가장 작은단위 : bit(비트)
  • n비트는 2n승
  • 바이트 : 8비트를 1개로 묶은 단위 1바이트 = 8비트
  • 워드 : cpu가 헌번에 처리할 수 있는 데이터 크기 대부분 32bit, 64bit 단위

이진법

  • 0과 1만으로 데이터를 표현하는방법
  • 코드에서 이진법 표기 할떄 0b를 붙임 ex) 0b1010

이진법의 음수표현

  • 2진법의 보수를 구함
  • 0과 1을 뒤집고 거기에 1을 더한 값
  • ex) 1010 => 0101 + 1 = 0110
  • cpu내부에 플래그 레지스터가 음수와 양수를 구분함

십육진법

  • 0~F 0~15까지를 표현함
  • 0x를 붙혀서 십육진법임을 구분함 ex) 0x15FD15
  • 십육진수를 사용하는 이유 : 십육진수 <-> 이진수 서로 간 변환이 용이함
  • 십육진수 하나를 표현하기 위해 4비트가 필요

문자 집함과 인코딩

  • 문자집함 : 컴퓨터가 인식하고 표현할 수 있는 문자의 모음
  • 인코딩 : 문자집합을 0과 1로 변환하는 과정
  • 코드 포인트 : 문자집합에서 특정 문자에 부여된 값 ex) A=65

유니코드

  • 모든언어, 특수문자, 화살표, 이모티콘 등을 코드로 표현이 가능함
  • 1바이트 부터 4바이트까지 인코딩 결과를 만듬

소스코드와 명령어

고급언어

  • 사람을 위한 언어, 프로그래밍언어 ex) c, c++ , java, python, js 등 사람이 보고 이해할 수 있는 언어

저급언어

  • 컴퓨터가 직접 이해하고 실행할 수 있는 언어, 명령어로 이루어져있음
  • 기계어 : 저급언어에서 컴퓨터가 이해할 수 있도록 0과 1로만 이루어진 언어
  • 어셈블리어 : 저급언어를 사람이 보고 이해할 수 있도록 변환한 형태
  • 고급언어를 실행시키기 위해 저급언어로 변환하는 과정이 필요함 => 컴파일

컴파일 언어

  • 고급언어가 저급언어로 변환되는 방식
  • ex) c언어
  • 컴파일러에 의해 고급언어에서 저급언어로 변환되어 실행
  • 변환되는 과정 : 컴파일
  • 컴파일러가 소스코드에서 오류를 1개라도 발견하면 컴파일에 실패함
  • 컴파일러를 통해 저급언어로 변환된 코드를 목적 코드(Object Code) 라고함

인터프리터 언어

  • 인터프리터 의해 소스코드가 한줄 씩 실행되는 언어 ex) python
  • 소스코드 전체를 변환하는 시간을 기다릴 필요가 없음
  • 오류가 있는 코드의 직전 줄까지 전부 실행함
  • 인터프리터 언어가 컴파일 언어보다 느림, 마지막가지 한줄씩 실행

명령어 구조

  • 연산코드와 오퍼랜드로 구성되어 있음

연산코드

  • 명령어가 수행할 연산값
  • 명령어가 수행할 연산 더하기 , 빼기 , 곱하기 , 나누기 등
  • 연산 코드 유형 : 데이터 전송, 산술 / 논리연산, 제어 흐름변경, 입출력 제어

오퍼랜드 (주소필드)

  • 연산에 사용할 데이터 or 연산에 사용할 데이터의 위치 주소(메모리, 레지스터)
  • 0개 or 1개이상 존재함

주소 지정방식

  • 오퍼랜드 필드안에 레지스터, 메모리의 주소를 지정하는 방식
  • 오퍼랜드에 직접적을 데이터를 넣지 않고 메모리 주소를 담는이유 => 명령어의 길이가 제한됨
  • 오퍼랜드 필드안에 데이터가 담긴 메모리주소를 담으면 표현할 수 있는 데이터가 메모리주소에 저장 주소 공간만큼 커짐

즉시 주소 지정 방식

  • 연산에 필요한 오퍼랜드 필드에 데이터를 직접 명시하는 방식
  • 데이터의 크기는 작아지지만 CPU가 메모리, 레지스터에 접근하지 않아서 속도가 빠름

직접 주소 지정 방식

  • 오퍼랜드 필드에 메모리 주소를 직접 명시 하는 방식
  • 표현할 수 있는 유효주소에 제한이 생김

간접 주소 지정 방식

  • 유효주스의 주소( 메모리, 레지스터 )를 오퍼랜드에 명시함
  • 두번의 메모리 접근으로 인한 속도가 느림

간접 주소 지정 방식

  • 연산에 사용할 데이터 주소를 레지스터에 있는 주소명시
  • 표현할 수 있는 레지스터 크기에 제한
  • 빠른접근

레지스터 간접주소 지정 방식

  • 데이터를 메모리에 저장주소를 레지스터에 주소저장
  • 오퍼랜드 -> 레지스터 -> 메모리

스터디 질문

컴파일언어와 인터프리터언어에 대해 설명해주세요

컴파일 언어

  • 컴파일 언어 : 컴파일러에 의해 소스코드 전체가 저급언어로 변환되어 실행
  • 코드에 오류가 1개라도 있으면 코드가 실행되지 않음
  • 변환을 수행해주는 도구 : 컴파일러
  • 컴파일러를 통해 소스코드가 저급언어로 바뀐 코드를 목적코드라고함

인터프리터 언어

  • 인터프리터에 의해 소스코드가 한줄씩 실행되는 언어
  • 소스코드 전체를 변환하는 시간을 기다릴 필요가 없음
  • 오류가 있는 코드의 직전줄까지 실행함
  • 인터프리터 언어가 컴파일언어보다 느림 -> 마지막 한줄까지 실행하기 때문

명령어가 어떤 구조로 이루어져있는지 설명하고 각각의 역할을 설명해주세요

  • 연산코드 : 명령어가 수행할 연산
  • 오퍼랜드 : 연산에 사용할 데이터 혹은 데이터의 주소가 담겨있음

인덱스란 무엇이고 일반적인 원리는 어떠한지 설명?

  • 데이터베이스 분야에 있어서 테이블에 대한 동작의 속도를 높혀주는 자료구조.
  • 인덱스는 테이블 내의 1개의 컬럼 혹은 여러개의 컬럼을 이용하여 생성됨
  • 고속검색, 효율적인 순서매김 동작에 대한 기초를 제공함
  • 인덱스는 key 필드만 갖고 있고 다른 테이블의 다른 세부항목들은 가지고 있지않음
  • 관계형 DB에서 인덱스는 테이블 부분에 대한 하나의 사본, 복제본
  • 색인이고 메모리 영역의 일종의 목차를 생성하는 개념입니다.
  • B-tree 구조로 사용
  • 검색, 탐색 속도를 높혀줌

특정데이터 조회시

  • 특정데이터 조회가 필요할때 select문을 이용하여 전체테이블 full-scan
  • 자식노드에 포인터가 저장되어 있어 탐색에 있어 1개의 경로만 조회하면 되기때문에 조회에 있어서 효율적인 알고리즘 b-tree
  • 검색 및 조회에 큰 효율 발생
  • 정해진 카테고리나 검색어에 대해 인덱스를 지정했을때 지정된 포인터를 따라서 테이블을 조회하기 때문에 속도개선
  • 자주 수정 , 추가 ,삭제되는 데이터에 대해서는 인덱스에서도 마찬가지로 해당 동작들이 수행되기 때문에 오히려 성능이저하 => 포인터로 가리키고 있는 모든 데이터들에 대해 수정 추가 삭제?

인덱스 사용경우

  • 규모가 큰 테이블
  • 삽입(INSERT), 수정(UPDATE), 삭제(DELETE) 작업이 자주 발생하지 않는 컬럼
  • WHERE나 ORDER BY, JOIN 등이 자주 사용되는 컬럼
  • 데이터의 중복도가 낮은 컬럼
CREATE INDEX 생성할_인덱스이름 ON 생성할_테이블이름 (컬럼_이름);

'CS' 카테고리의 다른 글

메모리와 캐시 메모리  (0) 2023.07.08
ALU와 제어장치  (0) 2023.07.07
DB구조와 유형  (0) 2023.07.02
쓰레드와 쓰레드풀  (0) 2023.07.02
프로세스 생명주기, 프로세스 메모리  (0) 2023.06.19
  1. 컴퓨터 구조
  2. 컴퓨터가 이해하는 정보
  3. 컴퓨터의 4가지 핵심부품
  4. 0과1로 문자를 표현하는 방법
  5. 정보단위
  6. 이진법
  7. 이진법의 음수표현
  8. 십육진법
  9. 문자 집함과 인코딩
  10. 유니코드
  11. 소스코드와 명령어
  12. 고급언어
  13. 저급언어
  14. 컴파일 언어
  15. 인터프리터 언어
  16. 명령어 구조
  17. 주소 지정방식
  18. 스터디 질문
  19. 컴파일언어와 인터프리터언어에 대해 설명해주세요
  20. 명령어가 어떤 구조로 이루어져있는지 설명하고 각각의 역할을 설명해주세요
  21. 인덱스란 무엇이고 일반적인 원리는 어떠한지 설명?
  22. 특정데이터 조회시
  23. 인덱스 사용경우
'CS' 카테고리의 다른 글
  • 메모리와 캐시 메모리
  • ALU와 제어장치
  • DB구조와 유형
  • 쓰레드와 쓰레드풀
index.ys
index.ys
머리속에 떠도는 코드조각들을 맞추는 공간입니다.
index.ys
코린이 개발일지
index.ys
전체
오늘
어제

공지사항

블로그 메뉴

  • 홈
  • 방명록
  • Github
  • Notion
  • Figma
  • 타닥타닥 (235)
    • 개발일지 (124)
    • html , css (0)
    • Javascript (30)
    • Node.js (8)
    • React (2)
    • 네트워크 (1)
    • DB, SQL (5)
    • AWS (11)
    • CS (21)
    • 면접 (13)
    • 사진 (4)
    • 북로그 (3)
    • 머릿속 (5)

인기 글

최근 글

최근 댓글

hELLO · Designed By 정상우.
index.ys
데이터와 명령어, 명령어 구조
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.