-
연산 단위, 컴퓨터 조직, 명령어 실행의 4단계전공/시스템프로그래밍 2020. 6. 8. 01:31
컴퓨터 연산 단위
- bit → (nibble, 기종따라 다름) → byte → word(4byte) → record(word의 집합) → (block) → file(record의 집합)
- byte/word machine은 byte/word 단위로 넣고 빼는 것을 말한다.
- 보수를 사용하면 감산기(subtractor) 없이 가산기만으로 연산이 가능하다.
컴퓨터 조직
컴퓨터 조직을 개략화하면 아래와 같은 구조이다.
시스템 버스를 통해 메모리, I/O 장치, 프로세서가 값을 주고 받는 구조다.
이걸 보다 간단하게 나타내면 아래와 같은 형태가 된다.
프로세서
아래는 프로세스의 구조이다.
교수님께서 언급하신 부분만 설명하겠다.
임시 저장 레지스터
변수값을 임시로 저장하기 위해 사용한다.
예시) 1 + 2 + 3 계산할 때 1+2 = 3 을 통해 3을 얻고, 3+3 을 통해 6을 얻는 과정에서 3을 얻는 과정.
세그먼트 레지스터
세그먼트는 프로그램 또는 데이터의 논리적인 단위이다.
즉, 연산할 프로그램 또는 데이터를 세그먼트 레지스터에 불러온다.
몰랐는데 세그먼트가 OS의 메모리 관리 기법인 페이징과 세그멘테이션에서의 그 세그먼트였다.
명령어 포인터(Instruction Pointer, Program/Instruction/Local Counter)
현재 주소 또는 다음 번에 실행할 명령어가 저장된 메모리의 주소를 갖고 있는 친구다.
세그먼트 레지스터로부터 세그먼트를 받고 그 내부에서 명령어 포인터를 통해 주소에 접근하는거지.
주소 계산
유효 주소(Effective Address, 실제 주소)를 계산한다.
계산 방식은 Base Register값 + Offset 값 + Index Register 값이다.
Base Register
실제 주소를 계산하기 위한 레지스터로, 전체 메모리 기준 값이다.Offset
전체 메모리에 존재하는 프로그램 주소.Index Register
프로그램 내부의 주소. 행렬데이터가 없으면 값은 0
위와 같이 상대적으로 주소를 지정하는 이유는 겹침 및 공간 낭비를 방지하기 위함이다.
명령어 큐
명령어(ADD, MOV, ...)를 임시저장할 때 필요한 큐이다.
시스템 버스
위의 컴퓨터구조 그림에 버스가 세 가지가 있었다. 주소, 데이터, 제어 버스인데, 얘들을 통합해서 시스템 버스라고 부른다.
주소 버스의 크기가 16비트일 때, 정보저장 가능 개수는 2^16 = 65,536개이며, 해당 컴퓨터가 가리킬 수 있는 최대 주소값은 2^16 -1 = 65,535이다. 이때, 64KByte가 메모리값이 된다.
명령어 실행 개념
판독 사이클(read cycle)과 기록 사이클(wirte cycle)
CPU가 메모리에서 자료를 읽고, 쓰는 방식을 단계별로 나타낸 것이 각각 판독 사이클, 기록 사이클이다.
판독 사이클(read cycle)
1단계 : CPU가 메모리로부터 데이터를 읽기 위해 필요한 버스인 '주소 버스'의 사용을 허락받기 위해 '제어 버스'에 요청을 한다.
2단계 : '제어 버스'의 승인을 받은 CPU가 '주소 버스'를 통해 필요한 데이터가 위치해 있는 주소를 메모리에 전달한다.
3단계 : 메모리가 지정된 데이터를 '데이터 버스'를 통해 CPU한테 전달한다.
4단계 : CPU가 '제어 버스'한테 다 썼다고 신호를 보낸다.
기록 사이클(write cycle)
기록 사이클도 판독 사이클과 거의 일치한다.
차이점은 3단계에서 CPU가 '데이터 버스'를 통하여 지정된 주소에 데이터를 쓰는 것 뿐이다.
명령어의 실행
1단계, 명령어 인출(IF, Instruction Fetch)
CPU내의 IP(Instruction Pointer)가 실행할 명령어가 저장된 메모리의 주소를 갖고 있다고 했다.
바로 위 문단의 read cycle과 write cycle의 2단계, 즉 주소 버스를 통하여 주소를 메모리에게 전달하면 메모리가 명령어를 '데이터 버스'를 통해 CPU한테 준다. 이 과정이 바로 IF인 것이다!!
2단계, 명령어 해독(ID, Instruction Decode)
받은 명령어(ex. ADD 1000 2000)를 해독을 한다.
3단계, 데이터 인출(DF, Data Fetch)
해독한 뒤 연산에 필요한 피연산자(1000, 2000)를 read cycle을 통해 읽어온다.
4단계, 실행 사이클(EX, EXecution cycle)
CPU의 ALU를 통해 연산을 실행한다.
명령어 실행 속도
위 문단에서 수행한 명령어 실행 사이클의 소요 시간을 합한 것이 명령어 실행 속도이다.
책에서는 4단계 중 호출하는 단계의 소요 시간의 합을 호출 사이클, 실행하는 단계의 소요 시간의 합을 실행 사이클이라고 하는데 교수님께서 딱히 구분할 필요가 없다고 하셨다.
합쳐서 '기계 사이클(machine cycle)'이라고 하며, 'CPU가 메모리를 1회 접근하여 데이터를 처리하는데 소요되는 시간'이다.
사이클이 클수록 컴퓨터의 자료 처리 속도는 느려진다.
하나의 명령어를 실행하기 위해서는 4~200사이클이 소요된다.
여기서 사이클의 최소값이 4인 이유는 명령어 실행사이클이 4단계이고, 각 단계가 1사이클이기 때문이다.
사이클의 단위는 MIPS(Million Instruction Per Second, 1,000,000)이다.
4MIPS는 1초에 4백만개의 명령어를 처리한다는 뜻이다.
기억 장치
기억 장치라고 하면 대개 주기억장치를 일컫는 말이다.
주기억장치와 CPU가 직접 데이터와 주소를 주고받는데, 보조기억장치에 필요한 데이터를 주기억장치에 로딩하기 위해서는 보조기억장치에 저장된 데이터의 주소가 필수적으로 지정되어 있어야 한다.
기억장치는 딱 두 가지만 저장한다. 데이터, 프로그램.
기억 장치의 관리 방법
선형 기억 장치
논리 주소 = 기계 주소
세그먼트 기억 장치
논리 주소 + 세그먼트 번호(오프셋 주소 있음) = 기계 주소
'전공 > 시스템프로그래밍' 카테고리의 다른 글
실수를 비트로 표현하는 방법, 부동소수점 (0) 2020.06.08 SISD / SIMD / MISD / MIMD (0) 2020.06.08 링커, 로더, 번역기(Translator), 프로그램 실행과정 (0) 2020.06.06 로더의 4단계 (0) 2020.06.06 컴파일러와 인터프리터의 비교 (0) 2020.06.06