IT, 소프트웨어

시스템 아키텍쳐

꿈있는 내일 2011. 1. 27. 17:44

 

PART II  SYSTEM PROGRAMMING

 

Chapter 4  시스템 아키텍쳐(System Architecture)

 

80386의 많은 구조적 특성들은 시스템 프로그래머들만이 사용한다. 이번 장은 이러한 구조적 측면을 간단히 설명한다.

 

80386 구조의 시스템 레벨 특성들은 아래를 포함한다.

 

             메모리 관리(Memory Management)

             보호(Protection)

             멀티태스킹(Multitasking)

             예외와 인터럽트(Exceptions and Interrupts)

             초기화(Initialization)

             보조 연산과 다중 연산(Coprocessing and Multiprocessing)

             디버깅(Debugging)

 

이러한 특성들은 레지스터와 인스트럭션으로 구현된다. 모두 다음 섹션에서 소개한다. 이 장의 목적은 각 특성들을 자세하게 설명하는 것이 아니라 나머지 PART II 장들을 개괄적으로 설명하는 것이다. 본 장에서 레지스터나 인스트럭션에 관해 각각 언급할 때, 설명이나 상세한 정보를 얻을 수 있는 다음 장에 대한 참조를 첨부한다.

 

 

4.1 시스템 레지스터

 

시스템 프로그래머가 사용하도록 고안된 레지스터들은 아래 부류가 있다:

 

             EFLAGS

             메모리 관리 레지스터

             제어 레지스터

             디버그 레지스터

             테스트 레지스터

 

4.1.1 시스템 플래그

 

EFLAGS 레지스터의 시스템 플래그들은 I/O, 마스킹 가능한 인터럽트, 디버깅, 태스크 전환, 그리고 보호 모드, 멀티태스킹 환경에서 가상 8086 실행을 제어한다. 플래그들은 그림 4-1에 표시했다.

 

IF (Interrupt-Enable Flag, bit 9)

 

IF를 셋팅하면 CPU는 외부(마스킹이 가능한) 인터럽트 요청을 인식할 수 있다. IF를 비우면 이러한 인터럽트가 불가능하다. IF는 예외나 마스킹 불가능한 외부 인터럽트에는 아무런 영향이 없다. 인터럽트에 관한 보다 상세한 설명은 9장을 참조하라.

 

NT (Nested Task, bit 14)

 

프로세서는 인터럽트나 호툴된 태스크의 제어를 변환하기 위해 포함된 태스크 플래그를 사용한다. NT는 IRET 인스트럭션의 동작에 영향을 미친다. 포함된 태스크(nested task)에 관한 보다 자세한 설명은 7장과 9장을 참조하라.

 

RF (Resume Flag, bit 16)

 

RF 플래그는 일시적으로 디버그 예외를 불가능하게 해서 즉각 또 다른 디버그 예외가 발생하지 않고 디버그 예외 이후에 인스트럭션이 재시작할 수 있도록 한다. 보다 자세한 설명은 12장을 참조하라.

 

TF (Trap Flag, bit 8)

 

TF를 셋팅하면 프로세서는 디버깅에서 단일-스텝 모드로 집입한다. 이 모드에서 CPU는 자동적으로각 인스트럭션 이후에 예외를 발생시키고, 프로그램이 각 인스트럭션을 실행할 때 조사될 수 있도록 한다. 단일 스텝은 단지 80386 디버깅 방법들 중에 하나일 뿐이다. 보다 자세한 설명은 12장을 참조하라.

 

VM (Virtual 8086 Mode, bit 17)

 

셋팅되었을 때, VM 플래그는 태스크가 8086 프로그램을 실행중이라는 것을 의미한다. 80386이 보호 모드, 멀티태스킹 환경에서 8086 태스크를 실행하는 법에 관한 보다 자세한 설명은 14장을 참조하라.

 


 

그림 4-1.  EFLAGS 레지스터의 시스템 플래그

 

 

 

노트

             0 혹은 1은 INTEL 예약이다. 정의하지 말 것

 

 

4.1.2 메모리 관리 레지스터

 

80386의 네 레지스터가 세그먼트 메모리 관리를 제어하는 데이터 구조들이다:

 

GDTR     Global Descriptor Table Register

LDTR      Local Descriptor Table Register

 

이 두 레지스터는 세그먼트 기술자 테이블 GDT와 LDT를 가리킨다. 기술자 테이블을 통한 주소화에 관한 설명은 5장을 참조하라.

 

IDTR       Interrupt Descriptor Table Register

 

이 레지스터는 인터럽트 처리부(IDT)의 테이블의 진입점을 가리킨다.

 

TR          Task Register

 

이 레지스터는 현재 태스크를 정의하기 위해 프로세서가 필요한 정보를 가리킨다. 80386 멀티태스킹에 관한 설명은 7장을 참조하라.

 

 

 

 

4.1.3 제어 레지스터

 

그림 4-2 는 80386 제어 레지스터 CR0, CR2 그리고 CR3의 형식을 보여준다. 이 레지스터들은 MOV 인스트럭션의 변형들을 통해서만 시스템 프로그래머가 접근할 수 있는데, MOV를 사용해서 범용 레지스터에 저장하거나 범용 레지스터에서 적재하거나할 수 있다; 예를 들면:

 

MOV      EAX, CR0

MOV      CR3, EBX

 

CR0 에는 시스템 제어 플래그가 있는데, 개별 태스크가 아닌 시스템 전반에 영향을 주는 조건을 제어하거나 나타낸다.

 

EM (Emulation, bit 2)

 

EM 은 보조 연산 장치 기능이 에뮬레이트 될 수 있는지 없는지를 나타낸다. 자세한 것은 11장을 참조하라.

 

ET (Extension Type, bit 4)

 

ET는 시스템에 있는 보조 프로 연산 장치(80287 혹은 80387) 타입을 나타낸다. 자세한 것은 10장, 11장을 참조하라.

 

MP (Math Present, bit 1)

 

MP 는 WAIT 인스트럭션 기능을 체어하는데, WAIT는 보조 연산 장치와 상호 협력하는 데 사용된다. 자세한 것은 11장을 참조하라.

 

PE (Protection Enable, bit 0)

 

PE 를 셋팅하면 프로세서는 보호 모드에서 실행하기 시작한다. PE를 다시 셋팅하면 실-주소 모드로 복귀한다. 프로세서 모드 변경에 관한 보다 자세한 정보는 14장과 10장을 참조하라.

 

PG (Paging, bit 31)

 

PG는프로세서가 선형 주소에서 물리적 주소로 바꾸기 위해 페이지 테이블을 사용할 것인지를 나타낸다. 페이지 변환(page translation)에 관한 설명은 5장을 참조하라; PG를 셋팅하는 법에 관한 설명은 10장을 참조하라.

 

TS (Task Switched, bit 3)

 

프로세서는 모든 태스크 전환시 TS를 셋팅하고 보조 연산 장치 인스트럭션을 번역할 때 TS를 테스트한다. 자세한 것은 11장을 참조하라.

 

CR2 는 PG가 셋팅 되었을 때, 페이지 폴트(fault)를 조작하기 위해 사용된다. 프로세서는 CR2에 폴트를 점검할 선형 주소를 저장한다. 페이지-폴트 조작에 관한 설명은 9장을 참조하라.

 

CR3은 PG가 셋팅 되었을 때 사용된다. CR3은 프로세서로 하여금 현재 태스크의 페이지 테이블 디렉토리를 위치시키도록 한다. 페이지 테이블과 페이지 변환에 관한 설명은 5장을 참조하라.

 

그림 4-2.  제어 레지스터(Control Register)

 

 

 

 

 

 

4.1.4 디버그 레지스터(Debug Register)

 

디버그 레지스터로 80386에서 보다 진보한 디버깅을 할 수 있는데, 데이터 정지점(breakpoint)와 코드 세그먼트를 변경하지 않고 인스트럭션 정지점을 지정할 수 있는 것도 포함한다. 형식과 사용법에 관한 완전한 설명은 12장을 참조하라.

 

 

4.1.5 테스트 레지스터(Test Registers)

 

테스트 레지스터는 80386 아키텍쳐의 표준이 아니다. 이들은 단지 변환 색인 버퍼(translation lookaside buffer, TLB) - 페이지 테이블에서 정보를 저장하기 위해 사용되는 캐시(cache) - 를 신뢰성 테스트가 가능하도록 하기 위해 제공된다. 이러한 레지스터 사용법은 12장을 참조하라.

 

 

4.2 시스템 인스트럭션

 

시스템 인스트럭션은 다음과 같은 기능들을 다룬다:

 

1.       포인터 변수를 검사 (6장 참조):

 

ARPL                       ---         Adjust RPL

LAR                         ---         Load Access Rights

LSL                         ---         Load Segment Limit

VERR                       ---         Verify for Reading

VERW                      ---         Verify fot Writing

 

2.       기술자 테이블 주소화 (Addressing descriptor tables. 5장 참조):

 

LLDT                        ---         Load LDT Register

SLDT                       ---         Store LDT Register

LGDT                       ---         Load GDT Rregister

SGDT                       ---         Store GDT Register

 

3.       멀티태스킹 (7장 참조):

 

LTR                         ---         Load Task Register

STR                         ---         Store Task Register

 

4.       보조 연산과 병렬 연산 (coprocessing and multiprocessing. 11장 참조):

 

CLTS                       ---         Clear Task-Switched Flag

ESC                         ---         Escape instructions

WAIT                        ---         Wait until Coprocessor not Busy

LOCK                       ---         Asert Bus-Lock Signal

 

5.       입력과 출력 (8장 참조):

 

IN                            ---         Input

OUT                         ---         Output

INS                          ---         Input String

OUTS                       ---         Output String

 

6.       인터럽트 제어 (9장 참조):

 

CLI                          ---         Clear Interrupt-Enable Flag

STI                          ---         Set Interrupt-Enable Flag

LIDT                         ---         Load IDT Register

SIDT                        ---         Store IDT Register

 

7.       디버깅 (12장 참조):

 

MOV                        ---         Move to and from debug registers

 

8.       TLB 테스팅 (10장 참조):

 

MOV                        ---         Move to and from test registers

 

9.       시스템 제어:

 

SMSW                      ---         Set MSW

LMSW                      ---         Load MSW

HLT                         ---         Halt Processor

MOV                        ---         Move to and from control registers

 

SMSW과 LMSW 인스트럭션은 80286 프로세서와 호환 때문에 제공된다. 80386 프로그램은 CR0의 MSW를 MOV 인스트럭션의 변형을 통해서 접근한다. HLT는 프로세서가 INTR이나 RESET 신호를 받을 때까지 프로세서를 정지시킨다.

 

위에 열거한 장외에도, 이러한 인스트럭션에 관한 자세한 정보는 인스트럭션 참조 장, 17장에서 찾을 수 있다.

 

 

 

 

 

 

 

 

'IT, 소프트웨어' 카테고리의 다른 글

7. 멀티태스킹(Multitasking)  (0) 2011.02.11
5장. 메모리 관리 (Memory Management)  (0) 2011.01.27
애플리케이션 인스트럭션: II  (0) 2011.01.24
웹의 단점  (0) 2011.01.05
애플리케이션 인스트럭션: I  (0) 2010.12.13