마이크로컴퓨터의기본구조 2 장 x86 프로세서구조 ALU: 산술논리연산제어장치 (CU): 실행순서제어클럭 : 구성요소들의동작동기화 CPU + memory + I/O + bus 어셈블리언어 2 클럭 (Clock) CPU 와 Bus 동작은클럭에동기되어동작을한다. 메모리읽기사이클과대기상태 1 클럭사이클동안간단한동작을수행한다. 기계어명령어수행에적어도 1 클럭사이클이필요함 복잡한명령어는많은클럭사이클이필요할수있다. 메모리접근시에느린메모리속도때문에대기상태 (wait state) 사이클들이존재할수있다. ( 다음페이지그림참조 ) 메모리접근속도를높이기위해고속캐시메모리사용 대기상태가없거나작음 최근에읽은메모리내용을복사함. 1 cycle 대기 CPU read data 어셈블리언어 3 어셈블리언어 4
프로세서와 x86 프로세서 프로세서 명령어를실행하고데이터를처리하는장치 ( 예 ) CISC 계열 : 80x86, 680x0 ( 예 ) RISC계열 : Sparc, Alpha, PowerPC, ARM 등 x86 프로세서 Intel 사의프로세서인 80x86 및 Pentium 계열프로세서의일반적이름 16 비트 architecture: IA-16 32비트 architecture: IA-32 64 비트 architecture: IA-64 (Itanium 계열 ): 하위호환성없음, 현재단종됨 Intel64 (AMD 의 x86-64 명령어지원 ) : 하위호환성 AMD 사에서도 x86 호환프로세서를제조함 IA-16 IA-32 P5 x86 프로세서역사 x86 계열프로세서 이름 특징 8086, 8088 (1978) 16 bit register, 최대 1MB 메모리, real mode - 8087 math coprocessor 별도사용 80286 (1982) 16 bit register, 최대 16MB 메모리, protected mode 추가 - 80287 math coprocessor 별도사용 80386 (1985) 32 bit register, 최대 4GB 메모리, 페이징및가상 8086모드기능을가진protected mode - 80387 math coprocessor 별도사용 80486 (1989) + cache memory, math coprocessor 내장 Pentium Pentium Pro PentiumMMX (1993) + 64 bit data bus, data cache, instruction cache (1995) Pentium + 36-bit address( 최대64GB), 내부구조개선, L2 cache (1996) Pentium + MMX instruction 추가 어셈블리언어 5 어셈블리언어 6 P8 x86-64 이름 x86 프로세서역사 ( 계속 ) 특징 P6 Pentium II (1997) + MMX instructions 추가, 64GB 메모리, 내부구조개선 AMD K6 (1997) + 3DNow instruction Pentium III (1999) + SSE instructions 추가, 내부구조개선 Pentium M (2003), Intel Core(2006) : for low power P7 Pentium 4 (2000) + SSE2 instructions, Hyperthreading, NetBurst 구조 P8/9 Athlon64(K8) Intel Core2 Phenom(K10) Core i3/5/7 Atom (2003) + x86-64 (64-bit 연산 ) instructions (2006) + x86-64 (64 bit 정수연산 ), SSE3, SSE4 (2007) + SSE4a (2008) + SSE4a, 구조개선, on-die L3 cache (2008) + for very low power, on-die GPU 참고 : http://en.wikipedia.org/wiki/x86 IA-32 (x86) 의동작모드 Real-address mode 8086 호환모드 MS-DOS 에서사용, Windows 98 에서도사용가능 Protected mode * 80286 이상에서사용되는동작모드 메모리보호및 segmentation/paging 기능을포함 (286 은 paging 제외 ) Windows, Linux 에서사용 System management mode(smm) 전원관리, 시스템보안, 진단등의기능수행 (cf) virtual 8086 mode protected mode에서 real-address mode용프로그램을그대로수행할수있도록주소변환을하는동작모드 멀티태스킹환경에서여러개의 MS-DOS 프로그램을실행시킬수있음. 어셈블리언어 7 어셈블리언어 8
주소공간 주소공간 선형주소공간 : 프로그램의주소공간 물리적메모리주소공간 : 반도체메모리의주소공간 동작모드와 ( 선형 ) 주소공간 동작모드 주소비트수 주소공간크기 real-address mode, virtual-8086 mode 20 1MB protected mode 32 4GB 물리적메모리주소공간 8086 : 20비트 (1MB) 80286: 24비트 (16MB)... 선형주소공간도 16MB임 386 Pentium : 32비트 (4GB) Pentium Pro, P6 : 36비트 (64GB) PAE (physical address extension) IA-32 레지스터 레지스터 데이터 / 주소를저장하기위해서프로세서내에제공되는기억장소 IA-32 의레지스터 32 bit general purpose registers EAX EBX ECX EDX EBP ESP ESI EDI 16 bit segment registers EFLAGS CS ES EIP DS SS FS GS 어셈블리언어 9 어셈블리언어 10 범용레지스터 범용레지스터의부분접근 범용레지스터 데이터와주소저장용으로사용되는 32 비트레지스터 (cf) x86의레지스터는범용레지스터도특수용도를갖고있다. 8 AH 8 AL 8 bits + 8 bits EAX (Extended Accumulator) EBX (Base) ECX (Count) EDX (Data) AX 16 bits EAX 32 bits * 80386 이상에서 32-bit로확장됨 EBP (Base Pointer) ESP (Stack Pointer) ESI (Source Index) EDI (Destination Index) 어셈블리언어 11 어셈블리언어 12
범용레지스터의특수목적사용 EBP ESP EIP BP SP IP ESI SI EDI DI 32 16 * 80386 이상에서 32-bit로확장됨 레지스터 특정한용도 EAX, AX - 곱셈, 나눗셈, translate 연산용 accumulator - 입출력연산 : 입출력데이터보관 EBX, BX - base주소보관 (8086,80286) ECX, CX EDX, DX ESP, SP (t (stack pointer) it - 루프반복횟수보관 (loop count) - shift 횟수보관 (shift count) - 입출력연산 : 포트주소보관 - 곱셈, 나눗셈에서의 operand 보관 - 스택의 top 위치주소를보관 EBP, BP (base pointer) ESI, SI (source index) EDI, DI (dest. index) - 스택의데이터주소를보관 ( 지역변수, 매개변수 ) frame pointer 라고도함 - 메모리블록전송명령어에서사용 어셈블리언어 13 어셈블리언어 14 세그먼트레지스터 세그먼트레지스터 -segment 의시작 (base) 주소지정에사용됨 16 bit segment registers CS DS SS 세그먼트 (segment) ES FS GS 80386 이상 데이터또는코드용으로할당된메모리영역 세그먼트의크기 8086, 80286 은최대 64KB (2 16 ) - 16 비트 offset 주소사용 80386 이상은최대 4GB (2 32 ) - 32 비트 offset 주소사용 세그먼트종류 segment 종류 code segment: 프로그램코드를포함 data segment: 프로그램에서정의된데이터, 상수등을포함 stack segment: 지역변수, 매개변수, 함수의복귀주소등을포함 segment registers 각세그먼트의시작주소정보를보관 CS: code segment DS,ES(,FS,GS): data segment SS: stack segment segment offset segment 시작주소에상대적인주소 8086/286: 16비트, 386이상 : 32비트 base offset 메모리주소 = 세그먼트시작주소 + 오프셋주소 세그먼트시작주소지정방법은동작모드에따라서차이가있음 어셈블리언어 15 어셈블리언어 16
명령어포인터 메모리주소 명령어포인터 (Instruction Pointer) 실행할다음명령어의 offset 주소를저장 메모리주소 메모리의각위치에주소 (address) 가부여됨 대개 byte 단위 EIP (32 비트 ) 80386 이상의보호모드에서사용 IP (16 비트 ) 8086, 80286 80386 이상의 real mode 에서사용 메모리상의데이터주소지정 2 byte 이상의데이터는 2 개이상의연속적인주소의메모리에저장됨 80x86 계열은 little-endian 방식을사용 하위바이트가낮은주소 register 05 2B memory 내용주소 2B 05 a a+1 어셈블리언어 17 어셈블리언어 18 플래그 (flag) 레지스터 플래그레지스터 프로세서의현재상태와연산결과를나타내는레지스터 EFLAGS FLAGS 386 에서확장 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OF DF IF TF SF ZF AF PF CF 상태플래그 : 연산결과를나타내는비트 : SF(sign), ZF(zero), CF(carry), OF(overflow) AF(auxiliary carry), PF(parity) 제어플래그 : 프로세서동작을제어하는비트 : DF(direction), IF(interrupt), TF(trap) EFLAGS 레지스터 어셈블리언어 19 어셈블리언어 20
MMX, XMM 레지스터 Carry (CF) unsigned arithmetic out of range Overflow (OF) signed arithmetic out of range Sign (SF) result is negative Zero (ZF) result is zero Auxiliary Carry (AF) carry from bit 3 to bit 4 Parity (PF) sum of 1 bits is an even number (SSE, SSE2 registers) 어셈블리언어 21 어셈블리언어 22 FPU 레지스터 부동소수점연산장치에서사용데이터레지스터 : 스택구조 어셈블리언어 23 세그먼트와주소지정 선형주소 8086( 또는 real mode) 에서 20 bit 크기 최대 1MB 메모리참조가능 80286 보호모드에서 24 bit 크기 최대 16MB 메모리참조가능 80386 이상보호모드에서 32 bit 크기 최대 4GB 메모리참조가능 선형주소와물리적메모리주소의관계 paging을사용하지않으면 : 선형주소 = 메모리주소 paging 을사용하면 : 선형주소 메모리주소 세그먼트레지스터와세그먼트시작주소지정 동작모드 8086 또는 80286 이상 real mode segment register 값의내용 20-bit segment 시작주소의상위 16-bit 80286 보호모드 24-bit segment 시작주소들을저장한테이블의인덱스 ( segment selector라고부름 ) 80386이상보호모드 32-bit segment 시작주소들을저장한테이블의인덱스 ( 그리고 32-bit offset 사용 ) 어셈블리언어 24
real address mode 에서의주소지정 segment 와 offset 을사용한주소지정 8086 의 register 는 16 bit 크기 최대 64KB 메모리참조가능 8086에서 16 bit segment register들을추가로사용하여 20 bit 메모리주소제공 physical address = segment 시작주소 (20-bit) + offset(16-bit) 16 의배수 segment 크기는최대 64KB 16-bit 16-bit segment offset +) 4 8 E 3 2 4 1 9 address 4 B 2 4 9 20-bit address = (segment << 4) + offset segment : offset = 48E3:2419 = 4B249 어셈블리언어 25 어셈블리언어 26 Protected mode 주소지정 segment 와 segment register memory segment registers CS DS SS ES <<4 0 memory code seg data seg 1 data seg 2 stack seg segment registers CS DS SS ES FS GS descriptor tables (GDT, LDT) base/limit /.. base/limit /.. base/limit /.. 32-bit base, 32-bit limit code seg data seg 1 stack seg 메모리주소 = 32-bit 세그먼트시작주소 + 32-bit 오프셋주소 ( 오프셋은해당세그먼트의 limit 보다작아야함 ) 어셈블리언어 27 어셈블리언어 28
균일세그먼트 (Flat segment) 모델 모든세그먼트가 32-bit 전체메모리공간에맵핑 전체메모리를단일세그먼트로사용 GDT(global descriptor table) 에 segment descriptor 를정의함 다중세그먼트모델 각프로그램은자신의세그먼트테이블을가짐 자신의 LDT 에세그먼트들의 segment descriptor 를정의함. Segment descriptor, in the Global Descriptor Table base address limit access 00000000 00040 - - - - not used phy ysical RAM FFFFFFFF (4GB) 00040000 00000000 Windows, Linux 등의운영체제는다중세그먼트모델을사용하지않고균일세그먼트모델을사용함 어셈블리언어 29 어셈블리언어 30 x86-64 x86-64 (Intel64) 64 비트선형주소공간과정수연산을제공하는명령어집합 IA32 x86 프로세서와의하향호환성을제공함 AMD 가처음으로구현 IA-32e 동작모드 64 비트모드 : 64 비트주소, 피연산자 세그먼테이션비활성화, 균일선형주소공간사용 호환모드 : 16 비트, 32 비트응용프로그램을실행가능하도록함 32 비트주소, 16/32 비트피연산자 Intel 64 64-bit 범용레지스터 8개의범용레지스터추가 (R8-R15) 64 비트레지스터명칭 RAX, RBX, RCX, RDX, RDI, RSI, RBP, RSP, R8-R15 추가된레지스터들도 32, 16, 8 비트레지스터로사용가능 레지스터이름끝에 D (32 비트 ), W (16 비트 ), L (8 비트 ) 를사용 어셈블리언어 31 어셈블리언어 32
CISC 와 RISC x86 컴퓨터구성요소 CISC complex instruction set computer 많은수의명령어들로구성됨 프로세서 복잡한동작의고수준연산을수행하는명령어들이포함됨 마이크로코드 (micro-code) 에의한기계어해독 ( 예 ) Intel 80x86 계열, 680x0 계열 RISC reduced instruction set computer 적은수의짧고간단한명령어들로구성됨 하드웨어에의한기계어처리 ( 예 ) ARM (Advanced RISC Machines) Alpha (Digital, a, now HP) SPARC (Sun, now Oracle) PowerPC (IBM) 주기판칩셋 north bridge 메모리제어기허브 south bridge 입출력제어기허브 어셈블리언어 33 어셈블리언어 34 x86 컴퓨터구성요소 버스등 x86 컴퓨터구성요소 입출력포트등 PCI / PCI-express 버스 - 주변기기제어기와연결 PCI 버스 : 병렬연결 PCI express 버스 : 고속직렬연결 메모리 ROM (EPROM) DRAM, SRAM VRAM CMOS RAM 배터리사용 비디오출력 CRT 모니터용출력 VGA (raster scanning 영상신호 ) LCD 모니터전용출력 DVI ( 영상 ), HDMI ( 영상, 음성 ) 범용직렬버스 (USB) USB 1.x 최대 12 Mbps USB 2.0 최대 480 Mbps USB 3.0 최대 4 Gbps 저장장치용인터페이스 ATA host adapter SATA (serial ATA) host adapter 네트워크인터페이스 LAN Ethernet, Wi-Fi 무선 Ethernet Bluetooth PS/2 포트 키보드 / 마우스용 병렬포트 프린터용 직렬포트 RS232 인터페이스, 터미널 / 모뎀접속용 어셈블리언어 35 어셈블리언어 36
입출력시스템 - 입출력접근레벨 고급언어프로그램의입출력접근 Level 3: 고급언어함수호출 (C++, Java) 사용하기쉬움, 하드웨어추상화 ( 세부사항을숨김 ) 성능이가장느림 Level 2: 운영체제서비스함수호출 운영체제에따라다름, device independent 서비스 중간성능 Level 1: BIOS (basic input-output system) 서비스함수호출 시스템에따라서다른결과가나올수있음 하드웨어에대한지식이필요함 대개성능이좋음 Level 0: 하드웨어에직접접근 일부운영체제에서는허용하지않음 MS-DOS : 허용 Window95 이후 : 허용하지않음 어셈블리언어 37 어셈블리언어 38 어셈블리프로그램의입출력접근수준 어셈블리언어 39