[CS] 넓고 얕은 컴퓨터의 구조

공부하는 감자·2024년 5월 30일
0

CS

목록 보기
2/3

디지털 회로와 덧셈

어떻게 하면 CPU를 제작할 수 있을까?

  • CPU는 전자식 계산기다.
    • 산술 연산을 할 수 있는 계산기
    • 전자식인 이유는 빠르기 때문이다.
    • 보통 사칙 연산, 그 중에서도 더하기부터 만든다.

디지털 회로

  • A와 B는 Input

컴퓨터가 덧셈하는 방법

반가산기

  • 덧셈 연산을 수행하기 위한 논리회로
  • 2진수 1+11 + 1은 2진수 10(2)10_{(2)}이다.
  • A가 1, B가 1이면 XOR 연산결과 S는 0이다.
    • A와 B는 1bit이다.
  • 동시에 A가 1, B가 1이면 AND 연산결과 C는 1이다.
    • 이 1은 자리 올림(Carry)이다.

반가산기의 단점

  • 반가산기는 1bit 이진수 두 개로 덧셈 연산을 수행한다.
  • 예를 들어 65라는 숫자는 16진수로 0x41이다.
    • 41은 각각 ‘0100’과 ‘0001’로 표현한다. → 즉, 8비트
    • 그럼 반가산기도 8개가 필요하다.
  • 자리올림이 발생하기 때문에, A와 B뿐만 아니라 자리올림도 포함하여 3가지를 더해야 한다.
    • 세 개의 비트를 합산할 수 있는 로직이 필요하다.

전가산기

💡 이걸로 더하기를 만들 수 있다.

  • 자리올림 수까지 포함하여 덧셈 연산을 수행한다.
  • 전가산기 4개를 병렬로 이으면 4bit 전가산기가 된다.

컴퓨터가 뺄셈하는 방법

보수의 덧셈

  • 보수를 덧셈하면 자동으로 뺄셈이 이루어진다.
  • 6에 4를 더하면 10이다.
    • 즉, 4는 6에 대한 10의 보수이다.
    • 10의 보수는 수에 얼마를 더해야 10이 될까를 찾는 것이다.
      6에 4를 더하면 10이 되므로, 4는 6에 대한 10의 보수이다.
  • 13 - 6은 7이다.
    • 13에서 ‘6에 대한 10의 보수 4’를 더하고 10 자리에서 1을 빼도 역시 7이다.

2진수의 덧셈

  • 2진수에서 0은 1로, 1은 0으로 뒤집으면 1의 보수가 된다.
    • Not Inverter를 사용하면 된다.
    • Not 게이트를 Inverter라고 부른다고 한다.
  • 1의 보수에 1을 더하면 2의 보수이다.
  • 어떤 숫자에 2의 보수를 더하면 자동으로 2진수 뺄셈이 된다. 단, 자리올림은 버린다.

컴퓨터의 뺄셈

  • 컴퓨터는 보수를 구해서 더하게 하는 방식으로 구현되어 있다.
  • 이를 응용해, 곱하기는 여러 번 더하면 되고 나누기는 여러 번 빼면 된다.
    • 사칙연산(덧셈, 뺄셈, 곱하기, 나누기)이 된다.

CPU가 곱하고 나누는 방법

shift

  • 곱셈을 보다 효율적으로 하기 위해 등장했다.
  • 비트를 왼쪽/오른쪽으로 미는 것이다.
    • 2진수 상태에서 비트를 왼쪽으로 한 칸 밀면 곱하기 2한 효과가 난다.
    • 2진수 상테에서 비트를 오른쪽으로 한 칸 밀면 곱하기 2한 효과가 난다.

컴퓨터가 곱셈하는 방법

  • 4비트로 5를 표현하면 ‘0101’이다.
  • 4비트 ‘0101’을 왼쪽으로 한 칸씩 밀면(Shift) ‘1010’이다.
  • 맨 오른쪽에 0이 채워진다. (Zero Padding)
  • 4비트로 표현하는 2진수 ‘1010’은 10이다.
  • 왼쪽으로 한 칸 밀면 곱하기 2, 두 칸 밀면 곱하기 4가 된다.

홀수 곱셈

컴퓨터가 나눗셈하는 방법

  • 4비트로 6을 표현하면 0110이다.
  • 4비트 0110을 오른쪽으로 한 칸씩 밀면 0011이다.
  • 맨 오른쪽에 0이 채워진다. (Padding)
  • 4비트로 표현하는 2진수 0011은 3이다.

0으로 나누기

  • 나눗셈은 뺄셈이다.
    • 즉, 어떤 수 X에서 Y를 뺀다면 결과 S가 Y보다 작은 수가 나올 때까지 X(S)-Y를 반복한다.
  • 7을 0으로 나누면?
    • 7에서 0을 빼면 7이고, 7은 0보다 크다.
    • 7에서 0을 계속 뺀다면 언젠가는 0보다 작은 숫자를 만날 수 있는가?
    • 만날 수 없다면 뺄셈 연산은 언제 끝날까?
      • 무한히 반복한다. CPU가 열을 발생시키다 펑!
      • 범용 CPU는 이러한 말도 안되는 연산은 소프트웨어 인터런트가 발생하면서 연산을 해주지 않는다.

컴퓨터가 연산하는 과정

컴퓨터

  • CPU는 연산장치이다. (비메모리)
    • 메모리가 아닌, 즉 저장할 목적이 아닌 연산이 목적이다.
  • RAM은 메모리 반도체이다. (메모리)
    • 정보를 담는 저장이 목적이다.
  • SSD나 하드디스크같은 보조기억장치에서 정보를 가져와서, CPU로 옮겨서 연산한다.
    • 운영체제가 해주거나 하드웨어 수준에서 하거나 한다.
    • 즉, 이 과정에서 우리가 뭔가 하지 않는다.

메모리 관리

  • RAM을 보면 일련번호마다 공간이 존재하고, 그 공간에 정보를 저장한다.
    • 일련번호는 42억 9천만 정도 되는데, 2322^{32}, 즉 32bit이다. (4GB)
    • 그래서 32비트는 특수 목적 외엔 사용하지 않는다.
    • 64비트는 이론상 16 엑사바이트까지 컨트롤이 가능한데, 물론 윈도우 운영체제는 거기까지 지원하지는 않는다.
  • 0번과 1번은 OS가 사용한다.
  • CPU는 메모리에서 가져온 값을 레지스터라는 임시 공간에 담는다.
    • 이미지 상에선 결과가 밑으로 떨어졌는데, 실제론 3에 덮어씌우기 되는 식으로 처리된다.
  • ALU(arithmetic and logical unit)이 연산한다.

연산 과정

  1. RAM같은 메모리에서 정보를 가져와서 레지스터에 담는다.
  2. ALU를 통해서 산술 연산을 실시한다.
  3. 결과를 다시 메모리에 보낸다.

추가 정리

  • RAM을 1차 메모리라고 한다.
    • RAM은 메모리 반도체가 컴퓨터가 연산하는데 가장 서포트해주는 역할을 중추적으로 해주고 있다.
  • SSD(HDD)같은 애들을 2차 메모리라고 한다.
  • 레지스터는 이름이 A, B, C 이런 식으로 되어 있다.
    • 뒤에 X가 붙기도 하고 앞에 E가 붙기도 한다.

컴퓨터가 기억공간을 관리하는 방법

기억장치의 종류와 역할

  • CPU 수준에서 가지고 있는 메모리
    • CPU가 연산을 할 때는 레지스터까지 끌고 와야 한다.
  • 컴퓨터 내부의 내부 메모리 (그 중 RAM은 1차 메모리가 된다)
  • External로 넘어가면 2차 메모리 정도로 분류한다.
    • 이때부터 주변 기기로 보면 된다.

CPU의 속도

  • CPU의 속도는 무척, 제일 빠르다.
  • CPU가 4.xGHx(4.x기가 헤르츠) 정도면 RAM은 1.xGHz쯤 된다.
    • 헤르츠는 1초에 몇 번 주파수라는 의미다. 즉, 주파수 단위.
    • 그럼 RAM을 왜 쓰는 걸까?
  • CPU와 2차 메모리의 속도 차이는 갭이 더 크다.
    • 이러한 갭을 극복하게 위해 중간 영역(Cache memory, RAM)이 있다.

휘발성

  • Register에서 RAM까지는 휘발성 메모리이다.
    • 전원이 꺼지면 그 안의 내용이 모두 날아간다.
  • HDD나 SSD같은 것들이 RAM만큼 속도가 빨라진다면 RAM은 필요가 없을 것이다.

가격

  • 밑으로 내려갈 수록 용량이 커지고 속도가 느려진다.
  • 위로 올라갈 수록 속도는 빨라지지만 값이 비싸져서 대용량으로 쓰지도 못한다.
  • 그래서 연산을 하는 CPU 안에 들어있는 레지스터는 극소량의 메모리이다.
    • 보통 메모리로 분류하지 않고 CPU의 일부라고 본다.
    • Cache까지도 CPU 안에 들어간다.

캐시 메모리의 역할

  • RAM이 CPU에 비해 속도가 많이 느려서, CPU는 미리 예측을 한다.
  • 저장된 정보는 두 가지로 나뉠 수 있다.
    • 프로그램 코드
    • 연산 대상
  • CPU는 각각에 대한 것을 미리 예측해서 캐시 메모리에 옮겨둔다.
    • 예를 들어, 연산 중에 A도 연산 대상이 되겠다고 예측하고 미리 읽어서 캐시 메모리에 옮겨둔다.
  • 즉, RAM과 CPU의 속도 차이를 극복하기 위해 캐시 메모리같은 게 있다.
    • 램 메모리는 속도 차를 극복하기 위해 존재하는 걸 수도 있다.
    • 캐시는 확실히 CPU와 RAM 사이의 속도 차를 극복하기 위해서 존재한다.

캐시 폴트

  • 히트가 되지 않고 미스가 난 것이다.
  • 다시 말해, 예측한 것이 맞지 않았을 경우.

컴퓨터가 기억공간을 관리하는 방법

레지스터와 캐시는 CPU의 일부로 본다.
CPU는 관리를 한다고 보기 어렵고, 캐시는 CPU 스스로 알아서 통제한다.

  • 컴퓨터는 기본적으로 모든 것이 다 ‘숫자’이다.
  • 정보가 저장된 위치도 ‘숫자’ (보통은 일련번호)로 표시한다.
    • RAM은 일련번호로 관리한다.
    • 이러한 숫자를 메모리 주소라고 한다.
  • 이 같은 관리 체계는 아파트 단지에서 각 가구를 동, 호 숫자로 관리하는 것과 유사하다.
  • 레지스터, 주 기억장치(RAM), 보조 기억장치(HDD, SDD)를 관리하는 방법은 조금씩 다르다.
    • 레지스터는 개별 기억공간마다 고유 이름을 붙인다.
    • 주 기억장치는 일련번호(주소)를 붙인다.
    • 보조기억장치는 트랙(Track) 번호와 섹터(Sector) 번호를 붙여 관리한다.
      • 파일(File)의 등장

프로그램 실행 시

  • 하드디스크에 프로그램이 설치된다.
  • 설치된 프로그램을 실행시키면, 프로그램은 RAM 메모리로 카피되어 올라온다.
  • 프로그램 내부의 어떤 명령들을 CPU에게 보내서 연산을 시킨다. → 실행

HDD, SSD와 파일 시스템

주 기억장치

  • 주 기억장치 공간은 ‘일련번호’로 관리한다.

HDD의 논리적 구조

  • 자기 디스크 원판이다.
  • 자기 디스크의 마그네틱에 자성 정보를 저장하는 방식
  • 중앙에 Spindle 모터가 붙어 있어서 고속으로 회전하고 있다.
    • 하드디스크의 어떤 스펙을 논할 때 이 디스크 회전 속도를 이야기한다.
    • ex) 물리적으로 몇천, 몇백 RPM이다.
  • 헤드는 디스크 표면에 붙는 게 아니다.
    • 헤드가 표면에 붙으면, 고속회전하다 보니 표면을 긁다가 헤드 자체가 불탈 수도 있다.
    • 위 상황을 막기 위해 산소 대신 다른 걸 넣는 등… 온갖 방법을 한다.

트랙과 섹터

  • 논리적으로 봤을 때, 어떤 개념으로 관리체계에 따라 나눈다.
    • 관리체계는 트랙과 섹터
  • 물리적으로도 트랙과 섹터로 나뉜다.
    • 디스크 제조사마다 다른데, 로우 레벨이라고 얘기를 한다.
  • 섹터에 정보를 기술한다.
  • 섹터 하나에 데이터를 Write한 후, 다시 Write하면 Overwrite가 된다.
    • overwrite를 반복하면(ex. 몇 십만번) 섹터가 망가져서 못 쓰게 된다.
    • 이렇게 손상되어서 사용할 수 없게 된 섹터를 Bad Sector라고 한다.
    • 따라서 빈공간을 위주로 채워서 쓴다. → 운영체제가 관리
  • 논리적 구조 상에서 섹터 하나의 용량은 보통 512 바이트 정도 잡힌다.

조각 모음의 의미

  • 섹터가 512B 정도 될 때, 4개(클러스터)로 묶으면 약 2KB정도 된다.
  • 보조기억장치를 쓸 때는 파일의 형태로 많이 사용한다.

다음 두 가지 경우를 생각해보자.

  • 용량이 100 바이트일 때
    • 한 섹터에 100바이트를 저장하고, 섹터 조각 하나를 완전히 다 쓴 걸로 처리한다. → 약간의 낭비 발생
    • 섹터를 촘촘히 채워쓰려고 하면 CPU를 더 쓰기 때문에 연산과 로직이 복잡해진다.
  • 용량이 512 바이트 이상일 때
    • 같은 트랙 다음 섹터까지 저장한다.
    • 다음 섹터에 이미 데이터가 있으면, (강의에선 다른 트랙으로 감) 다음 빈 섹터로 워프(건너뛰기)하여 저장한다.
    • 디스크가 회전하면서 데이터를 읽는데, 이렇게 공간이 조각나있으면 I/O(입출력)를 할 때 입출력의 어떤 성능, 즉 속도 문제가 발생한다.
  • 조각 모음을 하면 사이에 껴있던 데이터를 다른 곳으로 이동하고, 한 트랙에 쭉 잇도록 만들어 준다.
  • 요즘은 OS가 조각 모음을 알아서 잘 하고 있다.
  • 오류 검사는 디스크 상에 오류가 있는지 검사
    • Bad Sector같은 것

파일이 저장되는 방법 (파일 시스템)

  • 운영체제별 파일 시스템이 있다.
    • MAC(매킨토시)는 애플의 파일 시스템
    • 윈도우는 NTFS (NT라는 코드의 파일 시스템)
  • 기본적으로 모든 파일 시스템은 FAT이라는 형태를 가지고 있다.

File Allocation Table (FAT)

  • 파일의 위치를 알려준다.
  • 메타 데이터같은 정보들을 표 형태로 관리한다.
    • 몇 번 트랙, 몇 번 섹터에 무엇이 저장되었고 크기가 무엇인지
  • 파일을 삭제하면 디스크에서 완전히 삭제하지 않고, 테이블의 칼럼(Delete 여부)에 삭제되었다고 체크한다.
    • 파일 명은 펀치를 한다. → 앞 글자 몇 개를 #으로 바꾼다거나?
    • 즉, 관리 체계 상에서 지워졌다고 마킹만 되는 것이다.
  • 복원은 이 테이블 정보를 찾아서 분석한 다음, 위치와 데이터가 살아있다면 찾아가서 데이터를 복사하는 것이다.
    • 이런 걸 해주는 프로그램 소프트웨어가 있다.

마스터 부트 레코드 (MBR)

  • 0번 트랙 0번 섹터를 말한다.
  • OS의 부트 로더라고 하는 코더가 들어간다.
  • 컴퓨터 전원을 켰을 때, MBR을 찾아가서 OS 부트 로더 코드를 가져와서 운영체제 프로그램을들 하나씩 메모리에 적재해서 실행한다.
    • 이걸 Booting이라고 한다.
  • 바이러스가 MBR을 못 쓰게 만들면(몇 만번쯤 오버라이트한다거나) 컴퓨터가 부팅이 안된다.
  • 따라서 마스터 부트 레코드는 여러 차원에서 보호를 한다.

Format

  • USB를 하나 샀는데 파일 시스템이 EXFAT로 되어 있는데, NTFS를 쓰겠다고 하면 파일 시스템을 바꿔치기하면서 포맷을 한다.
    • Allocation Table을 NTFS 형식대로 만들고, 클리어시킨다.
  • 파일 시스템을 디스크에 올린다, 적용한다.
    • 트랙과 섹터로 나눠준다는 것
  • 빠른 포맷은 FAT에 해당되는 메타 데이터를 지우는 것이다.
  • 느린 포맷은 전체 트랙과 섹터를 찾아서 모두 0으로 오버라이트하는 것이다.

SSD

  • SSD도 똑같이 트랙과 섹터로 관리한다
  • 자기 디스크에서 칩으로 바뀐 것 뿐이다.
    • 근본적인 측면에서는 미디어가 다른 것 뿐이다.
    • 관리적인 측면에서 따지자면 똑같다.
  • 조각 모음은 의미가 없다.
    • 회전하는 것이 아니다 보니 속도가 굉장히 빠르고, 물리적인 것이 아니라 칩 자체의 읽기쓰기 성능에 따라 결정이 난다.

Reference

넓고 얕게 외워서 컴공 전공자 되기 | 널널한 개발자 - 인프런

profile
책을 읽거나 강의를 들으며 공부한 내용을 정리합니다. 가끔 개발하는데 있었던 이슈도 올립니다.

0개의 댓글