일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- JavaScript
- 다이나믹 프로그래밍
- 삼성 SW 역량테스트
- 데이터 분석
- REACT
- Cloud Pub/Sub
- 생활코딩
- 컴퓨터 구조
- 수학
- Cloud Run
- 다익스트라
- 삼성SW역량테스트
- 펜윅 트리
- Bit
- 이분탐색
- dp
- 그리디
- Air Table
- 접미사 배열
- 종만북
- 시뮬레이션
- BFS
- 우선순위 큐
- jpa
- CI/CD
- ICPC
- 고속 푸리에 변환
- LCS
- 백준 1753번
- r
- Today
- Total
코딩스토리
Chapter 1. 컴퓨터 시스템의 개요 본문
# 본 내용은 한국항공대학교 길현영 교수님의 '컴퓨터 구조' 강의 및 컴퓨터 아키텍처(우종정, 한빛 아카데미)를 바탕으로 작성한 글입니다.
1-1 컴퓨터의 기본 구성
컴퓨터의 기본 구성은 아래와 같다.
소프트웨어 = 응용 소프트웨어 + 시스템 소프트웨어
컴퓨터(컴퓨터 시스템) = 하드웨어 + 소프트웨어
소프트웨어란?
좁은 의미 : 프로그램 -> 일을 처리하기 위해 컴퓨터가 이해할 수 있는 언어로 작성한 명령어들의 집합
넓은 의미 : 프로그램 + 데이터 + 관련 문서
시스템 소프트웨어 : 컴퓨터의 하드웨어를 움직이는 소프트웨어, 응용 소프트웨어를 실행하기 위한 플랫폼 역할을 하는 소프트웨어
응용 소프트웨어 : Internet Explore, 한글, 게임 등
이렇게 시스템 소프트웨어와 응용 소프트웨어 둘을 합쳐 '소프트웨어'라 부른다.
하드웨어란?
정보/데이터의 전송 및 처리가 실제 일어나는 물리적인 실체들 (ex. cpu, ram 등 우리가 알고 있는 컴퓨터 부품이 쉽게 말해 하드웨어라고 할 수 있다.)
이 과목에서는 SW보단 HW가 더 중심이 되는? 과목 같다. (이름부터 컴퓨터 구조니까..?)
하드웨어에 대해 더 자세히 살펴보자.
가장 유명한 CPU(중앙처리장치)가 있다.
'프로세서' 라고 불리며 컴퓨터 시스템에 부착된 모든 장치의 동작을 제어하고 명령을 실행한다. 인체로 보면 '뇌'로 비유할 수 있다. 메모리에서 명령어를 가지고 와서(Instruction Fetch), 명령어대로 실행(Execution)하는 작업을 빠르게 반복한다.
cpu는 제어장치, 연산장치, 레지스터, cpu 내부 버스 등으로 구성된다.
제어장치는 메인 메모리로부터 명령어를 인출 및 해독하여 제어 신호를 내보낸다.
연산장치는 제어 신호에 따라 명령어가 의도하는 대로 데이터를 실행하기 위해 cpu내부에서 데이터를 처리하는 장치를 말하며, 실행 장치 혹은 산술 논리 장치 (ALU)라고 불린다. ALU는 앞으로 많이 나올 중요한 단어이니 꼭 기억하자.
레지스터는 데이터를 처리하는 동안 사용할 값이나 연산의 중간 결과를 일시적으로 기억하는 고속 기억장치이다.
이렇게 명령어를 가지고 cpu가 작업하는 일련의 과정들을 'cpu 명령어 사이클'이라고 하는데 이를 살펴보면 위의 명령어를 가지고 오는 '인출 사이클'과 가지고 온 명령어를 실행하는 '실행 사이클'로 나뉜다. 이는 뒷장에서 자세히 다뤄보자.
다음으로 기억장치가 있다.
메모리, 즉 기억장치는 크게 '주기억장치'와 '보조기억장치'로 나뉜다.
주기억장치는 cpu 가까이에 위치하여 cpu가 처리할 프로그램과 데이터를 일시적으로 저장한다.
우리가 흔히 아는 RAM(Random Access Memory)가 바로 이 주기억장치에 해당하며 아주 잘 알고 있다시피 가격이 비싸고 면적이 크다. 휘발성 메모리(전원 공급이 중단되면 기억된 내용 지워짐)이기 때문에 일시적 저장만 가능하다.
보조 기억장치는 읽고 쓰는 속도가 느린 대신 저장 밀도가 높고, 상대적으로 가격이 저렴하며 주기억장치와 달리 영구적으로 저장이 가능하다.
하드 디스크, 플래시 메모리, CD-ROM 등 여러 가지가 존재한다.
ROM에 대해 살펴보자.
Rom(Read Only Memory)은 메인 메모리로 사용되는 RAM처럼 CPU가 프로그램을 수행할 수 있는 기억공간이다. RAM과 다른 점은 비휘발성 메모리라는 것이다. 즉 전원을 꺼도 데이터가 날아가지 않는다. (이름이 특이해서 외우고 있다..)
우리가 컴퓨터의 전원을 켰을 때, cpu는 일을 해야 한다. 이때 RAM은 휘발성 메모리이기 때문에 비어있다. 따라서 비휘발성 메모리인 ROM에 Bootloader란 프로그램을 저장해 놓고, 전원이 인가되면 이를 실행하도록 한다. Bootloader를 실행하면 이 부트로더는 운영체제의 위치를 알기 때문에 운영체제를 RAM에 적재할 수 있다.
기억장치는 위와 같이 계층적으로 이용하는데, 여기서 레지스터는 cpu 내부의 기억장치이다.
그 외에도 입, 출력 장치가 있는데 키보드, 마우스 등 말 그대로 사용자와 컴퓨터 간의 대화를 위한 장치들이다.
시스템 버스 (System Bus)
시스템 버스란 cpu와 시스템 내의 다른 요소들 사이에 정보를 교환하는 통로이다.
이는 주소 버스, 데이터 버스, 제어 버스로 구성되어 있다.
(쉽게 말해 주소, 데이터, 제어 신호를 보내는 통로가 있다 정도로 이해하면 될 것 같다.)
주소 버스 : cpu가 외부로 발생하는 주소 정보를 전송하는 신호선들의 집합
주소 선의 수는 cpu와 접속될 수 있는 최대 기억장치 용량을 결정한다.
(ex. 주소 버스의 비트 수 = 16 비트라면, 최대 2^16 = 64k(궁금해서 계산해봤는데 65536이넹) 개의 기억 장소의 주소 지정 가능 - 0 ~ 2^16-1의 값을 나타낼 수 있음.)
데이터 버스 : cpu가 기억장치 혹은 입출력 장치와의 사이에 데이터를 전송하기 위한 신호선들의 집합
데이터 선의 수는 cpu가 한 번에 전송할 수 있는 비트 수를 결정
(ex. 데이터 버스 폭 = 16 비트라면, cpu와 기억장치 간의 데이터 전송은 한 번에 16비트씩 가능하고, 2^16 = 64k까지의 값을 나타낼 수 있다.)
제어 버스 : cpu가 시스템 내의 각종 요소들의 동작 제어를 위한 신호 선들의 집합
(ex. 기억장치 읽기/쓰기 신호, 입출력 장치 읽기/쓰기 신호, 인터럽트 신호, 버스 제어 신호 등.. )
첫 주차 때는 그냥 이런 게 있구나.. 했었는데 강의를 많이 들은 후 다시 보니.. 그래도 그냥 이런 게 있구나.. 싶네요ㅎㅎ
그래도 각 버스가 어떤 걸 결정하는지 정도는 알고 있자!
1-2 컴퓨터 정보의 표현과 저장
컴퓨터 정보는 2진수 비트(bit)들로 표현한다. 이는 상식이죠!
위에서 버스를 공부할 때도 보면 2진수로 표현하기 때문에 폭이 16 비트면 2^16만큼의 값을 나타낼 수 있는 거였다.
프로그램 코드
고급 언어
영문자/숫자로 구성되어 사람이 이해하기 쉬운 언어
C, C++, PASCAL 등등
컴파일러, 어셈블러를 이용하여 기계어로 번역한다.
우리가 많이 쓰는 Visual Studio도 사실 우리가 C언어로 코드를 짜면 이를 컴파일러가 기계어로 번역해서 프로그램이 실행되는 것이다. (저는 이렇게 알고 있는데 아니면.. ㅎㅎ)
어셈블리 언어
고급 언어와 기계어 사이의 중간 언어로 어셈블러로 번역시 기계어와 일대일 대응이 가능하다고 한다.
기계어
컴퓨터 하드웨어가 이해할 수 있는 언어로 2진 비트들로 구성
정확히 기억은 안 나지만 어느 수업에서 교수님이 이렇게 말해주셨었다. 그때는 고급언어만 배웠기 때문에 그게 뭐야? 이랬었는데 최근에 어셈블리어를 잠깐 맛만 봤는데 우리가 얼마나 편하게 프로그래밍하는 건지 새삼 깨닫게 되었다..
정리하자면, 사용자 즉 인간에게 가장 가까운 언어는 고급 언어이고, 기계어는 컴퓨터와 가장 가까운 언어, 이 두 언어를 바꿔주는 중간 다리 역할의 어셈블리어가 존재한다!
어셈블리(기계어) 명령어 형식을 잠시 살펴보자. (이후 챕터들에서 정말 주구장창 쓰일 예정이다..)
연산 코드(op code)와 피연산자(operand) 이 두 부분으로 나뉘는데 여기서는 이 정도만 하고 곧 다시 나올 테니 그때 자세히 공부하자.
추가적으로 시스템 소프트웨어에는 운영체제, 장치 드라이버, 컴파일러와 인터프리터, 링커, 로더 등이 있는데 쉽게 말하면 응용 소프트웨어를 사용하기 위해 시스템 소프트웨어가 도와주는 과정에서 이러한 것들이 필요하구나 정도로 이해하고 넘어가자.
첫 번째 챕터인지라 내용을 따라 친 것 같지만 그래도 앞으로의 강의에서 가장 밑바탕이 되는 내용이므로 잘 기억하자.
'컴퓨터구조' 카테고리의 다른 글
Chapter 6. 연산장치 (0) | 2020.12.05 |
---|---|
Chapter 5. 데이터 표현 (0) | 2020.12.03 |
Chapter 4. 명령어 집합의 분류와 주소 지정 방식 (0) | 2020.12.01 |
Chapter 3. 명령어 집합 (0) | 2020.11.27 |
Chapter 2. 컴퓨터의 발전과 성능 (0) | 2020.11.26 |