
[ 1장 ]
컴퓨터는 0과 1로 표현된 데이터만을 이해한다.
이처럼 0과 1로 표현되는 정보에는 데이터와 명령어가 있다.
( ex )
cat.jpg -> 데이터
usb에 cat.jpg를 저장하라 -> 명령어
컴퓨터의 핵심 장치는,
(1)중앙처리장치(CPU) / (2)주기억장치(메모리) / (3)보조기억장치 / (4)입출력장치
(+)
주기억장치는 RAM / ROM 이 있다. 메모리라 함은 보통 RAM을 말한다.
(1) 중앙처리장치(CPU)
명령어 받고, 받은 명령어 해석하고 실행까지 하는 컴퓨터의 두뇌
핵심 내부 구성 : (1)산술논리연산장치(ALU), (2)레지스터, (3)제어장치
(1)산술논리연산장치(ALU)
계산하는 부품
(2)레지스터
CPU 내부 작은 임시 저장 장치
실행하는 데 필요한 값들을 임시로 저장
CPU 안에는 다른 이름과 역할을 수행하는 래지스터가 여러 개 존재
(3)제어장치
제어신호를 내보내고 명렁어를 해석
(2) 주기억장치(메모리)
현재 실행되는 프로그램의 명령어와 데이터를 저장하는 부품으로,
프로그램이 실행되려면 반드시 메모리에 저장되어 있어야 한다.
컴퓨터가 빠르게 작동하기 위해서는 메모리 속 명령어와 데이터의 위치가 정돈되어있어야 하기 때문에, 효율적인 접근을 위해 [주소]의 개념이 사용된다.
(3)보조기억장치
메모리는 가격이 비싸 저장 용량이 적고, 전원이 꺼지면 저장된 데이터를 잃어버린다.
-> 메모리보다 크고, 저장된 내용을 잃지 않는 보조장치의 필요성과 함께 보조기억장치가 등장
( ex )
하드디스크, SSD, DVD, USB 등
(4)입출력장치
마이크, 스피커처럼 컴퓨터 외부에 연결되어 내부와 정보 교환하는 장치
버스
위 4가지 핵심 부품은 메인보드(마더보드)에 연결된다.
메인보드에 연결된 부품들이 서로 정보를 주고 받기 위해 버스(BUS)라는 통로를 이용한다.
시스템 버스가 핵심이며, 이는 주소 버스, 데이터 버스, 제어 버스로 구성되어 있다.
| 51P 3번 프로그램이 실행되려면 반드시 [메모리]에 저장되어 있어야 한다. |
[ 2장 ]
비트
0,1를 나타내는 가장 작은 정보의 단위
n비트는 (2^n)개의 정보를 표현할 수 있다.
단위
바이트 -> 8개 비트를 묶은 것 (2^8)
킬로바이트 -> 1바이트 1000개를 묶은 것 (2^8^1000)
메가바이트 -> 1킬로바이트 1000개를 묶은 것
기가바이트 -> 1메가바이트 1000개를 묶은 것
테라바이트 -> 1기가바이트를 1000개 묶은 것
이진법
0,1로 모든 수를 표현하는 방법
숫자가 1을 넘어갈 때 자리 올림
2의 보수
0,1로 음수를 표현하는 방법
어떤 수를 그보다 큰 2^n에서 뺀 값
(=모든 0,1 뒤집고, 거기에 1 더한다.)
플래그
양수, 음수 구분하기 위해 사용
십육진법
이진법이 0,1로 모든 수를 표현하다보니 길어져서, 15를 넘는 시점에 자리 올림을 하는 십육진법도 많이 사용
10~ 15까지 A~F 로 표기
| 1101의 음수를 2의 보수 표기법으로 구해보세요. (1) 1,0을 0,1로 변환 0010 (2) 1 더하기 0011 답 : 0011 |
0,1을 문자로 표현하는 방법
(1)문자집합, (2)인코딩, (3)디코딩
(1)문자집합
컴퓨터가 인식하고 표현할 수 있는 문자의 모음
컴퓨터는 문자 집합에 속해 있는 문자만을 이해할 수 있음
(2)인코딩
문자 집합에 속해 있는 문자를 0,1로 변환하는 과정
(3)디코딩
인코딩의 반대 과정
0,1 로 이루어진 문자 코드를 사람이 이해할 수 있는 문자로 변환하는 과정
아스키 코드
영어 알파벳과 아라비아 숫자, 일부 특수 문자를 포함한 문자 집합
각각 문자는 7비트로 표현되고, 2^7=128개의 문자를 표현할 수 있음
확장 아스키코드가 나왔으나 이도 한글을 표현하기엔 턱없이 부족.
유니코드
EUC-KR보다 훨씬 다양한 한글을 포함하며 대부분 나라의 문자, 특수문자, 화살표, 이모티콘까지 코드로 표현할 수 있는 통일된 문자 집합
[ 3장 ]
인간의 언어인 고급 언어를 컴퓨터가 알아들을 수 있는 저급 언어로 바꾸는 과정이 필요하다
저급 언어
기계어와 어셈블리어가 있다
기계어는 0,1의 명령어 비트로 이루어진 언어
어셈블리어는 기계어를 읽기 편한 형태로 변역한 언어
( ex )
0101 0101(기계어) -> push rbp(어셈블리어)
고급언어 -> 저급언어 변환하는 방식에는
(1)컴파일 언어 / (2)인터프리터 언어가 있음
(1) 컴파일 언어
컴파일러에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 고급 언어
C언어가 그 예
컴파일러를 통해 저급 언어로 변환된 코드를 목적 코드라 함
(2) 인터프리터 언어
인터프리터에 의해 소스 코드가 한 줄씩 실행되는 고급 언어
PYTHON이 그 예
컴퓨터와 대화하듯 코드를 한 줄씩 실행하기 때문에 저급 언어로 변환하는 시간을 기다릴 필요가 없다.
속도가 느리다.
명령어
(1)연산 코드와 (2)오퍼랜드로 구성
명령어가 수행할 연산 -> 연산코드(연산자)
연산에 사용할 데이터, 연산에 사용할 데이터가 저장된 위치 -> 오퍼랜드(피연산자)
(1) 연산코드
명령어가 수행할 연산이 위치 (ex) 더해라~빼라~저장해라~)
연산 코드 유형은 데이터 전송 / 산술 및 논리 연산 / 제어 흐름 변경 / 입출력 제어 로 구성
유효 주소
연산의 대상이 되는 데이터가 저장된 위치
(2) 오퍼랜드 ( =주소코드 )
연산에 사용할 데이터나 연산에 사용할 데이터가 저장된 위치
필드에는 숫자와 문자 등을 나타내는 데이터 또는 메모리나 레지스터 주소가 옴
숫자나 문자와 같이 연산에 사용할 데이터를 직접 명시하진 않고, 데이터가 저장된 위치(즉 메모리 주소나 레지스터 이름)이 담김.
( ex )
오퍼랜드가 하나도 없으면 -> 0-주소명령어
오퍼랜드가 하나면 -> 1-주소명령어
오퍼랜드가 두 개면 -> 2-주소명령어
오퍼랜드가 세 개면 -> 3-주소명령어
주소 지정 방식
오퍼랜드 필드에 데이터가 저장된 위치를 명시할 때 연산에 사용할 데이터 위치를 찾는 방법
유효 주소를 찾는 방법을 말함
(1)즉시 주소 지정 방식 / (2)직접 주소 지정 방식 / (3)간접 주소 지정 방식 / (4)레지스터 주소 지정 방식 / (5)레지스터 간접 주소 지정 방식
(1) 즉시 주소 지정 방식
정의 : 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시하는 방식
장점 : 가장 간단한 방식. 연산에 사용할 데이터를 메모리나 레지스터로부터 찾는 과정이 빠져 빠르다.
단점: 표현할 수 있는 데이터의 크기가 작아진다.
(2) 직접 주소 지정 방식
정의 : 오퍼랜드 필드에 유효 주소를 직접적으로 명시하는 방식
장점 : 표현할 수 있는 데이터 크기가 즉시 주소 지정 방식보다 크다.
단점 : 유효 주소를 표현할 수 있는 범위가 연산 코드의 비트 수만큼 줄어든다.
표현할 수 있는 오퍼랜드 필드의 길이가 연산 코드의 길이만큼 짧아져 표현할 수 있는 유효 주소에 제한이 생길 수 있다.
(3) 간접 주소 지정 방식
정의 : 유효 주소의 주소를 오퍼랜드 필드에 명시
장점 : 직접 주소 지정 방식보다 표현 가능한 유효 주소의 범위가 더 넓어짐.
단점 : 두 번의 메모리 접근이 필요해 속도가 느리다.
(4) 레지스터 주소 지정 방식
정의 : 직접 주소 지정 방식과 비슷하게 연산에 사용할 데이터를 저장한 레지스터를 오퍼랜드 필드에 직접 명시하는 방법
장점 : CPU 외부에 있는 메모리에 접근하는 것보다 CPU 내부에 있는 래지스터에 접근하는 것이 더 빠르므로, 직접 주소 지정 방식보다 빠르게 접근할 수 있다.
단점 : 표현할 수 있는 래지스터 크기에 제한이 생길 수 있다.
(5) 레지스터 간접 주소 지정 방식
정의 : 연산에 사용할 데이터를 메모리에 저장하고, 그 주소를 저장한 레지스터를 오퍼랜드 필드에 명시하는 방법
장점 : 유효 주소를 찾는 과정이 간접 주소 지정 방식과 비슷하지만, 메모리에 접근하는 횟수가 한 번으로 줄어든다는 장점
(+)
스택(STACK)
한쪽 끝이 막혀있는 통과 같은 저장 공간
저장한 자료를 빼낼 때 마지막으로 저장한 데이터부터 빼냄
LIFO (LAST IN FIRST OUT)
=후입선출
데이터 저장하는 게 = PUSH / 데이터 꺼내는 게 = POP


큐(QUEUE)
한 쪽으로 데이터를 저장하고 한 쪽으로 저장한 순서대로 데이터를 빼냄
FIFO(FIRST IN FIRST OUT)
=선입선출


예제도 풀어봤다
https://ff-tb02.tistory.com/81
[스택 예제] 백준 10773번
https://www.acmicpc.net/problem/10773 문제 : 첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000)이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는
ff-tb02.tistory.com
https://ff-tb02.tistory.com/82
[스택 예제] 백준 9012번
https://www.acmicpc.net/problem/9012 문제 : 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을
ff-tb02.tistory.com
https://ff-tb02.tistory.com/84
[스택 예제] 백준 10828번
https://www.acmicpc.net/problem/10828 문제 :정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.명령은 총 다섯 가지이다.push X: 정수 X를 스택에 넣는 연
ff-tb02.tistory.com
'👩💻 알고리즘 > 🎛️ 컴퓨터 구조 & OS' 카테고리의 다른 글
| [혼공학습단 12기] 8장, 입출력장치 (0) | 2024.07.22 |
|---|---|
| [혼공학습단 12기] 7장, 보조기억장치 (0) | 2024.07.22 |
| [혼공학습단 12기] 6장, 메모리 (0) | 2024.07.21 |
| [혼공학습단 12기] 5장, CPU 성능 향상 (0) | 2024.07.21 |
| [혼공학습단 12기] 4장, CPU 원리 (0) | 2024.07.20 |