Operating System

[System Software] ISA / MIPS

Sara.H 2021. 1. 24. 22:32

* 출처 : 이화여자대학교 반효경 교수님 강의

 

>  컴퓨터 구조 앞부분 내용들을 복습하기 위한 좋은 강의라고 생각되어서 수강중임.

 

[1강 : System Software & Instruction Set Architecture]

 

시스템 소프트웨어란?

- Machine Dependent, ISA 에 의존적인 소프트웨어

- 어플리케이션 프로그램은 기계에 독립적임.

- 컴파일러, 어셈블러, 링커, 로더, 운영체제 등의 소프트웨어가 시스템 소프트웨어의 예시이다.

 

Instruction Set Architecture - ISA

 

CPU 는 ALU, Register, Control Unit 등을 포함하고 있고, Memory 혹은 Cache 에서 코드와 데이터를 읽어서 처리한다.

연산자, 연산 결과, 피연산자1, 피연산자2 의 정보가 중앙처리장치에 전달되면 이를 계산하여 메모리나 레지스터에 저장한다.

 

기계어를 구성할 때 고려하지 않는 것들

- 기계어의 실행 방식 : 순차 실행인지 파이프라이닝인지 몰라도 됨.

- 캐시메모리 : 데이터가 캐시 메모리에서 오는건지, 그냥 메모리에서 오는건지 몰라도 됨. 캐시의 Correctness Criteria 에 의해서 캐시가 없어도 계산 결과는 어차피 같아야 함.

- 입출력 장치 : 중앙처리장치는 입출력 장치에 대해서 직접적으로 알지 못하고, 입출력장치의  실행을 위해서 메모리를 거쳐 중앙처리장치에서 연산을 수행한다.

 


[2강 : MIPS Instruction Set Architecture I - 레지스터 및 메모리 모델]

 

머신마다 ISA 가 다른데 그 중 하나로 MIPS 라는 명령어 집합이 있음.

 

기계어의 구조는 Operator | Result | Operand1 | Operand2 와 같이 이루어져 있다.

- 연산 결과와 피연산자의 값은 메모리 혹은 레지스터에서 가져오게 된다.

- 밉스의 레지스터, 메모리 모델이라는 것은 이렇게 연산을 위해서 동원되는 하드웨어의 구성을 뜻한다는 걸로 이해됨.

- 정수 연산을 위한 레지스터와 소수 연산을 위한 레지스터가 별도로 존재하나, 수업에서는 정수 레지스터만 다룬다.

 

정수 연산을 위한 레지스터

- 0 부터 31 까지 총 32개의 값들이 있다. 32개의 값을 구분하기 위해서는 5비트가 필요.

- 특수한 공간 

  - PC - Program Counter - 다음 연산을 수행하기 위해서 읽어야 하는 기계어의 위치. 조건문을 걸거나, 점프를 하게 될 경우 프로그램 카운터의 값이 변경이 된다. 별도의 조건이 없다면 메모리의 다음 위치를 바로 읽게 됨.

  - LO / HI : 나눗셈과 곱셈 연산을 위해서 존재하는 공간.

 

메모리

- 밉스에서는 2의 32승개의 메모리 공간을 지원한다.

- 번지수는 16진수로 나타내는데, 0x0000 0000 ~ 0xFFFF FFFF 로 표현된다.

- 16진수로 0 이 2진수로는 0000 으로 표현되므로, 16진수에서 0이 8개 있으면, 2진수에서는 0 이 총 32개 존재한다는 것.

- 즉, 4바이트의 공간이 2의 32승개 만큼 존재.

 

기계어 연산을 위해서 필요한 공간은 메모리에서 가져온 값인지, 레지스터에서 가져온 값인지에 따라 다르다.

- 하지만 들쑥날쑥한 값을 일괄적으로 처리하기 위해서 4바이트의 공간에 담아서 처리하게 됨.

- 밉스에서 모든 기계어의 길이는 균일하다 ! -> 무조건 4바이트.

 

밉스의 인스트럭션 종류

1. 산술, 논리 연산 - 산술 연산은 + * - / 와 같은 연산, 논리 연산은 & || 와 같은 연산임.

2. 데이터 트랜스퍼 연산 - 메모리에서 레지스터로 값을 LOAD, 레지스터에서 메모리로 값을 STORE하는 연산이 있다. 이 두 연산만이 메모리에 접근하는 유일한 연산들이다.

  - 메모리에 접근하는 것은 레지스터에 접근하는 것에 비해서 상대적으로 매우 느림. 따라서 피연산자 1과 2가 각각 메모리, 레지스터에서 오는 것과 같이 뒤섞이는 일은 피하고 싶음. 그래서 산술연산을 하는 경우를 예로 들면, 어떤 숫자를 메모리에서 가져와서 레지스터에 로드한 후에, 레지스터에 있는 값들 끼리 연산을 하게 됨.

3. Conditional Branch Instructions

4. Unconditional Jump Instructions

 

 

> CPU 에서 메모리 왔다갔다 하면서 연산 수행하는 과정

 

 

> 레지스터의 역할

 

> 밉스에서 연산이 어떠한 형식으로 이루어져 있는지. 5비트인것은 레지스터의 종류 총 32개를 구분하기 위한 것.

>  더 자세한 내용은 다음 시간에 설명한다.