시작하기 앞서
이 글은 웹 백엔드 주니어 개발자가 인프런의 그림으로 쉽게 배우는 운영체제 강의를 들으며 공부한 내용을 러프하게 정리한 글입니다.
이전 글
러프한 운영체제 기초 1편: 러프한 운영체제 기초 1편 | 프로세스와 약간의 쓰레드
러프한 운영체제 기초 2편: 러프한 운영체제 기초 2편 | CPU 스케줄링과 교착 상태
메모리의 종류
- CPU 내부 - 레지스터, 캐시
- 메인 메모리(RAM)
- 보조 저장 장치 - HDD, SSD
- 특징: CPU에 있는 메모리는 매우 빠르지만, 용량이 작고 매우 비싸다
- 특징: 메인 메모리는 흔히 그냥 '메모리'라 불린다. 폰 노이만 구조의 컴퓨터는 모든 프로그램을 메인 메모리에 올려 작동시킨다.
- 특징: 보조 저장 장치는 컴퓨터에 전원이 공급되지 않을 때도 데이터의 유실이 없는 저장 장치로 상대적으로 가격이 저렴하고 용량이 크지만 속도가 느리다.
왜 메모리는 여러 종류가 있을까?
- 경제성, 채산성, 효율성 때문이다.
- CPU 내부에 필요한 메모리는 매우 빠른 속도가 요구된다. 반면 보조 저장 장치로 쓰이는 메모리는 많은 용량이 필요하다.
- HDD, SSD와 같이 보조 저장 장치에 쓰이는 메모리는 가격이 싼 대신 용량이 크다. 반면 레지스터와 캐시는 가격이 비싼 대신 속도가 매우 빠르다.
- 컴퓨터 내부, 각 장치에 요구되는 메모리의 역할과 필요가 다르기 때문에, 무엇보다 레지스터, 캐시, 메인 메모리 등은 비싸기 때문에 메모리는 여러 종류가 있다.
- (HDD, SSD 같은 비교적 싼 메모리를 저장 장치로 사용하는 대신 레지스터와 캐시를 보조 저장 장치로 사용하려고 한다면 컴퓨터의 가격이 천문학적으로 올라갈 것이다.)
각각의 메모리는 어떤 역할?
- 레지스터: CPU 내에 존재하는 레지스터는 CPU에서의 각종 연산 값을 저장하는 메모리이다. 32bit와 64bit가 존재하며 CPU가 32비트 CPU인지 64비트 CPU인지를 결정하는 메모리이다.
- 캐시: CPU 내에서 레지스터와 메인 메모리 사이에 위치하는 캐시는 레지스터에 사용될 데이터의 값을 저장하는데 쓰인다. 레지스터는 매우 빠르고, 메인 메모리는 레지스터에 비해 상대적으로 느리기 때문에 레지스터의 작업 효율성을 위해 캐시가 존재한다. L1, L2, L3 등의 캐시가 존재하며 레지스터가 수행해야 할 과업의 우선순위가 높을수록 낮은 수치의 캐시에 데이터가 저장된다.
- 메인 메모리: 운영체제와 컴퓨터에 사용되는 모든 프로세스가 올라가는 공간이다. 폰 노이만 구조의 컴퓨터에는 반드시 필요한 핵심적인 역할을 한다. CPU는 작업을 할 때 메인 메모리에 있는 프로세스를 가져와 작업을 수행한다.
- 보조 저장 장치: 다른 모든 종류의 메모리는 컴퓨터의 전원이 중단될 경우 데이터가 유실되는 휘발성 메모리이지만 보조 저장 장치는 비휘발성 메모리이다. 운영체제를 포함한 프로그램들의 정보를 저장한다.
메모리와 주소
- 메모리(메인 메모리)에 단 하나의 프로세스만이 올라갈 수 있는 유니프로그래밍 방식에서는 메모리를 관리할 필요성이 적다.
- 그러나 오늘날의 컴퓨터는 메모리에 다수의 프로세스를 동시에 올려 사용하는 멀티프로그래밍 방식을 사용하기 때문에 메모리 위에 있는 프로세스들의 위치를 파악하고 메모리를 관리하는 것이 매우 중요하다.
- 이를 위해 운영체제는 메모리를 1byte의 크기로 쪼개 각각의 크기를 구역으로 나누어 숫자로 매겨 관리한다.
- 이를 '메모리 주소'라고 한다.
- 메모리 주소는 0x0부터 시작해 0x1000, 0x6400 이런 식으로 올라간다.
- 메모리의 주소는 크게 물리 주소와 논리 주소로 나눌 수 있다.
물리 주소와 논리 주소
- 물리 주소: 메모리 관리자(Memory Management Unit)가 바라보는 메모리 주소. 0x0번지부터 시작하는 주소 공간을 말한다. (실제 주소값)
- 논리 주소: 사용자 및 프로세스가 바라보는 주소 공간이다. 모든 프로세스는 자신의 위치를 0x0번지로 가정하고 작동하는데 이 때의 주소를 논리 주소라고 한다. 프로세스의 논리 주소는 MMU(메모리 관리자)에 의해 물리 주소로 변환되어 사용된다.
운영체제와 메모리 주소
- 운영체제는 소프트웨어 중 유일하게 하드웨어를 조작할 수 있는 소프트웨어이기 때문에 매우 특별한 종류의 프로그램이다.
- 운영체제는 컴퓨터의 작동에 매우 중요한 역할을 하기 때문에 메모리에는 운영체제를 위한 공간이 따로 존재한다.
- 메모리는 운영체제 공간과 사용자 공간을 나누어 운영체제가 올라가는 위치와 다른 프로세스가 올라가는 위치를 구별한다.
- 운영체제 공간과 사용자 공간 사이에는 하드웨어적으로 양 공간을 나누는 경계 레지스터가 존재한다.
- 만약, 악의적인 의도를 갖춘 사용자에 의해 사용자 공간의 프로세스가 운영체제 공간을 침범하려 할 경우 메모리 관리자에 의해 강제적으로 종료된다. (메모리 관리자는 사용자 프로세스가 사용자 공간을 벗어나는지 검사한다. 벗어나면, 프로세스를 종료시킨다.)
메모리가 프로세스에게 주소를 할당하는 방식
- 가변 분할 방식: 메모리에 올라오는 프로세스의 크기에 비례해 메모리의 크기를 할당하는 방식. 프로세스가 크면 메모리를 많이 할당하고, 프로세스가 작으면 메모리를 적게 할당한다.
- 고정 분할 방식: 프로세스의 크기에 상관 없이 미리 '정해진' 메모리 크기를 할당하는 방식. 정해진 메모리 크기로 프로세스를 할당하기 때문에 프로세스의 크기가 메모리 할당량을 초과할 경우 프로세스를 잘게 잘라 메모리 상에 분산해 배치시킨다.
가변 분할 방식의 장점과 단점
- 가변 분할 방식은 한 프로세스가 메모리의 연속된 공간에 할당된다. 가변 분할 방식은 이러한 이유로 '연속 메모리 할당'이라고도 칭해진다.
- 장점: 메모리가 프로세스의 크기보다 더 많이 할당되는 '내부 단편화'가 발생하지 않는다.
- 단점: 외부 단편화가 발생하기 때문에 주기적으로 조각난 메모리 공간을 합치는 조각모음을 해야 한다. 이에 따른 오버헤드가 크다. (실행 중인 프로세스를 종료해야 하고, 조각모음을 하면서 프로세스를 이동해야 하기 때문)
- 외부 단편화의 예) 50mb와 10mb 두 프로세스가 나갔다고 해보자 <- 연속된 공간이 아니었을 경우 총 메모리 가용량은 60mb이지만 실제로는 50mb 공간 10mb 공간으로 나뉨 <- 60mb의 프로세스가 메모리에 올라가고자 할 때 올라갈 수가 없음
고정 분할 방식의 장점과 단점
- 고정 분할 방식은 한 프로세스가 메모리상에 분산되어 할당된다. 고정 분할 방식은 이러한 성격 때문에 '비연속 메모리 할당'이라고도 칭해진다.
- 장점: 구현이 쉽다. 외부 단편화가 발생하기 않기 때문에 오버헤드가 적다.
- 단점: 프로세스의 크기보다 큰 메모리를 할당하는 내부 단편화가 발생한다.
- 가변 분할 방식과 고정 분할 방식의 장점과 단점으로 오늘날의 운영체제는 가변과 고정 분할 방식을 혼합해 사용한다.
'운영체제' 카테고리의 다른 글
[리눅스 운영체제] 사용자 모드와 커널 모드 (0) | 2023.02.28 |
---|---|
러프한 운영체제 기초 4편 | 가상메모리 (0) | 2022.06.05 |
러프한 운영체제 기초 2편 | CPU 스케줄링과 교착 상태 (0) | 2022.03.18 |
러프한 운영체제 기초 1편 | 프로세스와 약간의 쓰레드 (0) | 2022.03.09 |