운영체제란?
운영체제는 하드웨어 위에 존재하며, 다양한 어플리케이션이 실행될 수 있는 실행 환경을 제공한다. 또한 컴퓨터 자원을 관리하는 자원 관리자의 역할 어플리케이션이 편리하게 실행될 수 있는 실행환경과 개발환경을 제공하고, 어플리케이션과 하드웨어 사이에서 중재자 역할을 한다. 컴퓨터 자원 관리자로서의 역할을 이해하기 위해 컴퓨터의 자원에 관한 이해를 할 필요가 있다.
Basic components

간단하게 컴퓨터를 나눠보자면, CPU, memory, I/O module 이 3가지로 나눌 수 있다. 그리고 이 3개는 Bridge를 중심으로 System bus로 연결로 연결되어 있는데, 무엇이랑 연결되어 있는지에 따라 System bus(Front side bus), memory bus, I/O bus 이렇게 이름이 있다.
CPU에는 ALU(Arithmetic Logic Unit)이라고 하는 만능계산기가 있다. ALU는 사칙연산, Boolean algebra 같은 것을 수행할 수 있다. 그리고 ALU의 계산 결과를 임시로 저장할 레지스터라고 하는 저장공간들이 있다. 또한 Cache memory들이 있다.
프로그램들은 기본적으로 Disk(SSD or HDD)에 저장되어 있다. 그런데 사용자가 프로그램 실행을 요청하면 Memory로 프로그램이 Load된다. Load되면 Memory의 적절한 곳에, Instruction, Data가 올라가게 되는데 Memory에 올라가게 되었을 때에는 프로그램 대신 프로세스라고 부른다. 이제 OS가 실행을 명령하면, 메모리의 특정 주소에 존재하는 Instruction이 Memory bus, System bus를 거쳐 레지스터에 Instruction이 저장되고(이를 Fetch라고 한다), ALU로 계산을 하는 방식이다. 그래서 CPU를 추상화 해본다면 Instruction단위로 Fetch, Execution을 반복하는 장치이다.
Cache memory가 SRAM이라고 그림에 적혀져 있는데, 일반적인 메모리는 DRAM으로 만들어져 있다. 그래서 SRAM과 DRAM의 차이가 무엇인지도 살펴봐야 한다. 또한 HDD의 특징도 살펴볼 것이다.
Evolution of Processor
CPU는 초기에는 클럭 Frequency를 높여서 성능을 높여왔다. 그러나 인텔 펜티엄4 정도를 기점으로 성능향상에 한계가 찾아왔다. Power소모가 너무 심해지는 것이다. 이대로 가다간 10년 후에 CPU의 온도는 태양 보다 뜨거워 진다는 우스겟소리도 나왔었다. 그래서 코어 클럭 주파수를 높이는 대신 코어의 개수를 높이는 방향으로 발전했다. 그렇다고 클럭 Frequency가 낮은 CPU들이 버려진 것은 아닌데, 임베디드 시스템에서는 여전히 매우 많이 사용되고 있다.
보다 더 성능향상을 하기 위해 이제 코어가 분업을 하게 되었다. domain-specific computing이라고 컴퓨터구조론에서 말하기도 한다. 이게 무슨 말이냐면 단순 반복 연산을 잘하는 GPU, 인공지능 관련 연산을 잘하는 NPU 이렇게 특정 연산에 특화된 프로세서들이 등장하게 된 것이다. 또한 더 성능향상을 위해 다양한 프로세서들을 칩 한 개에 다 때려박은 것도 등장했다. SoC(System on a Chip)이라고 하는 프로세서인데 가장 대표적인것이 휴대폰에 들어가는 칩들이다. A15, Snapdragon, Exynos, M1 이러한 칩이 SoC이다. CPU, GPU, NPU, 영상처리, 카메라처리 등 많은 프로세서가 한 곳에 뭉쳐있다.
SoC에서는 CPU가 Big core와 Little core로 나눠지는 경우가 대부분이다. Big core에서는 계산이 많은 빡센 작업을 수행하고, Little core에서는 좀 단순한 작업들을 수행하게 하는데 이 기술을 Dynamic frequency 기술이라고 한다. 실제로 이 기술을 적용하면 Power 소모량을 30% ~ 40% 절감할 수 있다고 한다.
Memory

DRAM, SRAM 둘다 휘발성 메모리이다. 전원 공급을 종료하면 저장하고 있던 데이터는 모두 사라진다. 회로를 구성할 때 1bit 데이터를 저장하기 위해 Flip-Flop을 사용한다. SRAM은 1bit 저장을 위해 6개의 트랜지스터를 사용하고, DRAM은 1개의 트랜지스터, 1개의 Capacitor을 사용한다. 일단 가격적인 측면을 보자면 SRAM이 트랜지스터를 더 많이 사용하고 있기 때문에 SRAM 이 더 비싸다. 성능도 가격을 따라가는데, SRAM이 더 빠르고, DRAM이 더 느리다. DRAM은 1개 bit를 저장하기 위해 1T 1C를 사용하는데 부품이 SRAM보다 적게 들어간다. 그래서 집적도를 DRAM을 더 높일 수가 있는데 이러한 이유 때문에 DRAM은 대용량에 적합하다.
DRAM은 Capacitor에 있는 전하량으로 0, 1을 구분하는데 주기적으로 refresh를 해줘야 한다. 이 때문에 느린 것이다. 이름이 Dynamic RAM인 이유도 일정 시간마다 Refresh를 해주기 때문에 그런 이름이 붙었다.
SRAM: 비싸고, 빠르다. 집적도가 낮다.
DRAM: 싸고, 느리다. 집적도가 높다.
Volatile(CS에서는 휘발성을 의미): 전원이 나가면 저장한 내용을 모두 잃어버린다. 반대되는 것은 Non-volatile.
그림에서 나온 3개의 메모리의 속도는 SRAM > DRAM > Flash Memory.
Flash Memory의 특징. (HDD와 차이점)
1. Read(~20us)와 Write(~200us)의 속도가 다른데 보통 Read가 훨씬 빠르다.
2. No in-place Update: 데이터를 저장할 때 덮어쓰기가 안된다. 데이터를 저장하기 위해서는 원래 저장된 것을 지우고 저장해야 한다. 이것은 Flash Memory의 소자적인 특성이라고 한다.
3. 수명의 한계: 블럭마다 최대 저장 횟수가 정해져 있다. 예를들어서 100,000번 이상 write를 하면 더 이상 사용하지 못하게 된다. 그래서 블럭들을 골고루 사용한다면 수명이 늘어날 수 있는데 이 기술을 Wear leveling이라고 부른다.
4. 충격에 강해서 mobile device에 저장장치로 많이 활용되고 있다.
5. HDD보다 빠름.
HDD(Hard Disk Drive)

HDD의 저장 방식은 자성체를 자기화시키는 원리를 이용한다. 자기화는 코일을 이용해서 하는데 앙페르 법칙이 적용된다.
1. Non-volatile device이다.. 컴퓨터를 꺼도 데이터가 사라지지 않는다.
2. 가격이 많이 싸고, 대용량 보조기억장치로 사용된다.
SSD(Solid State Disk)
SSD는 Flash memory기반으로 만들어 졌고, 인터페이스를 HDD처럼 저장장치로 맞춰놓은 것이다. Non-volatile device이다. 인터페이스를 맞췄다는 것이 무슨 말인가? Flash memory는 read, write 속도가 다르고 덮어쓰기가 안된다고 했다. 이거가 해결되면 HDD처럼 사용할 수가 있는 것인데 중간에 소프트웨어가 이를 해결한다. 이 소프트웨어 계층을 FTL(Flash Translation Layer)라고 부른다. SSD와 HDD가 마치 같은 디스크인 것처럼 사용하기 위한 소프트웨어 계층이다.
Registers

CPU 내부에는 Register들이 존재하고 일반목적, 특수목적 레지스터(PC, IR)들이 있다. 레지스터는 메모리 접근을 최소화하기 위해 있는 공간이다. 레지스터의 사용을 최적화 하는것이 성능 향상에 매우 큰 영향을 미친다. 이는 컴파일러의 영역. 사진에 Register file은 일반 목적 레지스터들을 모아 놓은 것을 말하고 Bank라고 말하기도 한다.
PC(Program counter): 다음 수행할(Fetch할) 명령어의 주소가 저장.
IR(Instruction register): Fetch해서 반입한 명령어를 저장.
PSW(Program status word): kernal mode? user mode? overflow? 이런 status를 bit 단위로 저장함.
MAR(Memory address register): 메모리에서 읽고 싶은 명령어의 주소를 저장함.
MBR(Memory buffer register): MAR에 적혀있는 주소에 있는 명령어를 저장함.
메모리에 접근할 때는 항상 MAR, MBR이 관여한다.
'필기 > OS' 카테고리의 다른 글
| [OS] Time Sharing Systems. (1) | 2022.03.29 |
|---|---|
| [운영체제] OS의 역할, OS의 발전 (0) | 2022.03.27 |
| [운영체제] I/O 디바이스, APIC (0) | 2022.03.27 |
| [운영체제] Interrupt는 무엇일까? (0) | 2022.03.24 |
| [운영체제] Instruction Fetch, Decode and Execute. (0) | 2022.03.24 |
댓글