프로그램 MIPS, ARM, ISA

2023. 11. 5. 23:55기술면접 준비

운영체제는 사용자 프로그램과 하드웨어 사이의 인터페이스 역할을 한다.

 

그렇다면 사용자의 명령어는 어떤 방식으로 CPU에 의해 실행되는 걸까? 사용자의 명령어는 (C, JAVA) 컴파일러에 의해 어셈블리 언어로 번역이 된다. 어셈블리 언어는 프로세서의 ISA에 specific하다는 특징을 갖는다. 

 

ISA는 프로세서가 실행할 수 있는 명령어 집합이다. 프로세서가 실행할 수 있는 작업들이나, 데이터 타입 같은 것들을 의미한다. RISC, CISC 는 ISA의 종류이다. ARM과 MIPS는 대표적인 RISC 아키텍처의 종류이다. 컴파일러에 따라 결과물인 어셈블리 언어가 다르다.

ISA에는 앞서 설명했듯이 RISC와 CISC가 있다. CISC는 Complex Instruction Set Computer 이다. 즉, 복잡한 명령어 집합을 활용하는 컴퓨터이다. 명령어의 종류가 매우 다양하고 복잡하다. 그런데 명령의 길이가 짧아 메모리를 아낄 수 있다는 것이 장점이다. 하지만 명령어가 다양하기 때문에 명령어마다 수행시간이 모두 다르고 클락단위로 일정하게 나누어 병렬처리하기 어렵기 때문에 파이프라인이 어렵다. 

RISC는 명령어의 종류가 적기 때문에 명령의 길이가 길어진다. 즉, 하나의 명령을 여러개의 명령어로 나누어서 표현해야한다. 

그러나 명령어마다의 수행시간이 일정하기 때문에 파이프라인에 용이하다. 

 

 

 

어셈블리언어는 어셈블러에 의해서 기계어 (010001 xx) 로 번역이 된다.

0100010010이런 바이너리 값을 보고 프로세서는 이 명령어는 add 명령어구나 mult 명령어구나 이런식으로 구분을 한다. 

 

그리고 이렇게 번역된 기계어 프로그램을 오브젝트 파일이라고 한다. 다른 오브젝트 파일과 combine해서 링커는 하나의 executable 파일로 만든다. 로더는 executable 파일을 메모리에 올린다.

 

프로세서는 로더에 의해 메모리에 올라간 파일을 보고 한줄씩 명령어를 실행하는 것이다.

 

참쉽쪼 ? 이렇게 큰 그림을 알고 가야 쉽다.

 

 

간소화한 MIPS 아키텍처의 그림이다. 프로세서는 이렇게 생겼다. 

 

파이프라이닝은 프로세서에서 한 클락 타임에 하나의 명령어가 아니라 여러 명렁어를 처리하는 것이다. 

1 클락 타임에 Instruction fetch

2 클락 타임에 Instruction Decode 

 

.. 

이런식으로 하던걸

1 클락 타임에 명령어1Instruction fetch

2 클락 타임에 명령어1Instruction Decode 명령어2Instruction fetch

3 클락 타임에 명령어1ALU 명령어2 Instruction Decode 명령어3 Instruction fetch

...

 

이런식으로 하는 것이다. 

 

장점은 동일 시간에 더 많은 명령어를 처리할 수 있다는 것이다.