[8기 기초] 2주차
자료구조
: 여러 데이터들의 묶음을 저장하고, 사용하는 방법을 정의한 것
여기서 데이터(Data)란 문자, 숫자, 소리, 그림, 영상 등 실생활을 구성하고 있는 모든 값 > 데이터 자체로는 정보가 될 수 없음
데이터의 효율적인 관리 및 사용을 위해 자료구조가 필요!
- 단순 구조: 자료 값 사용 위해 True/False, 정수, 실수, 문자 및 문자열 같이 컴퓨터가 기본적으로 제공하는 자료형
Ex) 2진수, 정수, 실수, 문자, 문자열
- 선형 구조: 자료를 구성하는 데이터를 순차적으로 나열 시킨 형태 자료들 간의 관계가 1:1인 자료
Ex) 배열, 연결 리스트 ,덱 , 스택 ,큐
- 비선형 구조: 하나의 자료 뒤에 여러 개의 자료가 존재할 수 있는 것을 의미 계층 구조나 망 구조로 이뤄짐
Ex) 그래프, 트리
- 파일 구조: 서로 관련 있는 필드로 구성된 레코드 집합인 파일에 대한 자료구조 보조 기억 장치에 데이터가 실제로 기록되는 형태 메모리에 한번에 올릴 수 없는 대용량을 다룸
Ex) 순차 파일, 색인 파일, 직접 파일
스택
: 데이터 삽입과 추출이 한쪽방향만 가능한 구조(후입선출-LIFO)
큐
: 데이터 삽입과 추출이 양방향으로 가능한 구조(선입선출-FIFO)
컴퓨터구조
: 컴퓨터가 효율적으로 작동할 수 있도록 하드웨어 및 소프트웨어의 기능을 고안하고 구성하는 방법
- 컴퓨터의 기능 구조에 대한 설계: 컴퓨터가 연산을 효율적으로 하기 위해 어떤 기능들이 컴퓨터에 필요한지 고민하고, 설계하는 분야
Ex) 폰 노이만 구조, 하버드 구조, 수정된 하버드 구조 등
- CPU 기능에 대한 설계: 명령어 집합구조(Instruction Set Architecture)라고 불리며 CPU가 처리해야 하는 명령어를 설계하는 분야
Ex) ARM, MIPS, AVR, 인텔의 x86 및 x86-64 등
- CPU의 하드웨어적 설계: 마이크로 아키텍처(Micro Architecture)라고 불리며 정의된 명령어 집합을 효율적으로 처리할 수 있도록, CPU의 회로를 설계하는 분야
중앙처리장치(CPU)
: 컴퓨터의 두뇌 프로그램 연산 처리 및 시스템 관리
프로세스의 코드를 불러오고, 실행하고, 결과를 저장하는 모든 과정 수행
CPU 구성
- 산술논리장치(Arithmetic Logic Unit, ALU): 산술/논리 연산을 처리
- 제어장치(Control Unit): CPU 제어
- 레지스터(Register): CPU에 필요한 데이터를 저장
기억장치
: 컴퓨터가 동작하는데 필요한 여러 데이터를 저장하기 위해 사용
- 주기억장치: 프로그램 실행과정에서 필요한 데이터 임시 저장
ex) 램(Random-Access Memory, RAM)
- 보조기억장치: 운영 체제, 프로그램 등과 같은 데이터를 장기간 보관
ex) 하드 드라이브(Hard Disk Drive, HDD), SSD(Solid State Drive)
버스(BUS)
: 컴퓨터 부품과 부품 사이 or 컴퓨터와 컴퓨터 사이 신호 전송 통로
- 데이터 버스(Data Bus): 데이터 이동
- 주소 버스(Address Bus): 주소 지정
- 제어 버스(Control Bus): 읽기/쓰기 제어
명령어 집합구조 (Instruction Set Architecture, ISA)
- 명령어 집합
- 레지스터 집합
- 메모리 구조 정의
모든 컴퓨터가 동일한 수준의 연산 능력을 요구하지 않고 컴퓨팅 환경도 다양하기 때문에 다양한 명령어 집합구조가 개발됨
- Intel x86-64
인텔의 64비트 CPU 아키텍처
32비트 모델보다 훨씬 더 많은 양의 가상 메모리와 물리적 메모리 지원 > 더 많은 양의 데이터 저장 가능
n비트 아키텍쳐
‘64비트 아키텍처', '32비트 아키텍처’
> 64와 32 CPU가 한번에 처리할 수 있는 데이터 크기
> WORD : CPU가 이해할 수 있는 데이터 단위라는 의미
레지스터: CPU가 데이터를 빠르게 저장하고 사용할 때 이용하는 보관소
- Intel x64 아키텍처의 레지스터
• 범용 레지스터(General Register)
주용도는 있으나, 그 외의 다양한 용도로 사용될 수 있는 레지스터, x86-64에서 각각의 범용 레지스터는 8바이트 저장 가능
부호 없는 정수를 기준으로 2^64 - 1까지의 수를 나타낼 수 있음
• 세그먼트 레지스터(Segment Register)
cs, ss, ds, es, fs, gs 총 6가지 세그먼트 레지스터 존재, 각 레지스터의 크기; 16비트
현대의 x64에서 cs, ds, ss 레지스터는 코드 영역과 데이터, 스택 메모리 영역을 가리킬 때 사용하며, 나머지 레지스터는 운영체제 별로 용도를 결정할 수 있도록 범용적인 용도로 제작
• 명령어 포인터 레지스터(Instruction Pointer Register, IP)
CPU가 어느 부분의 코드를 실행할지 가리킴
x64 아키텍처의 명령어 레지스터는 rip이며, 크기는 8바이트
• 플래그 레지스터(Flag Register)
프로세서의 현재 상태를 저장하고 있는 레지스터
RFLAGS라고 불리는 64비트 크기의 플래그 레지스터 존재(실제로는 약 20여개의 비트만 사용)