01.메모리 관리의 개요
1 메모리 관리의 복잡성과 이중성
'복잡성
-시분할 시스템에서는 모든 응용프로그램이 메모리에 올라와 실행되어 관리가 복잡하다.
-복잡한 메모리 관리는 메모리 관리 시스템MMS이 담당
'이중성
-프로세스 입장에서 작업의 편리함과 관리자 입장에서 편리함이 충돌을 일으키는 것
-작업의 편리함과 관리의 편리함의 타협점을 찾는 방법을 모색
2 소스코드의 번역과 실행
2.1 컴파일러와 인터프리터의 동작
'컴파일러: 소스코드를 컴퓨터가 실행할 수 있는 기계어로 번역한 후 한꺼번에 실행
ex) C언어, 자바 등
Q.컴파일러의 목적은 무엇인가요?
A.오류 발견, 코드 최적화를 통한 작고 빠른 실행 파일 생성
'인터프리터: 소스코드를 한 행씩 번역하여 실행
ex) 자바스크립트, 베이직 등
2.2 컴파일러와 인터프리터의 차이
'컴파일러: 실행 전에 소스코드를 점검하여 오류를 수정하고 필요 없는 부분을 처리하여 최적화된 실행 파일 생성 / 사용할 변수를 먼저 선언한 후 코드 작성
'인터프리터: 한 줄씩 위에서부터 아래로 실행되기 때문에 같은 일을 반복하는 경우나 필요 없는 변수를 확인할 수 X
=>크고 복잡한 프로그램에는 컴파일러, 간단한 프로그램에는 인터프리터 사용
+자바(컴파일러) VS 자바스크립트(인터프리터) ...
'이름이 같아 혼동되지만, 완전히 다른 개념이다.
*자바 JAVA
-자바는 이식성이 좋아 운영체제의 종류에 관계없이 대부분의 시스템에서 실행이 가능하다. JVM이라는 가상머신을 이용하기 때문이다.
JVM관련 내용은 필자의 블로그 <프로세스와 스레드> 게시글에서 살짝 볼 수 있다.
2021/01/22 - [OS] - [운영체제] 프로세스와 스레드
[운영체제] 프로세스와 스레드
01.프로세스의 개요1 프로세스의 개념'프로세스: 메모리에 적재(load)되어 실행되고 있는 프로그램 ...
blog.naver.com
-자바는 정적 형지정, 변수 자료형이 반드시 선언되어야하며 컴파일 과정을 거친다.(소스 코드를 자바 바이트 코드로 변환)
*자바스크립트 Javascript
-자바와 달리 변수 자료형을 미리 선언하지 않아도 브라우저가 자동으로 파악한다.(var 타입으로 모든 변수 선언이 가능)
-인터프리터 언어로서 컴파일 과정을 거치지 않는다.
자바 VS 자바스크립트, 엄연히 다르다? (차이점, 핵심 기능 비교) - Wishket
자바 VS 자바스크립트, 엄연히 다르다? 과연 이 두 개발언어의 차이점은 무엇일까요? 이번 시간 위시켓이 꼼꼼하게 알려드리겠습니다! 지금 바로 만나보세요:)
blog.wishket.com
3 메모리 관리자의 역할
'정확히 말해 메모리 관리 유닛MMU이라는 하드웨어
'가져오기fetch: 프로세스와 데이터를 메모리로 가져오는 작업
-가져오기 정책: 프로세스가 필요로 하는 데이터를 언제 메모리로 가져올지 결정하는 정책
'배치placement: 가져온 프로세스와 데이터를 메모리의 어떤 부분에 올려놓을지 결정하는 작업
-배치 정책: 가져온 프로세스를 메모리의 어떤 위치에 올려놓을지 결정하는 정책 -> 페이징과 세그먼테이션의 장단점을 파악하여 메모리를 효율적으로 관리할 수 있도록 함
'재배치: 꽉 차 있는 메모리에 새로운 프로세스를 가져오기 위해 오래된 프로세스를 내보내는 작업
-재배치 정책: 메모리가 꽉 찼을 때 메모리 내에 있는 어떤 프로세스를 내보낼지 결정하는 정책
+배치 정책에서의
페이징(paging)과 세그먼테이션(segmentation) ...
'한정된 메모리를 효율적으로 사용하기 위한 것
'시스템의 효율을 좌우하는 배치 정책
*페이징
-메모리를 같은 크기로 자르는 것
*세그먼테이션
-프로세스의 크기에 맞게 자르는 것
+차이점?
-페이징(paging)이 고정된 영역인 페이지(page)로 분할하였다면, 세그먼테이션은 가변적인 영역인 세그먼트(segment)로 분할
아래 '메모리 할당'부분에서 보충설명하겠다.
02.메모리 주소
1 메모리 주소 공간
'물리 주소 공간: 하드웨어 입장에서 바라본 주소 공간
'논리 주소 공간: 사용자 입장에서 바라본 주소 공간
2 절대 주소와 상대 주소
'절대 주소absolute address: 실제 물리 주소를 가리키며 메모리 관리자 입장에서 바라본 주소
ㄴ> 물리 주소 physical address
'상대 주소relative address: 사용자 영역이 시작되는 주소를 0번지로 변경하여 사용하는 주소
ㄴ> Logical address
03.메모리 할당(단일 프로그래밍 환경)
1 메모리 오버레이
'프로그램의 크기가 실제 메로리(물리 메모리)보다 클 때 전체 프로그램을 메모리에 가져오는 대신 적당한 크기로 잘라서 가져오는 기법
'하나의 메모리에 여러 프로그램을 겹겹이 쌓아놓고 실행하는 것
'메모리보다 큰 프로그램 실행 가능
2 스왑
'스왑 영역swap area: 메모리가 모자라서 쫓겨난 프로세스가 모인 저장장치의 특별한 공간
-스왑 영역은 메모리에서 쫓겨났다가 다시 돌아가는 데이터가 머무는 곳이기 때문에 저장장치는 장소만 빌려주고 메모리 관리자가 관리하는 것
스왑인과 스왑아웃
'스왑인swap in: 스왑 영역에서 메모리로 데이터를 가져오는 작업
'스왑아웃swap out: 메모리에서 스왑 영역으로 데이터를 내보내는 작업
04.메모리 할당(다중 프로그래밍 환경)
프로세스들의 크기가 달라 메모리를 어떻게 나눠 사용할 것인지가 가장 큰 문제!
1 메모리 분할 방식
'가변 분할 방식: 프로세스의 크기에 따라 메모리를 나누는 것
ex) 식당 의자 배치, 손님 개개인의 신체에 따라 의자를 크기별로 준비
'고정 분할 방식: 프로세스의 크기와 상관없이 메모리를 같은 크기로 나누는 것
ex) 식당의자 배치, 손님의 신체 크기와 상관없이 같은 크기 의자 준비
=> 현대 운영체제에서 메모리 관리는 기본적으로 고정 분할 방식을 사용, 일부분은 가변 분할 방식 혼합!
2 외부 단편화와 내부 단편화
'외부 단편화: 할당할 프로세스의 크기보다 메모리에 남아 있는 조각이 작아서 할당이 불가능한 현상
'내부 단편화: 각 메모리 조각에 프로세스를 배치하고 공간이 남는 현상
+페이징과 세그먼테이션 차이점 보충 ...
페이징: 고정 분할 방식. 내부 단편화 O, 외부 단편화 X
세그먼테이션: 가변 분할 방식. 내부 단편화 X, 외부 단편화 O
3 가변 분할 방식의 메모리 배치 방식
3.1 메모리 배치 방식
'최초 배치first fit: 메모리에서 적재 가능한 공간을 순서대로 찾다가 첫 번째로 발견한 공간에 프로세스 배치하는 방법
'최적 배치best fit: 메모리의 빈 공간을 모두 확인한 후 적당한 크기 가운데 가장 작은 공간에 프로세를 배치하는 방법
'최악 배치worst fit: 최적 배치와 정반대로, 빈 공간을 모두 확인한 후 가장 큰 공간에 프로세스를 배치하는 방법
3.2 조각 모음
'위의 방법을 사용해도 단편화 현상 발생
Why? 원래 가변 분할 방식의 목적은 프로세스를 한 덩어리로 취급하여 메모리 관리의 효율성을 높이는 것인데, 메모리 배치 방식으로는 근본적으로 문제를 해결하지 못한다.
'단편화가 발생하면 이미 배치된 프로세스를 옆으로 옮겨 빈 공간들을 하나의 큰 덩어리로 만들어야 하는데 이것이 바로 조각 모음이다.
*조각 모음 순서 1. 조각 모음을 하기 위해 이동할 프로세스의 동작을 멈춘다. 2. 프로세스를 적당한 위치로 이동. 프로세스가 원래 위치에서 이동하기 때문에 프로세스의 상대 주소값을 바꾼다. 3. 이러한 작업을 다 마친 후 프로세스 재시작
4 버디 시스템
'외부 단편화를 완화하는 방법
'버디 시스템은 가변 분할 방식과 고정 분할 방식의 중간 구조라는 것이 특징
'메모리를 프로세스 크기에 맞게 1/2로 자르고 배치
*버디 시스템 작동 방식 1. 프로세스의 크기에 맞게 메모리를 1/2로 자르고 프로세스를 메모리에 배치한다. 2. 나뉜 메모리의 각 구역에는 프로세스가 1개만 들어간다. 3. 프로세스가 종료되면 주변 빈 조각과 합쳐서 하나의 큰 덩어리를 만든다.
참고 자료
쉽게 배우는 운영체제, 조성호
https://shxrecord.tistory.com/66
https://bnzn2426.tistory.com/81
'OS' 카테고리의 다른 글
[운영체제] 가상 메모리 관리 (0) | 2021.01.22 |
---|---|
[운영체제] 가상 메모리의 기초 (0) | 2021.01.22 |
[운영체제] 교착상태 (0) | 2021.01.22 |
[운영체제] CPU 스케줄링 (0) | 2021.01.22 |
[운영체제] 프로세스와 스레드 (0) | 2021.01.22 |