🖥 컴퓨터 시스템 구성
하드웨어(Hardware)와 소프트웨어(Software)로 구성.
소프트웨어(Software)
운영체제와 응용 프로그램 같은 우리가 컴퓨터를 틀어서 보는 Window 같은 친구들이 소프트웨어에 속한다.
하드웨어(Hardware)
모니터, 컴퓨터 기억장치, 그래픽카드, CPU 같은 물리적 장치들을 뜻한다.
👨🦳 폰노이만 구조
폰노이만
순서도를 최초로 사용했으며, 게임이론을 최초로 제안한 와중에 현 컴퓨터 구조를 만든 슈퍼 천재.
CPU, 메모리, 프로그램으로 구성된 현 컴퓨터 구조를 제안.
폰노이만 구조 이전 :
다른 작업을 하려고 할때 마다 스위치 설치, 전선 재배치하여 데이터 전송, 신호 처리를 해줘야 했다.
폰노이만 구조 이후 :
소프트웨어만 교체하면 The End~!
💻 컴퓨터 주요 구성 요소 3가지
CPU(중앙처리장치)
- 연산
- 산술 연산 - 계산 (ex. 사칙연산)
- 논리 연산 - if문
- 제어 : CPU 밖의 네트워크나 메모리, 저장매체 같은 걸 제어하는 역할도 한다.
Memory (코드와 데이터를 저장하는 장치)
프로그램과 프로그램 수행에 필요한 데이터를 저장한다
메모리는
- 내부 기억장치 (주기억장치) - 속도 빠르나 컴퓨터 꺼지면 데이터 날아간다
- CPU 안에 레지스터, 캐쉬
- DRAM 등 메모리 (램, DDR4)
- 외부 기억장치 (보조기억장치) - 컴퓨터 꺼져도 데이터 보존하나 주기억 장치보단 속도가 느리다
- SSD, HDD
등을 포함한다
IO Device
input output Device의 준말이며,
말 그대로 입력장치와 출력 장치를 뜻한다.
종류는
- 입력장치
- 마우스
- 키보드
- 터치패드
- 출력장치
- 모니터
- 프린터
- 스피커
등 이 있다.
System Bus
위에 설명한 중요 핵심 3가지(CPU, Memory, IO Device)를 연결해 주는 중요한 장치다.
메인 보드 칩셋에서 지원하며, 개별적인 IO Devices들을 연결해 주고 데이터를 송수신해준다.
💻 비트로 문자 숫자 표현 이해
비트
데이터를 나타내는 최소 단위.
모든 데이터는 0과 1의 조합으로 구성되는데, 이 0 또는 1이 하나의 비트가 된다.
문자
비트의 문자를 나타내는 방식은 점자와 유사하다.점자를 살펴보면
단, 6개의 칸으로 문자를 표현할 수 있는 게 보인다. 이걸 비트에 대입을 하여 점이 없을 때는 0, 점이 있을 때를 1로 간주한다면 6bit만으로 알파벳을 구현할 수 있다는 결론이 나온다.
숫자
기억이 가물가물할 정도로 먼 옛날 2진법이라는 걸 배웠다. 2진법은 150 같은 일반 숫자를 가차 없이 분해하여 0, 1로 표현해버리는 무자비한 방법인데,
위 예시처럼 2진법으로 바꾸고 보니 더욱더 우리의 멋진 bit와 유사해 보인다.
만약 150을 2진법으로 변환하면 10010111로 변환되는데 그럼 총 8자리 숫자이니 8비트로 150을 표현할 수 있다.
💻 AND, OR 게이트 정리
우리는 앞에서 컴퓨터가 좋아죽어 하는 숫자 0, 1 단 두 개의 숫자만을 이용하여 알파벳을 표현해 봤으며, 150이라는 숫자를 2진법으로 표현해 보았다. 이제 논리연산을 해볼 차례다.
✅ 숫자로 보는 AND 게이트, OR 게이트
AND 게이트는 둘 다 1이 되어야 1이 되는 구조이며,
OR 게이트는 둘 중 하나만 1이어도 1이 되는 구조다.
✅ 그림으로 보는 AND 게이트, OR 게이트
위 표를 그림으로 나타내면 이런 형태이다.
AND 게이트는 스위치가 두개 다 ON이 되어야 전구에 빛이 나는 형태이며,
OR 게이트는 하나의 스위치만 ON이 되면 전구에 불이 들어오는 구조이다.
💡 외부에 스위치를 만들 경우 자기장을 이용해 만들 수 있다.
✅ 자바스크립트로 맛보는 AND 게이트, OR 게이트
위의 표와 그림을 자바스크립트에 대입하면 이런 형태이다.
// OR Gate
console.log(0 || 0) /* 0 */
console.log(0 || 1) /* 1 */
console.log(1 || 0) /* 1 */
console.log(1 || 1) /* 1 */
// AND Gate
console.log(0 && 0) /* 0 */
console.log(0 && 1) /* 0 */
console.log(1 && 0) /* 0 */
console.log(1 && 1) /* 1 */
프로그래밍 언어에서는 Boolean이란 참(true)과 거짓(false)을 나타내는 좋은 타입이 있다. if문과 떼려야 뗄 수 없는 논리 연산자에 굉장히 적합한 친구다.
// 타입까지 검사 할게 아니기 때문에 비교연산자는 == 으로 한다
console.log(true == 1) // true
console.log(false == 0) // true
그래서 위와 같이 0과 1을 true, false에 각각 비교했고 소녀 같은 자바스크립트는 수줍게 둘 다 true 라 얘기해 주셨다.
이 결과를 대입해 보면,
// OR Gate
console.log(0 || 0); /* 0 */ /* => */ console.log(false || false); /* false */
console.log(0 || 1); /* 1 */ /* => */ console.log(false || true); /* true */
console.log(1 || 0); /* 1 */ /* => */ console.log(true || false); /* true */
console.log(1 || 1); /* 1 */ /* => */ console.log(true || true); /* true */
// AND Gate
console.log(0 && 0); /* 0 */ /* => */ console.log(false && false); /* false */
console.log(0 && 1); /* 0 */ /* => */ console.log(false && true); /* false */
console.log(1 && 0); /* 0 */ /* => */ console.log(true && false); /* false */
console.log(1 && 1); /* 1 */ /* => */ console.log(true && true); /* true */
이렇게 표현할 수 있지 않을까? (틀린 부분 있으면 꼭 피드백 주시면 감사합니다!)
✅ NAND 게이트, NOR 게이트
지금까지 알아본 결과에서 NOT을 붙여 반대의 결과를 뱉어내는 게이트다. (0이었던 결과는 1, 1이었던 결과는 0)
💻 반가산기 전가산기 동작 이해
✅ 2진수의 덧셈
2진수에서 1 + 1 은 다음 자릿수에 1을 더해 10이 된다. 하지만 컴퓨터 구조상 0, 1만 표현되므로 0 이 표현된다.
💡 1+1=2인데 2진수에서 2는 10으로 표현되기 때문에 1+1=10입니다
carry
carry-bit라고도 하며,
1 + 1을 하여 자릿수가 넘어오는 경우에만 1로 표현되고 나머지는 0으로 표현된다. (carry의 관점)
✅ 덧셈에 필요한 논리게이트
SUM | 0 | 1 |
0 | 0 | 1 |
1 | 1 | 0 |
덧셈에 필요한 논리게이트를 테이블화 하면 위처럼 표기할 수 있다. 보시다시피, 지금까지 배운 AND 게이트와 OR 게이트로는 만들 수 없다.
하지만, 기존의 논리게이트를 응용해서 OR게이트와 NAND게이트의 결과에 AND게이트를 넣어서 구현할 수 있다.
이렇게 만들어진 덧셈에 필요한 논리게이트의 이름을 XOR게이트(가산기)라 한다.
carry-bit는 XOR게이트보다 훨씬 쉽다. 기존 논리게이트를 응용할 필요 없이 AND게이트를 쓰면 된다.
이러한 회로를 보통 반가산기(half adder)라고 한다.
✅ 반가산기, 전가산기
- 반가산기(half adder) : 두 bit를 덧셈하는 가산기를 의미한다.
- 전가산기(full adder) : 두 bit 외, carry까지 계산할 수 있는 가산기를 의미한다.
그림으로 표현한 전가산기 로직
💻 16비트 가산기와 클럭 간략 정리
✅ 전가산기를 연결한다면?
위에서 정리한 전가산기(full adder) 하나당 1bit 단위의 덧셈이 가능하다.
전가산기들끼리 연결해서 사용한다면,
- 8비트 전가산기 : 256자리(2의 8승)까지 계산이 가능하다
- 16비트 전가산기 : 65536(2의 16승)까지 계산이 가능하다
로 정리 되며 우리가 흔히 접하는 윈도우 32비트와 64비트도 같은 맥락이다.
✅ 클럭 관련 간략 정리
Osillator란?
NOT게이트를 통해 계속 0,1을 반복하는 주기적인 사이클을 만들어 주며, 클럭을 만들 수 있다.
클럭
최근 CPU 사양을 보면 2.5 GHz 라 적혀있는걸 보게 된다. => 1초에 2.5GHz 만큼 클럭이 돈다고 이해하면 된다.
오버클럭?
평소 2.5 GHz라면 4 GHz로 순간 뻥튀기 하는 것이나 그만큼 부하가 있기 때문에 식혀주기 위해 쿨러 같은 걸 장착해야 한다.
💡 단위 : 1 GHz = 1,000 MHz = 1,000,000,000 HZ
💡 컴퓨터 구조의 KEY CONCEPT
0과 1로 데이터를 표현할 수 있다 → (0과 1로) 논리연산을 표현할 수 있다 → (논리연산으로) 복잡한 회로구성을 할 수 있다 → (복잡한 회로구성으로) 산술연산을 할 수 있다 → (일련의 앞의 일들을 가지고) 컴퓨터로 구성할 수 있다 → (컴퓨터를 가지고) 프로그래밍 코드를 넣어서 전에 있던걸 전부 동작하게끔 만들 수 있다.
'CS(Computer Science)' 카테고리의 다른 글
[CS] 운영체제 스케줄링 기본 및 알고리즘 이해 (0) | 2023.02.19 |
---|---|
[CS] 프로세스 개념 이해 (0) | 2023.02.19 |
[CS] 운영체제 역할 정리 (0) | 2023.02.19 |
[CS] 커널모드와 사용자모드 이해 (0) | 2023.02.19 |
[CS] 운영체제(커널, 쉘) 이해 (0) | 2023.02.19 |
댓글