공부

혼자 공부하는 컴퓨터구조 + 운영체제 1주차

티르 2023. 1. 8. 23:38

첫 페이지 부터 내 시선을 사로잡은 그림.

지금까지의 내 모습이었다.

바로 그 아래 내가 혼공족을 시작한 이유가 나왔다.

이 두장의 그림이 공감을 일으켜 웃음이 나오기도 했고, 다시 한번 공부 의지를 다지게 해주었다.

 


Ch 01.  컴퓨터 구조 시작하기

학습 목표
- 컴퓨터 구조를 왜 알아야 하는지 이해합니다.
- 컴퓨터 구조의 큰 그림을 그려봅니다.

컴퓨터의 구조

컴퓨터는 크게 컴퓨터가 이해하는 정보와 컴퓨터의 핵심 부품으로 나누어진다.

 

컴퓨터가 이해하는 정보

데이터(Data)

- 컴퓨터가 이해하는 숫자, 문자, 이미지, 동영상 같은 정적인 정보.

 

명령어(Instruction)

- 데이터를 움직이고 컴퓨터를 작동시키는 정보

 

컴퓨터에 저장된 사진파일, 텍스트 등은 모두 데이터고, 마우스로 클릭해서 열고 삭제하는 행동이 명령어가 된다고 이해했다.

 

컴퓨터의 핵심 부품

중앙처리장치(CPU, Central Processing Unit)

  • 메모리에 저장된 명령어를 읽고 해석하고 실행하는 부품
  • 컴퓨터의 두뇌
  • 내부 구성요소
    • 산술논리연산장치(ALU, Arithmetic Logic Unit): 계산기. 
    • 레지스터(Register): 프로그램 실행을 위해 필요한 값을 임시 저장.
    • 제어장치(CU, Control Unit): 명령어를 해석하고, 제어신호를 보내 부품을 관리하고 작동시킴

주기억장치(Main memory)

  • 실행되는 프로그램의 명령어와 데이터를 저장하는 부품
  • 프로그램이 실행되려면 반드시 메모리에 저장되어있어야 함
  • 주소(Address)
    • 메모리에 저장된 값에 빠르고 효율적으로 접근하기 위해 사용하는 개념
    • 매번 메모리 전체를 검색하지 않고 가지고있는 주소에 바로 접근 가능.
  • 단점
    • 가격이 비싸서 저장 용량이 적음
    • 전원이 꺼지면 저장된 모든 내용이 사라짐

보조기억장치(Secondary storage)

  • 메모리의 단점을 보완하기 위한 저장 장치
  • 메모리보다 크기가 크고 전원이 꺼져도 저장된 내용을 잃지 않음
  • ex) 하드 디스크, SSD, USB, DVD, CD-ROM

입출력장치(I/O device, Input/Output device)

  • 컴퓨터 외부에 연결되어 컴퓨터 내부와 정보를 교환하는 장치
  • ex) 키보드, 마우스, 스피커, 프린터
메인보드: 여러 컴퓨터 부품을 부착할 수 있는 슬롯과 연결 단자가 있는 판
버스: 메인보드에 연결된 부품들이 서로 정보를 주고받을 수 있게 연결해주는 통로

 

Ch 02. 데이터

학습 목표
- 컴퓨터가 이해하는 정보 단위를 이해합니다
- 0과 1로 다양한 숫자를 표현하는 방법을 이해합니다.
- 0과 1로 다양한 문자를 표현하는 방법을 이해합니다.

정보 단위

비트(Bit)

  • 0과 1을 나타내는 가장 작은 정보 단윈
  • n개의 비트는 2^n가지 정보를 표현 가능
1byte 8bit
1kB 1,000byte
1MB 1,000kB
1GB 1,000MB
1TB 1,000GB

크기 순서

비트(Bit) < 바이트(Byte) < 킬로바이트(KB, Kiobyte) < 메가바이트(MB, Megabyte)

               < 기가바이트(GB, Gigabyte) < 테라바이트(TB, Terabyte)

  • 이전 단위를 1,000개 묶어서 그 다음 높은 단위를 표현
  • 이전 단위를 1,024개 묶어 표현한 단위는 KiB, MiB, GiB, TiB로 표현
워드(Word)
CPU가 한 번에 처리할 수 있는 데이터 크기.
CPU마다 워드 크기가 달라진다.

 

진법

진법 사용하는 숫자 해당 진법으로 표현한 수 20을 표현하는 방법
이진법(Binary) 0, 1 이진수 10100(2)
십진법(Decimal) 0 ~ 9 십진수 20
십육진법(Hexadecimal) 0 ~ 9, A ~ F 십육진수 14(16) 또는 0x14

2의 보수(Two's complement)

  • 이진수의 음수 표현에 가장 많이 사용되는 방법
  • 어떤 수를 그보다 큰 2^n에서 뺀 값을 의미
  • ex) 11(2)의 2의 보수 
    • 2^n -> 100(2)
    • 100(2) - 11(2) = 01(2)
  • 모든 0과 1을 뒤집고 1을 더한 값과 같다.
  • 단점
    • 음수인지 양수인지 구분하기 어려움
    • 1000(2)에 2의 보수를 취하면 자기자신인 1000(2)가 되는 문제

 

십육진수 <-> 이진수 변환

  • 이진수<->십육진수간 변환이 쉽기 때문에 십육진수를 사용한다.
  • 십육진수 한 글자를 4bit의 이진수로 변환 후 이어붙인다.
  • ex) 1A2B(16)
    • 1(16) -> 0001(2)
    • A(16) -> 1010(2)
    • 2(16) -> 0010(2)
    • B(16) -> 1011(2)
    • 1A2B -> 0001101000101011(2)
  • 이진수 숫자를 4개씩 끊어 십육진수로 변환 후 이어붙인다.
  • ex)11010101(2)
    • 1101(2) -> D(16)
    • 0101(2) -> 5(16)
    • 11010101(2) -> D5(16)

문자 집합과 인코딩

문자 집합(Character set)

  • 컴퓨터가 인식하고 표현할 수 있는 문자의 모음
  • 종류
    • 아스키 코드(ASCII: Amerian Standard Code for Information Interchange)
      • 7bit로 표현. 0 ~ 127까지 총 128개
      • 매우 간단하게 인코딩 되지만, 표현할 수 있는 언어의 제한이 있음
      • 8bit로 표현하는 확장 아스키(Extental ASCII)가 등장했지만 여전이 부족함
    • 유니코드(Unicode)
      • 대부분의 나라 문자, 특수문자를 코드로 표현할 수 있는 통일된 문자 집합.
      • 다양한 방법으로 인코딩 가능. ex) UTF-8, UTF-16, ...

문자 인코딩(Character encoding)

  • 컴퓨터가 이해할 수 있도록 문자를 0과 1로 변환하는 과정
  • 종류
    • 완성형
      • 완성된 하나의 글자에 고유한 코드를 부여하는 방식
      • ex) 가=1, 나=2, 다=3, ...
      • 종류
        • EUC-KR
          • 조성, 중성, 종성이 모두 결합된 한글 단어에 2byte크기의 코드를 부여
          • 모든 한글 조합을 표현할 수 없음.
    • 조합형
      • 초성, 중성, 종성마다 비트열을 할당하고, 그 조합으로 하나의 글자를 완성하는 방식
      • ex) ㄱ=0010, ㅏ=0011, ㅐ=0001 00011 -> 강 = 0010 0011 0001 00011

문자 디코딩(Character decoding)

  • 0과 1로 이루어진 문자 코드를 사람이 이해할 수 있는 문자로 변환하는 과정

 

Ch 03. 명령어

학습 목표
- 고급 언어와 저급 언어의 차이를 이해합니다.
- 컴파일 언어와 인터프리터 언어의 차이를 이해합니다.
- 명령어를 구성하는 연산 코드와 오퍼랜드에 대해 학습합니다.
- 명령어의 주소 지정 방식에 대해 학습합니다.

고급 언어와 저급 언어

고급 언어(High-level programming language)

  • 사람이 이해하고 작성하기 쉽게 만들어진 언어

저급 언어(Low-level programming language)

  • 컴퓨터가 직접 이해하고 실행할 수 있는 언어
  • 종류
    • 기계어
      • 0과 1로 이루어진 명령어 모음
      • 가독성을 위해 십육진수로 표현하기도 함
    • 어셈블리어(Assembly language)
      • 기계어를 읽기 편한 형태로 번역한 언어
      • ex) 0101 0101 -> push rbp
      • 프로그램이 작동하는지를 근본적인 단계에서부터 추적, 관찰이 가능함

컴파일 언어와 인터프리터 언어

컴파일 언어

  • 컴파일러에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 고급 언어.
  • 변환 시, 컴파일러가 소스 코드 전체를 훑어봄.
  • 목적 코드(Object code): 컴파일러를 통해 저급 언어로 변환된 코드
  • ex) C언어

인터프리터 언어

  • 인터프리터에 의해 소스 코드 한 줄씩 저급 언어로 변환되어 실행되는 고급 언어
  • 오류 발생 시, 오류발생 직전 코드까지 실행
  •  ex) Python

 

명령어의 구조

연산 코드(Operation code)

  • 명령어가 수행할 연산
  • ex) 데이터 전송, 산술/논리 연산, 제어 흐름 변경, 입출력 제어

오퍼랜드(Operand)

  • 연산에 사용할 데이터가 저장된 위치.
  • ex) 데이터, 메모리, 레지스터 주소

 

주소 지정 방식

  • 연산에 사용할 데이터 위치를 찾는 방법

즉시 주소 지정 방식

  • 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시하는 방법
  • 가장 간단한 형태의 주소 지정 방식.
  • 표현할 수 있는 데이터의 크기가 작아짐
  • 연산에 사용할 데이터를 찾는 과정이 없어서 속도가 빠름

직접 주소 지정 방식

  • 유효 주소를 오퍼랜드 필드에 직접 명시하는 방식
    • 유효 주소: 연산의 대상이 되는 데이터가 저장된 위치
  • 표현할 수 있는 데이터의 크기는 즉시 주소 지정 방식보다 큼
  • 오퍼랜드 필드의 길이가 연산 코드의 길이만큼 짧아져 유효 주소에 제한이 생김

간접 주소 지정 방식

  • 유효 주소의 주소를 오퍼랜드 필드에 명시
  • 직접 주소 지정 방식보다 표현할 수 있는 유효 주소의 범위가 더 넓어짐
  • 메모리에 2번 접근하기 때문에 속도가 느림

레지스터 주소 지정 방식

  • 연산에 사용할 데이터를 지정한 레지스터를 오퍼랜드 필드에 직접 명시
  • 메모리보다 레지스터에 접근하는 방법이 더 속도가 빠름
  • 표현할 수있는 레지스터 크기에 제한이 생길 수 있음

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

  • 연산에 사용할 데이터를 메모리에 저장하고 해당 유효 주소를 저장한 레지스터를 오퍼랜드 필드에 명시
  • 간접 주소 지정 방식과 비슷하지만, 메모리에 접근하는 횟수가 1번으로 줄어 듦.

 


기본 미션

p51 확인 문제 3번

p.65 확인 문제 3번

선택 미션

p.100의 스택과 큐의 개념 정리

2023.01.08 - [공부] - 스택과 큐

 

스택과 큐

스택 개념 한 쪽 끝에서만 자료를 넣고 뺄 수 있는 LIFO(Last In First Out)형식 제한적으로 접근할 수 있는 나열식 구조 사용 사례 재귀 알고리즘 웹 브라우저 방문 기록 ex)뒤로 가기 큐(Queue) 개념 컴

tea-rrr.tistory.com

 

'공부' 카테고리의 다른 글

스택과 큐  (0) 2023.01.08