컴퓨터 하드웨어의 기본적인 구성요소와 프로그램이 실행되어 Instruction이 처리되는 과정을 알아보자.
메모리란 기본적으로 데이터를 저장하는 하드웨어이다. 이 데이터란 0또는 1로 구성된 구분가능한 상태 정보이다. 이 0과 1의 구성으로 문자열 또는 숫자를 표현한다.
cache도 메모리이지만 운영체제에서 근본적으로 다루는 메모리는 Random Access Memory
이다.
이는 특정 주소를 가지고 메모리를 접근하여 정보를 읽기, 쓰기 가능한 메모리이다.
플립플롭이나 래치로 만들어지는 메모리는 그 안의 트랜지스터가 존재한다. 전통적으로 1bit을 저장하기 위해 6개의 트랜지스터를 사용할 수 있고, 또는 1개의 트랜지스터와 캐퍼스터를 사용할 수 있다.
전자는 Static RAM
이고, 후자는 Dynamic RAM
이다. 전자는 트랜지스터가 많이 필요하기 때문에 소량의 메모리, 후자는 대용량의 메모리로 발전하게 되었다.
Static RAM은 빠르기 때문에 cache로 사용되고, Dynamic RAM은 메인 메모리로 사용된다.
둘 다 프로세스를 처리하는 메모리이기 때문에 휘발성 즉, 전원이 나가면 데이터가 모두 삭제된다.
전원이 나가도 저장할 수 있는 비휘발성 메모리는 Flash memory
이다.
- 플래쉬 메모리는 하드 디스크보다 더 빠르다.
- 하드디스크는 충격에 약하지만, flash memory는 강하다.
flash memory의 큰 특징 세 가지를 정리해보자.
- read와 write 연산의 시간복잡도의 비대칭성이 존재한다. read가 더 빠르다.
- In-place 업데이터가 되지 않는다. flash memory의 특정 영역(block)에 write했을 때,
block을 다시 지우고 데이터를 저장해야한다.- block단위에서 write 횟수가 정해져 있다. 예를 들어 10만번을 썼다면 block에 무엇을 쓸 수 없어진다.
비휘발성 장치 중 하나인 하드디스크이다. 마그네틱 스토리지의 일종이다. 마그네틱 스토리지의 특징은 자성체가 있으며 자성체에 자기력을 작용하면 자기화되어 N이나 S로 구분가능한(0또는 1) 상태가 만들어진다. 전원이 나가도 이미 상태가 만들어져있으므로, 데이터를 유지한다.
하드디스크도 이의 일종이다. 하드디크스에 arm이 있으며 이 끝엔 head가 존재한다. 플래터가 RPM 분당 7200번을 돈다. 헤드가 특정 섹터에 자기화된 데이터를 읽을 때, 헤드가 특정 영역으로 이동해야한다. 그리고 이 특정 영역은 트랙에 존재한다. 그럼 먼저, 헤드가 플래터 상에서 특정 트랙으로 움직이는 지연시간을 seek time
이라 한다. 두 번째로 플래터가 7200번 돌며 섹터로 가는 지연시간을 rotational latency(회전 지연시간)
라 부른다. 그럼 이제 헤드에서 데이터를 읽을 수 있게 되고, 전송되는 시간을 transfer rate
라 부른다.
SSD
란 flash memory 기반의 스토리지 기술이다. OS는 하드디스크 드라이브 기반으로 발전했다.
그러나 flash memory는 하드디스크와 특징이 다르기 때문에, 모두를 충족하는 OS가 필요하다. 즉 flash memory의 특성들을 감추면서 하드 디스크 드라이브의 기능을 동작하게하는 소프트웨어를 Flash Translation Llayer(FTL)
라 부른다.
CPU가 Instruction을 수행할 때 cache의 계층 구조를 이해할 수 있을 것이다. 메모리는 메모리 버스시간까지 생각한다면 느리다.
레지스터는 다양하다. 어떤 종류의 레지스터가 있는지 알아보자. 레지스터는 범용 레지스터(General Puporse registers)
와 특수 레지스터(Special Purpose registers)
가 있다.
범용 레지스터는 다양한 목적이 있다. 외부 메모리에 접근을 최소화 하기 위해 사용한다. 예를 들어, 2x + 3y를 계산할 때 메모리에서 x를 가져온 후, 2를 곱해준다. 2x값을 다시 메모리에 저장하지 않고 레지스터에 저장해둔다.(메모리가 느리기 때문이다.)
Register file이란 모든 범용 레지스터를 가리킨다.
특수 레지스터는 여러가지가 있다. 핵심적으로 명령어의 처리를 위한 레지스터를 알아보자.
Program Counter(PC)
: 다음에 수행할 명령어의 메모리 주소를 저장하는 레지스터이다.Instruction Register(IR)
: PC에 저장된 주소를 통해 명령어(코드)를 가져와 저장(fetch)하는 레지스터이다.Program status word(PSW)
; 최근 CPU의 상태를 저장하는 레지스터이다.(condition code, interrupt masks, priviledge level로 사용될 수 있는 레지스터이다.)Memory address register(MAR)
: 현재 메모리부터 fetch될 주소가 저장되어 있다.Memory buffer register(MBR)
: 그 주소에 저장된 content가 저장된 주소이다.
개발자가 볼 수 있는 최하위(loswest level)의 API이다. 명령어의 set, 그리고 그 명령어에 따른 기계의 state를 규정한다. 예를 들어 시스템 프로그래밍엣 배운 인텔 x86 ISA에서의 mov 명령어이다.
명령어를 위한 template을 알아보자.
- Opcode: 명령어
- Operands: 피연산자
위의 이미지는 한 명령어가 16bit라면, Opcode로 4bit, Operands로 12bit를 사용한다는 말이다.
fetch와 excute의 과정이다. PC에서 다음에 실행할 명령어의 주소를 가져와 저장하고. IR에서 이 주소를 통해 명령어 코드를 가져온다(fetch).
명령어를 fetch 했으니, 명령어를 실행해야한다. 이전에 명령어를 decode 해야한다.
decode를 위한 Opcode의 종류는 크게 네 가지로 분류된다.
- Data processing: 산술/논리 연산
- Control: flow control(x86의 jmp, call)
- Processor-memory: 메모리와 cpu에서의 전송(mov)
- Processor-I/O: out/in instruction
다음에 fetch할 명령어 메모리 주소 PC에 저장 -> 주소를 통해 명령어 코드 IR에 저장(fetch) -> 연산후 AC에 저장
(반복)
예시 2
PC -> MAR -> MBR -> IR -> ALU -> Reg. 1 or Reg. n
fetch 될 명령어 주소 PC 저장 -> MAR에 PC에 저장된 값 저장 -> 메모리 버스를 통해 명령어 코드 MBR에 저장 -> 명령어 코드 IR에 저장(Fetch) -> ALU를 통해 명령어 수행(Excute) -> 결과값 Reg. 1 or Reg. n 레지스터에 저장(Store)
간단하게 명령어가 어떻게 수행되는지 알아보았다.