컴퓨터 구조:컴퓨터의 기능 구조에 대한 설계, 명령어 집합구조, 마이크로 아키텍처, 그리고 기타 하드웨어 및 컴퓨팅 방법에 대한 설계 ..etc
컴퓨터의 기능 구조에 대한 설계
-> 폰 노이만 구조, 하버드 구조, 수정된 하버드 구조
CPU의 명령어에 대한 설계_ 명령어 집합구조(Instruction Set Architecture)라고 불림+ CPU가 처리해야하는 명령어를 설계하는 분야
-> ARM, MIPS, AVR, 인텔의 x86 및 x86-64
CPU의 하드웨어적 설계_마이크로 아키텍처(Micro Architecture)라고 불림
+ 정의된 명령어 집합을 효율적으로 처리할 수 있도록, CPU의 회로를 설계하는 분야
해당 글에서는 폰 노이만 구조와 명령어 집합 구조(Instruction Set Architecture) 중 x86-64 아키텍처에 대해 살펴볼 예정이다!!
폰 노이만은 컴퓨터에 연산, 제어, 저장의 세 가지 핵심 기능이 필요하다고 생각했음
중앙처리장치
-CPU는 프로그램의 연산을 처리하고 시스템을 관리하는 컴퓨터의 두뇌
-프로세스의 코드를 불러오기+실행+ 결과저장 모두 CPU에서 일어남
-CPU는 산술/논리 연산을 처리하는 산술논리장치(Arithmetic Logic Unit, ALU)와 CPU를 제어하는 제어장치(Control Unit), CPU에 필요한 데이터를 저장하는 레지스터(Register) 등으로 구성
기억장치
-용도에 따라 주기억장치와 보조기억장치로 분류
-주기억장치는 프로그램 실행과정에서 필요한 데이터들을 임시로 저장하기 위해 사용
EX)램(Random-Access Memory, RAM)
-보조기억장치는 운영 체제, 프로그램 등과 같은 데이터를 장기간 보관하고자 할 때 사용
EX)하드 드라이브(Hard Disk Drive, HDD), SSD(Solid State Drive)
버스
-컴퓨터 부품과 부품 사이 또는 컴퓨터와 컴퓨터 사이에 신호를 전송하는 통로
EX) 데이터가 이동하는 데이터 버스(Data Bus), 주소를 지정하는 주소 버스(Address Bus), 읽기/쓰기를 제어하는 제어 버스(Control Bus)
-랜선이나 데이터 전송 소프트웨어, 프로토콜 등도 버스라고 불림
명령어 집합 구조(Instruction Set Architecture, ISA):
CPU가 해석하는 명령어의 집합을 의미
레지스터:CPU가 데이터를 빠르게 저장하고 사용할 때 이용하는 보관소
x64 아키텍처:범용 레지스터(General Register), 세그먼트 레지스터(Segment Register), 명령어 포인터 레지스터(Instruction Pointer Register, IP), 플래그 레지스터(Flag Register)
x86-64는 Intel64, IA-32e, EM64T 또는 amd64라고 불림
n 비트 아키텍처
->‘64비트 아키텍처', '32비트 아키텍처’에서 64와 32는 CPU가 한번에 처리할 수 있는 데이터의 크기
CPU가 이해할 수 있는 데이터의 단위:WORD
WORD의 크기는 CPU가 어떻게 설계되었는지에 따라 다름
현재는 64비트 아키텍쳐의 CPu를 사용하는데 이유 중 하나는 32비트 아키텍처의 cpu제공가상메모리의 크기가 4기가바이트로 작기 떄문
ISA는 IA-32 , x86-64(x64), MIPS, AVR 등 다양하게 존재
-> 다양한 ISA가 개발되고 사용되는 이유는 모든 컴퓨터가 동일한 수준의 연산 능력을 요구하지 않으며, 컴퓨팅 환경도 다양하기 때문

[범용레지스터]
세그먼트 레지스터
-x64 아키텍처에는 cs, ss, ds, es, fs, gs 총 6가지 세그먼트 레지스터가 존재
-각 레지스터의 크기:16비트
세그먼트 레지스터는 x64로 아키텍처가 확장되면서 용도에 큰 변화가 생긴 레지스터
현대의 x64에서 cs, ds, ss 레지스터는 코드 영역과 데이터, 스택 메모리 영역을 가리킬 때 사용되고, 나머지 레지스터는 운영체제 별로 용도를 결정할 수 있도록 범용적인 용도로 제작된 세그먼트 레지스터임
명령어 포인터 레지스터
-프로그램은 일련의 기계어 코드들로 이루어짐
-CPU가 어느 부분의 코드를 실행할지 가리키는게 명령어 포인터 레지스터의 역할
- x64 아키텍처의 명령어 레지스터: rip, 크기:8바이트

;
플래그 레지스터는 프로세서의 현재 상태를 저장하고 있는 레지스터
;
[퀴즈복습]
Background: Linux Memory Layout
세그먼트:적재되는 데이터의 용도별로 메모리의 구획을 나눈 것
->코드 세그먼트, 데이터 세그먼트, BSS 세그먼트, 힙 세그먼트, 그리고 스택 세그먼트
CPU:읽기권한 O,실행권한X


x64 어셈블리 언어:
문장은 동사에 해당하는 명령어(Operation Code, Opcode)와 목적어에 해당하는 피연산자(Operand)로 구성
피연산자: 상수,레지스터,메모리


call addr : addr에 위치한 프로시져 호출
leave: 스택프레임 정리
ret : return address로 반환
운영체제는 커널모드와 유저모드로 권한을 나눔
커널 모드는 운영체제가 전체 시스템을 제어하기 위해 시스템 소프트웨어에 부여하는 권한
유저 모드는 운영체제가 사용자에게 부여하는 권한
시스템 콜(system call, syscall)은 유저 모드에서 커널 모드의 시스템 소프트웨어에게 어떤 동작을 요청하기 위해 사용됨

위 그림은 시스템 콜 테이블의 일부임
