디지털 회로와 덧셈
어떻게 하면 CPU를 제작할 수 있을까?
- CPU는 전자식 계산기다.
- 산술 연산을 할 수 있는 계산기
- 전자식인 이유는 빠르기 때문이다.
- 보통 사칙 연산, 그 중에서도 더하기부터 만든다.
디지털 회로
- A와 B는 Input
컴퓨터가 덧셈하는 방법
반가산기
- 2진수 1+1은 2진수 10(2)이다.
- A가 1, B가 1이면 XOR 연산결과 S는 0이다.
- 동시에 A가 1, B가 1이면 AND 연산결과 C는 1이다.
반가산기의 단점
- 반가산기는 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천만 정도 되는데, 232, 즉 32bit이다. (4GB)
- 그래서 32비트는 특수 목적 외엔 사용하지 않는다.
- 64비트는 이론상 16 엑사바이트까지 컨트롤이 가능한데, 물론 윈도우 운영체제는 거기까지 지원하지는 않는다.
- 0번과 1번은 OS가 사용한다.
- CPU는 메모리에서 가져온 값을 레지스터라는 임시 공간에 담는다.
- 이미지 상에선 결과가 밑으로 떨어졌는데, 실제론 3에 덮어씌우기 되는 식으로 처리된다.
- ALU(arithmetic and logical unit)이 연산한다.
연산 과정
- RAM같은 메모리에서 정보를 가져와서 레지스터에 담는다.
- ALU를 통해서 산술 연산을 실시한다.
- 결과를 다시 메모리에 보낸다.
추가 정리
- 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) 번호를 붙여 관리한다.
프로그램 실행 시
- 하드디스크에 프로그램이 설치된다.
- 설치된 프로그램을 실행시키면, 프로그램은 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가 조각 모음을 알아서 잘 하고 있다.
- 오류 검사는 디스크 상에 오류가 있는지 검사
파일이 저장되는 방법 (파일 시스템)
- 운영체제별 파일 시스템이 있다.
- MAC(매킨토시)는 애플의 파일 시스템
- 윈도우는 NTFS (NT라는 코드의 파일 시스템)
- 기본적으로 모든 파일 시스템은 FAT이라는 형태를 가지고 있다.
File Allocation Table (FAT)
- 파일의 위치를 알려준다.
- 메타 데이터같은 정보들을 표 형태로 관리한다.
- 몇 번 트랙, 몇 번 섹터에 무엇이 저장되었고 크기가 무엇인지
- 파일을 삭제하면 디스크에서 완전히 삭제하지 않고, 테이블의 칼럼(Delete 여부)에 삭제되었다고 체크한다.
- 파일 명은 펀치를 한다. → 앞 글자 몇 개를 #으로 바꾼다거나?
- 즉, 관리 체계 상에서 지워졌다고 마킹만 되는 것이다.
- 복원은 이 테이블 정보를 찾아서 분석한 다음, 위치와 데이터가 살아있다면 찾아가서 데이터를 복사하는 것이다.
마스터 부트 레코드 (MBR)
- 0번 트랙 0번 섹터를 말한다.
- OS의 부트 로더라고 하는 코더가 들어간다.
- 컴퓨터 전원을 켰을 때, MBR을 찾아가서 OS 부트 로더 코드를 가져와서 운영체제 프로그램을들 하나씩 메모리에 적재해서 실행한다.
- 바이러스가 MBR을 못 쓰게 만들면(몇 만번쯤 오버라이트한다거나) 컴퓨터가 부팅이 안된다.
- 따라서 마스터 부트 레코드는 여러 차원에서 보호를 한다.
- USB를 하나 샀는데 파일 시스템이 EXFAT로 되어 있는데, NTFS를 쓰겠다고 하면 파일 시스템을 바꿔치기하면서 포맷을 한다.
- Allocation Table을 NTFS 형식대로 만들고, 클리어시킨다.
- 파일 시스템을 디스크에 올린다, 적용한다.
- 빠른 포맷은 FAT에 해당되는 메타 데이터를 지우는 것이다.
- 느린 포맷은 전체 트랙과 섹터를 찾아서 모두 0으로 오버라이트하는 것이다.
SSD
- SSD도 똑같이 트랙과 섹터로 관리한다
- 자기 디스크에서 칩으로 바뀐 것 뿐이다.
- 근본적인 측면에서는 미디어가 다른 것 뿐이다.
- 관리적인 측면에서 따지자면 똑같다.
- 조각 모음은 의미가 없다.
- 회전하는 것이 아니다 보니 속도가 굉장히 빠르고, 물리적인 것이 아니라 칩 자체의 읽기쓰기 성능에 따라 결정이 난다.
Reference
넓고 얕게 외워서 컴공 전공자 되기 | 널널한 개발자 - 인프런