그림으로 쉽게 배우는 운영체제 - 인프런 | 강의
이 강의를 통해 모든 개발자들이 필수로 알아야하는 운영체제의 원리를 알 수 있습니다., - 강의 소개 | 인프런...
www.inflearn.com
본 포스팅은 위 링크의 강의를 요약/정리한 것으로, 지식의 공유보다는 개인적으로 공부하고 복습하기 위해 작성한 글입니다.
메모리 종류
레지스터
🔗가장 빠른 기억 저장소로 CPU 내에 존재한다.
🔗CPU는 계산을 처리할 때 메인메모리에 있는 값을 레지스터로 가져와 계산한 뒤 계산 결과를 다시 메인메모리에 저장한다.
🔗휘발성 메모리다.
캐시
🔗필요할 것 같은 데이터를 미리 저장하는 곳이다.
- 메인메모리에 있는 값을 레지스터로 옮기려면 오래 걸리기 때문에 필요할 것 같은 데이터를 미리 저장한다.
🔗성능을 높이려는 이유로 캐시는 여러 개가 존재한다.
- 레지스터로 데이터를 옮겨야 한다면 가장 속도가 빠른 L1 캐시를 확인한 뒤, L1 캐시에 데이터가 없으면 다음으로 빠른 L2 캐시를 확인한다. 만약 모든 캐시에 데이터가 없다면 메인메모리에서 데이터를 가져온다.
🔗휘발성 메모리다.
메인메모리
🔗운영체제와 프로세스가 올라가는 공간이다.
🔗레지스터와 캐시보다는 느리고 보조저장장치보다는 빠르다.
🔗휘발성 메모리다.
보조저장장치
🔗비휘발성 메모리다.
🔗가장 느리고 가장 싸다.
메모리와 주소
주소
🔗운영체제는 메모리를 관리하려고 1바이트 크기로 구역을 나누고 숫자를 매긴다. 이 숫자를 주소라고 부른다. 즉 1바이트가 주소의 단위이다.
🔗32bit CPU와 64bit CPU
- 32bit CPU는 레지스터의 크기가 32bit고 CPU가 처리하는 ALU(산술논리연상장치)와 데이터가 이동하는 버스도 32bit이다. 또한 CPU가 다룰 수 있는 메모리의 크기도 2의 32승으로 4GB이다.
- 64bit CPU는 레지스터의 크기가 64bit고 CPU가 처리하는 ALU와 데이터가 이동하는 버스도 64bit이다. CPU가 다룰 수 있는 메모리의 크기는 2의 64승으로 거의 무한대에 가깝다.
- 64bit CPU가 32bit CPU보다 한 번에 처리할 수 있는 양이 많기 때문에 속도가 더 빠르다.
물리 주소와 논리 주소
물리 주소 공간
🔗물리 주소
- 컴퓨터의 메인 메모리에 접근할 때 사용되는 주소로, 기억 장치의 주소 레지스터에 적재된다.
🔗물리 주소 공간
- 물리 주소로써 접근 가능한 주소 공간. 실제 메모리 공간과 같다.
- 0x0번지부터 시작한다.
논리 주소 공간
🔗사용자 관점에서 바라본 주소 공간을 말한다.
🔗사용자는 물리 주소를 몰라도 논리 주소로 물리 주소에 접근할 수 있다.
경계 레지스터
🔗메모리 내의 운영체제 주소를 나타내는 레지스터. CPU 내에 존재한다.
🔗프로세스가 운영체제의 공간을 침범하지 않도록 하드웨어적으로 공간을 분리해 놓은 것이다.
🔗사용자 프로세스가 경계 레지스터 값을 벗어나면 메모리 관리자가 해당 프로세스를 종료한다.
절대 주소와 상대 주소
🔗절대 주소
- 메모리 관리자의 입장에서 바라본 주소로, 실제 메모리의 주소 공간(물리 주소 공간)을 가리킨다.
🔗상대 주소
- 사용자 입장에서 바라본 주소로, 절대 주소와 관계 없이 항상 0번지에서 시작한다.
- 개발자가 프로그램이 실행될 주소를 고려하지 않고 개발할 수 있는 건 메모리 관리자가 재배치 레지스터를 이용해 상대 주소를 절대 주소로 바꿔주기 때문이다. 재배치 레지스터에는 프로그램의 시작 주소가 저장돼 있다.
🔗만약 시작 영역이 바뀌면 재배치 레지스터만 변경해주면 된다.
메모리 할당 방식
유니프로그램 환경
🔗유니프로그래밍 환경에서는 메모리보다 큰 프로그램을 실행하려면 큰 프로그램을 메모리에 올릴 수 있도록 잘라서 당장 실행할 부분만 메모리에 올리고 나머지는 하드디스크 내의 스왑영역에 저장했다. 이를 메모리 오버레이(Memory Overlay)라고 한다.
🔗사용자는 실제 메모리와 스왑영역을 합한 용량을 실제 메모리 용량인 것처럼 느낀다. 그러나 스왑 과정이 있기 때문에 실제 메모리가 9기가인 컴퓨터보다는 느리다.
가변 분할 방식
🔗프로세스의 크기에 맞춰 메모리를 나누는 방식이다. 한 프로세스가 메모리의 연속된 공간에 할당되기 때문에 연속 메모리 할당이라고도 한다. (가상 메모리 시스템에서는 세그멘테이션이라고 부른다.)
🔗장점은 메모리를 프로세스 크기에 딱 맞게 할당하기 때문에 더 크게 할당해서 낭비되는 공간인 내부 단편화가 없다는 것이다.
🔗단점은 외부 단편화가 발생한다는 것이다.
- 프로세스가 작업을 마치고 메모리에서 내려가면 프로세스가 있던 공간에 빈 공간이 생기는데, 만약 새로 실행할 프로세스가 빈 공간보다 크다면 빈 공간에 새로운 프로세스를 할당할 수 없다. 이를 외부단편화라고 한다.
- 외부 단편화를 해결하려면 외부 단편화가 발생한 공간을 합쳐주는 조각 모음을 하면 된다. 하지만 조각 모음을 하려면 현재 실행되고 있는 프로세스의 작업을 일시 중지하고 메모리 공간을 이동시키는 작업을 해야 하기 때문에 오버헤드가 발생한다.
고정 분할 방식
🔗프로세스의 크기와 상관 없이 메모리를 나누는 방식이다. 한 프로세스가 메모리에 분산되어 할당되기 때문에 비연속 메모리 할당이라고 한다.
🔗장점은 같은 크기로 나누기 때문에 구현이 간단하고 오버헤드가 적다는 것이다.
🔗단점은 작은 프로세스도 큰 영역에 할당돼서 공간이 낭비되는 내부 단편화가 발생한다는 것이다.
- 내부 단편화를 해결하는 방법은 없기 때문에 분할하는 크기를 조절해서 내부 단편화를 최소화해야 한다. 그렇게 했는데도 공간이 부족하면 하드디스크의 스왑영역에 할당한다.
버디 시스템
🔗가변 분할 방식과 고정 분할 방식을 혼합한 방법으로, 오늘날 운영체제에서 사용하는 방법이다.
🔗과정은 다음과 같다.
- 전체 메모리의 크기가 프로세스의 크기보다 작아질 때까지 2로 메모리를 나눈다.
- 그 후 프로세스 전체를 할당할 수 있는 가장 공간에 프로세스를 할당한다.
🔗이렇게 하면 내부 단편화를 최소화할 수 있고, 프로세스가 사용을 마치고 메모리에서 내려가도 2의 승수로 일정하게 나누었기 때문에 근접한 메모리 공간을 합치기가 쉽다.
'운영체제 > 그림으로 쉽게 배우는 운영체제(인프런 강의)' 카테고리의 다른 글
가상메모리 (0) | 2022.04.01 |
---|---|
데드락 (0) | 2022.03.29 |
프로세스 동기화 (0) | 2022.03.28 |
CPU 스케줄링 (0) | 2022.03.25 |
프로세스와 쓰레드 (0) | 2022.03.24 |