- 저자
- 강민철
- 출판
- 한빛미디어
- 출판일
- 2022.08.16
안녕하세요 !
혼공단 11기로 선정 되어
공부하게 된 박지영입니다 🙂
앞으로 매주 1회 혼자 공부하는 컴퓨터구조 + 운영체제 요약을 올릴 예정입니다.
파이썬, 빡공단 C언어 등 많은 프로그래밍 요약을 올리고 있을거니
다른 글도 많은 관심 부탁드립니다 🥰
Chapter 01 컴퓨터 구조 시작하기
01-1 컴퓨터 구조를 알아야 하는 이유
프로그래밍 강의나 책에 나오는 예제의 코드를 작성해볼 때
가끔씩 똑같이 썼는데도 Error가 나는 문제들이 있습니다.
하지만
컴퓨터 구조를 이해하고 있다면
문제상황을 빠르게 진단하여 문제해결 할 수 있습니다.
그리고
컴퓨터를 구매할 때 여러가지 많은 컴퓨터 들 중에
어떤 CPU를 사용할지, 어떤 메모리를 사용할지에 따라
성능, 용량, 비용이 달라지기 때문입니다.
( 참고 : 클라우드 서비스(AWS) )
01-1 컴퓨터 구조의 큰 그림
컴퓨터 구조
- 컴퓨터가 이해하는 정보 (데이터, 명령어)
- 컴퓨터의 네 가지 핵심 부품 (CPU, 메모리, 보조기억장치, 입출력장치)
컴퓨터는 0과 1로 표현된 정보만을 이해한다.
크게 두 종류가 있는데
데이터와 명령어이다.
데이터 : 정적인 정보(명령어 없이는 아무것도 못함 -> 정보덩어리)
ex. 이미지, 동영상
명령어 : 데이터를 움직이고 컴퓨터를 작동시키는 정보
결론
명령어는 컴퓨터를 작동시키는 정보이고,
데이터는 명령어를 위해 존재하는 일종의 재료이다.
컴퓨터의 4가지 핵심 부품
- 중앙처리장치(CPU)
- 주기억장치(메모리(RAM))
- 보조기억장치
- 입출력장치
메모리 : 현재 실행되는 프로그램의 명령어와 데이터를 저장하는 부품
프로그램이 실행되려면 반드시 메모리에 저장되어있어야한다.
메모리에 저장된 값을 빠르고 효율적이게 접근하기 위해
주소라는 개념이 사용. (저장된 값의 위치는 주소로 알 수 있다)
CPU : 컴퓨터의 두뇌
CPU 구조 : 산술논리연산장치(ALU), 레지스터, 제어장치
산술논리연산자(ALU) : 계산기느낌(연산)
레지스터 : 작은 임시 저장 장치
제어장치 : 제어신호라는 전기신호를 보내고 명령어를 해석하는 장치
-> 메모리 읽기(저장된 값 읽기), 메모리 쓰기(메모리에 저장 할 때) 2가지 제어신호가 있다.
보조기억장치 : 전원이 꺼져도 저장된 내용을 잃지 않고 보관하는 메모리
ex. 하드디스크, SSD, USB 메모리, DVD 등
입출력장치 : 마이크, 스피커, 프린터, 마우스, 키보드처럼
컴퓨터 외부에 연결되어 컴퓨터 내부와 정보를 교환하는 장치
(보조기억장치도 입출력장치라고 할 수 있다 : 주변장치)
컴퓨터의 핵심 부품 : 메인보드(마더보드)
통로 : 버스 (가장 중요한 버스는 시스템 버스)
시스템버스는 주소버스, 데이터버스, 제어버스로 구성
주소버스 : 주소를 주고받는 통로
데이터 버스 : 명령어와 데이터를 주고받는 통로
제어버스 : 제어신호를 주고받는 통로
Chapter 02 데이터
02-1 0과 1로 숫자를 표현하는 방법
정보단위
- 비트(bit) : 0과 1을 나타내는 가장 작은 정보 단위
ex. 0을 꺼짐, 1을 켜짐 (전등)
- 바이트(byte) : 여덟 개의 비트(bit)를 묶은 단위, 비트보다 한 단계 큰 단위 (1byte == 8bit)
(1kB, 1MB, 1GB, 1TB도 있다)
(워드 : CPU가 한 번에 처리할 수 있는 데이터 크기)
(워드의 절반 크기 : 하프워드, 1배 크기 : 풀워드, 2배 크기 : 더블워드)
이진법 : 0과 1만으로 숫자 표현 (컴퓨터표현)
십진법 : 9를 넘어가는 시점에 자리 올림 (사람표현)
ex.
십진수 : 1 2 3 4 5 6 7 8
이진수 : 1 10 11 100 101 110 111 1000
이진수의 음수 표현 : 2의 보수
2의 보수 쉽게 사용하는 법 :
모든 0과 1을 뒤집고(1의보수) 거기에 1을 더한 값(2의보수)
ex. 11 -> 00(모든 0과 1 뒤집기) -> 01(거기에 1을 더한) => 11의 보수 == 01
하지만 2의 보수도 숫자가 커진다면 양/음수를 구별하기 어렵다.
양수인지 음수인지 구분하기 위해 플래그(flag) 사용
십육진법 : 15를 넘어가는 시점에 자리 올림
ex. 0 1 2 3 4 5 6 7 8 9 A B C D E F 10 11 12 13 ...
십육진수 -> 이진수로 변환 (16 -> 2)
ex. 1A2B 1(0001), A(1010), 2(0010), B(1011) 이므로 이어붙이면
0001101000101011이다.
이진수 -> 십육진수로 변환 (2 -> 16)
ex. 위에 방법 반대로 하기.
0001101000101011를 4개씩 끊고 16진수로 바꾸면 1A2B가 나온다.
02-2 0과 1로 문자를 표현하는 방법
컴퓨터가 인식하고 표현할 수 있는 문자의 모음 : 문자 집합
ex. {a,b,c,d,e}. a,b,c,d,e는 이해할 수 있지만 f,g는 이해하지 못한다. (배운것만 안다)
집합에 속하여도 문자를 0과 1로 변환해야 컴퓨터가 이해할 수 있다.
이를 문자 인코딩이라고 한다. (사람 -> 기계문자)
문자 인코딩에서 글자에 부여된 고유한 값 : 코드 포인드
0과 1로 이루어진 문자 코드를 사람이 이해할 수 있는 문자로 변환하는 과정을 문자 디코딩이라고 한다. (기계 -> 사람문자)
아스키코드(ASCII)
48 : 0
65 : A
97 : a
만 기억해도 응용 가능
-> 다양한 문자 표현을 위해 확장 아스키 등장 -> 턱없이 부족 -> 한글 인코딩 방식인 EUC-KR이 등장
EUC-KR
- 완성형 인코딩 : ex. 가 : 1, 나 : 2 (하나의 완성된 단어에 2byte 크기코드 부여)- 조합형 인코딩 : ex. ㄱ : 01, ㅏ : 001 => 가 : 01001
-> 하지만 '쀍 쀓' 이런 단어는 표현 할 수 없다 -> 마이크로소프트 CP949 등장 -> 아직도 한글전체 표현 부족 -> 유니코드 등장
유니코드 : 문자의 집합
EUC-KR보다 훨씬 다양한 한글을 포함하여 대부분 나라의 문자, 특수문자, 화살표, 이모티콘을 코드로 표현 가능(여러 나라의 문자를 광범위하게 표현 가능)
유니코드의 인코딩 방법 중 가장 대표적인 것은 UTF-8입니다.
Chapter 03 명령어
03-1 소스 코드와 명령어
사람을 위한 언어 : 고급언어
기계를 위한 언어 : 저급언어
( 고급언어 -(변환)-> 저급언어 )
저급언어
- 기계어 : 0과 1로만 이루어진 언어
- 어셈블리어 : 기계어의 문제점(읽기 어려움)을 해결하기 위해 등장. 읽기 편한 형태로 변역한 저급언어
컴파일 방식으로 작동하는 프로그래밍 언어 : 컴파일 언어
인터프리트 방식으로 작동하는 프로그래밍 언어 : 인터프리터 언어
컴파일언어
- 대표적 C
- 컴파일 : 저급언어로 변환하는 과정
- 컴파일을 수행해 주는 도구 : 컴파일러
=> 이렇게 변환 된 코드를 목적코드라고 한다.
인터프리터 언어
- 대표적 python
- 소스코드를 한줄씩 한줄씩 차례대로 실행 ( 실행속도 느림 )
- 수행을 도와주는 도구 : 인터프리터
소스코드에 오류가 발생한다면 ?
컴파일언어 : 아무것도 출력안하고 error(전체 한번에 분석하기 때문)
인터프리터언어 : 오류 전까지는 출력하고 error(하나하나 분석하기 때문)
(링킹이라는 작업 기억하기)
03-1 소스 코드와 명령어
명령어는 연산코드와 오퍼랜드로 구성
연산코드 : 흰색 배경 필드값
- 데이터전송, 산술/논리연산, 제어흐름변경, 입출력제어 ex. 더하라, 빼라
오퍼랜드 : 연산에 사용할 데이터 or 연산에 사용할 데이터가 저장된 위치 (주소필드)
- 오퍼랜드가 몇개있는지에 따라 (숫자)-주소 명령어로 된다. ex. 0-주소명령어(1개도 없다)
연산코드 == 연산자 , 오퍼랜드 == 피연산자
연산코드가 담기는 영역 : 연산 코드 필드
오퍼랜드가 담기는 영역 : 오퍼랜드 필드
연산코드에 사용할 데이터가 저장된 위치, 즉 연산의 대상이 되는 데이터가 저장된 위치 : 유효주소
데이터 위치 찾는 방법 : 주소 지정 방식
주소 지정 방식
- 즉시 주소 지정 방지 : 직접 명시하는(ex. ~~해)
- 직접 주소 지정 방식(ex. ~~에, ~~게, ~~해)
- 간접 주소 지정 방식 : 직접 지정 방식보다 표현할 수 있는 유효주소의 범위가 넓어졌지만 느리다.
- 레지스터 주소 지정 방식 : 직접 주소 지정 방식과 같지만 CPU 내부에 직접적으로 접근해서 더 빠르지만 크기의 제한이 생길 수 있다.
- 레지스터 간접 주소 지정 방식 : 간접 주소 지정 방식보다 빠르다.
스택 : 저장공간
- LIFO(리포, 자료구조라고도 불림) : 후입선출(마지막 저장 데이터부터 뺀다)
- FIFO(큐라고도 불림) : 선입선출(가장 먼저 저장된 데이터부터 뺀다)
스택에 새로운 데이터를 저장하는 명령어 : PUSH
스택에 저장된 데이티를 꺼내는 명령어 : POP
이렇게 혼공단 컴퓨터구조 + 운영체제 1주차 1~3파트 요약 정리를 마쳤습니다.
이제 미션을 해볼까요??
# | 진도 | 기본 미션 | 선택 미션 |
1주차 (1/2 ~ 1/7) |
Chapter 01 ~ 03 | p. 51의 확인 문제 3번, p. 65의 확인 문제 3번 풀고 인증하기 | p. 100의 스택과 큐의 개념을 정리하기 |
기본 미션 인증
선택미션의 개념은
위에 요약정리에 있어요 !
이렇게 1주차를 마쳤는데
10기때 더 열심히 못한게 한이 맺혀서
이번에 다시 이렇게 열심히 하게 되었습니다!
꼭 우수혼공단이 되었으면 좋겠어요 !!
근데 저만 항상 그런가요,,?
맨날 할때마다 페이스북이 비활성화 되어서 새로새로 계정을 파네요...